From: Radek Czajka <rczajka@rczajka.pl> Date: Tue, 29 Dec 2015 14:19:14 +0000 (+0100) Subject: Code layout change. X-Git-Url: https://git.mdrn.pl/wolnelektury.git/commitdiff_plain/357027375ff8867f42ca34bcbfb5a78b5b185fc3?page=%7B%7B%20page_obj.previous_page_number%20%7D%7D%7B%7B%20getvars%20%7D%7D Code layout change. --- diff --git a/.gitignore b/.gitignore index 4ddf5e924..fd63a8e47 100644 --- a/.gitignore +++ b/.gitignore @@ -9,10 +9,10 @@ fabfile_local.py .sass-cache # Compress output -/static +/var # SCSS output -apps/wolnelektury_core/static/scss/*.css +apps/wolnelektury/static/scss/*.css # Python garbage *.pyc @@ -36,8 +36,6 @@ thumbs.db # Tags file TAGS -media -search_index doc/_build reports diff --git a/apps/ajaxable/__init__.py b/apps/ajaxable/__init__.py deleted file mode 100644 index ffa37881b..000000000 --- a/apps/ajaxable/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -""" -Provides a way to create forms behaving correctly as AJAX forms -as well as standalone forms without any Javascript. -""" diff --git a/apps/ajaxable/locale/pl/LC_MESSAGES/django.mo b/apps/ajaxable/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 269549eb3..000000000 Binary files a/apps/ajaxable/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/ajaxable/locale/pl/LC_MESSAGES/django.po b/apps/ajaxable/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 7b190fa12..000000000 --- a/apps/ajaxable/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,23 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: 2012-01-27 16:36+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2)\n" - -#: utils.py:72 -msgid "Send" -msgstr "WyÅlij" diff --git a/apps/ajaxable/models.py b/apps/ajaxable/models.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/ajaxable/templates/ajaxable/form.html b/apps/ajaxable/templates/ajaxable/form.html deleted file mode 100755 index 13586ac9d..000000000 --- a/apps/ajaxable/templates/ajaxable/form.html +++ /dev/null @@ -1,20 +0,0 @@ -{% load i18n %} -{% load ssi_csrf_token from ssify %} - -<h1>{{ title }}</h1> - -<form action="{{ request.get_full_path }}" method="post" accept-charset="utf-8" - class="cuteform{% if placeholdize %} hidelabels{% endif %}"> -{% ssi_csrf_token %} -{% if honeypot %} - {% load honeypot %} - {% render_honeypot_field %} -{% endif %} -<ol> - <div id="id_{% if form_prefix %}{{ form_prefix }}-{% endif %}__all__"></div> - {{ form.as_ul }} - <li><input type="submit" value="{{ submit }}"/></li> -</ol> -</form> - -{% block extra %}{% endblock %} \ No newline at end of file diff --git a/apps/ajaxable/templates/ajaxable/form_on_page.html b/apps/ajaxable/templates/ajaxable/form_on_page.html deleted file mode 100755 index 61175d507..000000000 --- a/apps/ajaxable/templates/ajaxable/form_on_page.html +++ /dev/null @@ -1,14 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block titleextra %}{{ title }}{% endblock %} - -{% block body %} - - {% include ajax_template %} - - {% if response_data.message %} - <p>{{ response_data.message }}</p> - {% endif %} - -{% endblock %} diff --git a/apps/ajaxable/templatetags/__init__.py b/apps/ajaxable/templatetags/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/ajaxable/templatetags/ajaxable_tags.py b/apps/ajaxable/templatetags/ajaxable_tags.py deleted file mode 100644 index 351e9f13d..000000000 --- a/apps/ajaxable/templatetags/ajaxable_tags.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import template -from ajaxable.utils import placeholdized -register = template.Library() - - -@register.filter -def placeholdize(form): - return placeholdized(form) - - -@register.filter -def placeholdized_ul(form): - return placeholdized(form).as_ul() diff --git a/apps/ajaxable/utils.py b/apps/ajaxable/utils.py deleted file mode 100755 index 89b56228d..000000000 --- a/apps/ajaxable/utils.py +++ /dev/null @@ -1,186 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from functools import wraps - -from django.http import (HttpResponse, HttpResponseRedirect, - HttpResponseForbidden) -from django.shortcuts import render_to_response -from django.template import RequestContext -from django.utils.encoding import force_unicode -from django.utils.functional import Promise -from django.utils.http import urlquote_plus -import json -from django.utils.translation import ugettext_lazy as _ -from django.views.decorators.vary import vary_on_headers -from honeypot.decorators import verify_honeypot_value - - -class LazyEncoder(json.JSONEncoder): - def default(self, obj): - if isinstance(obj, Promise): - return force_unicode(obj) - return obj - - -def method_decorator(function_decorator): - """Converts a function decorator to a method decorator. - - It just makes it ignore first argument. - """ - def decorator(method): - @wraps(method) - def wrapped_method(self, *args, **kwargs): - def function(*fargs, **fkwargs): - return method(self, *fargs, **fkwargs) - return function_decorator(function)(*args, **kwargs) - return wrapped_method - return decorator - - -def require_login(request): - """Return 403 if request is AJAX. Redirect to login page if not.""" - if request.is_ajax(): - return HttpResponseForbidden('Not logged in') - else: - return HttpResponseRedirect('/uzytkownicy/zaloguj')# next?=request.build_full_path()) - - -def placeholdized(form): - for field in form.fields.values(): - field.widget.attrs['placeholder'] = field.label - return form - - -class AjaxableFormView(object): - """Subclass this to create an ajaxable view for any form. - - In the subclass, provide at least form_class. - - """ - form_class = None - placeholdize = False - # override to customize form look - template = "ajaxable/form.html" - submit = _('Send') - - title = '' - success_message = '' - POST_login = False - formname = "form" - form_prefix = None - full_template = "ajaxable/form_on_page.html" - honeypot = False - - @method_decorator(vary_on_headers('X-Requested-With')) - def __call__(self, request, *args, **kwargs): - """A view displaying a form, or JSON if request is AJAX.""" - obj = self.get_object(request, *args, **kwargs) - form_args, form_kwargs = self.form_args(request, obj) - if self.form_prefix: - form_kwargs['prefix'] = self.form_prefix - - if request.method == "POST": - if self.honeypot: - response = verify_honeypot_value(request, None) - if response: - return response - - # do I need to be logged in? - if self.POST_login and not request.user.is_authenticated(): - return require_login(request) - - form_kwargs['data'] = request.POST - form = self.form_class(*form_args, **form_kwargs) - if form.is_valid(): - add_args = self.success(form, request) - response_data = { - 'success': True, - 'message': self.success_message, - 'redirect': request.GET.get('next') - } - if add_args: - response_data.update(add_args) - if not request.is_ajax() and response_data['redirect']: - return HttpResponseRedirect(urlquote_plus( - response_data['redirect'], safe='/?=&')) - elif request.is_ajax(): - # Form was sent with errors. Send them back. - if self.form_prefix: - errors = {} - for key, value in form.errors.items(): - errors["%s-%s" % (self.form_prefix, key)] = value - else: - errors = form.errors - response_data = {'success': False, 'errors': errors} - else: - response_data = None - if request.is_ajax(): - return HttpResponse(LazyEncoder(ensure_ascii=False).encode(response_data)) - else: - if (self.POST_login and not request.user.is_authenticated() - and not request.is_ajax()): - return require_login(request) - - form = self.form_class(*form_args, **form_kwargs) - response_data = None - - title = self.title - if request.is_ajax(): - template = self.template - else: - template = self.full_template - cd = self.context_description(request, obj) - if cd: - title += ": " + cd - if self.placeholdize: - form = placeholdized(form) - context = { - self.formname: form, - "title": title, - "honeypot": self.honeypot, - "placeholdize": self.placeholdize, - "submit": self.submit, - "response_data": response_data, - "ajax_template": self.template, - "view_args": args, - "view_kwargs": kwargs, - } - context.update(self.extra_context(request, obj)) - return render_to_response(template, context, - context_instance=RequestContext(request)) - - def redirect_or_refresh(self, request, path, message=None): - """If the form is AJAX, refresh the page. If not, go to `path`.""" - if request.is_ajax(): - output = "<script>window.location.reload()</script>" - if message: - output = "<div class='normal-text'>" + message + "</div>" + output - return HttpResponse(output) - else: - return HttpResponseRedirect(path) - - def get_object(self, request, *args, **kwargs): - """Override to parse view args and get some associated data.""" - return None - - def form_args(self, request, obj): - """Override to parse view args and give additional args to the form.""" - return (), {} - - def extra_context(self, request, obj): - """Override to pass something to template.""" - return {} - - def context_description(self, request, obj): - """Description to appear in standalone form, but not in AJAX form.""" - return "" - - def success(self, form, request): - """What to do when the form is valid. - - By default, just save the form. - - """ - return form.save(request) diff --git a/apps/api/__init__.py b/apps/api/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/api/emitters.py b/apps/api/emitters.py deleted file mode 100644 index 2f6f7e75f..000000000 --- a/apps/api/emitters.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -""" -Wrappers for piston Emitter classes. - -When outputting a queryset of selected models, instead of returning -XML or JSON stanzas, SSI include statements are returned. - -""" -from django.core.urlresolvers import reverse -from django.db.models.query import QuerySet -from piston.emitters import Emitter, XMLEmitter, JSONEmitter -from catalogue.models import Book, Fragment, Tag -from django.utils.translation import get_language - - -class SsiQS(object): - """A wrapper for QuerySet that won't serialize.""" - - def __init__(self, queryset): - self.queryset = queryset - - def __unicode__(self): - raise TypeError("This is not serializable.") - - def get_ssis(self, emitter_format): - """Yields SSI include statements for the queryset.""" - url_pattern = reverse('api_include', - kwargs={'model': self.queryset.model.__name__.lower(), - 'pk': '0000', - 'emitter_format': emitter_format, - 'lang': get_language(), - }) - for instance in self.queryset: - yield "<!--#include file='%s'-->" % url_pattern.replace('0000', - str(instance.pk)) - - -class SsiEmitterMixin(object): - def construct(self): - if isinstance(self.data, QuerySet) and self.data.model in (Book, - Fragment, Tag): - return SsiQS(self.data) - else: - return super(SsiEmitterMixin, self).construct() - - -class SsiJsonEmitter(SsiEmitterMixin, JSONEmitter): - def render(self, request): - try: - return super(SsiJsonEmitter, self).render(request) - except TypeError: - return '[%s]' % ",".join(self.construct().get_ssis('json')) - -Emitter.register('json', SsiJsonEmitter, 'application/json; charset=utf-8') - - -class SsiXmlEmitter(SsiEmitterMixin, XMLEmitter): - def render(self, request): - try: - return super(SsiXmlEmitter, self).render(request) - except TypeError: - return '<?xml version="1.0" encoding="utf-8"?>\n' \ - '<response><resource>%s</resource></response>' % \ - '</resource><resource>'.join(self.construct().get_ssis('xml')) - -Emitter.register('xml', SsiXmlEmitter, 'text/xml; charset=utf-8') - diff --git a/apps/api/handlers.py b/apps/api/handlers.py deleted file mode 100644 index 5fe931e69..000000000 --- a/apps/api/handlers.py +++ /dev/null @@ -1,469 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import json - -from django.contrib.sites.models import Site -from django.core.urlresolvers import reverse -from django.utils.functional import lazy -from piston.handler import AnonymousBaseHandler, BaseHandler -from piston.utils import rc -from sorl.thumbnail import default - -from catalogue.forms import BookImportForm -from catalogue.models import Book, Tag, BookMedia, Fragment, Collection -from picture.models import Picture -from picture.forms import PictureImportForm - -from stats.utils import piwik_track - -from . import emitters # Register our emitters - -API_BASE = WL_BASE = MEDIA_BASE = lazy( - lambda: u'http://' + Site.objects.get_current().domain, unicode)() - - -category_singular = { - 'authors': 'author', - 'kinds': 'kind', - 'genres': 'genre', - 'epochs': 'epoch', - 'themes': 'theme', - 'books': 'book', -} -category_plural = {} -for k, v in category_singular.items(): - category_plural[v] = k - -book_tag_categories = ['author', 'epoch', 'kind', 'genre'] - - - -def read_tags(tags, allowed): - """ Reads a path of filtering tags. - - :param str tags: a path of category and slug pairs, like: authors/an-author/... - :returns: list of Tag objects - :raises: ValueError when tags can't be found - """ - if not tags: - return [], [] - - tags = tags.strip('/').split('/') - real_tags = [] - books = [] - while tags: - category = tags.pop(0) - slug = tags.pop(0) - - try: - category = category_singular[category] - except KeyError: - raise ValueError('Unknown category.') - - if not category in allowed: - raise ValueError('Category not allowed.') - - if category == 'book': - try: - books.append(Book.objects.get(slug=slug)) - except Book.DoesNotExist: - raise ValueError('Unknown book.') - - try: - real_tags.append(Tag.objects.get(category=category, slug=slug)) - except Tag.DoesNotExist: - raise ValueError('Tag not found') - return real_tags, books - - -# RESTful handlers - - -class BookMediaHandler(BaseHandler): - """ Responsible for representing media in Books. """ - - model = BookMedia - fields = ['name', 'type', 'url', 'artist', 'director'] - - @classmethod - def url(cls, media): - """ Link to media on site. """ - - return MEDIA_BASE + media.file.url - - @classmethod - def artist(cls, media): - return media.extra_info.get('artist_name', '') - - @classmethod - def director(cls, media): - return media.extra_info.get('director_name', '') - - -class BookDetails(object): - """Custom fields used for representing Books.""" - - @classmethod - def href(cls, book): - """ Returns an URI for a Book in the API. """ - return API_BASE + reverse("api_book", args=[book.slug]) - - @classmethod - def url(cls, book): - """ Returns Book's URL on the site. """ - - return WL_BASE + book.get_absolute_url() - - @classmethod - def children(cls, book): - """ Returns all children for a book. """ - - return book.children.all() - - @classmethod - def media(cls, book): - """ Returns all media for a book. """ - return book.media.all() - - @classmethod - def cover(cls, book): - return MEDIA_BASE + book.cover.url if book.cover else '' - - @classmethod - def cover_thumb(cls, book): - return MEDIA_BASE + default.backend.get_thumbnail( - book.cover, "139x193").url if book.cover else '' - - - -class BookDetailHandler(BaseHandler, BookDetails): - """ Main handler for Book objects. - - Responsible for single Book details. - """ - allowed_methods = ['GET'] - fields = ['title', 'parent', 'children'] + Book.formats + [ - 'media', 'url', 'cover', 'cover_thumb'] + [ - category_plural[c] for c in book_tag_categories] - - @piwik_track - def read(self, request, book): - """ Returns details of a book, identified by a slug and lang. """ - try: - return Book.objects.get(slug=book) - except Book.DoesNotExist: - return rc.NOT_FOUND - - -class AnonymousBooksHandler(AnonymousBaseHandler, BookDetails): - """ Main handler for Book objects. - - Responsible for lists of Book objects. - """ - allowed_methods = ('GET',) - model = Book - fields = book_tag_categories + ['href', 'title', 'url', 'cover', 'cover_thumb'] - - @classmethod - def genres(cls, book): - """ Returns all media for a book. """ - return book.tags.filter(category='genre') - - @piwik_track - def read(self, request, tags=None, top_level=False, - audiobooks=False, daisy=False, pk=None): - """ Lists all books with given tags. - - :param tags: filtering tags; should be a path of categories - and slugs, i.e.: authors/an-author/epoch/an-epoch/ - :param top_level: if True and a book is included in the results, - it's children are aren't. By default all books matching the tags - are returned. - """ - if pk is not None: - try: - return Book.objects.get(pk=pk) - except Book.DoesNotExist: - return rc.NOT_FOUND - - try: - tags, _ancestors = read_tags(tags, allowed=book_tag_categories) - except ValueError: - return rc.NOT_FOUND - - if tags: - if top_level: - books = Book.tagged_top_level(tags) - return books if books else rc.NOT_FOUND - else: - books = Book.tagged.with_all(tags) - else: - books = Book.objects.all() - - if top_level: - books = books.filter(parent=None) - if audiobooks: - books = books.filter(media__type='mp3').distinct() - if daisy: - books = books.filter(media__type='daisy').distinct() - - if books.exists(): - return books - else: - return rc.NOT_FOUND - - def create(self, request, *args, **kwargs): - return rc.FORBIDDEN - - -class BooksHandler(BookDetailHandler): - allowed_methods = ('GET', 'POST') - model = Book - fields = book_tag_categories + ['href', 'title', 'url', 'cover', 'cover_thumb'] - anonymous = AnonymousBooksHandler - - def create(self, request, *args, **kwargs): - if not request.user.has_perm('catalogue.add_book'): - return rc.FORBIDDEN - - data = json.loads(request.POST.get('data')) - form = BookImportForm(data) - if form.is_valid(): - form.save() - return rc.CREATED - else: - return rc.NOT_FOUND - - -class EBooksHandler(AnonymousBooksHandler): - fields = ('author', 'href', 'title', 'cover') + tuple(Book.ebook_formats) - - -# add categorized tags fields for Book -def _tags_getter(category): - @classmethod - def get_tags(cls, book): - return book.tags.filter(category=category) - return get_tags -def _tag_getter(category): - @classmethod - def get_tag(cls, book): - return ', '.join(tag.name for tag in book.tags.filter(category=category)) - return get_tag -for plural, singular in category_singular.items(): - setattr(BookDetails, plural, _tags_getter(singular)) - setattr(BookDetails, singular, _tag_getter(singular)) - -# add fields for files in Book -def _file_getter(format): - field = "%s_file" % format - @classmethod - def get_file(cls, book): - f = getattr(book, field) - if f: - return MEDIA_BASE + f.url - else: - return '' - return get_file -for format in Book.formats: - setattr(BookDetails, format, _file_getter(format)) - - -class CollectionDetails(object): - """Custom Collection fields.""" - - @classmethod - def href(cls, collection): - """ Returns URI in the API for the collection. """ - - return API_BASE + reverse("api_collection", args=[collection.slug]) - - @classmethod - def url(cls, collection): - """ Returns URL on the site. """ - - return WL_BASE + collection.get_absolute_url() - - @classmethod - def books(cls, collection): - return Book.objects.filter(collection.get_query()) - - - -class CollectionDetailHandler(BaseHandler, CollectionDetails): - allowed_methods = ('GET',) - fields = ['url', 'title', 'description', 'books'] - - @piwik_track - def read(self, request, slug): - """ Returns details of a collection, identified by slug. """ - try: - return Collection.objects.get(slug=slug) - except Collection.DoesNotExist: - return rc.NOT_FOUND - - -class CollectionsHandler(BaseHandler, CollectionDetails): - allowed_methods = ('GET',) - model = Collection - fields = ['url', 'href', 'title'] - - @piwik_track - def read(self, request): - """ Returns all collections. """ - return Collection.objects.all() - - -class TagDetails(object): - """Custom Tag fields.""" - - @classmethod - def href(cls, tag): - """ Returns URI in the API for the tag. """ - - return API_BASE + reverse("api_tag", args=[category_plural[tag.category], tag.slug]) - - @classmethod - def url(cls, tag): - """ Returns URL on the site. """ - - return WL_BASE + tag.get_absolute_url() - - -class TagDetailHandler(BaseHandler, TagDetails): - """ Responsible for details of a single Tag object. """ - - fields = ['name', 'url', 'sort_key', 'description'] - - @piwik_track - def read(self, request, category, slug): - """ Returns details of a tag, identified by category and slug. """ - - try: - category_sng = category_singular[category] - except KeyError, e: - return rc.NOT_FOUND - - try: - return Tag.objects.get(category=category_sng, slug=slug) - except Tag.DoesNotExist: - return rc.NOT_FOUND - - -class TagsHandler(BaseHandler, TagDetails): - """ Main handler for Tag objects. - - Responsible for lists of Tag objects - and fields used for representing Tags. - - """ - allowed_methods = ('GET',) - model = Tag - fields = ['name', 'href', 'url'] - - @piwik_track - def read(self, request, category=None, pk=None): - """ Lists all tags in the category (eg. all themes). """ - if pk is not None: - try: - return Tag.objects.exclude(category='set').get(pk=pk) - except Book.DoesNotExist: - return rc.NOT_FOUND - - try: - category_sng = category_singular[category] - except KeyError, e: - return rc.NOT_FOUND - - tags = Tag.objects.filter(category=category_sng).exclude(items=None) - if tags.exists(): - return tags - else: - return rc.NOT_FOUND - - -class FragmentDetails(object): - """Custom Fragment fields.""" - - @classmethod - def href(cls, fragment): - """ Returns URI in the API for the fragment. """ - - return API_BASE + reverse("api_fragment", - args=[fragment.book.slug, fragment.anchor]) - - @classmethod - def url(cls, fragment): - """ Returns URL on the site for the fragment. """ - - return WL_BASE + fragment.get_absolute_url() - - @classmethod - def themes(cls, fragment): - """ Returns a list of theme tags for the fragment. """ - - return fragment.tags.filter(category='theme') - - -class FragmentDetailHandler(BaseHandler, FragmentDetails): - fields = ['book', 'anchor', 'text', 'url', 'themes'] - - @piwik_track - def read(self, request, book, anchor): - """ Returns details of a fragment, identified by book slug and anchor. """ - try: - return Fragment.objects.get(book__slug=book, anchor=anchor) - except Fragment.DoesNotExist: - return rc.NOT_FOUND - - -class FragmentsHandler(BaseHandler, FragmentDetails): - """ Main handler for Fragments. - - Responsible for lists of Fragment objects - and fields used for representing Fragments. - - """ - model = Fragment - fields = ['book', 'url', 'anchor', 'href'] - allowed_methods = ('GET',) - - categories = set(['author', 'epoch', 'kind', 'genre', 'book', 'theme']) - - @piwik_track - def read(self, request, tags): - """ Lists all fragments with given book, tags, themes. - - :param tags: should be a path of categories and slugs, i.e.: - books/book-slug/authors/an-author/themes/a-theme/ - - """ - try: - tags, ancestors = read_tags(tags, allowed=self.categories) - except ValueError: - return rc.NOT_FOUND - fragments = Fragment.tagged.with_all(tags).select_related('book') - if fragments.exists(): - return fragments - else: - return rc.NOT_FOUND - - -class PictureHandler(BaseHandler): - model = Picture - fields = ('slug', 'title') - allowed_methods = ('POST',) - - def create(self, request): - if not request.user.has_perm('picture.add_picture'): - return rc.FORBIDDEN - - data = json.loads(request.POST.get('data')) - form = PictureImportForm(data) - if form.is_valid(): - form.save() - return rc.CREATED - else: - return rc.NOT_FOUND diff --git a/apps/api/helpers.py b/apps/api/helpers.py deleted file mode 100644 index 62578e7c3..000000000 --- a/apps/api/helpers.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from time import mktime -from piston.resource import Resource - -def timestamp(dtime): - "converts a datetime.datetime object to a timestamp int" - return int(mktime(dtime.timetuple())) - -class CsrfExemptResource(Resource): - """A Custom Resource that is csrf exempt""" - def __init__(self, handler, authentication=None): - super(CsrfExemptResource, self).__init__(handler, authentication) - self.csrf_exempt = getattr(self.handler, 'csrf_exempt', True) diff --git a/apps/api/locale/pl/LC_MESSAGES/django.mo b/apps/api/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 816c91c7a..000000000 Binary files a/apps/api/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/api/locale/pl/LC_MESSAGES/django.po b/apps/api/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 177d4491f..000000000 --- a/apps/api/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,158 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: 2013-06-14 11:45+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 1.5.4\n" - -#: models.py:15 -msgid "slug" -msgstr "" - -#: templates/api/main.html:5 -msgid "WolneLektury.pl API" -msgstr "API serwisu WolneLektury.pl" - -#: templates/api/main.html:16 -#, python-format -msgid "" -"\n" -"WolneLektury.pl API resides under <code>%(u)s</code>.\n" -"You can use it to access information about books, their fragments and\n" -"their metadata.\n" -msgstr "" -"\n" -"API serwisu WolneLektury.pl znajduje siÄ pod adresem <code>%(u)s</code>.\n" -"Za jego pomocÄ można uzyskaÄ informacje o utworach, ich fragmentach i " -"metadanych.\n" - -#: templates/api/main.html:24 -msgid "" -"\n" -"Default data serialization format is\n" -"<a href=\"http://en.wikipedia.org/wiki/JSON\">JSON</a>, \n" -"but you can also use XML by appending <code>?format=xml</code>\n" -"query parameter to each URL.\n" -msgstr "" -"\n" -"Dane domyÅlnie sÄ serializowane w formacie <a href=\"http://pl.wikipedia.org/" -"wiki/JSON\">JSON</a>,\n" -"ale dostÄpny jest też format XML â wystarczy dodaÄ parametr <code>?" -"format=xml</code>\n" -"do każdego zapytania.\n" - -#: templates/api/main.html:33 -msgid "" -"\n" -"The URLs in WolneLektury.pl API are:\n" -msgstr "" -"\n" -"API Wolnych Lektur zawiera nastÄpujÄ ce adresy URL:\n" - -#: templates/api/main.html:40 -msgid "All books" -msgstr "Wszystkie utwory" - -#: templates/api/main.html:42 -msgid "Audiobooks" -msgstr "Audiobooki" - -#: templates/api/main.html:44 -msgid "DAISY" -msgstr "DAISY" - -#: templates/api/main.html:47 -msgid "List of all authors" -msgstr "Lista autorów" - -#: templates/api/main.html:49 -msgid "List of all epochs" -msgstr "Lista epok" - -#: templates/api/main.html:51 -msgid "List of all genres" -msgstr "Lista gatunków literackich" - -#: templates/api/main.html:53 -msgid "List of all kinds" -msgstr "Lista rodzajów literackich" - -#: templates/api/main.html:56 -msgid "List of all themes" -msgstr "Lista motywów i tematów literackich" - -#: templates/api/main.html:58 -msgid "Collections" -msgstr "Kolekcje" - -#: templates/api/main.html:64 -#, python-format -msgid "" -"\n" -"Each element of those lists contains a link (in a \"href\") attibute\n" -"which points to individual resource's details, i.e.:\n" -"<a href=\"%(e1)s\">%(e1)s</a> or\n" -"<a href=\"%(e2)s\">%(e2)s</a>.\n" -msgstr "" -"\n" -"Każdy element na tych listach zawiera adres (w atrybucie âhrefâ), pod którym " -"można znaleÅºÄ szczegóÅowe dane, np. <a href=\"%(e1)s\">%(e1)s</a> czy <a " -"href=\"%(e2)s\">%(e2)s</a>.\n" - -#: templates/api/main.html:73 -#, python-format -msgid "" -"\n" -"You can combine authors, epochs, genres and kinds to find only books " -"matching\n" -"those criteria. For instance:\n" -"<a href=\"%(e)s\">%(e)s</a>.\n" -msgstr "" -"\n" -"Można ÅÄ czyÄ autorów, epoki, gatunki i rodzaje, aby wybraÄ tylko utwory " -"odpowiadajÄ ce zadanym kryteriom. Na przykÅad: <a href=\"%(e)s\">%(e)s</a>.\n" - -#: templates/api/main.html:81 -#, python-format -msgid "" -"\n" -"If you only want top-level books and not all the children, you can use /" -"parent_books/, as in:\n" -"<a href=\"%(e)s\">%(e)s</a>.\n" -msgstr "" -"\n" -"Aby spoÅród wszystkich pasujÄ cych wybraÄ tylko utwory najwyższego poziomu " -"(pomijajÄ c ich podutwory), można użyÄ zapytania /parent_books/, np.: <a href=" -"\"%(e)s\">%(e)s</a>.\n" - -#: templates/api/main.html:89 -#, python-format -msgid "" -"\n" -"The same way, using also books and themes, you can search for a list of " -"fragments:\n" -"<a href=\"%(e)s\">%(e)s</a>. \n" -"Again, each entry has a \"href\" attribute which links to the fragment's " -"details, i.e.:\n" -"<a href=\"%(f)s\">%(f)s</a>. \n" -msgstr "" -"\n" -"W ten sam sposób, filtrujÄ c dodatkowo wedÅug lektur lub motywów, można " -"wyszukiwaÄ fragmenty:<a href=\"%(e)s\">%(e)s</a>. \n" -"Każdy element uzyskanej listy w atrybucie âhrefâ zawiera link do " -"szczegóÅowego opisu danego fragmentu, np.:\n" -"<a href=\"%(f)s\">%(f)s</a>. \n" diff --git a/apps/api/management/__init__.py b/apps/api/management/__init__.py deleted file mode 100755 index e69de29bb..000000000 diff --git a/apps/api/management/commands/__init__.py b/apps/api/management/commands/__init__.py deleted file mode 100755 index e69de29bb..000000000 diff --git a/apps/api/management/commands/mobileinit.py b/apps/api/management/commands/mobileinit.py deleted file mode 100755 index 57b41aa46..000000000 --- a/apps/api/management/commands/mobileinit.py +++ /dev/null @@ -1,168 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from datetime import datetime -import os -import os.path -import re -import sqlite3 -from django.core.management.base import BaseCommand - -from api.helpers import timestamp -from api.settings import MOBILE_INIT_DB -from catalogue.models import Book, Tag - - -class Command(BaseCommand): - help = 'Creates an initial SQLite file for the mobile app.' - - def handle(self, **options): - # those should be versioned - last_checked = timestamp(datetime.now()) - db = init_db(last_checked) - for b in Book.objects.all(): - add_book(db, b) - for t in Tag.objects.exclude( - category__in=('book', 'set', 'theme')).exclude(items=None): - # only add non-empty tags - add_tag(db, t) - db.commit() - db.close() - current(last_checked) - - -def pretty_size(size): - """ Turns size in bytes into a prettier string. - - >>> pretty_size(100000) - '97 KiB' - """ - if not size: - return None - units = ['B', 'KiB', 'MiB', 'GiB'] - size = float(size) - unit = units.pop(0) - while size > 1000 and units: - size /= 1024 - unit = units.pop(0) - if size < 10: - return "%.1f %s" % (size, unit) - return "%d %s" % (size, unit) - - - if not isinstance(value, unicode): - value = unicode(value, 'utf-8') - - # try to replace chars - value = re.sub('[^a-zA-Z0-9\\s\\-]{1}', replace_char, value) - value = value.lower() - value = re.sub(r'[^a-z0-9{|}]+', '~', value) - - return value.encode('ascii', 'ignore') - - - -def init_db(last_checked): - if not os.path.isdir(MOBILE_INIT_DB): - os.makedirs(MOBILE_INIT_DB) - db = sqlite3.connect(os.path.join(MOBILE_INIT_DB, 'initial.db-%d' % last_checked)) - - schema = """ -CREATE TABLE book ( - id INTEGER PRIMARY KEY, - title VARCHAR, - cover VARCHAR, - html_file VARCHAR, - html_file_size INTEGER, - parent INTEGER, - parent_number INTEGER, - - sort_key VARCHAR, - pretty_size VARCHAR, - authors VARCHAR, - _local BOOLEAN -); -CREATE INDEX IF NOT EXISTS book_title_index ON book (sort_key); -CREATE INDEX IF NOT EXISTS book_title_index ON book (title); -CREATE INDEX IF NOT EXISTS book_parent_index ON book (parent); - -CREATE TABLE tag ( - id INTEGER PRIMARY KEY, - name VARCHAR, - category VARCHAR, - sort_key VARCHAR, - books VARCHAR); -CREATE INDEX IF NOT EXISTS tag_name_index ON tag (name); -CREATE INDEX IF NOT EXISTS tag_category_index ON tag (category); -CREATE INDEX IF NOT EXISTS tag_sort_key_index ON tag (sort_key); - -CREATE TABLE state (last_checked INTEGER); -""" - - db.executescript(schema) - db.execute("INSERT INTO state VALUES (:last_checked)", locals()) - return db - - -def current(last_checked): - target = os.path.join(MOBILE_INIT_DB, 'initial.db') - if os.path.lexists(target): - os.unlink(target) - os.symlink( - 'initial.db-%d' % last_checked, - target, - ) - - - -book_sql = """ - INSERT INTO book - (id, title, cover, html_file, html_file_size, parent, parent_number, sort_key, pretty_size, authors) - VALUES - (:id, :title, :cover, :html_file, :html_file_size, :parent, :parent_number, :sort_key, :size_str, :authors); -""" -book_tag_sql = "INSERT INTO book_tag (book, tag) VALUES (:book, :tag);" -tag_sql = """ - INSERT INTO tag - (id, category, name, sort_key, books) - VALUES - (:id, :category, :name, :sort_key, :book_ids); -""" -categories = {'author': 'autor', - 'epoch': 'epoka', - 'genre': 'gatunek', - 'kind': 'rodzaj', - 'theme': 'motyw' - } - - -def add_book(db, book): - id = book.id - title = book.title - if book.html_file: - html_file = book.html_file.url - html_file_size = book.html_file.size - else: - html_file = html_file_size = None - if book.cover: - cover = book.cover.url - else: - cover = None - parent = book.parent_id - parent_number = book.parent_number - sort_key = book.sort_key - size_str = pretty_size(html_file_size) - authors = ", ".join(t.name for t in book.tags.filter(category='author')) - db.execute(book_sql, locals()) - - -def add_tag(db, tag): - id = tag.id - category = categories[tag.category] - name = tag.name - sort_key = tag.sort_key - - books = Book.tagged_top_level([tag]) - book_ids = ','.join(str(b.id) for b in books) - db.execute(tag_sql, locals()) diff --git a/apps/api/migrations/0001_initial.py b/apps/api/migrations/0001_initial.py deleted file mode 100644 index 4d20304bc..000000000 --- a/apps/api/migrations/0001_initial.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Deleted', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('object_id', models.IntegerField()), - ('slug', models.SlugField(max_length=120, verbose_name='Slug', blank=True)), - ('category', models.CharField(db_index=True, max_length=64, null=True, blank=True)), - ('created_at', models.DateTimeField(editable=False, db_index=True)), - ('deleted_at', models.DateTimeField(auto_now_add=True, db_index=True)), - ('content_type', models.ForeignKey(to='contenttypes.ContentType')), - ], - options={ - }, - bases=(models.Model,), - ), - migrations.AlterUniqueTogether( - name='deleted', - unique_together=set([('content_type', 'object_id')]), - ), - ] diff --git a/apps/api/migrations/0002_auto_20151221_1225.py b/apps/api/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index 339068ac5..000000000 --- a/apps/api/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='deleted', - name='slug', - field=models.SlugField(max_length=120, verbose_name='slug', blank=True), - ), - ] diff --git a/apps/api/migrations/__init__.py b/apps/api/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/api/models.py b/apps/api/models.py deleted file mode 100644 index 5a3d42440..000000000 --- a/apps/api/models.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib.contenttypes.models import ContentType -from django.db import models -from django.db.models.signals import pre_delete -from django.utils.translation import ugettext_lazy as _ - -from catalogue.models import Book, Tag - - -class Deleted(models.Model): - object_id = models.IntegerField() - slug = models.SlugField(_('slug'), max_length=120, blank=True, db_index=True) - content_type = models.ForeignKey(ContentType) - category = models.CharField(max_length=64, null=True, blank=True, db_index=True) - created_at = models.DateTimeField(editable=False, db_index=True) - deleted_at = models.DateTimeField(auto_now_add=True, db_index=True) - - class Meta: - unique_together = (('content_type', 'object_id'),) - - -def _pre_delete_handler(sender, instance, **kwargs): - """ save deleted objects for change history purposes """ - - if sender in (Book, Tag): - if sender == Tag: - if instance.category in ('book', 'set'): - return - else: - category = instance.category - else: - category = None - content_type = ContentType.objects.get_for_model(sender) - Deleted.objects.create(content_type=content_type, object_id=instance.id, - created_at=instance.created_at, category=category, slug=instance.slug) -pre_delete.connect(_pre_delete_handler) diff --git a/apps/api/settings.py b/apps/api/settings.py deleted file mode 100644 index 0802c5453..000000000 --- a/apps/api/settings.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import os.path -from django.conf import settings - - -try: - MOBILE_INIT_DB = settings.API_MOBILE_INIT_DB -except AttributeError: - MOBILE_INIT_DB = os.path.abspath(os.path.join(settings.MEDIA_ROOT, 'api/mobile/initial/')) diff --git a/apps/api/templates/api/main.html b/apps/api/templates/api/main.html deleted file mode 100755 index 04244dc91..000000000 --- a/apps/api/templates/api/main.html +++ /dev/null @@ -1,97 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load build_absolute_uri from fnp_common %} - -{% block title %}{% trans "WolneLektury.pl API" %}{% endblock %} - -{% block bodyid %}api{% endblock %} - -{% block body %} - -<h1>API</h1> - -<div class="normal-text white-box"> -<p> -{% url "api" as u %} -{% blocktrans with u=u|build_absolute_uri:request %} -WolneLektury.pl API resides under <code>{{ u }}</code>. -You can use it to access information about books, their fragments and -their metadata. -{% endblocktrans %} -</p> - -<p> -{% blocktrans %} -Default data serialization format is -<a href="http://en.wikipedia.org/wiki/JSON">JSON</a>, -but you can also use XML by appending <code>?format=xml</code> -query parameter to each URL. -{% endblocktrans %} -</p> - -<p> -{% blocktrans %} -The URLs in WolneLektury.pl API are: -{% endblocktrans %} -</p> - -<ul> - <li><a href='{% url "api_book_list" "" %}'> - {% url "api_book_list" "" %}</a> â {% trans "All books" %} - <li><a href='{% url "api_audiobook_list" "" %}'> - {% url "api_audiobook_list" "" %}</a> â {% trans "Audiobooks" %} - <li><a href='{% url "api_daisy_list" "" %}'> - {% url "api_daisy_list" "" %}</a> â {% trans "DAISY" %} - - <li><a href='{% url "api_tag_list" "authors" %}'> - {% url "api_tag_list" "authors" %}</a> â {% trans "List of all authors" %}</li> - <li><a href='{% url "api_tag_list" "epochs" %}'> - {% url "api_tag_list" "epochs" %}</a> â {% trans "List of all epochs" %}</li> - <li><a href='{% url "api_tag_list" "genres" %}'> - {% url "api_tag_list" "genres" %}</a> â {% trans "List of all genres" %}</li> - <li><a href='{% url "api_tag_list" "kinds" %}'> - {% url "api_tag_list" "kinds" %}</a> â {% trans "List of all kinds" %}</li> - - <li><a href='{% url "api_tag_list" "themes" %}'> - {% url "api_tag_list" "themes" %}</a> â {% trans "List of all themes" %}</li> - <li><a href='{% url "api_collections" %}'> - {% url "api_collections" %}</a> â {% trans "Collections" %} -</ul> - -<p> -{% url "api_book" "studnia-i-wahadlo" as e1 %} -{% url "api_tag" "authors" "edgar-allan-poe" as e2 %} -{% blocktrans %} -Each element of those lists contains a link (in a "href") attibute -which points to individual resource's details, i.e.: -<a href="{{e1}}">{{e1}}</a> or -<a href="{{e2}}">{{e2}}</a>. -{% endblocktrans %} -</p> - -<p> -{% blocktrans with "/api/authors/adam-mickiewicz/kinds/liryka/books/" as e %} -You can combine authors, epochs, genres and kinds to find only books matching -those criteria. For instance: -<a href="{{e}}">{{e}}</a>. -{% endblocktrans %} -</p> - -<p> -{% blocktrans with "/api/authors/adam-mickiewicz/kinds/liryka/parent_books/" as e %} -If you only want top-level books and not all the children, you can use /parent_books/, as in: -<a href="{{e}}">{{e}}</a>. -{% endblocktrans %} -</p> - -<p> -{% url "api_fragment" "sen-nocy-letniej" "1290526312912-3814598192" as f %} -{% blocktrans with "/api/authors/william-shakespeare/themes/zabawa/fragments/" as e %} -The same way, using also books and themes, you can search for a list of fragments: -<a href="{{e}}">{{e}}</a>. -Again, each entry has a "href" attribute which links to the fragment's details, i.e.: -<a href="{{f}}">{{f}}</a>. -{% endblocktrans %} -</p> -</div> -{% endblock %} diff --git a/apps/api/templates/oauth/challenge.html b/apps/api/templates/oauth/challenge.html deleted file mode 100755 index e69de29bb..000000000 diff --git a/apps/api/tests.py b/apps/api/tests.py deleted file mode 100644 index 94abe53b5..000000000 --- a/apps/api/tests.py +++ /dev/null @@ -1,95 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from os import path - -from django.core.files.uploadedfile import SimpleUploadedFile -from django.test import TestCase -from django.test.utils import override_settings -import json - -from catalogue.models import Book, Tag -from picture.forms import PictureImportForm -from picture.models import Picture -import picture.tests - - -@override_settings( - NO_SEARCH_INDEX=True, - CACHES={'default': { - 'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}}, - SSIFY_CACHE_ALIASES=['default'], - SSIFY_RENDER=True, -) -class ApiTest(TestCase): - def load_json(self, url): - content = self.client.get(url).content - try: - data = json.loads(content) - except ValueError: - self.fail('No JSON could be decoded:', content) - return data - - -class BookTests(ApiTest): - - def setUp(self): - self.tag = Tag.objects.create(category='author', slug='joe') - self.book = Book.objects.create(title='A Book', slug='a-book') - self.book_tagged = Book.objects.create(title='Tagged Book', slug='tagged-book') - self.book_tagged.tags = [self.tag] - self.book_tagged.save() - - def test_book_list(self): - books = self.load_json('/api/books/') - self.assertEqual(len(books), 2, - 'Wrong book list.') - - def test_tagged_books(self): - books = self.load_json('/api/authors/joe/books/') - - self.assertEqual([b['title'] for b in books], [self.book_tagged.title], - 'Wrong tagged book list.') - - def test_detail(self): - book = self.load_json('/api/books/a-book/') - self.assertEqual(book['title'], self.book.title, - 'Wrong book details.') - - -class TagTests(ApiTest): - - def setUp(self): - self.tag = Tag.objects.create(category='author', slug='joe', name='Joe') - self.book = Book.objects.create(title='A Book', slug='a-book') - self.book.tags = [self.tag] - self.book.save() - - def test_tag_list(self): - tags = self.load_json('/api/authors/') - self.assertEqual(len(tags), 1, - 'Wrong tag list.') - - def test_tag_detail(self): - tag = self.load_json('/api/authors/joe/') - self.assertEqual(tag['name'], self.tag.name, - 'Wrong tag details.') - - -class PictureTests(ApiTest): - def test_publish(self): - slug = "kandinsky-composition-viii" - xml = SimpleUploadedFile('composition8.xml', open(path.join(picture.tests.__path__[0], "files", slug + ".xml")).read()) - img = SimpleUploadedFile('kompozycja-8.png', open(path.join(picture.tests.__path__[0], "files", slug + ".png")).read()) - - import_form = PictureImportForm({}, { - 'picture_xml_file': xml, - 'picture_image_file': img - }) - - assert import_form.is_valid() - if import_form.is_valid(): - import_form.save() - - Picture.objects.get(slug=slug) diff --git a/apps/api/urls.py b/apps/api/urls.py deleted file mode 100644 index 1c2e656d1..000000000 --- a/apps/api/urls.py +++ /dev/null @@ -1,96 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url -from django.views.decorators.csrf import csrf_exempt -from django.views.generic import TemplateView -from piston.authentication import OAuthAuthentication, oauth_access_token -from piston.resource import Resource -from ssify import ssi_included -from api import handlers -from api.helpers import CsrfExemptResource - -auth = OAuthAuthentication(realm="Wolne Lektury") - -book_list_resource = CsrfExemptResource(handler=handlers.BooksHandler, authentication=auth) -ebook_list_resource = Resource(handler=handlers.EBooksHandler) -#book_list_resource = Resource(handler=handlers.BooksHandler) -book_resource = Resource(handler=handlers.BookDetailHandler) - -collection_resource = Resource(handler=handlers.CollectionDetailHandler) -collection_list_resource = Resource(handler=handlers.CollectionsHandler) - -tag_list_resource = Resource(handler=handlers.TagsHandler) -tag_resource = Resource(handler=handlers.TagDetailHandler) - -fragment_resource = Resource(handler=handlers.FragmentDetailHandler) -fragment_list_resource = Resource(handler=handlers.FragmentsHandler) - -picture_resource = CsrfExemptResource(handler=handlers.PictureHandler, authentication=auth) - - -@ssi_included -def incl(request, model, pk, emitter_format): - resource = { - 'book': book_list_resource, - 'fragment': fragment_list_resource, - 'tag': tag_list_resource, - }[model] - request.piwik_track = False - resp = resource(request, pk=pk, emitter_format=emitter_format) - if emitter_format == 'xml': - # Ugly, but quick way of stripping <?xml?> header and <response> tags. - resp.content = resp.content[49:-11] - return resp - - -urlpatterns = patterns( - 'piston.authentication', - url(r'^oauth/request_token/$', 'oauth_request_token'), - url(r'^oauth/authorize/$', 'oauth_user_auth'), - url(r'^oauth/access_token/$', csrf_exempt(oauth_access_token)), - -) + patterns('', - url(r'^$', TemplateView.as_view(template_name='api/main.html'), name='api'), - url(r'^include/(?P<model>book|fragment|tag)/(?P<pk>\d+)\.(?P<lang>.+)\.(?P<emitter_format>xml|json)$', - incl, name='api_include'), - - # info boxes (used by mobile app) - url(r'book/(?P<id>\d*?)/info\.html$', 'catalogue.views.book_info'), - url(r'tag/(?P<id>\d*?)/info\.html$', 'catalogue.views.tag_info'), - - # books by collections - url(r'^collections/$', collection_list_resource, name="api_collections"), - url(r'^collections/(?P<slug>[^/]+)/$', collection_resource, name="api_collection"), - - # objects details - url(r'^books/(?P<book>[a-z0-9-]+)/$', book_resource, name="api_book"), - url(r'^(?P<category>[a-z0-9-]+)/(?P<slug>[a-z0-9-]+)/$', - tag_resource, name="api_tag"), - url(r'^books/(?P<book>[a-z0-9-]+)/fragments/(?P<anchor>[a-z0-9-]+)/$', - fragment_resource, name="api_fragment"), - - # books by tags - url(r'^(?P<tags>(?:(?:[a-z0-9-]+/){2}){0,6})books/$', - book_list_resource, name='api_book_list'), - url(r'^(?P<tags>(?:(?:[a-z0-9-]+/){2}){0,6})ebooks/$', - ebook_list_resource, name='api_ebook_list'), - url(r'^(?P<tags>(?:(?:[a-z0-9-]+/){2}){0,6})parent_books/$', - book_list_resource, {"top_level": True}, name='api_parent_book_list'), - url(r'^(?P<tags>(?:(?:[a-z0-9-]+/){2}){0,6})parent_ebooks/$', - ebook_list_resource, {"top_level": True}, name='api_parent_ebook_list'), - url(r'^(?P<tags>(?:(?:[a-z0-9-]+/){2}){0,6})audiobooks/$', - book_list_resource, {"audiobooks": True}, name='api_audiobook_list'), - url(r'^(?P<tags>(?:(?:[a-z0-9-]+/){2}){0,6})daisy/$', - book_list_resource, {"daisy": True}, name='api_daisy_list'), - - url(r'^pictures/$', picture_resource), - - # fragments by book, tags, themes - # this should be paged - url(r'^(?P<tags>(?:(?:[a-z0-9-]+/){2}){1,6})fragments/$', fragment_list_resource), - - # tags by category - url(r'^(?P<category>[a-z0-9-]+)/$', tag_list_resource, name='api_tag_list'), -) diff --git a/apps/catalogue/__init__.py b/apps/catalogue/__init__.py deleted file mode 100644 index eaeb7d468..000000000 --- a/apps/catalogue/__init__.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import logging -from django.conf import settings as settings -from catalogue.utils import AppSettings - - -default_app_config = 'catalogue.apps.CatalogueConfig' - - -class Settings(AppSettings): - """Default settings for catalogue app.""" - DEFAULT_LANGUAGE = u'pol' - # PDF needs TeXML + XeLaTeX, MOBI needs Calibre. - DONT_BUILD = set(['pdf', 'mobi']) - FORMAT_ZIPS = { - 'epub': 'wolnelektury_pl_epub', - 'pdf': 'wolnelektury_pl_pdf', - 'mobi': 'wolnelektury_pl_mobi', - 'fb2': 'wolnelektury_pl_fb2', - } - - REDAKCJA_URL = "http://redakcja.wolnelektury.pl" - GOOD_LICENSES = set([r'CC BY \d\.\d', r'CC BY-SA \d\.\d']) - RELATED_RANDOM_PICTURE_CHANCE = .5 - - def _more_DONT_BUILD(self, value): - for format_ in ['cover', 'pdf', 'epub', 'mobi', 'fb2', 'txt']: - attname = 'NO_BUILD_%s' % format_.upper() - if hasattr(settings, attname): - logging.warn("%s is deprecated, " - "use CATALOGUE_DONT_BUILD instead", attname) - if getattr(settings, attname): - value.add(format_) - else: - value.remove(format_) - return value - - def _more_FORMAT_ZIPS(self, value): - for format_ in ['epub', 'pdf', 'mobi', 'fb2']: - attname = 'ALL_%s_ZIP' % format_.upper() - if hasattr(settings, attname): - logging.warn("%s is deprecated, " - "use CATALOGUE_FORMAT_ZIPS[%s] instead", - attname, format_) - value[format_] = getattr(settings, attname) - return value - - -app_settings = Settings('CATALOGUE') diff --git a/apps/catalogue/admin.py b/apps/catalogue/admin.py deleted file mode 100644 index 28cf53c37..000000000 --- a/apps/catalogue/admin.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib import admin -from django import forms - -from newtagging.admin import TaggableModelAdmin, TaggableModelForm -from catalogue.models import Tag, Book, Fragment, BookMedia, Collection, Source - - -class TagAdmin(admin.ModelAdmin): - list_display = ('name', 'slug', 'sort_key', 'category', 'has_description',) - list_filter = ('category',) - search_fields = ('name',) - ordering = ('name',) - - prepopulated_fields = {'slug': ('name',), 'sort_key': ('name',),} - radio_fields = {'category': admin.HORIZONTAL} - - -class MediaInline(admin.TabularInline): - model = BookMedia - readonly_fields = ['source_sha1'] - extra = 0 - - -class BookAdmin(TaggableModelAdmin): - tag_model = Tag - - list_display = ('title', 'slug', 'created_at', 'has_epub_file', 'has_html_file', 'has_description',) - search_fields = ('title',) - ordering = ('title',) - - inlines = [MediaInline] - - def change_view(self, request, object_id, extra_context=None): - if not request.GET.has_key('advanced'): - self.form = forms.ModelForm - self.fields = ('title', 'description', 'gazeta_link', 'wiki_link') - self.readonly_fields = ('title',) - else: - self.form = TaggableModelForm - self.fields = None - self.readonly_fields = () - return super(BookAdmin, self).change_view(request, object_id, - extra_context=extra_context) - - -class FragmentAdmin(TaggableModelAdmin): - tag_model = Tag - - list_display = ('book', 'anchor',) - ordering = ('book', 'anchor',) - - -class CollectionAdmin(admin.ModelAdmin): - prepopulated_fields = {'slug': ('title',)} - - -class SourceAdmin(admin.ModelAdmin): - list_display = ('netloc', 'name') - - -admin.site.register(Tag, TagAdmin) -admin.site.register(Book, BookAdmin) -admin.site.register(Fragment, FragmentAdmin) -admin.site.register(Collection, CollectionAdmin) -admin.site.register(Source, SourceAdmin) diff --git a/apps/catalogue/apps.py b/apps/catalogue/apps.py deleted file mode 100644 index 54bfc8f8b..000000000 --- a/apps/catalogue/apps.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.apps import AppConfig - -class CatalogueConfig(AppConfig): - name = 'catalogue' - - def ready(self): - from . import signals diff --git a/apps/catalogue/constants.py b/apps/catalogue/constants.py deleted file mode 100644 index 36f4f5dd3..000000000 --- a/apps/catalogue/constants.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.utils.translation import ugettext_lazy as _ - -LICENSES = { - 'http://creativecommons.org/licenses/by-sa/3.0/': { - 'icon': 'cc-by-sa', - 'description': _('Creative Commons Attribution-ShareAlike 3.0 Unported'), - }, -} -LICENSES['http://creativecommons.org/licenses/by-sa/3.0/deed.pl'] = \ - LICENSES['http://creativecommons.org/licenses/by-sa/3.0/'] - -# Those will be generated only for books with own HTML. -EBOOK_FORMATS_WITHOUT_CHILDREN = ['txt', 'fb2'] -# Those will be generated for all books. -EBOOK_FORMATS_WITH_CHILDREN = ['pdf', 'epub', 'mobi'] -# Those will be generated when inherited cover changes. -EBOOK_FORMATS_WITH_COVERS = ['pdf', 'epub', 'mobi'] - -EBOOK_FORMATS = EBOOK_FORMATS_WITHOUT_CHILDREN + EBOOK_FORMATS_WITH_CHILDREN - -LANGUAGES_3TO2 = { - 'deu': 'de', - 'ger': 'de', - 'eng': 'en', - 'spa': 'es', - 'fra': 'fr', - 'fre': 'fr', - 'ita': 'it', - 'jpn': 'jp', - 'lit': 'lt', - 'pol': 'pl', - 'rus': 'ru', - 'ukr': 'uk', -} diff --git a/apps/catalogue/feeds.py b/apps/catalogue/feeds.py deleted file mode 100644 index 2411d015a..000000000 --- a/apps/catalogue/feeds.py +++ /dev/null @@ -1,83 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib.sites.models import Site -from django.contrib.syndication.views import Feed -from django.core.urlresolvers import reverse - -from catalogue import models - -def absolute_url(url): - return "http://%s%s" % (Site.objects.get_current().domain, url) - - -class AudiobookFeed(Feed): - description = "Audiobooki ostatnio dodane do serwisu Wolne Lektury." - - mime_types = { - 'mp3': 'audio/mpeg', - 'ogg': 'audio/ogg', - 'daisy': 'application/zip', - } - - titles = { - 'all': 'WolneLektury.pl - audiobooki we wszystkich formatach', - 'mp3': 'WolneLektury.pl - audiobooki w formacie MP3', - 'ogg': 'WolneLektury.pl - audiobooki w formacie Ogg Vorbis', - 'daisy': 'WolneLektury.pl - audiobooki w formacie DAISY', - } - - def get_object(self, request, type): - return {'type': type, 'all': 'all' in request.GET} - - def title(self, args): - return self.titles[args['type']] - - def link(self, args): - return reverse('audiobook_feed', args=(args['type'],)) - - def items(self, args): - objects = models.BookMedia.objects.order_by('-uploaded_at') - if type == 'all': - objects = objects.filter(type__in=('mp3', 'ogg', 'daisy')) - else: - objects = objects.filter(type=args['type']) - if not args['all']: - objects = objects[:50] - return objects - - def item_title(self, item): - return item.name - - def item_categories(self, item): - return sorted(set(author.name for author in - item.book.tags.filter(category='author').iterator())) - - def item_description(self, item): - lines = [] - artist = item.extra_info.get('artist_name', None) - if artist is not None: - lines.append(u'Czyta: %s' % artist) - director = item.extra_info.get('artist_name', None) - if director is not None: - lines.append(u'Reżyseruje: %s' % director) - return u'<br/>\n'.join(lines) - - def item_link(self, item): - return item.book.get_absolute_url() - - def item_guid(self, item): - return absolute_url(item.file.url) - - def item_enclosure_url(self, item): - return absolute_url(item.file.url) - - def item_enclosure_length(self, item): - return item.file.size - - def item_enclosure_mime_type(self, item): - return self.mime_types[item.type] - - def item_pubdate(self, item): - return item.uploaded_at diff --git a/apps/catalogue/fields.py b/apps/catalogue/fields.py deleted file mode 100644 index 0ff2ca9ef..000000000 --- a/apps/catalogue/fields.py +++ /dev/null @@ -1,243 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from django.core.files import File -from django.db import models -from django.db.models.fields.files import FieldFile -from catalogue import app_settings -from catalogue.constants import LANGUAGES_3TO2 -from catalogue.utils import remove_zip, truncate_html_words -from celery.task import Task, task -from celery.utils.log import get_task_logger -from waiter.utils import clear_cache - -task_logger = get_task_logger(__name__) - - -class EbookFieldFile(FieldFile): - """Represents contents of an ebook file field.""" - - def build(self): - """Build the ebook immediately.""" - return self.field.builder.build(self) - - def build_delay(self): - """Builds the ebook in a delayed task.""" - return self.field.builder.delay(self.instance, self.field.attname) - - -class EbookField(models.FileField): - """Represents an ebook file field, attachable to a model.""" - attr_class = EbookFieldFile - - def __init__(self, format_name, *args, **kwargs): - super(EbookField, self).__init__(*args, **kwargs) - self.format_name = format_name - - def deconstruct(self): - name, path, args, kwargs = super(EbookField, self).deconstruct() - args.insert(0, self.format_name) - return name, path, args, kwargs - - @property - def builder(self): - """Finds a celery task suitable for the format of the field.""" - return BuildEbook.for_format(self.format_name) - - def contribute_to_class(self, cls, name): - super(EbookField, self).contribute_to_class(cls, name) - - def has(model_instance): - return bool(getattr(model_instance, self.attname, None)) - has.__doc__ = None - has.__name__ = str("has_%s" % self.attname) - has.short_description = self.name - has.boolean = True - setattr(cls, 'has_%s' % self.attname, has) - - -class BuildEbook(Task): - formats = {} - - @classmethod - def register(cls, format_name): - """A decorator for registering subclasses for particular formats.""" - def wrapper(builder): - cls.formats[format_name] = builder - return builder - return wrapper - - @classmethod - def for_format(cls, format_name): - """Returns a celery task suitable for specified format.""" - return cls.formats.get(format_name, BuildEbookTask) - - @staticmethod - def transform(wldoc, fieldfile): - """Transforms an librarian.WLDocument into an librarian.OutputFile. - - By default, it just calls relevant wldoc.as_??? method. - - """ - return getattr(wldoc, "as_%s" % fieldfile.field.format_name)() - - def run(self, obj, field_name): - """Just run `build` on FieldFile, can't pass it directly to Celery.""" - task_logger.info("%s -> %s" % (obj.slug, field_name)) - ret = self.build(getattr(obj, field_name)) - obj.flush_includes() - return ret - - def build(self, fieldfile): - book = fieldfile.instance - out = self.transform(book.wldocument(), fieldfile) - fieldfile.save(None, File(open(out.get_filename())), save=False) - if book.pk is not None: - type(book).objects.filter(pk=book.pk).update(**{ - fieldfile.field.attname: fieldfile - }) - if fieldfile.field.format_name in app_settings.FORMAT_ZIPS: - remove_zip(app_settings.FORMAT_ZIPS[fieldfile.field.format_name]) -# Don't decorate BuildEbook, because we want to subclass it. -BuildEbookTask = task(BuildEbook, ignore_result=True) - - -@BuildEbook.register('txt') -@task(ignore_result=True) -class BuildTxt(BuildEbook): - @staticmethod - def transform(wldoc, fieldfile): - return wldoc.as_text() - - -@BuildEbook.register('pdf') -@task(ignore_result=True) -class BuildPdf(BuildEbook): - @staticmethod - def transform(wldoc, fieldfile): - return wldoc.as_pdf(morefloats=settings.LIBRARIAN_PDF_MOREFLOATS, - cover=True) - - def build(self, fieldfile): - BuildEbook.build(self, fieldfile) - clear_cache(fieldfile.instance.slug) - - -@BuildEbook.register('epub') -@task(ignore_result=True) -class BuildEpub(BuildEbook): - @staticmethod - def transform(wldoc, fieldfile): - return wldoc.as_epub(cover=True) - - -@BuildEbook.register('html') -@task(ignore_result=True) -class BuildHtml(BuildEbook): - def build(self, fieldfile): - from django.core.files.base import ContentFile - from fnpdjango.utils.text.slughifi import slughifi - from sortify import sortify - from librarian import html - from catalogue.models import Fragment, Tag - - book = fieldfile.instance - - html_output = self.transform( - book.wldocument(parse_dublincore=False), - fieldfile) - - # Delete old fragments, create from scratch if necessary. - book.fragments.all().delete() - - if html_output: - meta_tags = list(book.tags.filter( - category__in=('author', 'epoch', 'genre', 'kind'))) - - lang = book.language - lang = LANGUAGES_3TO2.get(lang, lang) - if lang not in [ln[0] for ln in settings.LANGUAGES]: - lang = None - - fieldfile.save(None, ContentFile(html_output.get_string()), - save=False) - type(book).objects.filter(pk=book.pk).update(**{ - fieldfile.field.attname: fieldfile - }) - - # Extract fragments - closed_fragments, open_fragments = html.extract_fragments(fieldfile.path) - for fragment in closed_fragments.values(): - try: - theme_names = [s.strip() for s in fragment.themes.split(',')] - except AttributeError: - continue - themes = [] - for theme_name in theme_names: - if not theme_name: - continue - if lang == settings.LANGUAGE_CODE: - # Allow creating themes if book in default language. - tag, created = Tag.objects.get_or_create( - slug=slughifi(theme_name), - category='theme') - if created: - tag.name = theme_name - setattr(tag, "name_%s" % lang, theme_name) - tag.sort_key = sortify(theme_name.lower()) - tag.save() - themes.append(tag) - elif lang is not None: - # Don't create unknown themes in non-default languages. - try: - tag = Tag.objects.get(category='theme', - **{"name_%s" % lang: theme_name}) - except Tag.DoesNotExist: - pass - else: - themes.append(tag) - if not themes: - continue - - text = fragment.to_string() - short_text = truncate_html_words(text, 15) - if text == short_text: - short_text = '' - new_fragment = Fragment.objects.create(anchor=fragment.id, - book=book, text=text, short_text=short_text) - - new_fragment.save() - new_fragment.tags = set(meta_tags + themes) - book.html_built.send(sender=type(self), instance=book) - return True - return False - -@BuildEbook.register('cover_thumb') -@task(ignore_result=True) -class BuildCoverThumb(BuildEbook): - @classmethod - def transform(cls, wldoc, fieldfile): - from librarian.cover import WLCover - return WLCover(wldoc.book_info, height=193).output_file() - - - -class OverwritingFieldFile(FieldFile): - """ - Deletes the old file before saving the new one. - """ - - def save(self, name, content, *args, **kwargs): - leave = kwargs.pop('leave', None) - # delete if there's a file already and there's a new one coming - if not leave and self and (not hasattr(content, 'path') or - content.path != self.path): - self.delete(save=False) - return super(OverwritingFieldFile, self).save( - name, content, *args, **kwargs) - - -class OverwritingFileField(models.FileField): - attr_class = OverwritingFieldFile diff --git a/apps/catalogue/fixtures/collection-boy.json b/apps/catalogue/fixtures/collection-boy.json deleted file mode 100644 index 1328b132b..000000000 --- a/apps/catalogue/fixtures/collection-boy.json +++ /dev/null @@ -1,19 +0,0 @@ -[ - { - "pk": "promo", - "model": "chunks.chunk", - "fields": { - "content": "<div class=\"grid-line\" id=\"promo-box-header\"><h2 class=\"mono\">\r\n\r\n\r\nOh Boy!\r\n\r\n\r\n</h2></div><div id=\"promo-box-body\" class=\"accent4\"><p id=\"promo-box-title\" class=\"mono\"><span>\r\n\r\n\r\nBiblioteczka Boya\r\n\r\n\r\n</span></p><div id=\"promo-box-content\">\r\n\r\n\r\n<p>T\u0142umaczenia literatury francuskiej i nie tylko.</p>\r\n\r\n<p class=\"see-more\"><a href=\"/katalog/lektury/boy/\" >Biblioteczka Boya \u21d2</a></p>\r\n\r\n\r\n</div></div>", - "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/forms.py b/apps/catalogue/forms.py deleted file mode 100644 index d52310bd3..000000000 --- a/apps/catalogue/forms.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import forms -from django.utils.translation import ugettext_lazy as _ - -from catalogue.models import Book -from waiter.models import WaitedFile -from django.core.exceptions import ValidationError -from catalogue.utils import get_customized_pdf_path -from catalogue.tasks import build_custom_pdf - - -class BookImportForm(forms.Form): - book_xml_file = forms.FileField(required=False) - book_xml = forms.CharField(required=False) - - def clean(self): - from django.core.files.base import ContentFile - - if not self.cleaned_data['book_xml_file']: - if self.cleaned_data['book_xml']: - self.cleaned_data['book_xml_file'] = \ - ContentFile(self.cleaned_data['book_xml'].encode('utf-8')) - else: - raise forms.ValidationError(_("Please supply an XML.")) - return super(BookImportForm, self).clean() - - def save(self, commit=True, **kwargs): - return Book.from_xml_file(self.cleaned_data['book_xml_file'], overwrite=True, **kwargs) - - -FORMATS = [(f, f.upper()) for f in Book.ebook_formats] - - -class DownloadFormatsForm(forms.Form): - formats = forms.MultipleChoiceField(required=False, choices=FORMATS, - widget=forms.CheckboxSelectMultiple) - - def __init__(self, *args, **kwargs): - super(DownloadFormatsForm, self).__init__(*args, **kwargs) - - -CUSTOMIZATION_FLAGS = ( - ('nofootnotes', _("Don't show footnotes")), - ('nothemes', _("Don't disply themes")), - ('nowlfont', _("Don't use our custom font")), - ('no-cover', _("Without cover")), - ) -CUSTOMIZATION_OPTIONS = ( - ('leading', _("Leading"), ( - ('', _('Normal leading')), - ('onehalfleading', _('One and a half leading')), - ('doubleleading', _('Double leading')), - )), - ('fontsize', _("Font size"), ( - ('', _('Default')), - ('13pt', _('Big')) - )), -# ('pagesize', _("Paper size"), ( -# ('a4paper', _('A4')), -# ('a5paper', _('A5')), -# )), - ) - - -class CustomPDFForm(forms.Form): - def __init__(self, book, *args, **kwargs): - super(CustomPDFForm, self).__init__(*args, **kwargs) - self.book = book - for name, label in CUSTOMIZATION_FLAGS: - self.fields[name] = forms.BooleanField(required=False, label=label) - for name, label, choices in CUSTOMIZATION_OPTIONS: - self.fields[name] = forms.ChoiceField(choices, required=False, label=label) - - def clean(self): - self.cleaned_data['cust'] = self.customizations - self.cleaned_data['path'] = get_customized_pdf_path(self.book, - self.cleaned_data['cust']) - if not WaitedFile.can_order(self.cleaned_data['path']): - raise ValidationError(_('Queue is full. Please try again later.')) - return self.cleaned_data - - @property - def customizations(self): - c = [] - for name, label in CUSTOMIZATION_FLAGS: - if self.cleaned_data.get(name): - c.append(name) - for name, label, choices in CUSTOMIZATION_OPTIONS: - option = self.cleaned_data.get(name) - if option: - c.append(option) - c.sort() - return c - - def save(self, *args, **kwargs): - if not self.cleaned_data['cust'] and self.book.pdf_file: - # Don't build with default options, just redirect to the standard file. - return {"redirect": self.book.pdf_file.url} - url = WaitedFile.order(self.cleaned_data['path'], - lambda p, waiter_id: build_custom_pdf.delay(self.book.id, - self.cleaned_data['cust'], p, waiter_id), - self.book.pretty_title() - ) - #return redirect(url) - return {"redirect": url} diff --git a/apps/catalogue/helpers.py b/apps/catalogue/helpers.py deleted file mode 100644 index 7ca2cbd3a..000000000 --- a/apps/catalogue/helpers.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib.contenttypes.models import ContentType -from django.db.models import Count -from .models import Tag, Book - - -BOOK_CATEGORIES = ('author', 'epoch', 'genre', 'kind') - - -def get_top_level_related_tags(tags=None, categories=BOOK_CATEGORIES): - """ - Finds tags related to given tags through books, and counts their usage. - - Takes ancestry into account: if a tag is applied to a book, its - usage on the book's descendants is ignored. - - This is tested for PostgreSQL 9.1+, and might not work elsewhere. - It particular, it uses raw SQL using WITH clause, which is - supported in SQLite from v. 3.8.3, and is missing in MySQL. - http://bugs.mysql.com/bug.php?id=16244 - - """ - # First, find all tag relations of relevant books. - bct = ContentType.objects.get_for_model(Book) - relations = Tag.intermediary_table_model.objects.filter( - content_type=bct) - if tags is not None: - tagged_books = Book.tagged.with_all(tags).only('pk') - relations = relations.filter( - object_id__in=tagged_books).exclude( - tag_id__in=[tag.pk for tag in tags]) - - rel_sql, rel_params = relations.query.sql_with_params() - - # Exclude those relations between a book and a tag, - # for which there is a relation between the book's ancestor - # and the tag and - - return Tag.objects.raw(''' - WITH AllTagged AS (''' + rel_sql + ''') - SELECT catalogue_tag.*, COUNT(catalogue_tag.id) AS count - FROM catalogue_tag, AllTagged - WHERE catalogue_tag.id=AllTagged.tag_id - AND catalogue_tag.category IN %s - AND NOT EXISTS ( - SELECT AncestorTagged.id - FROM catalogue_book_ancestor Ancestor, - AllTagged AncestorTagged - WHERE Ancestor.from_book_id=AllTagged.object_id - AND AncestorTagged.content_type_id=%s - AND AncestorTagged.object_id=Ancestor.to_book_id - AND AncestorTagged.tag_id=AllTagged.tag_id - ) - GROUP BY catalogue_tag.id - ORDER BY sort_key''', rel_params + (categories, bct.pk)) diff --git a/apps/catalogue/import_utils.py b/apps/catalogue/import_utils.py deleted file mode 100644 index ca0c6efe5..000000000 --- a/apps/catalogue/import_utils.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from librarian import DocProvider - -class ORMDocProvider(DocProvider): - """Used for getting books' children.""" - - def __init__(self, book): - self.book = book - - def by_slug(self, slug): - if slug == self.book.slug: - return open(self.book.xml_file.path) - else: - return type(self.book).objects.get(slug=slug).xml_file diff --git a/apps/catalogue/locale/de/LC_MESSAGES/django.mo b/apps/catalogue/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index 1cd46613d..000000000 Binary files a/apps/catalogue/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/de/LC_MESSAGES/django.po b/apps/catalogue/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index 057dc348f..000000000 --- a/apps/catalogue/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,874 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: 2013-04-09 10:38+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "Bitte stellen Sie die XML bereit." - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "Zeige die FuÃnoten nicht" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "Zeige die Motive nicht " - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "Benutze voreingestellte Schrift nicht" - -#: forms.py:49 -msgid "Without cover" -msgstr "" - -#: forms.py:52 -msgid "Leading" -msgstr "Zeilenabstand" - -#: forms.py:53 -msgid "Normal leading" -msgstr "Normaler Zeilenabstand" - -#: forms.py:54 -msgid "One and a half leading" -msgstr "Zeilenabstand 1,5" - -#: forms.py:55 -msgid "Double leading" -msgstr "Doppelter Zeilenabstand" - -#: forms.py:57 -msgid "Font size" -msgstr "SchriftgröÃe" - -#: forms.py:58 -msgid "Default" -msgstr "Voreingestellt" - -#: forms.py:59 -msgid "Big" -msgstr "GroÃ" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "" - -#: views.py:585 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" -"Ein Fehler ist aufgetreten: %(exception)s\n" -"\n" -"%(tb)s" - -#: views.py:586 -msgid "Book imported successfully" -msgstr "Buch wurde erfolgreich importiert" - -#: views.py:588 -#, python-format -msgid "Error importing file: %r" -msgstr "Fehler beim Importieren der Datei: %r" - -#: views.py:620 -msgid "Download custom PDF" -msgstr "PDF-Datei herunterladen" - -#: views.py:621 templates/catalogue/book_short.html:92 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 -msgid "Download" -msgstr "Herunterladen" - -#: models/book.py:28 models/collection.py:11 -msgid "title" -msgstr "Titel" - -#: models/book.py:29 models/tag.py:34 -msgid "sort key" -msgstr "Sortierschlüssel" - -#: models/book.py:30 models/book.py:32 models/collection.py:12 -#: models/collection.py:15 models/tag.py:33 -msgid "slug" -msgstr "Slug" - -#: models/book.py:33 -msgid "language code" -msgstr "Sprachenkode" - -#: models/book.py:35 models/book.py:146 models/collection.py:13 -#: models/tag.py:37 models/tag.py:94 -msgid "description" -msgstr "Beschreibung" - -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 -#: models/tag.py:47 -msgid "creation date" -msgstr "Erstellungsdatum" - -#: models/book.py:38 -msgid "parent number" -msgstr "Elternnummer" - -#: models/book.py:39 models/bookmedia.py:30 -msgid "extra information" -msgstr "zusätzliche Informationen" - -#: models/book.py:44 -msgid "cover" -msgstr "Umschlag" - -#: models/book.py:66 models/collection.py:18 models/tag.py:22 -msgid "book" -msgstr "Buch" - -#: models/book.py:67 -msgid "books" -msgstr "Bücher" - -#: models/book.py:244 -#, python-format -msgid "Book \"%s\" does not exist." -msgstr "Buch mit dem Slug = \"%s\" ist nicht vorhanden." - -#: models/book.py:258 -#, python-format -msgid "Book %s already exists" -msgstr "Buch %s ist bereits vorhanden" - -#: models/book.py:599 models/bookmedia.py:23 -#, python-format -msgid "%s file" -msgstr "%s XML-Datei" - -#: models/bookmedia.py:26 -msgid "type" -msgstr "Typ" - -#: models/bookmedia.py:27 models/tag.py:32 -msgid "name" -msgstr "Name" - -#: models/bookmedia.py:28 -#, fuzzy -msgid "file" -msgstr "XML-Datei" - -#: models/bookmedia.py:39 models/bookmedia.py:40 -msgid "book media" -msgstr "book media" - -#: models/collection.py:16 -msgid "book slugs" -msgstr "Büchervorschau" - -#: models/collection.py:18 models/tag.py:18 -msgid "kind" -msgstr "Art" - -#: models/collection.py:22 -msgid "collection" -msgstr "Sammlung" - -#: models/collection.py:23 -msgid "collections" -msgstr "Sammlungen" - -#: models/fragment.py:32 -msgid "fragment" -msgstr "Auszug" - -#: models/fragment.py:33 -msgid "fragments" -msgstr "Auszüge" - -#: models/tag.py:16 -msgid "author" -msgstr "Autor" - -#: models/tag.py:17 -msgid "epoch" -msgstr "Epoche" - -#: models/tag.py:19 -msgid "genre" -msgstr "Genre" - -#: models/tag.py:20 -msgid "theme" -msgstr "Motiv" - -#: models/tag.py:21 -msgid "set" -msgstr "Buchregal" - -#: models/tag.py:23 -msgid "thing" -msgstr "" - -#: models/tag.py:35 -msgid "category" -msgstr "Kategorie" - -#: models/tag.py:40 -msgid "book count" -msgstr "Anzahl der Bücher" - -#: models/tag.py:41 -msgid "picture count" -msgstr "" - -#: models/tag.py:65 -msgid "tag" -msgstr "Tag" - -#: models/tag.py:66 -msgid "tags" -msgstr "Tags" - -#: models/tag.py:83 -msgid "" -"Book tags can't have attached links. Set them directly on the book instead " -"of it's tag." -msgstr "" - -#: templates/catalogue/audiobook_list.html:7 -#: templates/catalogue/audiobook_list.html:16 -msgid "Listing of all audiobooks" -msgstr "Auflistung aller Audiobücher" - -#: templates/catalogue/audiobook_list.html:12 -msgid "Latest MP3 audiobooks" -msgstr "Neueste MP3-Audiobücher" - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "Neueste Ogg-Vorbis-Audiobuch-Dateien" - -#: templates/catalogue/audiobook_list.html:19 -msgid "" -"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -"Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -"Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." -msgstr "" -"Audiothek der Schullektüren, die der Stiftung Nowoczesna Polska gehört. \n" -"Sie können sie kostenlos und ohne Beschränkungen benutzen. \n" -"Audiobücher nehmen bekannte Schauspieler und Schauspielerinnen, darunter " -"Danuta Stenka und Jan Peszek." - -#: templates/catalogue/book_detail.html:20 -#: templates/catalogue/tagged_object_list.html:74 -#: templates/catalogue/tagged_object_list.html:109 -msgid "See also" -msgstr "Siehe auch" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "Motiv" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "Im Werk" - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "Dieses Werk steht unter Lizenz" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " -"Commons Attribution-ShareAlike 3.0</a>\n" -" license." -msgstr "" -"Dieses Werk ist nicht urheberrechtlich geschützt, dass sie frei benutzt " -"werden kann, vervielfältigt und veröffentlicht. Wenn es irgendwelche " -"zusätzlichen ürheberrechtlich geschützten Materialien an diesem Werk gibt " -"(Anmerkungen, Motive), sind sie unter der Lizenz http://creativecommons.org/" -"licenses/by-sa/3.0/ verfügbar." - -#: templates/catalogue/book_info.html:20 -#, fuzzy -msgid "Resource prepared based on:" -msgstr "Der Text basiert auf:" - -#: templates/catalogue/book_info.html:28 -msgid "Edited and annotated by:" -msgstr "Redigiert und kommentiert von:" - -#: templates/catalogue/book_info.html:33 -msgid "Publication funded by:" -msgstr "" - -#: templates/catalogue/book_info.html:39 -msgid "Cover image by:" -msgstr "" - -#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 -msgid "Listing of all works" -msgstr "Auflistung von allen Werken" - -#: templates/catalogue/book_list.html:21 -msgid "Table of Content" -msgstr "Inhaltsverzeichnis" - -#: templates/catalogue/book_list.html:30 -msgid "â top â" -msgstr "â top â" - -#: templates/catalogue/book_short.html:59 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "Epoche" - -#: templates/catalogue/book_short.html:66 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "Sorte" - -#: templates/catalogue/book_short.html:73 -msgid "Genre" -msgstr "Gattung" - -#: templates/catalogue/book_short.html:88 -msgid "Read online" -msgstr "Online lesen" - -#: templates/catalogue/book_short.html:95 -#: templates/catalogue/book_text.html:40 -msgid "to print" -msgstr "Drucken" - -#: templates/catalogue/book_short.html:98 -msgid "for an e-book reader" -msgstr "Für ein E-Book-Reader" - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_text.html:46 -msgid "for Kindle" -msgstr "für Kindle" - -#: templates/catalogue/book_short.html:104 -#: templates/catalogue/book_text.html:49 -msgid "FictionBook" -msgstr "" - -#: templates/catalogue/book_short.html:107 -#: templates/catalogue/book_text.html:52 -msgid "for advanced usage" -msgstr "für fortgeschrittene Benutzung" - -#: templates/catalogue/book_short.html:113 -#: templates/catalogue/book_text.html:30 -msgid "Listen" -msgstr "Hören" - -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/catalogue/book_text.html:22 -msgid "Table of contents" -msgstr "Inhaltsverzeichnis" - -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 -msgid "Themes" -msgstr "Motive" - -#: templates/catalogue/book_text.html:24 -msgid "Edit. note" -msgstr "Editieren. Notiz" - -#: templates/catalogue/book_text.html:25 -msgid "Infobox" -msgstr "Infobox" - -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "Bücherseite" - -#: templates/catalogue/book_text.html:43 -msgid "for a reader" -msgstr "für ein E-Book-Reader" - -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 -msgid "Download all audiobooks for this book" -msgstr "Lade alle Audiobücher von diesem Buch herunter" - -#: templates/catalogue/book_wide.html:22 -#: templates/catalogue/tagged_object_list.html:60 -msgid "Motifs and themes" -msgstr "Motive und Themen" - -#: templates/catalogue/book_wide.html:44 -msgid "See" -msgstr "Siehe" - -#: templates/catalogue/book_wide.html:47 -msgid "Source" -msgstr "Quelle" - -#: templates/catalogue/book_wide.html:47 -msgid "of the book" -msgstr "vom Buch" - -#: templates/catalogue/book_wide.html:49 -msgid "Source XML file" -msgstr "XML-Ursprungsdatei" - -#: templates/catalogue/book_wide.html:51 -msgid "Book on" -msgstr "Buch über" - -#: templates/catalogue/book_wide.html:51 -msgid "Editor's Platform" -msgstr "Editor-Plattform" - -#: templates/catalogue/book_wide.html:54 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "Buchbeschreibung in Lektury.Gazeta.pl" - -#: templates/catalogue/book_wide.html:57 -msgid "Book description on Wikipedia" -msgstr "Buchbeschreibung in Wikipedia" - -#: templates/catalogue/book_wide.html:59 -msgid "Mix this book" -msgstr "Passe dieses Buch zusammen" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -msgid "Catalogue" -msgstr "Katalog" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "Laden Sie den Katalog als PDF-Datei" - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:17 -#: templates/catalogue/tagged_object_list.html:26 -#: templatetags/catalogue_tags.py:416 -msgid "Authors" -msgstr "Autoren" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:25 -#: templates/catalogue/tagged_object_list.html:34 -#: templatetags/catalogue_tags.py:418 -msgid "Kinds" -msgstr "Sorten" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:33 -#: templates/catalogue/tagged_object_list.html:42 -#: templatetags/catalogue_tags.py:417 -msgid "Genres" -msgstr "Gattungen" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:41 -#: templates/catalogue/tagged_object_list.html:50 -#: templatetags/catalogue_tags.py:419 -msgid "Epochs" -msgstr "Epochen" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "Themen und Motive" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 -#, fuzzy -msgid "Collections" -msgstr "Sammlungen" - -#: templates/catalogue/daisy_list.html:6 -#: templates/catalogue/daisy_list.html:12 -msgid "Listing of all DAISY files" -msgstr "Auflistung aller DAISY-Dateien" - -#: templates/catalogue/daisy_list.html:9 -msgid "Latest DAISY audiobooks" -msgstr "Neueste DAISY-Audiobücher" - -#: templates/catalogue/daisy_list.html:15 -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Å." -msgstr "" -"DAISY-System ist ein weltweit anerkanntes Buchformatr, \n" -"das an Bedürfnisse der Sehbehinderten, der Blinden und anderen Menschen mit " -"Leseschwierigkeiten. \n" -"Sie können es kostenlos und ohne Beschränkungen benutzen." - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "Die Kriterien sind mehrdeutig. Wählen Sie eine der folgenden Optionen:" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "Den ganzen Auszug zeigen" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "Den Auszug verstecken" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:4 -msgid "See full category" -msgstr "volle Kategorie sehen" - -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 -msgid "Please waitâ¦" -msgstr "" - -#: templates/catalogue/menu.html:24 -msgid "All books" -msgstr "Alle Bücher" - -#: templates/catalogue/menu.html:28 -msgid "Audiobooks" -msgstr "Audioücher" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "DAISY" - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "Das Werk steht unter Lizenz" - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "Basiert auf" - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "Details" - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "Autor" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "Andere Ressoursen" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "Quelle des Bildes" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "Bild auf dem Editor-Plattform" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "Siehe XML-Quelle" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "Motive des Werkes" - -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all pictures" -msgstr "Auflistung aller Bilder" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "Herunterladen als" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "Künstler" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "Regisseur" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "Audiobücher wurden als Teil der folgenden Projekte vorbereitet:" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "%(cs)s, gestiftet von %(fb)s" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "" -"Audiobücher wurden als Teil des Projektes %(cs)s vorbereitet, gestiftet von " -"%(fb)s." - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "Audiobücher wurden als Teil des Projektes %(cs)s vorbereitet." - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -#, fuzzy -msgid "Recent audiobooks" -msgstr "Neueste MP3-Audiobücher" - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -#, fuzzy -msgid "Recent publications" -msgstr "gehe zur Public Domain" - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" -" and <a href=\"%(d)s\">recent DAISY files</a>." -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:5 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "Suchen" - -#: templates/catalogue/search_multiple_hits.html:11 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "Haben Sie gemeint" - -#: templates/catalogue/search_multiple_hits.html:52 -msgid "Results by title" -msgstr "Ergebnisse nach Titeln" - -#: templates/catalogue/search_multiple_hits.html:67 -msgid "Results by authors" -msgstr "Ergebnisse nach Autoren" - -#: templates/catalogue/search_multiple_hits.html:80 -#, fuzzy -msgid "Results by translators" -msgstr "Ergebnisse nach Autoren" - -#: templates/catalogue/search_multiple_hits.html:93 -msgid "Results in text" -msgstr "Ergebnisse im Text" - -#: templates/catalogue/search_multiple_hits.html:110 -msgid "Other results" -msgstr "Andere Ergebnisse" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:151 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "Sorry! Suchkriterien haben keine Ressourcen erwiesen" - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"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 "" -"Suchmaschine fördert die folgenden Kriterien: Titel, Autor, Thema/Motiv, " -"Epoche, Art und Genre. \n" -"Die Volltextsuche ist noch nicht möglich." - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "Sorry! Suchfrage muss zumindest zwei Buchstaben enthalten" - -#: templates/catalogue/tag_list_split.html:5 -msgid "Literature" -msgstr "" - -#: templates/catalogue/tag_list_split.html:14 -msgid "Gallery" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:78 -msgid "in Culture.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:83 -#: templates/catalogue/tagged_object_list.html:113 -msgid "in Lektury.Gazeta.pl" -msgstr "in Lektury.Gazeta.pl" - -#: templates/catalogue/tagged_object_list.html:88 -#: templates/catalogue/tagged_object_list.html:118 -msgid "in Wikipedia" -msgstr "in Wikipedia" - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -#, fuzzy -msgid "Download a custom PDF" -msgstr "PDF-Datei herunterladen" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Leg das Buch aufs Regal ab!" - -#~ msgid "Create new shelf" -#~ msgstr "Neues Bücherregal erstellen" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Sie haben kein Bücherregal. Sie können eins unten erschaffen, wenn Sie " -#~ "wollen." - -#~ msgid "Put on the shelf!" -#~ msgstr "Aufs Bücherregal legen!" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Auschnitt aus dem Inhalt der Bücherregale" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Sie besitzen kein Bücherregal. Sie können eins unten erschaffen, wenn Sie " -#~ "wollen." - -#~ msgid "Save all shelves" -#~ msgstr "Alle Bücherregale speichern" - -#~ msgid "Your shelves with books" -#~ msgstr "Ihre Bücherregale" - -#~ msgid "remove" -#~ msgstr "Entfernen" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "" -#~ "Sie haben noch keine Bücherregale. Sie können eins unten erschaffen, wenn " -#~ "Sie wollen." - -#~ msgid "Create shelf" -#~ msgstr "Erschaffe ein Bücherregal" - -#~ msgid "Enter a valid JSON value. Error: %s" -#~ msgstr "Geben Sie eine gültige JSON-Wert ein. Fehler:% s" - -#~ msgid "A4" -#~ msgstr "A4 DIN" - -#~ msgid "A5" -#~ msgstr "A5 DIN" - -#~ msgid "Incorrect customization options for PDF" -#~ msgstr "Falsche Anpassungsoptionen für PDF-Datei" - -#~ msgid "Bad method" -#~ msgstr "Falsche Methode" - -#~ msgid "title, author, theme/topic, epoch, kind, genre" -#~ msgstr "Titel, Autor, Motiv/Thema, Epoche, Art, Gattung" - -#~ msgid "main page" -#~ msgstr "Startseite" - -#~ msgid "Show tag on main page" -#~ msgstr "Tag für die Startseite anzeigen" - -#~ msgid "year of death" -#~ msgstr "Todesjahr" - -#~ msgid "short HTML" -#~ msgstr "kurze HTML" - -#~ msgid "HTML file" -#~ msgstr "HTML-Datei" - -#~ msgid "PDF file" -#~ msgstr "PDF-Datei" - -#~ msgid "EPUB file" -#~ msgstr "EPUB-Datei" - -#~ msgid "ODT file" -#~ msgstr "ODT-Datei" - -#~ msgid "TXT file" -#~ msgstr "TXT-Datei" - -#~ msgid "MP3 file" -#~ msgstr "MP3-Datei" - -#~ msgid "OGG file" -#~ msgstr "OGG-Datei" - -#~ msgid "translator" -#~ msgstr "Ãbersetzer" - -#~ msgid "year of translator's death" -#~ msgstr "Todesjahr des Ãbersetzers" - -#~ msgid "book stub" -#~ msgstr "Buch Vorschau" - -#~ msgid "<p>To maintain your shelves you need to be logged in.</p>" -#~ msgstr "<p>Um die Bücherregale zu verwalten, musst du eingeloggt sein.</p>" - -#~ msgid "<p>Shelves were sucessfully saved.</p>" -#~ msgstr "<p>Bücherregale wurden erfolgreich gespeichert.</p>" - -#~ msgid "Book was successfully removed from the shelf" -#~ msgstr "Das Buch wurde erfolgreich entfernt" - -#~ msgid "<p>Shelf <strong>%s</strong> was successfully created</p>" -#~ msgstr "<p>Büchrregal <strong>%s</strong> wurde erfolgreich erstellt</p>" - -#~ msgid "<p>Shelf <strong>%s</strong> was successfully removed</p>" -#~ msgstr "<p>Bücherregal<strong>%s</strong> wurde erfolgreich entfernt</p>" - -#~ msgid "Today is %(month)s, %(day)s." -#~ msgstr "Heute ist %(month)s, %(day)s." - -#~ msgid "content type" -#~ msgstr "Inhaltstyp" - -#~ msgid "object id" -#~ msgstr "Objekt ID" diff --git a/apps/catalogue/locale/en/LC_MESSAGES/django.mo b/apps/catalogue/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index 89aa2c84b..000000000 Binary files a/apps/catalogue/locale/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/en/LC_MESSAGES/django.po b/apps/catalogue/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index f66d1efe0..000000000 --- a/apps/catalogue/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,868 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:38+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "Please supply an XML." - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "Don't show footnotes" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "Don't display themes" - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "Don't use our custom font" - -#: forms.py:49 -msgid "Without cover" -msgstr "" - -#: forms.py:52 -msgid "Leading" -msgstr "Leading" - -#: forms.py:53 -msgid "Normal leading" -msgstr "Normal leading" - -#: forms.py:54 -msgid "One and a half leading" -msgstr "One and a half leading" - -#: forms.py:55 -msgid "Double leading" -msgstr "Double leading" - -#: forms.py:57 -msgid "Font size" -msgstr "Font size" - -#: forms.py:58 -msgid "Default" -msgstr "Default" - -#: forms.py:59 -msgid "Big" -msgstr "Big" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "" - -#: views.py:585 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" - -#: views.py:586 -msgid "Book imported successfully" -msgstr "Book imported succesfully" - -#: views.py:588 -#, python-format -msgid "Error importing file: %r" -msgstr "An error occured while importing file: %r" - -#: views.py:620 -msgid "Download custom PDF" -msgstr "Download custom PDF" - -#: views.py:621 templates/catalogue/book_short.html:92 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 -msgid "Download" -msgstr "Download" - -#: models/book.py:28 models/collection.py:11 -msgid "title" -msgstr "Title" - -#: models/book.py:29 models/tag.py:34 -msgid "sort key" -msgstr "Sort key" - -#: models/book.py:30 models/book.py:32 models/collection.py:12 -#: models/collection.py:15 models/tag.py:33 -msgid "slug" -msgstr "Slug" - -#: models/book.py:33 -msgid "language code" -msgstr "language code" - -#: models/book.py:35 models/book.py:146 models/collection.py:13 -#: models/tag.py:37 models/tag.py:94 -msgid "description" -msgstr "Description" - -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 -#: models/tag.py:47 -msgid "creation date" -msgstr "creation date" - -#: models/book.py:38 -msgid "parent number" -msgstr "Parent number" - -#: models/book.py:39 models/bookmedia.py:30 -msgid "extra information" -msgstr "Additional information" - -#: models/book.py:44 -msgid "cover" -msgstr "cover" - -#: models/book.py:66 models/collection.py:18 models/tag.py:22 -msgid "book" -msgstr "book" - -#: models/book.py:67 -msgid "books" -msgstr "Books" - -#: models/book.py:244 -#, python-format -msgid "Book \"%s\" does not exist." -msgstr "Book with stub = \"%s\" does not exist." - -#: models/book.py:258 -#, python-format -msgid "Book %s already exists" -msgstr "Book %s already exists" - -#: models/book.py:599 models/bookmedia.py:23 -#, python-format -msgid "%s file" -msgstr "%s file" - -#: models/bookmedia.py:26 -msgid "type" -msgstr "type" - -#: models/bookmedia.py:27 models/tag.py:32 -msgid "name" -msgstr "name" - -#: models/bookmedia.py:28 -msgid "file" -msgstr "XML file" - -#: models/bookmedia.py:39 models/bookmedia.py:40 -msgid "book media" -msgstr "book media" - -#: models/collection.py:16 -msgid "book slugs" -msgstr "Book stubs" - -#: models/collection.py:18 models/tag.py:18 -msgid "kind" -msgstr "form" - -#: models/collection.py:22 -msgid "collection" -msgstr "collection" - -#: models/collection.py:23 -msgid "collections" -msgstr "collections" - -#: models/fragment.py:32 -msgid "fragment" -msgstr "Fragment" - -#: models/fragment.py:33 -msgid "fragments" -msgstr "Fragments" - -#: models/tag.py:16 -msgid "author" -msgstr "author" - -#: models/tag.py:17 -msgid "epoch" -msgstr "period" - -#: models/tag.py:19 -msgid "genre" -msgstr "genre" - -#: models/tag.py:20 -msgid "theme" -msgstr "motif" - -#: models/tag.py:21 -msgid "set" -msgstr "set" - -#: models/tag.py:23 -msgid "thing" -msgstr "" - -#: models/tag.py:35 -msgid "category" -msgstr "Category" - -#: models/tag.py:40 -msgid "book count" -msgstr "Number of books" - -#: models/tag.py:41 -msgid "picture count" -msgstr "" - -#: models/tag.py:65 -msgid "tag" -msgstr "tag" - -#: models/tag.py:66 -msgid "tags" -msgstr "tags" - -#: models/tag.py:83 -msgid "" -"Book tags can't have attached links. Set them directly on the book instead " -"of it's tag." -msgstr "" - -#: templates/catalogue/audiobook_list.html:7 -#: templates/catalogue/audiobook_list.html:16 -msgid "Listing of all audiobooks" -msgstr "List of the audiobooks" - -#: templates/catalogue/audiobook_list.html:12 -msgid "Latest MP3 audiobooks" -msgstr "Latest MP3 audiobooks" - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "Latest Ogg Vorbis audiobooks" - -#: templates/catalogue/audiobook_list.html:19 -msgid "" -"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -"Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -"Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." -msgstr "" -"Audio library of required readings of Modern Poland Foundation.\n" -"It is free of charge and you can use it without any limits. \n" -"Audiobooks are recorded with the participation of famous Polish actors like " -"Danuta Stenka or Jan Peszek." - -#: templates/catalogue/book_detail.html:20 -#: templates/catalogue/tagged_object_list.html:74 -#: templates/catalogue/tagged_object_list.html:109 -msgid "See also" -msgstr "See also" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "Theme" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "in work " - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "This work is licensed under:" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " -"Commons Attribution-ShareAlike 3.0</a>\n" -" license." -msgstr "" -"This work is not covered by copyright and is a part of the\n" -" public domain, which means that it can be used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " -"Commons Attribution-ShareAlike 3.0</a>\n" -" license." - -#: templates/catalogue/book_info.html:20 -#, fuzzy -msgid "Resource prepared based on:" -msgstr "Text based on:" - -#: templates/catalogue/book_info.html:28 -msgid "Edited and annotated by:" -msgstr "Edited and annotated by:" - -#: templates/catalogue/book_info.html:33 -msgid "Publication funded by:" -msgstr "" - -#: templates/catalogue/book_info.html:39 -msgid "Cover image by:" -msgstr "" - -#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 -msgid "Listing of all works" -msgstr "List of all works" - -#: templates/catalogue/book_list.html:21 -msgid "Table of Content" -msgstr "Table of Contents" - -#: templates/catalogue/book_list.html:30 -msgid "â top â" -msgstr "â top â" - -#: templates/catalogue/book_short.html:59 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "Period" - -#: templates/catalogue/book_short.html:66 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "Form" - -#: templates/catalogue/book_short.html:73 -msgid "Genre" -msgstr "Genre" - -#: templates/catalogue/book_short.html:88 -msgid "Read online" -msgstr "Read online" - -#: templates/catalogue/book_short.html:95 -#: templates/catalogue/book_text.html:40 -msgid "to print" -msgstr "to print" - -#: templates/catalogue/book_short.html:98 -msgid "for an e-book reader" -msgstr "for an e-book reader" - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_text.html:46 -msgid "for Kindle" -msgstr "for Kindle" - -#: templates/catalogue/book_short.html:104 -#: templates/catalogue/book_text.html:49 -msgid "FictionBook" -msgstr "" - -#: templates/catalogue/book_short.html:107 -#: templates/catalogue/book_text.html:52 -msgid "for advanced usage" -msgstr "" - -#: templates/catalogue/book_short.html:113 -#: templates/catalogue/book_text.html:30 -msgid "Listen" -msgstr "Listen" - -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/catalogue/book_text.html:22 -msgid "Table of contents" -msgstr "Table of contents" - -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 -msgid "Themes" -msgstr "Themes" - -#: templates/catalogue/book_text.html:24 -msgid "Edit. note" -msgstr "Edit. note" - -#: templates/catalogue/book_text.html:25 -msgid "Infobox" -msgstr "Infobox" - -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "Book's page" - -#: templates/catalogue/book_text.html:43 -msgid "for a reader" -msgstr "for a reader" - -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 -msgid "Download all audiobooks for this book" -msgstr "Download all audiobooks for this book" - -#: templates/catalogue/book_wide.html:22 -#: templates/catalogue/tagged_object_list.html:60 -msgid "Motifs and themes" -msgstr "Motifs and themes" - -#: templates/catalogue/book_wide.html:44 -msgid "See" -msgstr "See" - -#: templates/catalogue/book_wide.html:47 -msgid "Source" -msgstr "Source" - -#: templates/catalogue/book_wide.html:47 -msgid "of the book" -msgstr "of the book" - -#: templates/catalogue/book_wide.html:49 -msgid "Source XML file" -msgstr "Source XML file" - -#: templates/catalogue/book_wide.html:51 -msgid "Book on" -msgstr "Book on" - -#: templates/catalogue/book_wide.html:51 -msgid "Editor's Platform" -msgstr "Editor's Platform" - -#: templates/catalogue/book_wide.html:54 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "Book description on Lektury.Gazeta.pl" - -#: templates/catalogue/book_wide.html:57 -msgid "Book description on Wikipedia" -msgstr "Book description on Wikipedia" - -#: templates/catalogue/book_wide.html:59 -msgid "Mix this book" -msgstr "Mix this book" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -msgid "Catalogue" -msgstr "Catalogue" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "Download the catalogue in PDF format." - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:17 -#: templates/catalogue/tagged_object_list.html:26 -#: templatetags/catalogue_tags.py:416 -msgid "Authors" -msgstr "Authors" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:25 -#: templates/catalogue/tagged_object_list.html:34 -#: templatetags/catalogue_tags.py:418 -msgid "Kinds" -msgstr "Forms" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:33 -#: templates/catalogue/tagged_object_list.html:42 -#: templatetags/catalogue_tags.py:417 -msgid "Genres" -msgstr "Genres" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:41 -#: templates/catalogue/tagged_object_list.html:50 -#: templatetags/catalogue_tags.py:419 -msgid "Epochs" -msgstr "Periods" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "Motifs and themes" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 -#, fuzzy -msgid "Collections" -msgstr "collections" - -#: templates/catalogue/daisy_list.html:6 -#: templates/catalogue/daisy_list.html:12 -msgid "Listing of all DAISY files" -msgstr "List of all DAISY files" - -#: templates/catalogue/daisy_list.html:9 -msgid "Latest DAISY audiobooks" -msgstr "Latest DAISY audiobooks" - -#: templates/catalogue/daisy_list.html:15 -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Å." -msgstr "" -"The internationally recognized DAISY book format \n" -"provides the best possible standardized access to books for people who are \n" -"partially sighted, blind or are dyslexic. It is free of charge and you can " -"use it without any limits." - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "" -"The criteria are ambiguous. Please select one of the following options:" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "Expand fragment" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "Hide fragment" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:4 -msgid "See full category" -msgstr "See full category" - -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 -msgid "Please waitâ¦" -msgstr "" - -#: templates/catalogue/menu.html:24 -msgid "All books" -msgstr "All books" - -#: templates/catalogue/menu.html:28 -msgid "Audiobooks" -msgstr "Audiobooks" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "DAISY" - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "Work is licensed under " - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "Based on" - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "Details" - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "Author" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "Other sources" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "Source of the image" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "Image on the Editor's Platform" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "View XML source" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "Work's themes " - -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all pictures" -msgstr "List of all pictures" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "Download as" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "Reader" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "Director" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "Audiobooks were prepared as a part of the following projects:" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "%(cs)s, funded by %(fb)s" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "Audiobooks were prepared as a part of the %(cs)s project." - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -#, fuzzy -msgid "Recent audiobooks" -msgstr "Latest MP3 audiobooks" - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -#, fuzzy -msgid "Recent publications" -msgstr "Goes to public domain" - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" -" and <a href=\"%(d)s\">recent DAISY files</a>." -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:5 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "Search" - -#: templates/catalogue/search_multiple_hits.html:11 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "Did you mean" - -#: templates/catalogue/search_multiple_hits.html:52 -msgid "Results by title" -msgstr "Results by title" - -#: templates/catalogue/search_multiple_hits.html:67 -msgid "Results by authors" -msgstr "Results by authors" - -#: templates/catalogue/search_multiple_hits.html:80 -#, fuzzy -msgid "Results by translators" -msgstr "Translator" - -#: templates/catalogue/search_multiple_hits.html:93 -msgid "Results in text" -msgstr "Results in text" - -#: templates/catalogue/search_multiple_hits.html:110 -msgid "Other results" -msgstr "Other results" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:151 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "Sorry! Search cirteria did not match any resources." - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"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 "" -"Search engine supports following criteria: title, author, theme/topic, " -"period, form and genre.\n" -"\t\tAs for now we do not support full text search." - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "Sorry! Search query must have at least two characters." - -#: templates/catalogue/tag_list_split.html:5 -msgid "Literature" -msgstr "" - -#: templates/catalogue/tag_list_split.html:14 -msgid "Gallery" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:78 -msgid "in Culture.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:83 -#: templates/catalogue/tagged_object_list.html:113 -msgid "in Lektury.Gazeta.pl" -msgstr "in Lektury.Gazeta.pl" - -#: templates/catalogue/tagged_object_list.html:88 -#: templates/catalogue/tagged_object_list.html:118 -msgid "in Wikipedia" -msgstr "in Wikipedia" - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -msgid "Download a custom PDF" -msgstr "Download a custom PDF" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Put this book on the shelf!" - -#~ msgid "Create new shelf" -#~ msgstr "Create new shelf" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "You do not have any shelves. You can create one below, if you want to." - -#~ msgid "Put on the shelf!" -#~ msgstr "Put on the shelf!" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Shelves containing fragment" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "You do not own any shelves. You can create one below, if you want to." - -#~ msgid "Save all shelves" -#~ msgstr "Save all shelves" - -#~ msgid "Your shelves with books" -#~ msgstr "Your shelves with books" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "You do not own any shelves. You can create one below if you want to" - -#~ msgid "Create shelf" -#~ msgstr "Create shelf" - -#~ msgid "Enter a valid JSON value. Error: %s" -#~ msgstr "Enter a valid JSON value. Error: %s" - -#~ msgid "A4" -#~ msgstr "A4" - -#~ msgid "A5" -#~ msgstr "A5" - -#~ msgid "Incorrect customization options for PDF" -#~ msgstr "Incorrect customization options for PDF" - -#~ msgid "Bad method" -#~ msgstr "Bad method" - -#~ msgid "title, author, theme/topic, epoch, kind, genre" -#~ msgstr "title, author, motifs/theme, period, form, genre" - -#~ msgid "main page" -#~ msgstr "Main page" - -#~ msgid "Show tag on main page" -#~ msgstr "Show tag on main page" - -#~ msgid "year of death" -#~ msgstr "Year of death" - -#~ msgid "short HTML" -#~ msgstr "short HTML" - -#~ msgid "HTML file" -#~ msgstr "HTML file" - -#~ msgid "PDF file" -#~ msgstr "PDF file" - -#~ msgid "EPUB file" -#~ msgstr "EPUB file" - -#~ msgid "ODT file" -#~ msgstr "ODT file" - -#~ msgid "TXT file" -#~ msgstr "TXT file" - -#~ msgid "MP3 file" -#~ msgstr "MP3 file" - -#~ msgid "OGG file" -#~ msgstr "OGG file" - -#~ msgid "year of translator's death" -#~ msgstr "Year of translator's death" - -#~ msgid "book stub" -#~ msgstr "Book stub" - -#~ msgid "time" -#~ msgstr "time" - -#~ msgid "<p>To maintain your shelves you need to be logged in.</p>" -#~ msgstr "<p>To administer your shelves you need to be logged in.</p>" - -#~ msgid "<p>Shelves were sucessfully saved.</p>" -#~ msgstr "<p>Shelves were sucessfully saved.</p>" - -#~ msgid "Book was successfully removed from the shelf" -#~ msgstr "Book was successfully removed from the shelf" - -#~ msgid "<p>Shelf <strong>%s</strong> was successfully created</p>" -#~ msgstr "<p>Shelf <strong>%s</strong> was successfully created</p>" - -#~ msgid "<p>Shelf <strong>%s</strong> was successfully removed</p>" -#~ msgstr "<p>Shelf <strong>%s</strong> was successfully removed</p>" - -#~ msgid "Today is %(month)s, %(day)s." -#~ msgstr "Today is %(month)s, %(day)s." - -#~ msgid "content type" -#~ msgstr "content type" - -#~ msgid "object id" -#~ msgstr "object id" diff --git a/apps/catalogue/locale/es/LC_MESSAGES/django.mo b/apps/catalogue/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index cb82bd10f..000000000 Binary files a/apps/catalogue/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/es/LC_MESSAGES/django.po b/apps/catalogue/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index aa3cd85f4..000000000 --- a/apps/catalogue/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,885 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: 2013-04-09 10:39+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "Por favor, suministre un XML." - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "No mostres notas a pie de página" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "No mostres temas" - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "No uses nuestro tipo de la fuente de personalización " - -#: forms.py:49 -msgid "Without cover" -msgstr "" - -#: forms.py:52 -msgid "Leading" -msgstr "Interlineado" - -#: forms.py:53 -msgid "Normal leading" -msgstr "Interlineado normal" - -#: forms.py:54 -msgid "One and a half leading" -msgstr "Interlineado uno y medio" - -#: forms.py:55 -msgid "Double leading" -msgstr "Interlineado doble" - -#: forms.py:57 -msgid "Font size" -msgstr "Tamaño de la fuente" - -#: forms.py:58 -msgid "Default" -msgstr "Valor por defecto" - -#: forms.py:59 -msgid "Big" -msgstr "Grande" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "" - -# msgid "Today is %(month)s, %(day)s." -# msgstr "Hoy es el %(dÃa)s de %(mes)es" -#: views.py:585 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" -"Ha ocurrido un error: %(exception)s\n" -"\n" -"%(tb)s" - -#: views.py:586 -msgid "Book imported successfully" -msgstr "El libro ha sido importado con éxito" - -#: views.py:588 -#, python-format -msgid "Error importing file: %r" -msgstr "Ha ocurrido un error al cargar el archivo: %r" - -#: views.py:620 -msgid "Download custom PDF" -msgstr "Descarga PDF personalizado" - -#: views.py:621 templates/catalogue/book_short.html:92 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 -msgid "Download" -msgstr "Descargar" - -#: models/book.py:28 models/collection.py:11 -msgid "title" -msgstr "tÃtulo" - -#: models/book.py:29 models/tag.py:34 -msgid "sort key" -msgstr "clave de clasificación" - -#: models/book.py:30 models/book.py:32 models/collection.py:12 -#: models/collection.py:15 models/tag.py:33 -msgid "slug" -msgstr "slug" - -#: models/book.py:33 -msgid "language code" -msgstr "código de idioma" - -#: models/book.py:35 models/book.py:146 models/collection.py:13 -#: models/tag.py:37 models/tag.py:94 -msgid "description" -msgstr "descripción" - -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 -#: models/tag.py:47 -msgid "creation date" -msgstr "fecha de creación" - -#: models/book.py:38 -msgid "parent number" -msgstr "cifra matriz" - -#: models/book.py:39 models/bookmedia.py:30 -msgid "extra information" -msgstr "información adicional" - -#: models/book.py:44 -msgid "cover" -msgstr "tapa" - -#: models/book.py:66 models/collection.py:18 models/tag.py:22 -msgid "book" -msgstr "libro" - -#: models/book.py:67 -msgid "books" -msgstr "libros" - -#: models/book.py:244 -#, fuzzy, python-format -msgid "Book \"%s\" does not exist." -msgstr "Libro con slug = \"%s\" no existe." - -#: models/book.py:258 -#, python-format -msgid "Book %s already exists" -msgstr "Libro %s ya existe" - -#: models/book.py:599 models/bookmedia.py:23 -#, python-format -msgid "%s file" -msgstr "%s archivo" - -#: models/bookmedia.py:26 -msgid "type" -msgstr "tipo" - -#: models/bookmedia.py:27 models/tag.py:32 -msgid "name" -msgstr "nombre" - -#: models/bookmedia.py:28 -msgid "file" -msgstr "archivo" - -#: models/bookmedia.py:39 models/bookmedia.py:40 -msgid "book media" -msgstr "los medios de el libro" - -#: models/collection.py:16 -#, fuzzy -msgid "book slugs" -msgstr "vista previa de libros" - -#: models/collection.py:18 models/tag.py:18 -msgid "kind" -msgstr "tipo" - -#: models/collection.py:22 -msgid "collection" -msgstr "colección" - -#: models/collection.py:23 -msgid "collections" -msgstr "colecciones" - -#: models/fragment.py:32 -msgid "fragment" -msgstr "fragmento" - -#: models/fragment.py:33 -msgid "fragments" -msgstr "fragmentos" - -#: models/tag.py:16 -msgid "author" -msgstr "autor" - -#: models/tag.py:17 -msgid "epoch" -msgstr "época" - -#: models/tag.py:19 -msgid "genre" -msgstr "género" - -#: models/tag.py:20 -msgid "theme" -msgstr "tema" - -#: models/tag.py:21 -msgid "set" -msgstr "colección" - -#: models/tag.py:23 -msgid "thing" -msgstr "" - -#: models/tag.py:35 -msgid "category" -msgstr "categorÃa" - -#: models/tag.py:40 -msgid "book count" -msgstr "número de libros" - -#: models/tag.py:41 -msgid "picture count" -msgstr "" - -#: models/tag.py:65 -msgid "tag" -msgstr "tag" - -#: models/tag.py:66 -msgid "tags" -msgstr "tags" - -#: models/tag.py:83 -msgid "" -"Book tags can't have attached links. Set them directly on the book instead " -"of it's tag." -msgstr "" - -#: templates/catalogue/audiobook_list.html:7 -#: templates/catalogue/audiobook_list.html:16 -msgid "Listing of all audiobooks" -msgstr "Lista de todos los audiolibros " - -#: templates/catalogue/audiobook_list.html:12 -msgid "Latest MP3 audiobooks" -msgstr "Los últimos audiolibros en formato MP3 " - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "Los últimos audiolibros en formato Ogg Vorbis " - -#: templates/catalogue/audiobook_list.html:19 -msgid "" -"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -"Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -"Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." -msgstr "" -"Colección de grabaciones de libros de lectura obligatoria de la Fundación " -"Polonia Moderna.\n" -"Podéis disfrutar de ella gratuitamente y sin lÃmites.\n" -"Los audiolibros están grabados por actores conocidos, como Danuta Stenka y " -"Jan Peszek." - -#: templates/catalogue/book_detail.html:20 -#: templates/catalogue/tagged_object_list.html:74 -#: templates/catalogue/tagged_object_list.html:109 -msgid "See also" -msgstr "Véase también" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "Tema" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "en la obra" - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "Esta obra está autorizada bajo:" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " -"Commons Attribution-ShareAlike 3.0</a>\n" -" license." -msgstr "" -"Esta obra está libre de derechos de autor y es de dominio público, por ende " -"se puede usar,publicar y difundir libremente. Si esta obra tiene materiales " -"adicionales (como notas a pie de pá gina, temas lutrarios, etc.), que no " -"esten libres de derechos de autor, dichos materiales están publicados bajo " -"la \n" -"<a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative Commons " -"Attribution-ShareAlike 3.0</a>\n" -" licencia." - -#: templates/catalogue/book_info.html:20 -#, fuzzy -msgid "Resource prepared based on:" -msgstr "Texto preparado a base de:" - -#: templates/catalogue/book_info.html:28 -msgid "Edited and annotated by:" -msgstr "Editado y anotado por:" - -#: templates/catalogue/book_info.html:33 -msgid "Publication funded by:" -msgstr "" - -#: templates/catalogue/book_info.html:39 -msgid "Cover image by:" -msgstr "" - -#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 -msgid "Listing of all works" -msgstr "Lista de todas las obras" - -#: templates/catalogue/book_list.html:21 -msgid "Table of Content" -msgstr "Tabla de contenido" - -#: templates/catalogue/book_list.html:30 -msgid "â top â" -msgstr "âvolver arribaâ" - -#: templates/catalogue/book_short.html:59 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "Ãpoca" - -#: templates/catalogue/book_short.html:66 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "Género" - -#: templates/catalogue/book_short.html:73 -msgid "Genre" -msgstr "Subgénero" - -#: templates/catalogue/book_short.html:88 -msgid "Read online" -msgstr "Leer en lÃnea" - -#: templates/catalogue/book_short.html:95 -#: templates/catalogue/book_text.html:40 -msgid "to print" -msgstr "imprimir" - -#: templates/catalogue/book_short.html:98 -msgid "for an e-book reader" -msgstr "para el lector de audiolibro " - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_text.html:46 -msgid "for Kindle" -msgstr "para Kindle" - -#: templates/catalogue/book_short.html:104 -#: templates/catalogue/book_text.html:49 -msgid "FictionBook" -msgstr "" - -#: templates/catalogue/book_short.html:107 -#: templates/catalogue/book_text.html:52 -msgid "for advanced usage" -msgstr "para uso avanzado" - -#: templates/catalogue/book_short.html:113 -#: templates/catalogue/book_text.html:30 -msgid "Listen" -msgstr "Escuchar" - -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/catalogue/book_text.html:22 -msgid "Table of contents" -msgstr "Tabla de contenido" - -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 -msgid "Themes" -msgstr "Temas" - -# ! także: N.de la R. -#: templates/catalogue/book_text.html:24 -msgid "Edit. note" -msgstr "Nota de la redacción" - -#: templates/catalogue/book_text.html:25 -msgid "Infobox" -msgstr "Infobox" - -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "Página del libro" - -#: templates/catalogue/book_text.html:43 -msgid "for a reader" -msgstr "para el lector" - -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 -msgid "Download all audiobooks for this book" -msgstr "Descarga todos los audiolibros para este libro" - -#: templates/catalogue/book_wide.html:22 -#: templates/catalogue/tagged_object_list.html:60 -msgid "Motifs and themes" -msgstr "Motivos y temas" - -#: templates/catalogue/book_wide.html:44 -msgid "See" -msgstr "Vea" - -#: templates/catalogue/book_wide.html:47 -msgid "Source" -msgstr "Fuente" - -#: templates/catalogue/book_wide.html:47 -msgid "of the book" -msgstr "del libro" - -#: templates/catalogue/book_wide.html:49 -msgid "Source XML file" -msgstr "archivo fuente XML" - -#: templates/catalogue/book_wide.html:51 -msgid "Book on" -msgstr "El libro está en el estante" - -#: templates/catalogue/book_wide.html:51 -msgid "Editor's Platform" -msgstr "Plataforma de Editor" - -#: templates/catalogue/book_wide.html:54 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "Descripción del libro en Lektury.Gazeta.pl" - -#: templates/catalogue/book_wide.html:57 -msgid "Book description on Wikipedia" -msgstr "Descripción del libro en Wikipedia" - -# ! mezcla - jeÅli chodzi o pomieszanie -# ! relaciona lub combina - jeÅli chodzi o powiÄ zanie -# ! prepara - jeÅli chodzi o przygotowanie -# (zmieniÄ czasownik "mezcla" na któryÅ z powyższych jeÅli kontekst jest inny) -#: templates/catalogue/book_wide.html:59 -msgid "Mix this book" -msgstr "Mezcla este libro" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -msgid "Catalogue" -msgstr "Catálogo" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "Descarga el catálogo en formato PDF" - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:17 -#: templates/catalogue/tagged_object_list.html:26 -#: templatetags/catalogue_tags.py:416 -msgid "Authors" -msgstr "Autor" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:25 -#: templates/catalogue/tagged_object_list.html:34 -#: templatetags/catalogue_tags.py:418 -msgid "Kinds" -msgstr "Géneros" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:33 -#: templates/catalogue/tagged_object_list.html:42 -#: templatetags/catalogue_tags.py:417 -msgid "Genres" -msgstr "Subgénero" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:41 -#: templates/catalogue/tagged_object_list.html:50 -#: templatetags/catalogue_tags.py:419 -msgid "Epochs" -msgstr "Ãpocas" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "Temas" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 -#, fuzzy -msgid "Collections" -msgstr "colecciones" - -#: templates/catalogue/daisy_list.html:6 -#: templates/catalogue/daisy_list.html:12 -msgid "Listing of all DAISY files" -msgstr "Lista de todos los archivos DAISY" - -#: templates/catalogue/daisy_list.html:9 -msgid "Latest DAISY audiobooks" -msgstr "Los últimos audiolibros en formato DAISY" - -#: templates/catalogue/daisy_list.html:15 -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Å." -msgstr "" -"El sistema DAISY es un formato, reconocido en todo el mundo, que facilita el " -"acceso a los libros \n" -"y está adaptado a las necesidades de personas con baja visión, invidentes o " -"las que \n" -"tienen problemas de lectura. Los podéis disfrutar de manera gratuita y sin " -"lÃmites." - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "" -"Los criterios son ambiguos. Por favor, seleccione una de las siguientes " -"opciones:" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "Extender fragmento" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "Ocultar fragmento" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:4 -msgid "See full category" -msgstr "Ver la categorÃa completa" - -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 -msgid "Please waitâ¦" -msgstr "" - -#: templates/catalogue/menu.html:24 -msgid "All books" -msgstr "Todos los libros" - -#: templates/catalogue/menu.html:28 -msgid "Audiobooks" -msgstr "Audiolibros" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "DAISY" - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "Esta obra está autorizada bajo" - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "Basado en " - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "Detalles" - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "Autor" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "Otros recursos" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "Fuente de la imagen" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "Imagen en la Plataforma de Editor" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "Ver código fuente XML" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "Temas de las obras" - -# ! los dibujos - obrazki, rysunki -# ! las fotos - jeÅli chodzi o zdjÄcia -# ! los cuadros - jeÅli chodzi o obrazy -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all pictures" -msgstr "Lista de todos los dibujos" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "Descargar como" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "Artista" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "Director" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "Audiolibros forman parte de los siguientes proyectos:" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "%(cs)s,financiado por %(fb)s" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "Audiolibros forman parte del proyecto %(cs)s financiado por %(fb)s." - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "Audiolibros forman parte del proyecto %(cs)s." - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -#, fuzzy -msgid "Recent audiobooks" -msgstr "Los últimos audiolibros en formato MP3 " - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -#, fuzzy -msgid "Recent publications" -msgstr "pasa al dominio público" - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" -" and <a href=\"%(d)s\">recent DAISY files</a>." -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:5 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "Buscar" - -#: templates/catalogue/search_multiple_hits.html:11 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "¿Te has referido a...?" - -#: templates/catalogue/search_multiple_hits.html:52 -msgid "Results by title" -msgstr "Resultados por tÃtulo" - -#: templates/catalogue/search_multiple_hits.html:67 -msgid "Results by authors" -msgstr "Resultados por autor" - -#: templates/catalogue/search_multiple_hits.html:80 -#, fuzzy -msgid "Results by translators" -msgstr "Resultados por autor" - -#: templates/catalogue/search_multiple_hits.html:93 -msgid "Results in text" -msgstr "Resultados en el texto" - -#: templates/catalogue/search_multiple_hits.html:110 -msgid "Other results" -msgstr "Otros resultados" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:151 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "" -"¡Lo siento! El criterio de la búsqueda no corresponde a ningún recurso." - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"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 "" -"El buscador admite los siguientes criterios: tÃtulo, autor, tema, época, " -"género y subgénero.\n" -"\t\tHasta ahora no se admite la búsqueda de texto completo. " - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "" -"¡Lo siento! La consulta de búsqueda tiene que consistir de dos caracteres " -"como mÃnimo." - -#: templates/catalogue/tag_list_split.html:5 -msgid "Literature" -msgstr "" - -#: templates/catalogue/tag_list_split.html:14 -msgid "Gallery" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:78 -msgid "in Culture.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:83 -#: templates/catalogue/tagged_object_list.html:113 -msgid "in Lektury.Gazeta.pl" -msgstr "en Lektury.Gazeta.pl" - -#: templates/catalogue/tagged_object_list.html:88 -#: templates/catalogue/tagged_object_list.html:118 -msgid "in Wikipedia" -msgstr "en Wikipedia" - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -msgid "Download a custom PDF" -msgstr "Descarga un PDF personalisado" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "¡Ponlo en el estante!" - -#~ msgid "Create new shelf" -#~ msgstr "Crear estante nuevo" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "No tienes estante. Si quieres, puedes hacer uno aquÃ." - -#~ msgid "Put on the shelf!" -#~ msgstr "¡Ponlo en el estante! " - -#~ msgid "Shelves containing fragment" -#~ msgstr "Los estantes que contienen este fragmento" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "No tienes estante. Si quieres, puedes hacer uno aquÃ." - -#~ msgid "Save all shelves" -#~ msgstr "Guarda todos los estantes" - -#~ msgid "Your shelves with books" -#~ msgstr "Tu estanetrÃa con libros" - -#~ msgid "remove" -#~ msgstr "borre" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "No tienes estante. Si quieres, puedes hacer uno aquÃ." - -#~ msgid "Create shelf" -#~ msgstr "Crear estante" - -#~ msgid "Enter a valid JSON value. Error: %s" -#~ msgstr "Introducir un valor válido de JSON. Error: %s" - -#~ msgid "A4" -#~ msgstr "A4" - -#~ msgid "A5" -#~ msgstr "A5" - -#~ msgid "Incorrect customization options for PDF" -#~ msgstr "Opciones de personalización para PDF incorrectas" - -#, fuzzy -#~ msgid "Bad method" -#~ msgstr "Método incorrecto" - -#~ msgid "title, author, theme/topic, epoch, kind, genre" -#~ msgstr "tÃtulo, autor, tema/motivo, época, género, subgénero" - -#~ msgid "main page" -#~ msgstr "página principal" - -#~ msgid "Show tag on main page" -#~ msgstr "Mostrar tag en la página principal" - -#~ msgid "year of death" -#~ msgstr "año de muerte" - -#~ msgid "short HTML" -#~ msgstr "HTML corto" - -#~ msgid "HTML file" -#~ msgstr "archivo HTML" - -#~ msgid "PDF file" -#~ msgstr "archivo PDF" - -#~ msgid "EPUB file" -#~ msgstr "archivo EPUB" - -#~ msgid "ODT file" -#~ msgstr "archivo ODT" - -#~ msgid "TXT file" -#~ msgstr "archivo TXT" - -#~ msgid "MP3 file" -#~ msgstr "archivo MP3" - -#~ msgid "OGG file" -#~ msgstr "archivo OGG" - -#~ msgid "translator" -#~ msgstr "traductor" - -#~ msgid "year of translator's death" -#~ msgstr "año de la muerte del traductor" - -#~ msgid "book stub" -#~ msgstr "vista previa del libro" - -#, fuzzy -#~ msgid "<p>To maintain your shelves you need to be logged in.</p>" -#~ msgstr "<p>Para organizar tus estantes tienes que ingresar.</p> " - -#~ msgid "<p>Shelves were sucessfully saved.</p>" -#~ msgstr "<p>Estantes han sido guardados. </p>" - -#~ msgid "Book was successfully removed from the shelf" -#~ msgstr "El libro ha sido eliminado del estante." - -#~ msgid "<p>Shelf <strong>%s</strong> was successfully created</p>" -#~ msgstr "<p>Estante <strong>%s</strong> ha sido creado</p>" - -#~ msgid "<p>Shelf <strong>%s</strong> was successfully removed</p>" -#~ msgstr "<p>Estante <strong>%s</strong> ha sido eliminado</p>" - -#~ msgid "content type" -#~ msgstr "tipo de contenido" - -#~ msgid "object id" -#~ msgstr "id de objeto" diff --git a/apps/catalogue/locale/fr/LC_MESSAGES/django.mo b/apps/catalogue/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index 3b0d2d304..000000000 Binary files a/apps/catalogue/locale/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/fr/LC_MESSAGES/django.po b/apps/catalogue/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index 7274d84eb..000000000 --- a/apps/catalogue/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,868 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: 2013-04-09 10:38+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "Fournissez un XML, s'il vous plaît." - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "Ne montre pas d'annotations" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "N'affiche pas de thèmes" - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "N'utilise pas notre caractère usuel" - -#: forms.py:49 -msgid "Without cover" -msgstr "" - -#: forms.py:52 -msgid "Leading" -msgstr "Interligne" - -#: forms.py:53 -msgid "Normal leading" -msgstr "Interligne normal" - -#: forms.py:54 -msgid "One and a half leading" -msgstr "Interligne et demi" - -#: forms.py:55 -msgid "Double leading" -msgstr "Interligne double" - -#: forms.py:57 -msgid "Font size" -msgstr "Taille des caractères" - -#: forms.py:58 -msgid "Default" -msgstr "Implicite" - -#: forms.py:59 -msgid "Big" -msgstr "Grand(e)(s)" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "" - -# msgid "Today is %(month)s, %(day)s." -# msgstr "Aujourd'hui nous sommes le" -#: views.py:585 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" -"Un erreur a eu lieu : %(exception)s\n" -"\n" -"%(tb)s" - -#: views.py:586 -msgid "Book imported successfully" -msgstr "Livre importé avec succès" - -#: views.py:588 -#, python-format -msgid "Error importing file: %r" -msgstr "Erreur pendant l'importation du fichier: %r" - -#: views.py:620 -msgid "Download custom PDF" -msgstr "Téléchargez un PDF personnalisé" - -#: views.py:621 templates/catalogue/book_short.html:92 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 -msgid "Download" -msgstr "Téléchargez" - -#: models/book.py:28 models/collection.py:11 -msgid "title" -msgstr "titre" - -#: models/book.py:29 models/tag.py:34 -msgid "sort key" -msgstr "critère de tri" - -#: models/book.py:30 models/book.py:32 models/collection.py:12 -#: models/collection.py:15 models/tag.py:33 -msgid "slug" -msgstr "ébauche" - -#: models/book.py:33 -msgid "language code" -msgstr "code de langue" - -#: models/book.py:35 models/book.py:146 models/collection.py:13 -#: models/tag.py:37 models/tag.py:94 -msgid "description" -msgstr "description" - -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 -#: models/tag.py:47 -msgid "creation date" -msgstr "date de création" - -#: models/book.py:38 -msgid "parent number" -msgstr "nombre de parent" - -#: models/book.py:39 models/bookmedia.py:30 -msgid "extra information" -msgstr "information supplémentaire" - -#: models/book.py:44 -msgid "cover" -msgstr "couverture" - -#: models/book.py:66 models/collection.py:18 models/tag.py:22 -msgid "book" -msgstr "livre" - -#: models/book.py:67 -msgid "books" -msgstr "livres" - -#: models/book.py:244 -#, python-format -msgid "Book \"%s\" does not exist." -msgstr "Livre \"%s\" n'existe pas." - -#: models/book.py:258 -#, python-format -msgid "Book %s already exists" -msgstr "Livre %s existe déjà " - -#: models/book.py:599 models/bookmedia.py:23 -#, python-format -msgid "%s file" -msgstr "fichier %s" - -#: models/bookmedia.py:26 -msgid "type" -msgstr "type" - -#: models/bookmedia.py:27 models/tag.py:32 -msgid "name" -msgstr "nom" - -#: models/bookmedia.py:28 -msgid "file" -msgstr "fichier" - -#: models/bookmedia.py:39 models/bookmedia.py:40 -msgid "book media" -msgstr "book media" - -#: models/collection.py:16 -#, fuzzy -msgid "book slugs" -msgstr "ébauches des livres" - -#: models/collection.py:18 models/tag.py:18 -msgid "kind" -msgstr "type" - -#: models/collection.py:22 -msgid "collection" -msgstr "collection" - -#: models/collection.py:23 -msgid "collections" -msgstr "collections" - -#: models/fragment.py:32 -msgid "fragment" -msgstr "extrait" - -#: models/fragment.py:33 -msgid "fragments" -msgstr "extraits" - -#: models/tag.py:16 -msgid "author" -msgstr "auteur" - -#: models/tag.py:17 -msgid "epoch" -msgstr "époque" - -#: models/tag.py:19 -msgid "genre" -msgstr "genre" - -#: models/tag.py:20 -msgid "theme" -msgstr "thème" - -#: models/tag.py:21 -msgid "set" -msgstr "série" - -#: models/tag.py:23 -msgid "thing" -msgstr "" - -#: models/tag.py:35 -msgid "category" -msgstr "catégorie" - -#: models/tag.py:40 -msgid "book count" -msgstr "nombre des livres" - -#: models/tag.py:41 -msgid "picture count" -msgstr "" - -#: models/tag.py:65 -msgid "tag" -msgstr "tag" - -#: models/tag.py:66 -msgid "tags" -msgstr "tags" - -#: models/tag.py:83 -msgid "" -"Book tags can't have attached links. Set them directly on the book instead " -"of it's tag." -msgstr "" - -#: templates/catalogue/audiobook_list.html:7 -#: templates/catalogue/audiobook_list.html:16 -msgid "Listing of all audiobooks" -msgstr "Liste des tous les livres audio" - -#: templates/catalogue/audiobook_list.html:12 -msgid "Latest MP3 audiobooks" -msgstr "Les plus nouveaux livres audio MP3" - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "Les plus nouveaux livres audio Ogg Vorbis" - -#: templates/catalogue/audiobook_list.html:19 -msgid "" -"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -"Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -"Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." -msgstr "" -"Audiothèque des lectures scolaires de la Fondation Pologne Moderne.\n" -"Vous pouvez l'utiliser gratuitement et sans limites. \n" -"Les livres audio sont lus par les acteurs connus, comme par exemple: Danuta " -"Stenka et Jan Peszek." - -#: templates/catalogue/book_detail.html:20 -#: templates/catalogue/tagged_object_list.html:74 -#: templates/catalogue/tagged_object_list.html:109 -msgid "See also" -msgstr "Voir aussi" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "Thème" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "dans l'oeuvre" - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "Cet oeuvre est publié sous la licence" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " -"Commons Attribution-ShareAlike 3.0</a>\n" -" license." -msgstr "" -"Cet ouvrage n'est pas protégé par le droit d'auteur et appartiennent au\n" -"domaine public; c'est-à -dire qu'il peut être publié et divulgué librement.\n" -"Si l'ouvrage est accompagné des matériaux supplémentaires (annotations, " -"motifs littéraires, etc.),\n" -"ces derniers sont donc distribués sous la licence:\n" -"<a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Paternité " -"- Partage à l'Identique 3.0 non transposé</a>." - -#: templates/catalogue/book_info.html:20 -#, fuzzy -msgid "Resource prepared based on:" -msgstr "Préparation du texte basée sur:" - -#: templates/catalogue/book_info.html:28 -msgid "Edited and annotated by:" -msgstr "Les éditions et annotations par:" - -#: templates/catalogue/book_info.html:33 -msgid "Publication funded by:" -msgstr "" - -#: templates/catalogue/book_info.html:39 -msgid "Cover image by:" -msgstr "" - -#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 -msgid "Listing of all works" -msgstr "Liste des tous les ouvrages" - -#: templates/catalogue/book_list.html:21 -msgid "Table of Content" -msgstr "Table des matières" - -#: templates/catalogue/book_list.html:30 -msgid "â top â" -msgstr "â top â" - -#: templates/catalogue/book_short.html:59 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "Ãpoque" - -#: templates/catalogue/book_short.html:66 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "Type" - -#: templates/catalogue/book_short.html:73 -msgid "Genre" -msgstr "Genre" - -#: templates/catalogue/book_short.html:88 -msgid "Read online" -msgstr "Lire en ligne" - -#: templates/catalogue/book_short.html:95 -#: templates/catalogue/book_text.html:40 -msgid "to print" -msgstr "pour imprimer" - -#: templates/catalogue/book_short.html:98 -msgid "for an e-book reader" -msgstr "pour un lecteur des livres numeriques" - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_text.html:46 -msgid "for Kindle" -msgstr "pour Kindle" - -#: templates/catalogue/book_short.html:104 -#: templates/catalogue/book_text.html:49 -msgid "FictionBook" -msgstr "" - -#: templates/catalogue/book_short.html:107 -#: templates/catalogue/book_text.html:52 -msgid "for advanced usage" -msgstr "pour lâutilisation avancée" - -#: templates/catalogue/book_short.html:113 -#: templates/catalogue/book_text.html:30 -msgid "Listen" -msgstr "Ãcoutez" - -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 -msgid "Wolne Lektury" -msgstr "Wolne Lektury (Lectures Libres)" - -#: templates/catalogue/book_text.html:22 -msgid "Table of contents" -msgstr "Table des matières" - -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 -msgid "Themes" -msgstr "Thèmes" - -#: templates/catalogue/book_text.html:24 -msgid "Edit. note" -msgstr "Note d'éditeur" - -#: templates/catalogue/book_text.html:25 -msgid "Infobox" -msgstr "Infobox" - -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "Site du livre" - -#: templates/catalogue/book_text.html:43 -msgid "for a reader" -msgstr "pour un lecteur" - -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 -msgid "Download all audiobooks for this book" -msgstr "Téléchargez tous les livres audio pour ce livre" - -#: templates/catalogue/book_wide.html:22 -#: templates/catalogue/tagged_object_list.html:60 -msgid "Motifs and themes" -msgstr "Motifs et thèmes" - -#: templates/catalogue/book_wide.html:44 -msgid "See" -msgstr "Voir" - -#: templates/catalogue/book_wide.html:47 -msgid "Source" -msgstr "Source" - -#: templates/catalogue/book_wide.html:47 -msgid "of the book" -msgstr "du livre" - -#: templates/catalogue/book_wide.html:49 -msgid "Source XML file" -msgstr "Fichier source XML" - -#: templates/catalogue/book_wide.html:51 -msgid "Book on" -msgstr "Livre sur" - -#: templates/catalogue/book_wide.html:51 -msgid "Editor's Platform" -msgstr "Plateforme d'éditeur" - -#: templates/catalogue/book_wide.html:54 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "Description du livre sur Lektury.Gazeta.pl" - -#: templates/catalogue/book_wide.html:57 -msgid "Book description on Wikipedia" -msgstr "Description du livre sur Wikipédia" - -#: templates/catalogue/book_wide.html:59 -msgid "Mix this book" -msgstr "Mixez ce livre" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -msgid "Catalogue" -msgstr "Catalogue" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "Téléchargez le catalogue au format PDF" - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:17 -#: templates/catalogue/tagged_object_list.html:26 -#: templatetags/catalogue_tags.py:416 -msgid "Authors" -msgstr "Auteurs" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:25 -#: templates/catalogue/tagged_object_list.html:34 -#: templatetags/catalogue_tags.py:418 -msgid "Kinds" -msgstr "Types" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:33 -#: templates/catalogue/tagged_object_list.html:42 -#: templatetags/catalogue_tags.py:417 -msgid "Genres" -msgstr "Genres" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:41 -#: templates/catalogue/tagged_object_list.html:50 -#: templatetags/catalogue_tags.py:419 -msgid "Epochs" -msgstr "Ãpoques" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "Thèmes et sujets" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 -#, fuzzy -msgid "Collections" -msgstr "collections" - -#: templates/catalogue/daisy_list.html:6 -#: templates/catalogue/daisy_list.html:12 -msgid "Listing of all DAISY files" -msgstr "Liste des tous les livres audio DAISY" - -#: templates/catalogue/daisy_list.html:9 -msgid "Latest DAISY audiobooks" -msgstr "Le plus nouveaux livres audio DAISY" - -#: templates/catalogue/daisy_list.html:15 -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Å." -msgstr "" -"DAISY est un système pour rendre les livres accessibles, apprécié autour du " -"monde, \n" -"approprié à des non voyants et à des malvoyants et à des personnes \n" -"qui ont des difficultés à lire. Vous pouvez l'utiliser gratuitement et sans " -"limites." - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "Les critères sont ambigus. Choisissez parmi les options ci-dessous:" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "Montrer l'extrait" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "Cacher l'extrait" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:4 -msgid "See full category" -msgstr "Voir catégorie entière" - -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 -msgid "Please waitâ¦" -msgstr "" - -#: templates/catalogue/menu.html:24 -msgid "All books" -msgstr "Tous les livres" - -#: templates/catalogue/menu.html:28 -msgid "Audiobooks" -msgstr "Livres audio" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "DAISY" - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "Ouvrage sous la licence" - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "Basé sur" - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "Détails" - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "Auteur" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "Autres ressources" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "Source d'image" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "L'image sur la Plateforme d'éditeur" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "Voir source XML" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "Les thèmes de l'oeuvre" - -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all pictures" -msgstr "Liste de tous les images" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "Téléchargez comme" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "Artiste" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "Metteur en scène" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "Livres audios ont été préparés comme une part des projets:" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "%(cs)s, sponsorisé par %(fb)s" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "" -"Livres audios ont été préparés comme une part du projet %(cs)s sponsorisé " -"par %(fb)s." - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "Livres audios ont été préparés comme une part du projet %(cs)s." - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -#, fuzzy -msgid "Recent audiobooks" -msgstr "Les plus nouveaux livres audio MP3" - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -#, fuzzy -msgid "Recent publications" -msgstr "entre dans le domaine public" - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" -" and <a href=\"%(d)s\">recent DAISY files</a>." -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:5 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "Rechercher" - -#: templates/catalogue/search_multiple_hits.html:11 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "Est-ce que vous cherchez" - -#: templates/catalogue/search_multiple_hits.html:52 -msgid "Results by title" -msgstr "Résultats par le titre" - -#: templates/catalogue/search_multiple_hits.html:67 -msgid "Results by authors" -msgstr "Résultats par l'auteur" - -#: templates/catalogue/search_multiple_hits.html:80 -#, fuzzy -msgid "Results by translators" -msgstr "traducteur" - -#: templates/catalogue/search_multiple_hits.html:93 -msgid "Results in text" -msgstr "Résultats dans le texte" - -#: templates/catalogue/search_multiple_hits.html:110 -msgid "Other results" -msgstr "Autres résultats" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:151 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "" -"Nous sommes désolés, aucune ressource ne répond aux critères de recherche." - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"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 "" -"Le moteur de recherche permet de chercher selon le titre, auteur, sujet/" -"thème, époque, type et genre.\n" -"\t\tPour le moment nous n'assurons pas la recherche en plein texte." - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "" -"Nous sommes désolés, pour effectuer la recherche il faut entrer au moins " -"deux caractères." - -#: templates/catalogue/tag_list_split.html:5 -msgid "Literature" -msgstr "" - -#: templates/catalogue/tag_list_split.html:14 -msgid "Gallery" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:78 -msgid "in Culture.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:83 -#: templates/catalogue/tagged_object_list.html:113 -msgid "in Lektury.Gazeta.pl" -msgstr "sur Lektury.Gazeta.pl" - -#: templates/catalogue/tagged_object_list.html:88 -#: templates/catalogue/tagged_object_list.html:118 -msgid "in Wikipedia" -msgstr "sur Wikipédia" - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -msgid "Download a custom PDF" -msgstr "Téléchargez un PDF pérsonnalisé" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Mettre un livre sur l'étagère!" - -#~ msgid "Create new shelf" -#~ msgstr "Créez une nouvelle étagère" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une au-dessous, si " -#~ "vous voulez." - -#~ msgid "Put on the shelf!" -#~ msgstr "Mettre sur l'étagère!" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Ãtagères qui contiennent l'extrait" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une au-dessous, si " -#~ "vous voulez." - -#~ msgid "Save all shelves" -#~ msgstr "Enregistrer toutes les étagères" - -#~ msgid "Your shelves with books" -#~ msgstr "Vos étagères avec les livres" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "" -#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une en-dessus, si " -#~ "vous voulez." - -#~ msgid "Create shelf" -#~ msgstr "Créez une étagère" - -#~ msgid "Enter a valid JSON value. Error: %s" -#~ msgstr "Entrer une valeur JSON valide. Erreur: %s." - -#~ msgid "A4" -#~ msgstr "A4" - -#~ msgid "A5" -#~ msgstr "A5" - -#~ msgid "Incorrect customization options for PDF" -#~ msgstr "Options de personnalisation incorrectes pour PDF" - -#~ msgid "Bad method" -#~ msgstr "Mauvaise méthode" - -#~ msgid "title, author, theme/topic, epoch, kind, genre" -#~ msgstr "titre, auteur, thème/sujet, époque, type, genre" - -#~ msgid "main page" -#~ msgstr "page d'accueil" - -#~ msgid "Show tag on main page" -#~ msgstr "Montrer le tag au page d'accueil" - -#~ msgid "year of death" -#~ msgstr "année de la mort" - -#~ msgid "short HTML" -#~ msgstr "HTML court" - -#~ msgid "HTML file" -#~ msgstr "fichier HTML" - -#~ msgid "PDF file" -#~ msgstr "fichier PDF" - -#~ msgid "ODT file" -#~ msgstr "fichier ODT" - -#~ msgid "TXT file" -#~ msgstr "fichier TXT" - -#~ msgid "MP3 file" -#~ msgstr "fichier MP3" - -#~ msgid "OGG file" -#~ msgstr "fichier OGG" - -#~ msgid "year of translator's death" -#~ msgstr "année de la mort du traducteur" - -#~ msgid "book stub" -#~ msgstr "ébauche du livre" - -#~ msgid "<p>To maintain your shelves you need to be logged in.</p>" -#~ msgstr "<p>Connectez-vous pour gérer vos étagères.</p>" - -#~ msgid "<p>Shelves were sucessfully saved.</p>" -#~ msgstr "<p>Les étagères <strong>%s</strong>ont été enregistrées</p>" - -#~ msgid "Book was successfully removed from the shelf" -#~ msgstr "Le livre a été supprimé de l'étagère" - -#~ msgid "<p>Shelf <strong>%s</strong> was successfully created</p>" -#~ msgstr "<p>L'étagère <strong>%s</strong>a été créée</p>" - -#~ msgid "<p>Shelf <strong>%s</strong> was successfully removed</p>" -#~ msgstr "<p>L'étagère <strong>%s</strong>a été supprimée</p>" - -#~ msgid "content type" -#~ msgstr "type du contenu" - -#~ msgid "object id" -#~ msgstr "ID de l'objet" diff --git a/apps/catalogue/locale/it/LC_MESSAGES/django.mo b/apps/catalogue/locale/it/LC_MESSAGES/django.mo deleted file mode 100644 index a164e91b0..000000000 Binary files a/apps/catalogue/locale/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/it/LC_MESSAGES/django.po b/apps/catalogue/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index c5eabd259..000000000 --- a/apps/catalogue/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,793 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: 2013-04-09 10:39+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "Si prega di fornire un XML." - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "Non mostrare le note" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "Non visualizzare i temi" - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "Non utilizzare il nostro font personalizzato" - -#: forms.py:49 -msgid "Without cover" -msgstr "" - -#: forms.py:52 -msgid "Leading" -msgstr "Interlinea" - -#: forms.py:53 -msgid "Normal leading" -msgstr "Interlinea normale" - -#: forms.py:54 -msgid "One and a half leading" -msgstr " Interlinea 1,5" - -#: forms.py:55 -msgid "Double leading" -msgstr "Interlinea doppia" - -#: forms.py:57 -msgid "Font size" -msgstr "Grandezza del carattere" - -#: forms.py:58 -msgid "Default" -msgstr "Predefinito" - -#: forms.py:59 -msgid "Big" -msgstr "Grande" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "" - -#: views.py:585 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" -"Si e verificato un errore: %(exception)s \n" -"\n" -"%(tb)s" - -#: views.py:586 -msgid "Book imported successfully" -msgstr "Libro scaricato con successo" - -#: views.py:588 -#, python-format -msgid "Error importing file: %r" -msgstr "Errore dell'importazione del file: %r" - -#: views.py:620 -msgid "Download custom PDF" -msgstr "Scarica PDF personalizzato" - -#: views.py:621 templates/catalogue/book_short.html:92 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 -msgid "Download" -msgstr "Scarica" - -#: models/book.py:28 models/collection.py:11 -msgid "title" -msgstr "titolo" - -#: models/book.py:29 models/tag.py:34 -msgid "sort key" -msgstr "chiave di ordinamento" - -#: models/book.py:30 models/book.py:32 models/collection.py:12 -#: models/collection.py:15 models/tag.py:33 -msgid "slug" -msgstr "slug" - -#: models/book.py:33 -msgid "language code" -msgstr "codice della lingua" - -#: models/book.py:35 models/book.py:146 models/collection.py:13 -#: models/tag.py:37 models/tag.py:94 -msgid "description" -msgstr "descrizione" - -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 -#: models/tag.py:47 -msgid "creation date" -msgstr "data di creazione" - -#: models/book.py:38 -msgid "parent number" -msgstr "numero del genitore" - -#: models/book.py:39 models/bookmedia.py:30 -msgid "extra information" -msgstr " ulteriori informazioni" - -#: models/book.py:44 -msgid "cover" -msgstr "copertina" - -#: models/book.py:66 models/collection.py:18 models/tag.py:22 -msgid "book" -msgstr "libro" - -#: models/book.py:67 -msgid "books" -msgstr "Libri" - -#: models/book.py:244 -#, python-format -msgid "Book \"%s\" does not exist." -msgstr "Il libro \"%s\" non esiste." - -#: models/book.py:258 -#, python-format -msgid "Book %s already exists" -msgstr "Il libro %s esiste già " - -#: models/book.py:599 models/bookmedia.py:23 -#, python-format -msgid "%s file" -msgstr "i %s di file" - -#: models/bookmedia.py:26 -msgid "type" -msgstr "tipo" - -#: models/bookmedia.py:27 models/tag.py:32 -msgid "name" -msgstr "nome" - -#: models/bookmedia.py:28 -msgid "file" -msgstr "file" - -#: models/bookmedia.py:39 models/bookmedia.py:40 -msgid "book media" -msgstr "book media" - -#: models/collection.py:16 -msgid "book slugs" -msgstr " slug del libro " - -#: models/collection.py:18 models/tag.py:18 -msgid "kind" -msgstr "categoria" - -#: models/collection.py:22 -msgid "collection" -msgstr "raccolta" - -#: models/collection.py:23 -msgid "collections" -msgstr " raccolte" - -#: models/fragment.py:32 -msgid "fragment" -msgstr "Frammento" - -#: models/fragment.py:33 -msgid "fragments" -msgstr "Frammenti" - -#: models/tag.py:16 -msgid "author" -msgstr "autore" - -#: models/tag.py:17 -msgid "epoch" -msgstr "epoca" - -#: models/tag.py:19 -msgid "genre" -msgstr "genere" - -#: models/tag.py:20 -msgid "theme" -msgstr "tema" - -#: models/tag.py:21 -msgid "set" -msgstr "raccolta" - -#: models/tag.py:23 -msgid "thing" -msgstr "" - -#: models/tag.py:35 -msgid "category" -msgstr "categoria" - -#: models/tag.py:40 -msgid "book count" -msgstr "conteggio dei libri" - -#: models/tag.py:41 -msgid "picture count" -msgstr "" - -#: models/tag.py:65 -msgid "tag" -msgstr "tag" - -#: models/tag.py:66 -msgid "tags" -msgstr "i tag" - -#: models/tag.py:83 -msgid "" -"Book tags can't have attached links. Set them directly on the book instead " -"of it's tag." -msgstr "" - -#: templates/catalogue/audiobook_list.html:7 -#: templates/catalogue/audiobook_list.html:16 -msgid "Listing of all audiobooks" -msgstr "Elenco di tutti gli audiolibri " - -#: templates/catalogue/audiobook_list.html:12 -msgid "Latest MP3 audiobooks" -msgstr "Ultimi audiolibri MP3" - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "Ultimi audiolibri Ogg Vorbis" - -#: templates/catalogue/audiobook_list.html:19 -msgid "" -"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -"Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -"Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." -msgstr "" - -#: templates/catalogue/book_detail.html:20 -#: templates/catalogue/tagged_object_list.html:74 -#: templates/catalogue/tagged_object_list.html:109 -msgid "See also" -msgstr "Vedi anche" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "tema" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "in corso" - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "Questa opera è pubblicata su licenza:" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " -"Commons Attribution-ShareAlike 3.0</a>\n" -" license." -msgstr "" -"Questa opera non è sotto il diritto d'autore e fa parte del\n" -"pubblico dominio, il che significa che è possibile pubblicarla \n" -"e distribuirla liberamente. Se un'opera è completata con i materiali " -"aggiuntivi \n" -"(le annotazioni, i motivi letterari ecc.) che sono protette dal diritto " -"d'autore, quei\n" -"materiali aggiuntivi sono disponibili secondo la \n" -" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " -"Commons Attribution-ShareAlike 3.0</a>\n" -"licenza." - -#: templates/catalogue/book_info.html:20 -#, fuzzy -msgid "Resource prepared based on:" -msgstr "Il testo preparato e basato su:" - -#: templates/catalogue/book_info.html:28 -msgid "Edited and annotated by:" -msgstr "Curato ed elaborato da:" - -#: templates/catalogue/book_info.html:33 -msgid "Publication funded by:" -msgstr "" - -#: templates/catalogue/book_info.html:39 -msgid "Cover image by:" -msgstr "" - -#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 -msgid "Listing of all works" -msgstr "Elenco di tutte le opere" - -#: templates/catalogue/book_list.html:21 -msgid "Table of Content" -msgstr "Indice" - -#: templates/catalogue/book_list.html:30 -msgid "â top â" -msgstr "" - -#: templates/catalogue/book_short.html:59 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "Epoca" - -#: templates/catalogue/book_short.html:66 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "Categoria" - -#: templates/catalogue/book_short.html:73 -msgid "Genre" -msgstr "Genere" - -#: templates/catalogue/book_short.html:88 -msgid "Read online" -msgstr "Leggi online" - -#: templates/catalogue/book_short.html:95 -#: templates/catalogue/book_text.html:40 -msgid "to print" -msgstr "" - -#: templates/catalogue/book_short.html:98 -msgid "for an e-book reader" -msgstr "" - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_text.html:46 -msgid "for Kindle" -msgstr "" - -#: templates/catalogue/book_short.html:104 -#: templates/catalogue/book_text.html:49 -msgid "FictionBook" -msgstr "" - -#: templates/catalogue/book_short.html:107 -#: templates/catalogue/book_text.html:52 -msgid "for advanced usage" -msgstr "" - -#: templates/catalogue/book_short.html:113 -#: templates/catalogue/book_text.html:30 -msgid "Listen" -msgstr "Ascolta" - -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/catalogue/book_text.html:22 -msgid "Table of contents" -msgstr "Indice" - -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 -msgid "Themes" -msgstr "Temi" - -#: templates/catalogue/book_text.html:24 -msgid "Edit. note" -msgstr "Modifica. nota" - -#: templates/catalogue/book_text.html:25 -msgid "Infobox" -msgstr "Infobox" - -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "Pagina del libro" - -#: templates/catalogue/book_text.html:43 -msgid "for a reader" -msgstr "" - -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 -msgid "Download all audiobooks for this book" -msgstr "Scarica tutti gli audiolibri per questo libro." - -#: templates/catalogue/book_wide.html:22 -#: templates/catalogue/tagged_object_list.html:60 -msgid "Motifs and themes" -msgstr "Motivi e temi" - -#: templates/catalogue/book_wide.html:44 -msgid "See" -msgstr "Vedi" - -#: templates/catalogue/book_wide.html:47 -msgid "Source" -msgstr "Fonte" - -#: templates/catalogue/book_wide.html:47 -msgid "of the book" -msgstr "del libro" - -#: templates/catalogue/book_wide.html:49 -msgid "Source XML file" -msgstr "File di fonte XML" - -#: templates/catalogue/book_wide.html:51 -msgid "Book on" -msgstr "Libro su" - -#: templates/catalogue/book_wide.html:51 -msgid "Editor's Platform" -msgstr " Piattaforma del editore" - -#: templates/catalogue/book_wide.html:54 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "Descrizione del libro su Lektury.Gazeta.pl" - -#: templates/catalogue/book_wide.html:57 -msgid "Book description on Wikipedia" -msgstr "Descrizione del libro su Wikipedia" - -#: templates/catalogue/book_wide.html:59 -msgid "Mix this book" -msgstr "Combina questo libro" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -msgid "Catalogue" -msgstr "Catalogo" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "Scarica il catalogo nel formato PDF." - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:17 -#: templates/catalogue/tagged_object_list.html:26 -#: templatetags/catalogue_tags.py:416 -msgid "Authors" -msgstr "Autori" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:25 -#: templates/catalogue/tagged_object_list.html:34 -#: templatetags/catalogue_tags.py:418 -msgid "Kinds" -msgstr "Categorie" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:33 -#: templates/catalogue/tagged_object_list.html:42 -#: templatetags/catalogue_tags.py:417 -msgid "Genres" -msgstr "Generi" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:41 -#: templates/catalogue/tagged_object_list.html:50 -#: templatetags/catalogue_tags.py:419 -msgid "Epochs" -msgstr "Epoche" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "temi e argomenti" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 -#, fuzzy -msgid "Collections" -msgstr " raccolte" - -#: templates/catalogue/daisy_list.html:6 -#: templates/catalogue/daisy_list.html:12 -msgid "Listing of all DAISY files" -msgstr "Elenco di tutti i file DAISY " - -#: templates/catalogue/daisy_list.html:9 -msgid "Latest DAISY audiobooks" -msgstr "Ultimi audiolibri DAISY" - -#: templates/catalogue/daisy_list.html:15 -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Å." -msgstr "" - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "" -"Questi criteri sono ambigui. Si prega di selezionare una delle seguenti " -"opzioni:" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "Espandi il frammento" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "Nascondi il frammento" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:4 -msgid "See full category" -msgstr "Vedi tutta la categoria" - -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 -msgid "Please waitâ¦" -msgstr "" - -#: templates/catalogue/menu.html:24 -msgid "All books" -msgstr "Tutti i libri" - -#: templates/catalogue/menu.html:28 -msgid "Audiobooks" -msgstr "Audiolibri" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "DAISY" - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "L'opera è su licenza di" - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "Basato su" - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "Dettagli" - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "Autore" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "Altre fonti" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "Fonte dell'immagine" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "Immagine sulla piattaforma del editore" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "Visualizza la fonte XML" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "Temi dell'opera" - -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all pictures" -msgstr "Elenco di tutte le immagini" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "Scarica come" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "Artista" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "Direttore" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "Gli audilobri sono stati preparati come parte dei seguenti progetti:" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "%(cs)s, creato da %(fb)s // %(cs)s, finanziato da %(fb)s" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "" -"Gli audiollibri sono stati preparati come parte del progetto %(cs)s, " -"finanziato da %(fb)s" - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "Gli audiolibri sono stati preparati come parte di progetto %(cs)s." - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -#, fuzzy -msgid "Recent audiobooks" -msgstr "Ultimi audiolibri MP3" - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -msgid "Recent publications" -msgstr "" - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" -" and <a href=\"%(d)s\">recent DAISY files</a>." -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:5 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "Cerca" - -#: templates/catalogue/search_multiple_hits.html:11 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "Volevi dire" - -#: templates/catalogue/search_multiple_hits.html:52 -msgid "Results by title" -msgstr "Risultati per titolo" - -#: templates/catalogue/search_multiple_hits.html:67 -msgid "Results by authors" -msgstr "Risultati per autore" - -#: templates/catalogue/search_multiple_hits.html:80 -msgid "Results by translators" -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:93 -msgid "Results in text" -msgstr "Risultati nel testo" - -#: templates/catalogue/search_multiple_hits.html:110 -msgid "Other results" -msgstr "Altri risultati" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:151 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "Siamo spiacenti!I criteri di ricerca non corrispondono alle risorse." - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"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 "" -"Il motore di ricerca supporta i seguenti criteri: titolo, autore, tema, " -"epoca, genere.\n" -"\t\t Per il momento non supportiamo i criteri del testo intero." - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "" -"Siamo spiacenti! La ricerca viene effettuata su parole con almeno due " -"caratteri." - -#: templates/catalogue/tag_list_split.html:5 -msgid "Literature" -msgstr "" - -#: templates/catalogue/tag_list_split.html:14 -msgid "Gallery" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:78 -msgid "in Culture.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:83 -#: templates/catalogue/tagged_object_list.html:113 -msgid "in Lektury.Gazeta.pl" -msgstr "su Lektury.Gazeta.pl" - -#: templates/catalogue/tagged_object_list.html:88 -#: templates/catalogue/tagged_object_list.html:118 -msgid "in Wikipedia" -msgstr "su Wikipedia" - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -msgid "Download a custom PDF" -msgstr " Scarica un PDF personalizzato" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Metti il libro sullo scaffale" - -#~ msgid "Create new shelf" -#~ msgstr "Crea un nuovo scaffale" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "Non hai nessuno scaffale. se vuoi puoi crearne uno, qui sotto." - -#~ msgid "Put on the shelf!" -#~ msgstr "Metti sullo scaffale!" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Gli scaffali che contengono il frammento" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "Non hai nessuno scaffale. Se vuoi puoi crearne uno, qui sotto." - -#~ msgid "Save all shelves" -#~ msgstr "Salva tutti gli scaffali" - -#~ msgid "Your shelves with books" -#~ msgstr "I tuoi scaffali con i libri" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "Non hai nessuno scaffale. se vuoi puoi crearne uno, qui sotto." - -#~ msgid "Create shelf" -#~ msgstr "Crea uno scaffale" - -#~ msgid "Enter a valid JSON value. Error: %s" -#~ msgstr "Inserire un valore valido JSON. Errore: %s" - -#~ msgid "A4" -#~ msgstr "A4" - -#~ msgid "A5" -#~ msgstr "A5" - -#~ msgid "Incorrect customization options for PDF" -#~ msgstr "Opzioni di personalizzazione non corrette per PDF" - -#~ msgid "Bad method" -#~ msgstr "Metodo non corretto" diff --git a/apps/catalogue/locale/jp/LC_MESSAGES/django.mo b/apps/catalogue/locale/jp/LC_MESSAGES/django.mo deleted file mode 100644 index 86b539e6b..000000000 Binary files a/apps/catalogue/locale/jp/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/jp/LC_MESSAGES/django.po b/apps/catalogue/locale/jp/LC_MESSAGES/django.po deleted file mode 100644 index 8de2d5621..000000000 --- a/apps/catalogue/locale/jp/LC_MESSAGES/django.po +++ /dev/null @@ -1,721 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "" - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "" - -#: forms.py:49 -msgid "Without cover" -msgstr "" - -#: forms.py:52 -msgid "Leading" -msgstr "" - -#: forms.py:53 -msgid "Normal leading" -msgstr "" - -#: forms.py:54 -msgid "One and a half leading" -msgstr "" - -#: forms.py:55 -msgid "Double leading" -msgstr "" - -#: forms.py:57 -msgid "Font size" -msgstr "" - -#: forms.py:58 -msgid "Default" -msgstr "" - -#: forms.py:59 -msgid "Big" -msgstr "" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "" - -#: views.py:585 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:586 -msgid "Book imported successfully" -msgstr "" - -#: views.py:588 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: views.py:620 -msgid "Download custom PDF" -msgstr "" - -#: views.py:621 templates/catalogue/book_short.html:92 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 -msgid "Download" -msgstr "" - -#: models/book.py:28 models/collection.py:11 -msgid "title" -msgstr "" - -#: models/book.py:29 models/tag.py:34 -msgid "sort key" -msgstr "" - -#: models/book.py:30 models/book.py:32 models/collection.py:12 -#: models/collection.py:15 models/tag.py:33 -msgid "slug" -msgstr "" - -#: models/book.py:33 -msgid "language code" -msgstr "" - -#: models/book.py:35 models/book.py:146 models/collection.py:13 -#: models/tag.py:37 models/tag.py:94 -msgid "description" -msgstr "" - -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 -#: models/tag.py:47 -msgid "creation date" -msgstr "" - -#: models/book.py:38 -msgid "parent number" -msgstr "" - -#: models/book.py:39 models/bookmedia.py:30 -msgid "extra information" -msgstr "" - -#: models/book.py:44 -msgid "cover" -msgstr "" - -#: models/book.py:66 models/collection.py:18 models/tag.py:22 -msgid "book" -msgstr "" - -#: models/book.py:67 -msgid "books" -msgstr "" - -#: models/book.py:244 -#, python-format -msgid "Book \"%s\" does not exist." -msgstr "" - -#: models/book.py:258 -#, python-format -msgid "Book %s already exists" -msgstr "" - -#: models/book.py:599 models/bookmedia.py:23 -#, python-format -msgid "%s file" -msgstr "" - -#: models/bookmedia.py:26 -msgid "type" -msgstr "" - -#: models/bookmedia.py:27 models/tag.py:32 -msgid "name" -msgstr "" - -#: models/bookmedia.py:28 -msgid "file" -msgstr "" - -#: models/bookmedia.py:39 models/bookmedia.py:40 -msgid "book media" -msgstr "" - -#: models/collection.py:16 -msgid "book slugs" -msgstr "" - -#: models/collection.py:18 models/tag.py:18 -msgid "kind" -msgstr "" - -#: models/collection.py:22 -msgid "collection" -msgstr "" - -#: models/collection.py:23 -msgid "collections" -msgstr "" - -#: models/fragment.py:32 -msgid "fragment" -msgstr "" - -#: models/fragment.py:33 -msgid "fragments" -msgstr "" - -#: models/tag.py:16 -msgid "author" -msgstr "" - -#: models/tag.py:17 -msgid "epoch" -msgstr "" - -#: models/tag.py:19 -msgid "genre" -msgstr "" - -#: models/tag.py:20 -msgid "theme" -msgstr "" - -#: models/tag.py:21 -msgid "set" -msgstr "" - -#: models/tag.py:23 -msgid "thing" -msgstr "" - -#: models/tag.py:35 -msgid "category" -msgstr "" - -#: models/tag.py:40 -msgid "book count" -msgstr "" - -#: models/tag.py:41 -msgid "picture count" -msgstr "" - -#: models/tag.py:65 -msgid "tag" -msgstr "" - -#: models/tag.py:66 -msgid "tags" -msgstr "" - -#: models/tag.py:83 -msgid "" -"Book tags can't have attached links. Set them directly on the book instead " -"of it's tag." -msgstr "" - -#: templates/catalogue/audiobook_list.html:7 -#: templates/catalogue/audiobook_list.html:16 -msgid "Listing of all audiobooks" -msgstr "" - -#: templates/catalogue/audiobook_list.html:12 -msgid "Latest MP3 audiobooks" -msgstr "" - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "" - -#: templates/catalogue/audiobook_list.html:19 -msgid "" -"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -"Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -"Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." -msgstr "" - -#: templates/catalogue/book_detail.html:20 -#: templates/catalogue/tagged_object_list.html:74 -#: templates/catalogue/tagged_object_list.html:109 -msgid "See also" -msgstr "" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "" - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " -"Commons Attribution-ShareAlike 3.0</a>\n" -" license." -msgstr "" - -#: templates/catalogue/book_info.html:20 -msgid "Resource prepared based on:" -msgstr "" - -#: templates/catalogue/book_info.html:28 -msgid "Edited and annotated by:" -msgstr "" - -#: templates/catalogue/book_info.html:33 -msgid "Publication funded by:" -msgstr "" - -#: templates/catalogue/book_info.html:39 -msgid "Cover image by:" -msgstr "" - -#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 -msgid "Listing of all works" -msgstr "" - -#: templates/catalogue/book_list.html:21 -msgid "Table of Content" -msgstr "" - -#: templates/catalogue/book_list.html:30 -msgid "â top â" -msgstr "" - -#: templates/catalogue/book_short.html:59 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "" - -#: templates/catalogue/book_short.html:66 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "" - -#: templates/catalogue/book_short.html:73 -msgid "Genre" -msgstr "" - -#: templates/catalogue/book_short.html:88 -msgid "Read online" -msgstr "" - -#: templates/catalogue/book_short.html:95 -#: templates/catalogue/book_text.html:40 -msgid "to print" -msgstr "" - -#: templates/catalogue/book_short.html:98 -msgid "for an e-book reader" -msgstr "" - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_text.html:46 -msgid "for Kindle" -msgstr "" - -#: templates/catalogue/book_short.html:104 -#: templates/catalogue/book_text.html:49 -msgid "FictionBook" -msgstr "" - -#: templates/catalogue/book_short.html:107 -#: templates/catalogue/book_text.html:52 -msgid "for advanced usage" -msgstr "" - -#: templates/catalogue/book_short.html:113 -#: templates/catalogue/book_text.html:30 -msgid "Listen" -msgstr "" - -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/catalogue/book_text.html:22 -msgid "Table of contents" -msgstr "" - -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 -msgid "Themes" -msgstr "" - -#: templates/catalogue/book_text.html:24 -msgid "Edit. note" -msgstr "" - -#: templates/catalogue/book_text.html:25 -msgid "Infobox" -msgstr "" - -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "" - -#: templates/catalogue/book_text.html:43 -msgid "for a reader" -msgstr "" - -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 -msgid "Download all audiobooks for this book" -msgstr "" - -#: templates/catalogue/book_wide.html:22 -#: templates/catalogue/tagged_object_list.html:60 -msgid "Motifs and themes" -msgstr "" - -#: templates/catalogue/book_wide.html:44 -msgid "See" -msgstr "" - -#: templates/catalogue/book_wide.html:47 -msgid "Source" -msgstr "" - -#: templates/catalogue/book_wide.html:47 -msgid "of the book" -msgstr "" - -#: templates/catalogue/book_wide.html:49 -msgid "Source XML file" -msgstr "" - -#: templates/catalogue/book_wide.html:51 -msgid "Book on" -msgstr "" - -#: templates/catalogue/book_wide.html:51 -msgid "Editor's Platform" -msgstr "" - -#: templates/catalogue/book_wide.html:54 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/catalogue/book_wide.html:57 -msgid "Book description on Wikipedia" -msgstr "" - -#: templates/catalogue/book_wide.html:59 -msgid "Mix this book" -msgstr "" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -msgid "Catalogue" -msgstr "" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "" - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:17 -#: templates/catalogue/tagged_object_list.html:26 -#: templatetags/catalogue_tags.py:416 -msgid "Authors" -msgstr "" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:25 -#: templates/catalogue/tagged_object_list.html:34 -#: templatetags/catalogue_tags.py:418 -msgid "Kinds" -msgstr "" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:33 -#: templates/catalogue/tagged_object_list.html:42 -#: templatetags/catalogue_tags.py:417 -msgid "Genres" -msgstr "" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:41 -#: templates/catalogue/tagged_object_list.html:50 -#: templatetags/catalogue_tags.py:419 -msgid "Epochs" -msgstr "" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 -msgid "Collections" -msgstr "" - -#: templates/catalogue/daisy_list.html:6 -#: templates/catalogue/daisy_list.html:12 -msgid "Listing of all DAISY files" -msgstr "" - -#: templates/catalogue/daisy_list.html:9 -msgid "Latest DAISY audiobooks" -msgstr "" - -#: templates/catalogue/daisy_list.html:15 -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Å." -msgstr "" - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:4 -msgid "See full category" -msgstr "" - -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 -msgid "Please waitâ¦" -msgstr "" - -#: templates/catalogue/menu.html:24 -msgid "All books" -msgstr "" - -#: templates/catalogue/menu.html:28 -msgid "Audiobooks" -msgstr "" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "" - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "" - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "" - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "" - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "" - -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all pictures" -msgstr "" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "" - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "" - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -msgid "Recent audiobooks" -msgstr "" - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -msgid "Recent publications" -msgstr "" - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" -" and <a href=\"%(d)s\">recent DAISY files</a>." -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:5 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:11 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:52 -msgid "Results by title" -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:67 -msgid "Results by authors" -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:80 -msgid "Results by translators" -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:93 -msgid "Results in text" -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:110 -msgid "Other results" -msgstr "" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:151 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "" - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"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 "" - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "" - -#: templates/catalogue/tag_list_split.html:5 -msgid "Literature" -msgstr "" - -#: templates/catalogue/tag_list_split.html:14 -msgid "Gallery" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:78 -msgid "in Culture.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:83 -#: templates/catalogue/tagged_object_list.html:113 -msgid "in Lektury.Gazeta.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:88 -#: templates/catalogue/tagged_object_list.html:118 -msgid "in Wikipedia" -msgstr "" - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -msgid "Download a custom PDF" -msgstr "" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "" diff --git a/apps/catalogue/locale/lt/LC_MESSAGES/django.mo b/apps/catalogue/locale/lt/LC_MESSAGES/django.mo deleted file mode 100644 index 04cdc6613..000000000 Binary files a/apps/catalogue/locale/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/lt/LC_MESSAGES/django.po b/apps/catalogue/locale/lt/LC_MESSAGES/django.po deleted file mode 100644 index 0889888c4..000000000 --- a/apps/catalogue/locale/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,879 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: 2013-04-09 10:40+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "PraÅ¡ome pateikti XML." - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "Nerodyti iÅ¡našų" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "Nerodyti motyvų" - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "Nenaudoti derinÄių Å¡riftų" - -#: forms.py:49 -msgid "Without cover" -msgstr "" - -#: forms.py:52 -msgid "Leading" -msgstr "eiluÄių intervalas" - -#: forms.py:53 -msgid "Normal leading" -msgstr "Normalus intervalas" - -#: forms.py:54 -msgid "One and a half leading" -msgstr "Pusantro intervalo" - -#: forms.py:55 -msgid "Double leading" -msgstr "Dvigubasis intervalas" - -#: forms.py:57 -msgid "Font size" -msgstr "Å rifto dydis" - -#: forms.py:58 -msgid "Default" -msgstr "Numatytasis " - -#: forms.py:59 -msgid "Big" -msgstr "Didelis" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "" - -#: views.py:585 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" -"Ä®vyko klaida: %(exception)s\n" -"\n" -"%(tb)s" - -#: views.py:586 -msgid "Book imported successfully" -msgstr "Knyga buvo sÄkmingai importuota" - -#: views.py:588 -#, python-format -msgid "Error importing file: %r" -msgstr "Importuojant failÄ Ä¯vyko klaida: %r" - -#: views.py:620 -msgid "Download custom PDF" -msgstr "Sukurti ir atsisiųsti PDF failÄ " - -#: views.py:621 templates/catalogue/book_short.html:92 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 -msgid "Download" -msgstr "Atsisiųsti" - -#: models/book.py:28 models/collection.py:11 -msgid "title" -msgstr "pavadinimas" - -#: models/book.py:29 models/tag.py:34 -msgid "sort key" -msgstr "rikiavimo raktas" - -#: models/book.py:30 models/book.py:32 models/collection.py:12 -#: models/collection.py:15 models/tag.py:33 -msgid "slug" -msgstr "slug" - -#: models/book.py:33 -msgid "language code" -msgstr "kalbos kodas" - -#: models/book.py:35 models/book.py:146 models/collection.py:13 -#: models/tag.py:37 models/tag.py:94 -msgid "description" -msgstr "apraÅ¡ymas" - -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 -#: models/tag.py:47 -msgid "creation date" -msgstr "sukÅ«rimo data" - -# sprawdz -#: models/book.py:38 -msgid "parent number" -msgstr "pirminis numeris" - -#: models/book.py:39 models/bookmedia.py:30 -msgid "extra information" -msgstr "papildomos informacijos" - -#: models/book.py:44 -msgid "cover" -msgstr "virÅ¡elis" - -#: models/book.py:66 models/collection.py:18 models/tag.py:22 -msgid "book" -msgstr "knyga" - -#: models/book.py:67 -msgid "books" -msgstr "knygos" - -#: models/book.py:244 -#, python-format -msgid "Book \"%s\" does not exist." -msgstr "Knyga \"%s\" neegzistuoja." - -#: models/book.py:258 -#, python-format -msgid "Book %s already exists" -msgstr "Knyga %s jau egzistuoja" - -#: models/book.py:599 models/bookmedia.py:23 -#, python-format -msgid "%s file" -msgstr "%s failas " - -#: models/bookmedia.py:26 -msgid "type" -msgstr "tipas" - -#: models/bookmedia.py:27 models/tag.py:32 -msgid "name" -msgstr "pavadinimas" - -#: models/bookmedia.py:28 -msgid "file" -msgstr "failas " - -#: models/bookmedia.py:39 models/bookmedia.py:40 -msgid "book media" -msgstr "book media" - -#: models/collection.py:16 -msgid "book slugs" -msgstr "book slugs" - -#: models/collection.py:18 models/tag.py:18 -msgid "kind" -msgstr "rÅ«Å¡is" - -#: models/collection.py:22 -msgid "collection" -msgstr "kolekcija" - -#: models/collection.py:23 -msgid "collections" -msgstr "kolekcijos" - -#: models/fragment.py:32 -msgid "fragment" -msgstr "fragmentas" - -#: models/fragment.py:33 -msgid "fragments" -msgstr "fragmentai" - -#: models/tag.py:16 -msgid "author" -msgstr "autorius" - -#: models/tag.py:17 -msgid "epoch" -msgstr "epocha" - -#: models/tag.py:19 -msgid "genre" -msgstr "žanras" - -#: models/tag.py:20 -msgid "theme" -msgstr "motyvas" - -#: models/tag.py:21 -msgid "set" -msgstr "rinkinys" - -#: models/tag.py:23 -msgid "thing" -msgstr "" - -#: models/tag.py:35 -msgid "category" -msgstr "kategorija " - -#: models/tag.py:40 -msgid "book count" -msgstr "knygų skaiÄius" - -#: models/tag.py:41 -msgid "picture count" -msgstr "" - -#: models/tag.py:65 -msgid "tag" -msgstr "žymÄ" - -#: models/tag.py:66 -msgid "tags" -msgstr "žymÄs" - -#: models/tag.py:83 -msgid "" -"Book tags can't have attached links. Set them directly on the book instead " -"of it's tag." -msgstr "" - -#: templates/catalogue/audiobook_list.html:7 -#: templates/catalogue/audiobook_list.html:16 -msgid "Listing of all audiobooks" -msgstr "Visų audio knygų sÄ raÅ¡as" - -#: templates/catalogue/audiobook_list.html:12 -msgid "Latest MP3 audiobooks" -msgstr "Naujosios MP3 audio knygos" - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "Naujosios Ogg Vorbis audio knygos" - -#: templates/catalogue/audiobook_list.html:19 -msgid "" -"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -"Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -"Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." -msgstr "" -"Fondo Å iuolaikinÄ Lenkija privalomos literatÅ«ros audio knygų rinkinys.\n" -"Galite juo naudotis nemokamai ir be apribojimų.\n" -"Audio knygos yra garsių aktorių įraÅ¡omos, tokių kaip Danuta Stenka ir Jan " -"Peszek." - -#: templates/catalogue/book_detail.html:20 -#: templates/catalogue/tagged_object_list.html:74 -#: templates/catalogue/tagged_object_list.html:109 -msgid "See also" -msgstr "ŽiÅ«rÄti daugiau" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "Motyvas" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "kÅ«rinyje" - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "Å is kÅ«rinys yra licencijuotas pagal:" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " -"Commons Attribution-ShareAlike 3.0</a>\n" -" license." -msgstr "" -"Å io visuomenÄs srities kÅ«rinio autorių teisÄ neapima,\n" -"tai reiÅ¡kia, kad gali bÅ«ti laisvai naudojamas bei\n" -"platinamas. Jei su Å¡iuo kÅ«riniu yra pateikiamos bet kokios\n" -"papildomos autorinių teisių saugomos medžiagos (kaip pastabos, motyvai ir t." -"t.), Å¡ios\n" -"medžiagos yra licencijuotos pagal\n" -"<a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative Commons " -"Attribution-ShareAlike 3.0</a>\n" -"licencijÄ ." - -#: templates/catalogue/book_info.html:20 -#, fuzzy -msgid "Resource prepared based on:" -msgstr "Tekstas paruoÅ¡tas remiantis:" - -#: templates/catalogue/book_info.html:28 -msgid "Edited and annotated by:" -msgstr "Redagavimas ir pastabos:" - -#: templates/catalogue/book_info.html:33 -msgid "Publication funded by:" -msgstr "" - -#: templates/catalogue/book_info.html:39 -msgid "Cover image by:" -msgstr "" - -#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 -msgid "Listing of all works" -msgstr "Visų kÅ«rinių sÄ raÅ¡as" - -#: templates/catalogue/book_list.html:21 -msgid "Table of Content" -msgstr "Turinys" - -#: templates/catalogue/book_list.html:30 -msgid "â top â" -msgstr "âį viršųâ" - -#: templates/catalogue/book_short.html:59 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "Epocha" - -#: templates/catalogue/book_short.html:66 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "RÅ«Å¡is " - -#: templates/catalogue/book_short.html:73 -msgid "Genre" -msgstr "Žanras" - -#: templates/catalogue/book_short.html:88 -msgid "Read online" -msgstr "Skaityti online" - -#: templates/catalogue/book_short.html:95 -#: templates/catalogue/book_text.html:40 -msgid "to print" -msgstr "Spausdinti" - -#: templates/catalogue/book_short.html:98 -msgid "for an e-book reader" -msgstr "e-knygos skaitytojui" - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_text.html:46 -msgid "for Kindle" -msgstr "skaityklei Kindle" - -#: templates/catalogue/book_short.html:104 -#: templates/catalogue/book_text.html:49 -msgid "FictionBook" -msgstr "" - -#: templates/catalogue/book_short.html:107 -#: templates/catalogue/book_text.html:52 -msgid "for advanced usage" -msgstr " iÅ¡plÄstiniam naudojimui" - -#: templates/catalogue/book_short.html:113 -#: templates/catalogue/book_text.html:30 -msgid "Listen" -msgstr "Klausytis" - -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/catalogue/book_text.html:22 -msgid "Table of contents" -msgstr "Turinys" - -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 -msgid "Themes" -msgstr "Motyvai" - -#: templates/catalogue/book_text.html:24 -msgid "Edit. note" -msgstr "Redaguoti pastabÄ " - -#: templates/catalogue/book_text.html:25 -msgid "Infobox" -msgstr "Infobox" - -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "Knygos puslapis" - -#: templates/catalogue/book_text.html:43 -msgid "for a reader" -msgstr "skaitytojui" - -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 -msgid "Download all audiobooks for this book" -msgstr "Atsisiųsti visas Å¡ios knygos audio knygas" - -#: templates/catalogue/book_wide.html:22 -#: templates/catalogue/tagged_object_list.html:60 -msgid "Motifs and themes" -msgstr "Motyvai ir temos" - -#: templates/catalogue/book_wide.html:44 -msgid "See" -msgstr "ŽiÅ«rÄti" - -#: templates/catalogue/book_wide.html:47 -msgid "Source" -msgstr "Knygos" - -#: templates/catalogue/book_wide.html:47 -msgid "of the book" -msgstr "Å¡altinis" - -#: templates/catalogue/book_wide.html:49 -msgid "Source XML file" -msgstr "Å altinio XML failas" - -#: templates/catalogue/book_wide.html:51 -msgid "Book on" -msgstr "Knyga " - -#: templates/catalogue/book_wide.html:51 -msgid "Editor's Platform" -msgstr "Redaktoriaus Platformoje" - -#: templates/catalogue/book_wide.html:54 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "Knygos apraÅ¡ymas Lektury.Gazeta.pl interneto svetainÄje" - -#: templates/catalogue/book_wide.html:57 -msgid "Book description on Wikipedia" -msgstr "Knygos apraÅ¡ymas Vikipedijoje" - -#: templates/catalogue/book_wide.html:59 -msgid "Mix this book" -msgstr "MaiÅ¡yti Å¡iÄ knygÄ " - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -msgid "Catalogue" -msgstr "Katalogas" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "Atsisiųsti katalogÄ PDF formatu." - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:17 -#: templates/catalogue/tagged_object_list.html:26 -#: templatetags/catalogue_tags.py:416 -msgid "Authors" -msgstr "Autoriai" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:25 -#: templates/catalogue/tagged_object_list.html:34 -#: templatetags/catalogue_tags.py:418 -msgid "Kinds" -msgstr "RÅ«Å¡ys" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:33 -#: templates/catalogue/tagged_object_list.html:42 -#: templatetags/catalogue_tags.py:417 -msgid "Genres" -msgstr "Žanrai" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:41 -#: templates/catalogue/tagged_object_list.html:50 -#: templatetags/catalogue_tags.py:419 -msgid "Epochs" -msgstr "Epochos" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "Motyvai ir temos" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 -#, fuzzy -msgid "Collections" -msgstr "kolekcijos" - -#: templates/catalogue/daisy_list.html:6 -#: templates/catalogue/daisy_list.html:12 -msgid "Listing of all DAISY files" -msgstr "Visų DAISY failų sÄ raÅ¡as" - -#: templates/catalogue/daisy_list.html:9 -msgid "Latest DAISY audiobooks" -msgstr "Naujosios DAISY audio knygos" - -#: templates/catalogue/daisy_list.html:15 -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Å." -msgstr "" -"DAISY sistema yra visame pasaulyje pripažintas knygų bendrinimo formatas\n" -"pritaikytas silpnesnio regÄjimo žmonÄms, akliesiems bei kitiems\n" -"skaitymo problemų turintiems žmonÄms.Galite jomis naudotis nemokamai ir be " -"apribojimų." - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "" -"PaieÅ¡kos kriterijai nÄra tikslÅ«s. PraÅ¡ome iÅ¡rinkti vienÄ iÅ¡ žemiau nurodytų " -"galimybių:" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "IÅ¡plÄsti fragmentÄ " - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "SlÄpti fragmentÄ " - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:4 -msgid "See full category" -msgstr "ŽiÅ«rÄti visÄ kategorijÄ " - -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 -msgid "Please waitâ¦" -msgstr "" - -#: templates/catalogue/menu.html:24 -msgid "All books" -msgstr "Visos knygos" - -#: templates/catalogue/menu.html:28 -msgid "Audiobooks" -msgstr "Audio knygos" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "DAISY " - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "KÅ«rinys yra licencijuotas pagal:" - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "Remiantis" - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "DetalÄs " - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "Autorius" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "Kiti iÅ¡tekliai" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "PaveikslÄlio Å¡altinis" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "PaveikslÄlis Redaktoriaus Platformoje" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "ŽiÅ«rÄti XML Å¡altinį" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "KÅ«rinio motyvai" - -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all pictures" -msgstr "Visų vaizdų sÄ raÅ¡as" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "Atsisiųsti kaip" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "Artistas" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "Režisierus" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "Audio knygos buvo paruoÅ¡tos kaip projektų dalis:" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "\"%(cs)s, %(fb)s finansuotų" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "" -"Audio knygos buvo paruoÅ¡tos kaip dalis %(fb)s. finansuoto %(cs)s projekto." - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "Audio knygos buvo paruoÅ¡tos kaip dalis %(cs)s projekto." - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -#, fuzzy -msgid "Recent audiobooks" -msgstr "Naujosios MP3 audio knygos" - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -#, fuzzy -msgid "Recent publications" -msgstr "keliauja į vieÅ¡Ä tinklapį " - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" -" and <a href=\"%(d)s\">recent DAISY files</a>." -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:5 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "IeÅ¡koti" - -#: templates/catalogue/search_multiple_hits.html:11 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "Gal turÄjote omenyje" - -#: templates/catalogue/search_multiple_hits.html:52 -msgid "Results by title" -msgstr "Rezultatai pagal pavadinimÄ " - -#: templates/catalogue/search_multiple_hits.html:67 -msgid "Results by authors" -msgstr "Rezultatai pagal autorius" - -#: templates/catalogue/search_multiple_hits.html:80 -#, fuzzy -msgid "Results by translators" -msgstr "Rezultatai pagal autorius" - -#: templates/catalogue/search_multiple_hits.html:93 -msgid "Results in text" -msgstr "Rezultatai tekste" - -#: templates/catalogue/search_multiple_hits.html:110 -msgid "Other results" -msgstr "Kiti rezultatai" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:151 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "AtsipraÅ¡ome! Rezultatų, atitinkanÄių paieÅ¡kos kriterijus nÄra." - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"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 "" -"PaieÅ¡kos sistema palaiko nurodytus kriterijus: pavadinimas, autorius, tema, " -"epocha, rÅ«Å¡is ir žanras.\n" -"\t\t Kol kas negalima atlikti viso teksto paieÅ¡kos." - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "" -"AtsipraÅ¡ome! PaieÅ¡kos užklausa turi susidÄti mažiausiai iÅ¡ dviejų simbolių." - -#: templates/catalogue/tag_list_split.html:5 -msgid "Literature" -msgstr "" - -#: templates/catalogue/tag_list_split.html:14 -msgid "Gallery" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:78 -msgid "in Culture.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:83 -#: templates/catalogue/tagged_object_list.html:113 -msgid "in Lektury.Gazeta.pl" -msgstr "Lektury.Gazeta.pl interneto svetainÄje" - -#: templates/catalogue/tagged_object_list.html:88 -#: templates/catalogue/tagged_object_list.html:118 -msgid "in Wikipedia" -msgstr "Vikipedijoje" - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -msgid "Download a custom PDF" -msgstr "Sukurti ir atsisiųsti PDF failÄ " - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "PadÄkite knygÄ Ä¯ lentynÄ !" - -#~ msgid "Create new shelf" -#~ msgstr "Sukurti naujÄ lentynÄ " - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naujÄ lentynÄ " -#~ "žemiau." - -#~ msgid "Put on the shelf!" -#~ msgstr "PadÄkite į lentynÄ !" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Lentynos turinÄios fragmentus " - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naujÄ lentynÄ " -#~ "žemiau." - -#~ msgid "Save all shelves" -#~ msgstr "Ä®raÅ¡yti visas lentynas" - -#~ msgid "Your shelves with books" -#~ msgstr "Tavo lentynos su knygomis" - -#~ msgid "remove" -#~ msgstr "paÅ¡alinti" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "" -#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naujÄ lentynÄ " -#~ "žemiau." - -#~ msgid "Create shelf" -#~ msgstr "Sukurti lentynÄ " - -#~ msgid "Enter a valid JSON value. Error: %s" -#~ msgstr "Ä®vesti atitinkamÄ vertybÄ JSON. Klaida: %s" - -#~ msgid "A4" -#~ msgstr "A4" - -#~ msgid "A5" -#~ msgstr "A5" - -#~ msgid "Incorrect customization options for PDF" -#~ msgstr "Neteisingi PDF tinkinimo pasirinkimai" - -#~ msgid "Bad method" -#~ msgstr "Blogas metodas" - -#~ msgid "title, author, theme/topic, epoch, kind, genre" -#~ msgstr "Pavadinimas , autorius, motyvas /tema, gadynÄ, \trÅ«Å¡is, sortas" - -#~ msgid "main page" -#~ msgstr "pagrindinis puslapis" - -#~ msgid "Show tag on main page" -#~ msgstr "Parodyk tagÄ pagrindinemÄ puslapyjÄ" - -#~ msgid "year of death" -#~ msgstr "mirimo metai" - -#~ msgid "short HTML" -#~ msgstr "trumpas HTML" - -#~ msgid "HTML file" -#~ msgstr "HTML failas" - -#~ msgid "PDF file" -#~ msgstr "PDF failas" - -#~ msgid "EPUB file" -#~ msgstr "EPUB failas" - -#~ msgid "ODT file" -#~ msgstr "ODT failas" - -#~ msgid "TXT file" -#~ msgstr "TXT failsa" - -#~ msgid "MP3 file" -#~ msgstr "MP3 failas" - -#~ msgid "OGG file" -#~ msgstr "OGG failas" - -#~ msgid "translator" -#~ msgstr "vertÄjas" - -#~ msgid "year of translator's death" -#~ msgstr "vertÄjo mirimo metai" - -#~ msgid "book stub" -#~ msgstr "knygos paskelbimas" - -#~ msgid "<p>To maintain your shelves you need to be logged in.</p>" -#~ msgstr "<p>Kad valdyti savo lentynom, turi prisijungti.</p>" - -#~ msgid "<p>Shelves were sucessfully saved.</p>" -#~ msgstr "<p>Lentynos liko užraÅ¡ytos.</p>" - -#~ msgid "Book was successfully removed from the shelf" -#~ msgstr "paÅ¡alinta" - -#~ msgid "<p>Shelf <strong>%s</strong> was successfully created</p>" -#~ msgstr "<p>Lentyna <strong>%s</strong> sukurta</p>" - -#~ msgid "<p>Shelf <strong>%s</strong> was successfully removed</p>" -#~ msgstr "<p>Lentyna <strong>%s</strong>paÅ¡alinta</p>" - -#~ msgid "Today is %(month)s, %(day)s." -#~ msgstr "Å iandien yra %(month)s, %(day)s." - -#~ msgid "content type" -#~ msgstr "turinio rÅ«Å¡is" - -#~ msgid "object id" -#~ msgstr "id obiektas" diff --git a/apps/catalogue/locale/pl/LC_MESSAGES/django.mo b/apps/catalogue/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 739f69b2d..000000000 Binary files a/apps/catalogue/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/pl/LC_MESSAGES/django.po b/apps/catalogue/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index c1a8aac2b..000000000 --- a/apps/catalogue/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,948 +0,0 @@ -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -msgid "" -msgstr "" -"Project-Id-Version: WolneLektury\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-10-16 13:54+0200\n" -"PO-Revision-Date: 2014-10-16 13:55+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: Fundacja Nowoczesna Polska <fundacja@nowoczesnapolska.org." -"pl>\n" -"Language: pl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" -"X-Generator: Poedit 1.5.4\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" -"Creative Commons Uznanie autorstwa â Na tych samych warunkach 3.0 Unported" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "ProszÄ podaÄ XML." - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "Bez przypisów" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "Bez motywów" - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "Bez naszego kroju pisma" - -#: forms.py:49 -msgid "Without cover" -msgstr "Bez okÅadki" - -#: forms.py:52 -msgid "Leading" -msgstr "Interlinia" - -#: forms.py:53 -msgid "Normal leading" -msgstr "ZwykÅa interlinia" - -#: forms.py:54 -msgid "One and a half leading" -msgstr "PowiÄkszona interlinia" - -#: forms.py:55 -msgid "Double leading" -msgstr "Podwójna interlinia" - -#: forms.py:57 -msgid "Font size" -msgstr "Rozmiar tekstu" - -#: forms.py:58 -msgid "Default" -msgstr "DomyÅlnie" - -#: forms.py:59 -msgid "Big" -msgstr "Duży" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "Kolejka jest peÅna. ProszÄ spróbowaÄ ponownie później." - -#: models/book.py:43 models/collection.py:13 -msgid "title" -msgstr "tytuÅ" - -#: models/book.py:44 models/tag.py:35 -msgid "sort key" -msgstr "klucz sortowania" - -#: models/book.py:45 -#, fuzzy -msgid "sort key by author" -msgstr "Znalezieni autorzy" - -#: models/book.py:46 models/book.py:48 models/collection.py:14 -#: models/collection.py:17 models/tag.py:34 -msgid "slug" -msgstr "slug" - -#: models/book.py:49 -msgid "language code" -msgstr "Kod jÄzyka" - -#: models/book.py:51 models/book.py:160 models/collection.py:15 -#: models/tag.py:38 models/tag.py:144 -msgid "description" -msgstr "opis" - -#: models/book.py:52 models/book.py:53 models/bookmedia.py:34 models/tag.py:45 -#: models/tag.py:46 -msgid "creation date" -msgstr "data utworzenia" - -#: models/book.py:54 -msgid "parent number" -msgstr "numer rodzica" - -#: models/book.py:55 models/bookmedia.py:35 -msgid "extra information" -msgstr "dodatkowe informacje" - -#: models/book.py:60 -msgid "cover" -msgstr "okÅadka" - -#: models/book.py:65 -msgid "cover thumbnail" -msgstr "podglÄ d okÅadki" - -#: models/book.py:92 models/collection.py:20 -msgid "book" -msgstr "ksiÄ Å¼ka" - -#: models/book.py:93 -msgid "books" -msgstr "ksiÄ Å¼ki" - -#: models/book.py:258 -#, python-format -msgid "Book \"%s\" does not exist." -msgstr "Utwór \"%s\" nie istnieje." - -#: models/book.py:272 -#, python-format -msgid "Book %s already exists" -msgstr "KsiÄ Å¼ka %s już istnieje" - -#: models/book.py:519 -msgid "This work needs modernisation" -msgstr "Ten utwór wymaga uwspóÅczeÅnienia" - -#: models/book.py:546 models/bookmedia.py:27 -#, python-format -msgid "%s file" -msgstr "plik %s" - -#: models/bookmedia.py:30 -msgid "type" -msgstr "typ" - -#: models/bookmedia.py:31 models/source.py:12 models/tag.py:33 -msgid "name" -msgstr "nazwa" - -#: models/bookmedia.py:32 -msgid "file" -msgstr "plik" - -#: models/bookmedia.py:44 models/bookmedia.py:45 -msgid "book media" -msgstr "media ksiÄ Å¼ki" - -#: models/collection.py:18 -msgid "book slugs" -msgstr "slugi utworów" - -#: models/collection.py:20 models/tag.py:20 -msgid "kind" -msgstr "rodzaj" - -#: models/collection.py:24 -msgid "collection" -msgstr "kolekcja" - -#: models/collection.py:25 -msgid "collections" -msgstr "kolekcje" - -#: models/fragment.py:31 -msgid "fragment" -msgstr "fragment" - -#: models/fragment.py:32 -msgid "fragments" -msgstr "fragmenty" - -#: models/source.py:11 -msgid "network location" -msgstr "poÅożenie sieciowe" - -#: models/source.py:16 -msgid "source" -msgstr "źródÅo" - -#: models/source.py:17 -msgid "sources" -msgstr "źródÅa" - -#: models/tag.py:18 -msgid "author" -msgstr "autor" - -#: models/tag.py:19 -msgid "epoch" -msgstr "epoka" - -#: models/tag.py:21 -msgid "genre" -msgstr "gatunek" - -#: models/tag.py:22 -msgid "theme" -msgstr "motyw" - -#: models/tag.py:23 -msgid "set" -msgstr "póÅka" - -#: models/tag.py:24 -msgid "thing" -msgstr "przedmiot" - -#: models/tag.py:36 -msgid "category" -msgstr "kategoria" - -#: models/tag.py:66 -msgid "tag" -msgstr "tag" - -#: models/tag.py:67 -msgid "tags" -msgstr "tagi" - -#: templates/catalogue/audiobook_list.html:8 -#: templates/catalogue/audiobook_list.html:17 -msgid "Listing of all audiobooks" -msgstr "Spis wszystkich audiobooków" - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest MP3 audiobooks" -msgstr "Ostatnio dodane audiobooki w formacie MP3" - -#: templates/catalogue/audiobook_list.html:14 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "Ostatnio dodane audiobooki w formacie Ogg Vorbis" - -#: templates/catalogue/book_detail.html:23 -#: templates/catalogue/book_text.html:20 -msgid "Other versions" -msgstr "Inne wersje" - -#: templates/catalogue/book_detail.html:31 -#: templates/catalogue/tagged_object_list.html:75 -#: templates/catalogue/tagged_object_list.html:118 -msgid "See also" -msgstr "Zobacz też" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "Motyw" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "w utworze" - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "Utwór jest udostÄpniony na licencji:" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " -"Commons Attribution-ShareAlike 3.0</a>\n" -" license." -msgstr "" -"Ten utwór nie jest objÄty majÄ tkowym 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 <a href=" -"\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie autorstwa-" -"Na tych samych warunkach 3.0</a>." - -#: templates/catalogue/book_info.html:20 -msgid "Resource prepared based on:" -msgstr "Zasób opracowany na podstawie:" - -#: templates/catalogue/book_info.html:29 -msgid "Edited by:" -msgstr "Opracowanie redakcyjne:" - -#: templates/catalogue/book_info.html:31 -msgid "Edited and annotated by:" -msgstr "Opracowanie redakcyjne i przypisy:" - -#: templates/catalogue/book_info.html:37 -msgid "Publication funded by:" -msgstr "PublikacjÄ ufundowali i ufundowaÅy:" - -#: templates/catalogue/book_info.html:43 -msgid "Cover image by:" -msgstr "Ilustracja na okÅadce:" - -#: templates/catalogue/book_list.html:8 templates/catalogue/book_list.html:13 -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all works" -msgstr "Spis wszystkich utworów" - -#: templates/catalogue/book_list.html:26 -msgid "Table of Content" -msgstr "Spis treÅci" - -#: templates/catalogue/book_list.html:36 -msgid "â top â" -msgstr "â góra â" - -#: templates/catalogue/book_short.html:53 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "Epoka" - -#: templates/catalogue/book_short.html:61 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "Rodzaj" - -#: templates/catalogue/book_short.html:69 -msgid "Genre" -msgstr "Gatunek" - -#: templates/catalogue/book_short.html:78 -msgid "Language" -msgstr "JÄzyk" - -#: templates/catalogue/book_short.html:97 -msgid "Read online" -msgstr "Czytaj online" - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_wide.html:72 views.py:594 -msgid "Download" -msgstr "Pobierz" - -#: templates/catalogue/book_short.html:104 -msgid "to print" -msgstr "do druku" - -#: templates/catalogue/book_short.html:107 -msgid "for an e-book reader" -msgstr "na czytnik e-booków" - -#: templates/catalogue/book_short.html:110 -msgid "for Kindle" -msgstr "na Kindle" - -#: templates/catalogue/book_short.html:113 -msgid "FictionBook" -msgstr "FictionBook" - -#: templates/catalogue/book_short.html:116 -msgid "for advanced usage" -msgstr "do zadaÅ specjalnych" - -#: templates/catalogue/book_short.html:122 -msgid "Listen" -msgstr "SÅuchaj" - -#: templates/catalogue/book_text.html:26 -msgid "Table of contents" -msgstr "Spis treÅci" - -#: templates/catalogue/book_text.html:30 templatetags/catalogue_tags.py:336 -msgid "Themes" -msgstr "Motywy" - -#: templates/catalogue/book_text.html:34 templates/catalogue/book_text.html:91 -msgid "Settings" -msgstr "Ustawienia" - -#: templates/catalogue/book_text.html:38 -msgid "Edit. note" -msgstr "Nota red." - -#: templates/catalogue/book_text.html:42 -msgid "Infobox" -msgstr "Informacje" - -#: templates/catalogue/book_text.html:56 -#: templates/catalogue/viewer_base.html:53 -msgid "Close" -msgstr "Zamknij" - -#: templates/catalogue/book_text.html:57 -msgid "Please wait..." -msgstr "ProszÄ czekaÄâ¦" - -#: templates/catalogue/book_text.html:73 -msgid "Other versions of the book" -msgstr "Inne wersje utworu" - -#: templates/catalogue/book_text.html:74 -msgid "Close the other version" -msgstr "Zamknij drugÄ wersjÄ" - -#: templates/catalogue/book_text.html:92 -msgid "Display line numbers" -msgstr "WyÅwietlaj numeracjÄ" - -#: templates/catalogue/book_text.html:93 -msgid "Display themes" -msgstr "WyÅwietlaj motywy" - -#: templates/catalogue/book_text.html:94 -msgid "Display footnotes" -msgstr "WyÅwietlaj przypisy" - -#: templates/catalogue/book_wide.html:23 -#: templates/catalogue/tagged_object_list.html:61 -msgid "Motifs and themes" -msgstr "Motywy i tematy" - -#: templates/catalogue/book_wide.html:52 -msgid "See" -msgstr "Zobacz" - -#: templates/catalogue/book_wide.html:55 -msgid "Source" -msgstr "ŹródÅo" - -#: templates/catalogue/book_wide.html:55 -msgid "of the book" -msgstr "utworu" - -#: templates/catalogue/book_wide.html:56 -msgid "in" -msgstr "w serwisie" - -#: templates/catalogue/book_wide.html:58 -msgid "Source XML file" -msgstr "ŹródÅowy plik XML" - -#: templates/catalogue/book_wide.html:60 -msgid "Book on" -msgstr "Utwór na" - -#: templates/catalogue/book_wide.html:60 -msgid "Editor's Platform" -msgstr "Platformie Redakcyjnej" - -#: templates/catalogue/book_wide.html:63 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "Opis lektury w Lektury.Gazeta.pl" - -#: templates/catalogue/book_wide.html:66 -msgid "Book description on Wikipedia" -msgstr "Opis lektury w Wikipedii" - -#: templates/catalogue/book_wide.html:68 -msgid "Mix this book" -msgstr "Miksuj treÅÄ utworu" - -#: templates/catalogue/book_wide.html:76 -msgid "Download all audiobooks for this book" -msgstr "Pobierz wszystkie audiobooki tego utworu" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -#: templates/catalogue/menu.html:6 -msgid "Catalogue" -msgstr "Katalog" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "Pobierz katalog w formacie PDF." - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:20 -#: templates/catalogue/tagged_object_list.html:27 -#: templatetags/catalogue_tags.py:332 -msgid "Authors" -msgstr "Autorzy" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:28 -#: templates/catalogue/tagged_object_list.html:35 -#: templatetags/catalogue_tags.py:334 -msgid "Kinds" -msgstr "Rodzaje" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:36 -#: templates/catalogue/tagged_object_list.html:43 -#: templatetags/catalogue_tags.py:333 -msgid "Genres" -msgstr "Gatunki" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:44 -#: templates/catalogue/tagged_object_list.html:51 -#: templatetags/catalogue_tags.py:335 -msgid "Epochs" -msgstr "Epoki" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "Motywy i tematy" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:19 -msgid "Collections" -msgstr "Kolekcje" - -#: templates/catalogue/daisy_list.html:7 -#: templates/catalogue/daisy_list.html:13 -msgid "Listing of all DAISY files" -msgstr "Spis wszystkich plików DAISY" - -#: templates/catalogue/daisy_list.html:10 -msgid "Latest DAISY audiobooks" -msgstr "Ostatnio dodane audiobooki w formacie DAISY" - -#: 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:" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "RozwiÅ fragment" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "ZwiÅ fragment" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:6 -msgid "See full category" -msgstr "Zobacz caÅÄ kategoriÄ" - -#: templates/catalogue/menu.html:5 -msgid "Catalogue of the library" -msgstr "Katalog biblioteki" - -#: templates/catalogue/menu.html:13 templates/catalogue/menu.html.py:21 -msgid "Please waitâ¦" -msgstr "ProszÄ czekaÄâ¦" - -#: templates/catalogue/menu.html:26 -msgid "All books" -msgstr "Wszystkie utwory" - -#: templates/catalogue/menu.html:29 -msgid "Audiobooks" -msgstr "Audiobooki" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "DAISY" - -#: templates/catalogue/menu.html:36 templates/catalogue/tag_list_split.html:8 -msgid "Gallery" -msgstr "Galeria" - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "Utwór jest udostÄpniony na licencji" - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "Na podstawie" - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "O utworze" - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "Autor" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "W innych miejscach" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "ŹródÅo obrazu" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "Obraz na Platformie Redakcyjnej" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "ŹródÅowy plik XML" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "Motywy w utworze" - -#: templates/catalogue/player.html:11 templates/catalogue/viewer_base.html:9 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "Strona utworu" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "Pobierz jako" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "Czyta" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "Reżyseruje" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "Audiobooki przygotowane w ramach projektów:" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "%(cs)s, finansowanego przez %(fb)s" - -#: templates/catalogue/player.html:125 -#, 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/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "Audiobooki przygotowane w ramach projektu %(cs)s." - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -msgid "Recent audiobooks" -msgstr "Ostatnio dodane audiobooki" - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "Ostatnio dodane pliki DAISY" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -msgid "Recent publications" -msgstr "Ostatnie publikacje" - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" -" and <a href=\"%(d)s\">recent DAISY files</a>." -msgstr "" -"Zobacz też listÄ <a href=\"%(a)s\">ostatnio dodanych audiobooków</a>\n" -" i <a href=\"%(d)s\">plików DAISY</a>." - -#: templates/catalogue/search_multiple_hits.html:8 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "Szukaj" - -#: templates/catalogue/search_multiple_hits.html:14 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "Czy chodziÅo Ci o" - -#: templates/catalogue/search_multiple_hits.html:55 -msgid "Results by title" -msgstr "Znalezione w tytuÅach" - -#: templates/catalogue/search_multiple_hits.html:70 -msgid "Results by authors" -msgstr "Znalezieni autorzy" - -#: templates/catalogue/search_multiple_hits.html:83 -msgid "Results by translators" -msgstr "Znalezieni tÅumacze" - -#: templates/catalogue/search_multiple_hits.html:96 -msgid "Results in text" -msgstr "Znalezione w treÅci" - -#: templates/catalogue/search_multiple_hits.html:113 -msgid "Other results" -msgstr "Inne wyniki" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:162 -msgid "Sorry! Search cirteria did not match any resources." -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" -"\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." - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "Przepraszamy! Zapytanie musi zawieraÄ co najmniej dwa znaki." - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -msgid "Download a custom PDF" -msgstr "Stwórz wÅasny plik PDF" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "Wolna licencja" - -#: templates/catalogue/tag_list_split.html:3 -msgid "Literature" -msgstr "Literatura" - -#: templates/catalogue/tagged_object_list.html:79 -#: templates/catalogue/tagged_object_list.html:132 -msgid "in Culture.pl" -msgstr "w Culture.pl" - -#: templates/catalogue/tagged_object_list.html:84 -#: templates/catalogue/tagged_object_list.html:122 -msgid "in Lektury.Gazeta.pl" -msgstr "w serwisie Lektury.Gazeta.pl" - -#: templates/catalogue/tagged_object_list.html:89 -#: templates/catalogue/tagged_object_list.html:127 -msgid "in Wikipedia" -msgstr "w Wikipedii" - -#: templates/catalogue/viewer_base.html:55 -msgid "Loading" -msgstr "Åadowanie" - -#: views.py:558 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" -"WystÄ piÅ bÅÄ d: %(exception)s\n" -"\n" -"%(tb)s" - -#: views.py:559 -msgid "Book imported successfully" -msgstr "KsiÄ Å¼ka zaimportowana" - -#: views.py:561 -#, python-format -msgid "Error importing file: %r" -msgstr "BÅÄ d podczas importowania pliku: %r" - -#: views.py:593 -msgid "Download custom PDF" -msgstr "Stwórz wÅasny PDF" - -#~ msgid "book count" -#~ msgstr "liczba ksiÄ Å¼ek" - -#~ msgid "picture count" -#~ msgstr "liczba obrazów" - -#~ msgid "" -#~ "Book tags can't have attached links. Set them directly on the book " -#~ "instead of it's tag." -#~ msgstr "" -#~ "Tagi typu ksiÄ Å¼ka nie mogÄ mieÄ ustawionych linków. Ustaw je bezpoÅrednio " -#~ "dla ksiÄ Å¼ki, zamiast dla jej tagu." - -#~ msgid "Wikisource" -#~ msgstr "WikiźródÅa" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." -#~ msgstr "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." - -#~ 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Å." -#~ 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Å." - -#~ msgid "Listing of all pictures" -#~ msgstr "Spis wszystkich obrazów" - -#~ msgid "for a reader" -#~ msgstr "na czytnik" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "WrzuÄ lekturÄ na póÅkÄ!" - -#~ msgid "Create new shelf" -#~ msgstr "Utwórz nowÄ póÅkÄ" - -#~ 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." - -#~ msgid "Put on the shelf!" -#~ msgstr "WrzuÄ na póÅkÄ" - -#~ msgid "Shelves containing fragment" -#~ msgstr "PóÅki zawierajÄ ce fragment" - -#~ 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." - -#~ msgid "Save all shelves" -#~ msgstr "Zapisz póÅki" - -#~ msgid "Your shelves with books" -#~ msgstr "Twoje póÅki z lekturami" - -#~ msgid "remove" -#~ msgstr "usuÅ" - -#~ 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." - -#~ msgid "Create shelf" -#~ msgstr "Utwórz póÅkÄ" - -#~ msgid "Enter a valid JSON value. Error: %s" -#~ msgstr "Wprowadź prawidÅowÄ wartoÅÄ JSON. BÅÄ d: %s" - -#~ msgid "A4" -#~ msgstr "A4" - -#~ msgid "A5" -#~ msgstr "A5" - -#~ msgid "Incorrect customization options for PDF" -#~ msgstr "Niepoprawne opcje dla PDF" - -#~ msgid "Bad method" -#~ msgstr "ZÅa metoda" - -#~ msgid "title, author, theme/topic, epoch, kind, genre" -#~ msgstr "tytuÅ, autor, motyw/temat, epoka, rodzaj, gatunek" - -#~ msgid "ODT file" -#~ msgstr "Plik ODT" - -#~ msgid "MP3 file" -#~ msgstr "Plik MP3" - -#~ msgid "OGG file" -#~ msgstr "Plik OGG" - -#~ msgid "main page" -#~ msgstr "strona gÅówna" - -#~ msgid "Show tag on main page" -#~ msgstr "Pokazuj tag na stronie gÅównej" - -#~ msgid "HTML file" -#~ msgstr "Plik HTML" - -#~ msgid "PDF file" -#~ msgstr "Plik PDF" - -#~ msgid "EPUB file" -#~ msgstr "Plik EPUB" - -#~ msgid "TXT file" -#~ msgstr "Plik TXT" - -#~ msgid "sha-1 hash" -#~ msgstr "hash sha-1" - -#~ msgid "time" -#~ msgstr "czas" - -#~ msgid "<p>To maintain your shelves you need to be logged in.</p>" -#~ msgstr "<p>Aby zarzÄ dzaÄ swoimi póÅkami, musisz siÄ zalogowaÄ.</p>" - -#~ msgid "<p>Shelves were sucessfully saved.</p>" -#~ msgstr "<p>PóÅki zostaÅy zapisane.</p>" - -#~ msgid "Book was successfully removed from the shelf" -#~ msgstr "UsuniÄto" - -#~ msgid "<p>Shelf <strong>%s</strong> was successfully removed</p>" -#~ msgstr "<p>PóÅka <strong>%s</strong> zostaÅa usuniÄta</p>" - -#, fuzzy -#~ msgid "sort_key" -#~ msgstr "klucz sortowania" - -#~ msgid "year of death" -#~ msgstr "rok Åmierci" - -#~ msgid "short HTML" -#~ msgstr "krótki HTML" - -#~ msgid "year of translator's death" -#~ msgstr "rok Åmierci tÅumacza" - -#~ msgid "book stub" -#~ msgstr "zapowiedź ksiÄ Å¼ki" - -#~ msgid "<p>Shelf <strong>%s</strong> was successfully created</p>" -#~ msgstr "<p>PóÅka <strong>%s</strong> zostaÅa utworzona</p>" diff --git a/apps/catalogue/locale/ru/LC_MESSAGES/django.mo b/apps/catalogue/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index 28bb9da3c..000000000 Binary files a/apps/catalogue/locale/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/ru/LC_MESSAGES/django.po b/apps/catalogue/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index dec617fc1..000000000 --- a/apps/catalogue/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,874 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: 2013-04-09 10:40+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "УкажиÑе, пожалÑйÑÑа, XML." - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "Ðе показÑваÑÑ ÑноÑки" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "Ðе показÑваÑÑ ÑемÑ" - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "Ðе иÑполÑзÑйÑе Ð½Ð°Ñ ÑпеÑиалÑнÑй ÑÑиÑÑ" - -#: forms.py:49 -msgid "Without cover" -msgstr "" - -#: forms.py:52 -msgid "Leading" -msgstr "Ðедение" - -#: forms.py:53 -msgid "Normal leading" -msgstr "ÐоÑмалÑное ведение" - -#: forms.py:54 -msgid "One and a half leading" -msgstr "1,5 ведениÑ" - -#: forms.py:55 -msgid "Double leading" -msgstr "Ðвойное ведение" - -#: forms.py:57 -msgid "Font size" -msgstr "Ð Ð°Ð·Ð¼ÐµÑ ÑÑиÑÑа" - -#: forms.py:58 -msgid "Default" -msgstr "УмолÑание" - -#: forms.py:59 -msgid "Big" -msgstr "ÐолÑÑой" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "" - -#: views.py:585 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" -"ÐоÑвилаÑÑ Ð¾Ñибка: %(exception)s\n" -"\n" -"%(tb)s" - -#: views.py:586 -msgid "Book imported successfully" -msgstr "ÐÑ ÑдаÑно заимпоÑÑиÑовали книгÑ" - -#: views.py:588 -#, python-format -msgid "Error importing file: %r" -msgstr "ÐÑибка импоÑÑа Ñайла: %r" - -#: views.py:620 -msgid "Download custom PDF" -msgstr "СкаÑаÑÑ PDF полÑзоваÑелÑ" - -#: views.py:621 templates/catalogue/book_short.html:92 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 -msgid "Download" -msgstr "ÐагÑÑзиÑÑ" - -#: models/book.py:28 models/collection.py:11 -msgid "title" -msgstr "заглавие" - -#: models/book.py:29 models/tag.py:34 -msgid "sort key" -msgstr "клÑÑ ÑоÑÑиÑовки " - -#: models/book.py:30 models/book.py:32 models/collection.py:12 -#: models/collection.py:15 models/tag.py:33 -msgid "slug" -msgstr "slug" - -#: models/book.py:33 -msgid "language code" -msgstr "код ÑзÑка" - -#: models/book.py:35 models/book.py:146 models/collection.py:13 -#: models/tag.py:37 models/tag.py:94 -msgid "description" -msgstr "опиÑание" - -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 -#: models/tag.py:47 -msgid "creation date" -msgstr "даÑа ÑозданиÑ" - -#: models/book.py:38 -msgid "parent number" -msgstr "Ð½Ð¾Ð¼ÐµÑ ÑодиÑелÑ" - -#: models/book.py:39 models/bookmedia.py:30 -msgid "extra information" -msgstr "дополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ" - -#: models/book.py:44 -msgid "cover" -msgstr "обложка" - -#: models/book.py:66 models/collection.py:18 models/tag.py:22 -msgid "book" -msgstr "книга" - -#: models/book.py:67 -msgid "books" -msgstr "книги" - -#: models/book.py:244 -#, fuzzy, python-format -msgid "Book \"%s\" does not exist." -msgstr "Ðнига Ñо slug = \"%s\" не ÑÑÑеÑÑвÑеÑ." - -#: models/book.py:258 -#, python-format -msgid "Book %s already exists" -msgstr "Ðнига %s Ñже ÑÑÑеÑÑвÑеÑ" - -#: models/book.py:599 models/bookmedia.py:23 -#, fuzzy, python-format -msgid "%s file" -msgstr "XML Ñайл" - -#: models/bookmedia.py:26 -msgid "type" -msgstr "Ñип" - -#: models/bookmedia.py:27 models/tag.py:32 -msgid "name" -msgstr "название" - -#: models/bookmedia.py:28 -#, fuzzy -msgid "file" -msgstr "XML Ñайл" - -#: models/bookmedia.py:39 models/bookmedia.py:40 -msgid "book media" -msgstr "аÑдиокнига" - -#: models/collection.py:16 -#, fuzzy -msgid "book slugs" -msgstr "анонÑÑ ÐºÐ½Ð¸Ð³Ð¸" - -#: models/collection.py:18 models/tag.py:18 -msgid "kind" -msgstr "ÑоÑма" - -#: models/collection.py:22 -msgid "collection" -msgstr "ÑбоÑ" - -#: models/collection.py:23 -msgid "collections" -msgstr "ÑбоÑÑ" - -#: models/fragment.py:32 -msgid "fragment" -msgstr "ÑÑагменÑ" - -#: models/fragment.py:33 -msgid "fragments" -msgstr "ÑÑагменÑÑ" - -#: models/tag.py:16 -msgid "author" -msgstr "авÑоÑ" - -#: models/tag.py:17 -msgid "epoch" -msgstr "ÑÐ¿Ð¾Ñ Ð°" - -#: models/tag.py:19 -msgid "genre" -msgstr "жанÑ" - -#: models/tag.py:20 -msgid "theme" -msgstr "моÑив" - -#: models/tag.py:21 -msgid "set" -msgstr "набоÑ" - -#: models/tag.py:23 -msgid "thing" -msgstr "" - -#: models/tag.py:35 -msgid "category" -msgstr "каÑегоÑиÑ" - -#: models/tag.py:40 -msgid "book count" -msgstr "ÑиÑло книг" - -#: models/tag.py:41 -msgid "picture count" -msgstr "" - -#: models/tag.py:65 -msgid "tag" -msgstr "Ñаг" - -#: models/tag.py:66 -msgid "tags" -msgstr "Ñаги" - -#: models/tag.py:83 -msgid "" -"Book tags can't have attached links. Set them directly on the book instead " -"of it's tag." -msgstr "" - -#: templates/catalogue/audiobook_list.html:7 -#: templates/catalogue/audiobook_list.html:16 -msgid "Listing of all audiobooks" -msgstr "СпиÑок ÑабоÑ" - -#: templates/catalogue/audiobook_list.html:12 -msgid "Latest MP3 audiobooks" -msgstr "ÐоÑледние MP3 аÑдиокниги" - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "ÐоÑледние Ogg Vorbis аÑдиокниги" - -#: templates/catalogue/audiobook_list.html:19 -msgid "" -"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -"Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -"Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." -msgstr "" -"ÐÑдиоÑека ÑколÑнÑÑ ÑÑений Фонда Nowoczesna Polska.\n" -". ÐожеÑе иÑполÑзоваÑÑ ÐµÐµ беÑплаÑно и без огÑаниÑений. \n" -"ÐÑдиокниги запиÑÑваÑÑ Ð¸Ð·Ð²ÐµÑÑнÑе акÑеÑÑ, в Ñом ÑиÑле ÐанÑÑа СÑенка и Ян ÐеÑек." - -#: templates/catalogue/book_detail.html:20 -#: templates/catalogue/tagged_object_list.html:74 -#: templates/catalogue/tagged_object_list.html:109 -msgid "See also" -msgstr "ÐодÑобнее" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "ÐоÑив" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "в ÑÑÑде" - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "РазÑеÑение на ÑабоÑÑ Ñо ÑÑоÑонÑ" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " -"Commons Attribution-ShareAlike 3.0</a>\n" -" license." -msgstr "" -"ÐÑÐ¾Ñ ÑÑÑд не заÑиÑен авÑоÑÑким пÑавом и ÑвлÑеÑÑÑ ÑаÑÑÑÑ \n" -"        обÑеÑÑвенного домена, ÑÑо обознаÑаеÑ, нем можно Ñвободно " -"ÑполÑзоваÑÑÑÑ, пÑбликоваÑÑ Ð¸ \n" -"        ÑаÑпÑоÑÑÑанÑÑÑ. ÐÑли еÑÑÑ ÐºÐ°ÐºÐ¸Ðµ-либо дополниÑелÑнÑе маÑеÑиалÑ, " -"заÑиÑеннÑе авÑоÑÑкими пÑавами \n" -"        пÑедоÑÑавленнÑе Ñ ÑÑой ÑабоÑой (напÑимеÑ, анноÑаÑии, моÑÐ¸Ð²Ñ Ð¸ Ñ." -"д.), ÑÑи \n" -"        маÑеÑÐ¸Ð°Ð»Ñ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ð¿Ð¾ лиÑензией \n" -"        <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\"> " -"Creative Commons Attribution-ShareAlike 3.0 </ a>" - -#: templates/catalogue/book_info.html:20 -#, fuzzy -msgid "Resource prepared based on:" -msgstr "ТекÑÑ Ð¿Ð¾Ð´Ð³Ð¾Ñовлен на оÑнове:" - -#: templates/catalogue/book_info.html:28 -msgid "Edited and annotated by:" -msgstr "Ðод ÑедакÑией и Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑиÑми:" - -#: templates/catalogue/book_info.html:33 -msgid "Publication funded by:" -msgstr "" - -#: templates/catalogue/book_info.html:39 -msgid "Cover image by:" -msgstr "" - -#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 -msgid "Listing of all works" -msgstr "СпиÑок ÑабоÑ" - -#: templates/catalogue/book_list.html:21 -msgid "Table of Content" -msgstr "Ðглавление" - -#: templates/catalogue/book_list.html:30 -msgid "â top â" -msgstr "â Ñоп â" - -#: templates/catalogue/book_short.html:59 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "ÑÐ¿Ð¾Ñ Ð°" - -#: templates/catalogue/book_short.html:66 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "ÑоÑма" - -#: templates/catalogue/book_short.html:73 -msgid "Genre" -msgstr "жанÑ" - -#: templates/catalogue/book_short.html:88 -msgid "Read online" -msgstr "ЧиÑаÑÑ Ð¾Ð½Ð»Ð°Ð¹Ð½" - -#: templates/catalogue/book_short.html:95 -#: templates/catalogue/book_text.html:40 -msgid "to print" -msgstr "пеÑаÑаÑÑ" - -#: templates/catalogue/book_short.html:98 -msgid "for an e-book reader" -msgstr "Ð´Ð»Ñ ÑиÑаÑÐµÐ»Ñ ÑлекÑÑонной книги" - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_text.html:46 -msgid "for Kindle" -msgstr "Ð´Ð»Ñ Ðиндле" - -#: templates/catalogue/book_short.html:104 -#: templates/catalogue/book_text.html:49 -msgid "FictionBook" -msgstr "" - -#: templates/catalogue/book_short.html:107 -#: templates/catalogue/book_text.html:52 -msgid "for advanced usage" -msgstr "пÑодвинÑÑое иÑполÑзование" - -#: templates/catalogue/book_short.html:113 -#: templates/catalogue/book_text.html:30 -msgid "Listen" -msgstr "ÐоÑлÑÑайÑе" - -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 -msgid "Wolne Lektury" -msgstr "на WolneLektury.pl" - -#: templates/catalogue/book_text.html:22 -msgid "Table of contents" -msgstr "Ðглавление" - -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 -msgid "Themes" -msgstr "ÐоÑивÑ" - -#: templates/catalogue/book_text.html:24 -msgid "Edit. note" -msgstr "ÐзмениÑÑ Ð¿ÑимеÑание" - -#: templates/catalogue/book_text.html:25 -msgid "Infobox" -msgstr "ÐнÑобокÑ" - -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "ÐозÑаÑиÑеÑÑ Ð½Ð° ÑÐ°Ð¹Ñ ÐºÐ½Ð¸Ð³Ð¸" - -#: templates/catalogue/book_text.html:43 -msgid "for a reader" -msgstr "Ð´Ð»Ñ ÑиÑаÑелÑ" - -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 -msgid "Download all audiobooks for this book" -msgstr "СкаÑаÑÑ Ð²Ñе книги Ñ ÑÑой полки" - -#: templates/catalogue/book_wide.html:22 -#: templates/catalogue/tagged_object_list.html:60 -msgid "Motifs and themes" -msgstr "ÐоÑÐ¸Ð²Ñ Ð¸ ÑемÑ" - -#: templates/catalogue/book_wide.html:44 -msgid "See" -msgstr "ÐоÑмоÑÑиÑе" - -#: templates/catalogue/book_wide.html:47 -msgid "Source" -msgstr "ÐÑÑоÑник" - -#: templates/catalogue/book_wide.html:47 -msgid "of the book" -msgstr "данной книги" - -#: templates/catalogue/book_wide.html:49 -msgid "Source XML file" -msgstr "ÐÑÑ Ð¾Ð´Ð½Ñй Ñайл" - -#: templates/catalogue/book_wide.html:51 -msgid "Book on" -msgstr "Ðнига на" - -#: templates/catalogue/book_wide.html:51 -msgid "Editor's Platform" -msgstr "ÐлаÑÑоÑма ÑедакÑоÑов" - -#: templates/catalogue/book_wide.html:54 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "ÐпиÑание книги на Lektury.Gazeta.pl" - -#: templates/catalogue/book_wide.html:57 -msgid "Book description on Wikipedia" -msgstr "ÐпиÑание книги на Wikipedia" - -#: templates/catalogue/book_wide.html:59 -msgid "Mix this book" -msgstr "данной книги" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -msgid "Catalogue" -msgstr "ÐаÑалог" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "СкаÑаÑÑ ÐºÐ°Ñалог в PDF ÑоÑмаÑе." - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:17 -#: templates/catalogue/tagged_object_list.html:26 -#: templatetags/catalogue_tags.py:416 -msgid "Authors" -msgstr "ÐвÑоÑÑ" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:25 -#: templates/catalogue/tagged_object_list.html:34 -#: templatetags/catalogue_tags.py:418 -msgid "Kinds" -msgstr "ФоÑмÑ" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:33 -#: templates/catalogue/tagged_object_list.html:42 -#: templatetags/catalogue_tags.py:417 -msgid "Genres" -msgstr "ÐанÑÑ" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:41 -#: templates/catalogue/tagged_object_list.html:50 -#: templatetags/catalogue_tags.py:419 -msgid "Epochs" -msgstr "ÐÐ¿Ð¾Ñ Ð¸" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "ÐоÑÐ¸Ð²Ñ Ð¸ ÑемÑ" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 -#, fuzzy -msgid "Collections" -msgstr "ÑбоÑÑ" - -#: templates/catalogue/daisy_list.html:6 -#: templates/catalogue/daisy_list.html:12 -msgid "Listing of all DAISY files" -msgstr "СпиÑок вÑÐµÑ DAISY Ñайлов" - -#: templates/catalogue/daisy_list.html:9 -msgid "Latest DAISY audiobooks" -msgstr "ÐоÑледние DAISY аÑдиокниги" - -#: templates/catalogue/daisy_list.html:15 -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Å." -msgstr "" -"СиÑÑема DAISY ÑÑо извеÑÑнÑй во вÑем миÑе ÑоÑÐ¼Ð°Ñ Ð·Ð°Ð¿Ð¸Ñи книг\n" -", пÑедназнаÑен Ð´Ð»Ñ Ð»Ñдей Ñ Ð¿Ð»Ð¾Ñ Ð¸Ð¼ зÑением, Ð¿Ð»Ð¾Ñ Ð¾ видÑÑÐ¸Ñ Ð¸ дÑÑÐ³Ð¸Ñ Ð»Ð¸Ñ\n" -", имеÑÑÐ¸Ñ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ ÑÑением. Ðнигами можно полÑзоваÑÑÑÑ Ð±ÐµÑплаÑно и без " -"огÑаниÑений." - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "" -"ÐÑиÑеÑÐ¸Ñ ÑвлÑÑÑÑÑ Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°ÑнÑми. ÐожалÑйÑÑа, вÑбеÑиÑе один из ÑледÑÑÑÐ¸Ñ " -"ваÑианÑов:" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "РаÑÑÑнÑÑÑ ÑÑагменÑ" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "СкÑÑÑÑ ÑÑагменÑ" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:4 -msgid "See full category" -msgstr "ÐÑÑ ÐºÐ°ÑегоÑиÑ" - -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 -msgid "Please waitâ¦" -msgstr "" - -#: templates/catalogue/menu.html:24 -msgid "All books" -msgstr "ÐÑе книги" - -#: templates/catalogue/menu.html:28 -msgid "Audiobooks" -msgstr "ÐÑдиокниги" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "ÐаиÑÑ" - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "РазÑеÑение на ÑабоÑÑ Ñо ÑÑоÑонÑ" - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "ÐÑнованнÑй на" - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "ÐодÑобнее" - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "ÐвÑоÑ" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "дÑÑгие ÑеÑÑÑÑÑ" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "ÐÑÑоÑник книги" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "ÐзобÑажение на плаÑÑоÑме ÑедакÑоÑов" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "ÐÑоÑмоÑÑ XML-иÑÑоÑник" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "Ð¢ÐµÐ¼Ñ ÑÑÑда" - -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all pictures" -msgstr "СпиÑок ÑабоÑ" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "СкаÑаÑÑ" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "ÐÑÑиÑÑ" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "ÑежиÑÑеÑ" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "ÐÑдиокниги бÑли подгоÑÐ¾Ð²Ð»ÐµÐ½Ñ Ð² ÑÐ°Ð¼ÐºÐ°Ñ Ð¿ÑоекÑа:" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "%(cs)s, ÑинанÑиÑÑемого %(fb)s" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "" -"ÐÑдиокниги бÑли подгоÑÐ¾Ð²Ð»ÐµÐ½Ñ Ð² ÑÐ°Ð¼ÐºÐ°Ñ %(cs)s пÑоекÑa, ÑинанÑиÑÑемого %(fb)s." - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "ÐÑдиокниги бÑли подгоÑÐ¾Ð²Ð»ÐµÐ½Ñ Ð² ÑÐ°Ð¼ÐºÐ°Ñ %(cs)s пÑоекÑa." - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -#, fuzzy -msgid "Recent audiobooks" -msgstr "ÐоÑледние MP3 аÑдиокниги" - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -#, fuzzy -msgid "Recent publications" -msgstr "идÑи к пÑблиÑной домене" - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" -" and <a href=\"%(d)s\">recent DAISY files</a>." -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:5 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "ÐоиÑк" - -#: templates/catalogue/search_multiple_hits.html:11 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "ÐÑ Ð¸Ð¼ÐµÐ»Ð¸ в видÑ" - -#: templates/catalogue/search_multiple_hits.html:52 -msgid "Results by title" -msgstr "РезÑлÑÑаÑÑ Ð¿Ð¾ заглавиÑм" - -#: templates/catalogue/search_multiple_hits.html:67 -msgid "Results by authors" -msgstr "РезÑлÑÑаÑÑ Ð¿Ð¾ авÑоÑам" - -#: templates/catalogue/search_multiple_hits.html:80 -#, fuzzy -msgid "Results by translators" -msgstr "пеÑеводÑик" - -#: templates/catalogue/search_multiple_hits.html:93 -msgid "Results in text" -msgstr "РезÑлÑÑаÑÑ Ð² ÑекÑÑÐ°Ñ " - -#: templates/catalogue/search_multiple_hits.html:110 -msgid "Other results" -msgstr "дÑÑгие ÑеÑÑÑÑÑ" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:151 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "ÐзвиниÑе! ÐÑиÑеÑий поиÑка не ÑооÑвеÑÑÑвÑÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ð¼ ÑеÑÑÑÑам." - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"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 "" -"ÐÑкаÑÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ Ð´Ð²Ð¸Ð³Ð°ÑÐµÐ»Ñ Ð¸ÑполÑзÑÑ ÐºÑиÑеÑии: заглавие, авÑоÑ, Ñема/ÑÑжеÑ, " -"ÑÐ¿Ð¾Ñ Ð°, ÑоÑма и жанÑ.\n" -"\t\tÐока Ð¼Ñ Ð½Ðµ поддеÑживаем поиÑка вÑего ÑекÑÑа." - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "" -"ÐзвиниÑе! У иÑкаемого вопÑоÑа Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿Ð¾ кÑайней меÑе два ÑвойÑÑва." - -#: templates/catalogue/tag_list_split.html:5 -msgid "Literature" -msgstr "" - -#: templates/catalogue/tag_list_split.html:14 -msgid "Gallery" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:78 -msgid "in Culture.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:83 -#: templates/catalogue/tagged_object_list.html:113 -msgid "in Lektury.Gazeta.pl" -msgstr "на Lektury.Gazeta.pl" - -#: templates/catalogue/tagged_object_list.html:88 -#: templates/catalogue/tagged_object_list.html:118 -msgid "in Wikipedia" -msgstr "в Ðикипедии" - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -msgid "Download a custom PDF" -msgstr "СкаÑаÑÑ PDF" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "ÐоÑÑавÑÑе ÐºÐ½Ð¸Ð³Ñ Ð½Ð° полкÑ!" - -#~ msgid "Create new shelf" -#~ msgstr "СоздаÑÑ Ð½Ð¾Ð²ÑÑ Ð¿Ð¾Ð»ÐºÑ" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "У Ð²Ð°Ñ Ð½ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ Ð¿Ð¾Ð»Ð¾Ðº. ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð¾Ð´Ð½Ñ Ð½Ð¸Ð¶Ðµ." - -#~ msgid "Put on the shelf!" -#~ msgstr "ÐоÑÑавÑÑе на полкÑ!" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Ðолки Ñ ÑÑагменÑом" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "У Ð²Ð°Ñ Ð½ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð¹ полки. ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð¾Ð´Ð½Ñ Ð½Ð¸Ð¶Ðµ." - -#~ msgid "Save all shelves" -#~ msgstr "Ð¡Ð¾Ñ ÑаниÑÑ Ð²Ñе полки" - -#~ msgid "Your shelves with books" -#~ msgstr "ÐаÑи книжнÑе полки" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "У Ð²Ð°Ñ Ð½ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ Ð¿Ð¾Ð»Ð¾Ðº. ÐÑли Ñ Ð¾ÑиÑе, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð¾Ð´Ð½Ñ Ð½Ð¸Ð¶Ðµ." - -#~ msgid "Create shelf" -#~ msgstr "СоздаÑÑ Ð¿Ð¾Ð»ÐºÑ" - -#~ msgid "Enter a valid JSON value. Error: %s" -#~ msgstr "ÐвеÑÑи пÑавилÑное JSON знаÑение. ÐÑибка: %s" - -#~ msgid "A4" -#~ msgstr "b2" - -#~ msgid "A5" -#~ msgstr "A5" - -#~ msgid "Incorrect customization options for PDF" -#~ msgstr "ÐепÑавилÑнÑе паÑамеÑÑÑ Ð½Ð°ÑÑÑойки Ð´Ð»Ñ PDF" - -#~ msgid "Bad method" -#~ msgstr "ÐÐ»Ð¾Ñ Ð¾Ð¹ меÑод" - -#~ msgid "title, author, theme/topic, epoch, kind, genre" -#~ msgstr "Ðаглавие, авÑоÑ, моÑив/Ñема, ÑÐ¿Ð¾Ñ Ð°, ÑоÑма, жанÑ" - -#~ msgid "main page" -#~ msgstr "Ð³Ð»Ð°Ð²Ð½Ð°Ñ ÑÑÑаниÑа" - -#~ msgid "Show tag on main page" -#~ msgstr "ÐоказаÑÑ Ñаг на главной ÑÑÑаниÑе" - -#~ msgid "year of death" -#~ msgstr "год ÑмеÑÑи" - -#~ msgid "short HTML" -#~ msgstr "коÑоÑкий HTML" - -#~ msgid "HTML file" -#~ msgstr "HTML Ñайл" - -#~ msgid "PDF file" -#~ msgstr "PDF Ñайл" - -#~ msgid "EPUB file" -#~ msgstr "EPUB Ñайл" - -#~ msgid "ODT file" -#~ msgstr "ODT Ñайл" - -#~ msgid "TXT file" -#~ msgstr "TXT Ñайл" - -#~ msgid "MP3 file" -#~ msgstr "MP3 Ñайл" - -#~ msgid "OGG file" -#~ msgstr "OGG Ñайл" - -#~ msgid "year of translator's death" -#~ msgstr "год ÑмеÑÑи пеÑеводÑика" - -#~ msgid "book stub" -#~ msgstr "Ð°Ð½Ð¾Ð½Ñ ÐºÐ½Ð¸Ð³Ð¸" - -#, fuzzy -#~ msgid "time" -#~ msgstr "моÑив" - -#~ msgid "<p>To maintain your shelves you need to be logged in.</p>" -#~ msgstr "<p>ÐаÑегиÑÑÑÑйÑеÑÑ, ÑÑÐ¾Ð±Ñ ÑÐ¾Ñ ÑаниÑÑ Ñвои полки.</p>" - -#~ msgid "<p>Shelves were sucessfully saved.</p>" -#~ msgstr "<p>Ðолки - ÑдаÑно ÑÐ¾Ñ ÑаненÑ.</p>" - -#~ msgid "Book was successfully removed from the shelf" -#~ msgstr "Ðнига бÑла ÑдаÑно Ñдалена Ñ Ð¿Ð¾Ð»ÐºÐ¸" - -#~ msgid "<p>Shelf <strong>%s</strong> was successfully created</p>" -#~ msgstr "<p>Ðолка <strong>%s</strong>бÑла ÑдаÑно Ñоздана</p>" - -#~ msgid "<p>Shelf <strong>%s</strong> was successfully removed</p>" -#~ msgstr "<p>Ðолка<strong>%s</strong>бÑла ÑдаÑно Ñдалена." - -#~ msgid "Today is %(month)s, %(day)s." -#~ msgstr "Ð¡ÐµÐ³Ð¾Ð´Ð½Ñ %(month)s, %(day)s." - -#~ msgid "content type" -#~ msgstr "Ñип ÑодеÑжаниÑ" - -#~ msgid "object id" -#~ msgstr "ID обÑекÑа" diff --git a/apps/catalogue/locale/uk/LC_MESSAGES/django.mo b/apps/catalogue/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index cea863ee3..000000000 Binary files a/apps/catalogue/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/catalogue/locale/uk/LC_MESSAGES/django.po b/apps/catalogue/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index 6424340b4..000000000 --- a/apps/catalogue/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,870 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:19+0100\n" -"PO-Revision-Date: 2013-04-09 10:40+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: constants.py:10 -msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" -msgstr "" - -#: forms.py:27 -msgid "Please supply an XML." -msgstr "ÐведÑÑÑ Ð±ÑÐ´Ñ Ð»Ð°Ñка XML." - -#: forms.py:46 -msgid "Don't show footnotes" -msgstr "Ð¡Ñ Ð¾Ð²Ð°Ñи пÑимÑÑки" - -#: forms.py:47 -msgid "Don't disply themes" -msgstr "Ð¡Ñ Ð¾Ð²Ð°Ñи Ñеми" - -#: forms.py:48 -msgid "Don't use our custom font" -msgstr "Ðе викоÑиÑÑовÑваÑи наÑого наÑÑÑоÑваного ÑÑиÑÑÑ" - -#: forms.py:49 -msgid "Without cover" -msgstr "" - -#: forms.py:52 -msgid "Leading" -msgstr "Leading" - -#: forms.py:53 -msgid "Normal leading" -msgstr "Normal leading" - -#: forms.py:54 -msgid "One and a half leading" -msgstr "One and a half leading" - -#: forms.py:55 -msgid "Double leading" -msgstr "Double leading" - -#: forms.py:57 -msgid "Font size" -msgstr "РозмÑÑ ÑÑиÑÑÑ" - -#: forms.py:58 -msgid "Default" -msgstr "Ðа ÑмовÑаннÑм" - -#: forms.py:59 -msgid "Big" -msgstr "Ðеликий" - -#: forms.py:82 -msgid "Queue is full. Please try again later." -msgstr "" - -#: views.py:585 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" -"СиÑÑема виÑвила Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑ %(exception)s\n" -"\n" -"%(tb)s" - -#: views.py:586 -msgid "Book imported successfully" -msgstr "ÐÐ½Ð¸Ð¶ÐºÑ ÑÑпÑÑно заванÑажено" - -#: views.py:588 -#, python-format -msgid "Error importing file: %r" -msgstr "Ðомилка в заванÑÐ°Ð¶ÐµÐ½Ð½Ñ Ñайла: %r" - -#: views.py:620 -msgid "Download custom PDF" -msgstr "ÐаванÑажиÑи наÑÑÑоÑваний PDF" - -#: views.py:621 templates/catalogue/book_short.html:92 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 -msgid "Download" -msgstr "ÐаванÑажиÑи" - -#: models/book.py:28 models/collection.py:11 -msgid "title" -msgstr "заголовок" - -#: models/book.py:29 models/tag.py:34 -msgid "sort key" -msgstr "клÑÑ ÑоÑÑÑваннÑ" - -#: models/book.py:30 models/book.py:32 models/collection.py:12 -#: models/collection.py:15 models/tag.py:33 -msgid "slug" -msgstr "slug" - -#: models/book.py:33 -msgid "language code" -msgstr "мовний код" - -#: models/book.py:35 models/book.py:146 models/collection.py:13 -#: models/tag.py:37 models/tag.py:94 -msgid "description" -msgstr "опиÑ" - -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 -#: models/tag.py:47 -msgid "creation date" -msgstr "даÑа ÑÑвоÑеннÑ" - -#: models/book.py:38 -msgid "parent number" -msgstr "Ð½Ð¾Ð¼ÐµÑ Ð±Ð°ÑÑка" - -#: models/book.py:39 models/bookmedia.py:30 -msgid "extra information" -msgstr "додаÑкова ÑнÑоÑмаÑÑÑ" - -#: models/book.py:44 -msgid "cover" -msgstr "обкладинка" - -#: models/book.py:66 models/collection.py:18 models/tag.py:22 -msgid "book" -msgstr "книжка" - -#: models/book.py:67 -msgid "books" -msgstr "книжки" - -#: models/book.py:244 -#, python-format -msgid "Book \"%s\" does not exist." -msgstr "Ðнижка \"%s\" не ÑÑнÑÑ." - -#: models/book.py:258 -#, python-format -msgid "Book %s already exists" -msgstr "Ðнижка %s вже ÑÑнÑÑ" - -#: models/book.py:599 models/bookmedia.py:23 -#, python-format -msgid "%s file" -msgstr "Ñайл %s" - -#: models/bookmedia.py:26 -msgid "type" -msgstr "Ñип" - -#: models/bookmedia.py:27 models/tag.py:32 -msgid "name" -msgstr "назва" - -#: models/bookmedia.py:28 -msgid "file" -msgstr "Ñайл" - -#: models/bookmedia.py:39 models/bookmedia.py:40 -msgid "book media" -msgstr "book media" - -#: models/collection.py:16 -msgid "book slugs" -msgstr "slugs книжок" - -#: models/collection.py:18 models/tag.py:18 -msgid "kind" -msgstr "ÑÑд" - -#: models/collection.py:22 -msgid "collection" -msgstr "колекÑÑÑ" - -#: models/collection.py:23 -msgid "collections" -msgstr "колекÑÑÑ" - -#: models/fragment.py:32 -msgid "fragment" -msgstr "ÑÑагменÑ" - -#: models/fragment.py:33 -msgid "fragments" -msgstr "ÑÑагменÑи" - -#: models/tag.py:16 -msgid "author" -msgstr "авÑоÑ" - -#: models/tag.py:17 -msgid "epoch" -msgstr "ÐµÐ¿Ð¾Ñ Ð°" - -#: models/tag.py:19 -msgid "genre" -msgstr "жанÑ" - -#: models/tag.py:20 -msgid "theme" -msgstr "Ñема" - -#: models/tag.py:21 -msgid "set" -msgstr "вибÑÑ" - -#: models/tag.py:23 -msgid "thing" -msgstr "" - -#: models/tag.py:35 -msgid "category" -msgstr "каÑегоÑÑÑ" - -#: models/tag.py:40 -msgid "book count" -msgstr "кÑлÑкÑÑÑÑ ÐºÐ½Ð¸Ð¶Ð¾Ðº" - -#: models/tag.py:41 -msgid "picture count" -msgstr "" - -#: models/tag.py:65 -msgid "tag" -msgstr "ÑеÒ" - -#: models/tag.py:66 -msgid "tags" -msgstr "ÑеÒи" - -#: models/tag.py:83 -msgid "" -"Book tags can't have attached links. Set them directly on the book instead " -"of it's tag." -msgstr "" - -#: templates/catalogue/audiobook_list.html:7 -#: templates/catalogue/audiobook_list.html:16 -msgid "Listing of all audiobooks" -msgstr "СпиÑок ÑÑÑÑ Ð°ÑдÑокниг" - -#: templates/catalogue/audiobook_list.html:12 -msgid "Latest MP3 audiobooks" -msgstr "ÐÑÑÐ°Ð½Ð½Ñ Ð°ÑдÑокниги MP3" - -#: templates/catalogue/audiobook_list.html:13 -msgid "Latest Ogg Vorbis audiobooks" -msgstr "ÐÑÑÐ°Ð½Ð½Ñ Ð°ÑдÑокниги Ogg Vorbis" - -#: templates/catalogue/audiobook_list.html:19 -msgid "" -"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -"Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -"Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." -msgstr "" -"ÐÑдÑоÑека ÑкÑлÑÐ½Ð¾Ñ Ð»ÑÑеÑаÑÑÑи Ð¤Ð¾Ð½Ð´Ñ Ð¡ÑÑаÑна ÐолÑÑа (Fundacja Nowoczesna " -"Polska).\n" -"Ðожна Ð½ÐµÑ ÐºÐ¾ÑиÑÑÑваÑиÑÑ Ð±ÐµÐ·ÐºÐ¾ÑÑовно Ñ Ð±ÐµÐ· обмеженÑ.\n" -"ÐÑдÑокниги заÑиÑÑÑÑÑ Ð²ÑÐ´Ð¾Ð¼Ñ Ð°ÐºÑоÑи, ÑеÑед ÑÐºÐ¸Ñ ÐанÑÑа СÑенка Ñа Ян ÐеÑек." - -#: templates/catalogue/book_detail.html:20 -#: templates/catalogue/tagged_object_list.html:74 -#: templates/catalogue/tagged_object_list.html:109 -msgid "See also" -msgstr "ÐивÑÑÑÑÑ Ñакож" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:11 -msgid "Theme" -msgstr "Тема" - -#: templates/catalogue/book_fragments.html:5 -#: templates/catalogue/book_fragments.html:13 -msgid "in work " -msgstr "Ñ ÑвоÑÑ" - -#: templates/catalogue/book_info.html:6 -msgid "This work is licensed under:" -msgstr "Цей ÑвÑÑ Ñ Ð´Ð¾ÑÑÑпним на лÑÑензÑÑ:" - -#: templates/catalogue/book_info.html:9 -msgid "" -"This work isn't covered by copyright and is part of the\n" -" public domain, which means it can be freely used, published and\n" -" distributed. If there are any additional copyrighted materials\n" -" provided with this work (such as annotations, motifs etc.), those\n" -" materials are licensed under the \n" -" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " -"Commons Attribution-ShareAlike 3.0</a>\n" -" license." -msgstr "" -"Цей ÑвÑÑ Ð½Ðµ Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом Ñ Ñ ÑаÑÑиноÑ\n" -" ÑÑÑпÑлÑного надбаннÑ, ÑÐ¾Ð¼Ñ Ð¹Ð¾Ð³Ð¾ можна викоÑиÑÑовÑваÑи без обмеженÑ, " -"пÑблÑкÑваÑи, Ñа\n" -" ÑозповÑÑджÑваÑи. ЯкÑо ÑвÑÑ Ð¼ÑÑÑиÑÑ Ð´Ð¾Ð´Ð°ÑÐºÐ¾Ð²Ñ Ð¼Ð°ÑеÑÑали, коÑÑÑ " -"Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом\n" -" (напÑиклад пÑимÑÑки, моÑиви, ÑоÑо), доÑÑÑп до ÑÐ¸Ñ \n" -" додаÑÐºÐ¾Ð²Ð¸Ñ Ð¼Ð°ÑеÑÑалÑв надаÑÑÑÑÑ Ð½Ð° ÑÐ¼Ð¾Ð²Ð°Ñ Ð»ÑÑензÑÑ \n" -" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " -"Commons Ðз зазнаÑеннÑм ÑÐ¼ÐµÐ½Ñ Ð°Ð²ÑоÑа â Ðа ÑÐ¸Ñ Ð¶Ðµ ÑÐ¼Ð¾Ð²Ð°Ñ 3.0</a>\n" -" ." - -#: templates/catalogue/book_info.html:20 -#, fuzzy -msgid "Resource prepared based on:" -msgstr "ТекÑÑ Ð¿ÑдгоÑовлено на оÑновÑ" - -#: templates/catalogue/book_info.html:28 -msgid "Edited and annotated by:" -msgstr "РедагÑÐ²Ð°Ð½Ð½Ñ Ñа пÑимÑÑки:" - -#: templates/catalogue/book_info.html:33 -msgid "Publication funded by:" -msgstr "" - -#: templates/catalogue/book_info.html:39 -msgid "Cover image by:" -msgstr "" - -#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 -msgid "Listing of all works" -msgstr "СпиÑок ÑÑÑÑ ÑвоÑÑв" - -#: templates/catalogue/book_list.html:21 -msgid "Table of Content" -msgstr "ÐмÑÑÑ" - -#: templates/catalogue/book_list.html:30 -msgid "â top â" -msgstr "â вгоÑÑ â" - -#: templates/catalogue/book_short.html:59 -#: templates/catalogue/picture_detail.html:54 -msgid "Epoch" -msgstr "ÐÐ¿Ð¾Ñ Ð°" - -#: templates/catalogue/book_short.html:66 -#: templates/catalogue/picture_detail.html:60 -msgid "Kind" -msgstr "Ð Ñд" - -#: templates/catalogue/book_short.html:73 -msgid "Genre" -msgstr "ÐанÑ" - -#: templates/catalogue/book_short.html:88 -msgid "Read online" -msgstr "ЧиÑаÑи онлайн" - -#: templates/catalogue/book_short.html:95 -#: templates/catalogue/book_text.html:40 -msgid "to print" -msgstr "до дÑÑкÑ" - -#: templates/catalogue/book_short.html:98 -msgid "for an e-book reader" -msgstr "Ð´Ð»Ñ ÑÑдеÑа елекÑÑÐ¾Ð½Ð½Ð¸Ñ ÐºÐ½Ð¸Ð³" - -#: templates/catalogue/book_short.html:101 -#: templates/catalogue/book_text.html:46 -msgid "for Kindle" -msgstr "на Kindle" - -#: templates/catalogue/book_short.html:104 -#: templates/catalogue/book_text.html:49 -msgid "FictionBook" -msgstr "" - -#: templates/catalogue/book_short.html:107 -#: templates/catalogue/book_text.html:52 -msgid "for advanced usage" -msgstr "Ð´Ð»Ñ ÑозÑиÑеного коÑиÑÑÑваннÑ" - -#: templates/catalogue/book_short.html:113 -#: templates/catalogue/book_text.html:30 -msgid "Listen" -msgstr "ÐоÑлÑÑ Ð°Ñи" - -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/catalogue/book_text.html:22 -msgid "Table of contents" -msgstr "ÐмÑÑÑ" - -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 -msgid "Themes" -msgstr "Теми" - -#: templates/catalogue/book_text.html:24 -msgid "Edit. note" -msgstr "РедакÑоÑÑÑкий коменÑаÑ" - -#: templates/catalogue/book_text.html:25 -msgid "Infobox" -msgstr "ÐнÑобокÑ" - -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 -msgid "Book's page" -msgstr "СÑоÑÑнка книжки" - -#: templates/catalogue/book_text.html:43 -msgid "for a reader" -msgstr "на ÑÑдеÑ" - -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 -msgid "Download all audiobooks for this book" -msgstr "ÐаванÑажиÑи ÑÑÑ Ð°ÑдÑокниги Ð´Ð»Ñ ÑÑÑÑ ÐºÐ½Ð¸Ð¶ÐºÐ¸" - -#: templates/catalogue/book_wide.html:22 -#: templates/catalogue/tagged_object_list.html:60 -msgid "Motifs and themes" -msgstr "ÐоÑиви Ñа Ñеми" - -#: templates/catalogue/book_wide.html:44 -msgid "See" -msgstr "ÐивиÑÑ" - -#: templates/catalogue/book_wide.html:47 -msgid "Source" -msgstr "ÐжеÑело" - -#: templates/catalogue/book_wide.html:47 -msgid "of the book" -msgstr "книжки" - -#: templates/catalogue/book_wide.html:49 -msgid "Source XML file" -msgstr "Файл джеÑела XML" - -#: templates/catalogue/book_wide.html:51 -msgid "Book on" -msgstr "Ðнижка на" - -#: templates/catalogue/book_wide.html:51 -msgid "Editor's Platform" -msgstr "ÐлаÑÑоÑма ÑедагÑваннÑ" - -#: templates/catalogue/book_wide.html:54 -msgid "Book description on Lektury.Gazeta.pl" -msgstr "ÐÐ¿Ð¸Ñ ÐºÐ½Ð¸Ð¶ÐºÐ¸ на Lektury.Gazeta.pl" - -#: templates/catalogue/book_wide.html:57 -msgid "Book description on Wikipedia" -msgstr "ÐÐ¿Ð¸Ñ ÐºÐ½Ð¸Ð¶ÐºÐ¸ на ÐÑкÑпедÑÑ" - -#: templates/catalogue/book_wide.html:59 -msgid "Mix this book" -msgstr "ÐÑкÑÑваÑи ÑÑ ÐºÐ½Ð¸Ð¶ÐºÑ" - -#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 -msgid "Catalogue" -msgstr "ÐаÑалог" - -#: templates/catalogue/catalogue.html:16 -msgid "Download the catalogue in PDF format." -msgstr "ÐаванÑажиÑи каÑалог Ñ ÑоÑмаÑÑ PDF" - -#: templates/catalogue/catalogue.html:19 -#: templates/catalogue/search_multiple_hits.html:17 -#: templates/catalogue/tagged_object_list.html:26 -#: templatetags/catalogue_tags.py:416 -msgid "Authors" -msgstr "ÐвÑоÑи" - -#: templates/catalogue/catalogue.html:22 -#: templates/catalogue/search_multiple_hits.html:25 -#: templates/catalogue/tagged_object_list.html:34 -#: templatetags/catalogue_tags.py:418 -msgid "Kinds" -msgstr "Роди" - -#: templates/catalogue/catalogue.html:25 -#: templates/catalogue/search_multiple_hits.html:33 -#: templates/catalogue/tagged_object_list.html:42 -#: templatetags/catalogue_tags.py:417 -msgid "Genres" -msgstr "ÐанÑи" - -#: templates/catalogue/catalogue.html:28 -#: templates/catalogue/search_multiple_hits.html:41 -#: templates/catalogue/tagged_object_list.html:50 -#: templatetags/catalogue_tags.py:419 -msgid "Epochs" -msgstr "ÐÐ¿Ð¾Ñ Ð¸" - -#: templates/catalogue/catalogue.html:31 -msgid "Themes and topics" -msgstr "Теми" - -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 -#, fuzzy -msgid "Collections" -msgstr "колекÑÑÑ" - -#: templates/catalogue/daisy_list.html:6 -#: templates/catalogue/daisy_list.html:12 -msgid "Listing of all DAISY files" -msgstr "СпиÑок ÑÑÑÑ ÑайлÑв DAISY" - -#: templates/catalogue/daisy_list.html:9 -msgid "Latest DAISY audiobooks" -msgstr "ÐÑÑÐ°Ð½Ð½Ñ Ð°ÑдÑокниги DAISY" - -#: templates/catalogue/daisy_list.html:15 -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Å." -msgstr "" -"СиÑÑема DAISY Ñе визнаний Ñ Ð²ÑÑÐ¾Ð¼Ñ ÑвÑÑÑ ÑоÑÐ¼Ð°Ñ Ð½Ð°Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð¾ÑÑÑÐ¿Ñ Ð´Ð¾ книжок\n" -" коÑÑий вÑдповÑÐ´Ð°Ñ Ð¿Ð¾ÑÑебам оÑÑб ÑлабозоÑÐ¸Ñ , ÑлÑÐ¿Ð¸Ñ , а Ñакож ÑнÑÐ¸Ñ Ð¾ÑÑб\n" -" ÑÐºÑ Ð¼Ð°ÑÑÑ ÑÑÑдноÑÑ Ð· ÑиÑаннÑм. ÐожеÑе ними коÑиÑÑÑваÑиÑÑ Ð±ÐµÐ·ÐºÐ¾ÑÑовно Ñ Ð±ÐµÐ· " -"обмеженÑ." - -#: templates/catalogue/differentiate_tags.html:12 -msgid "The criteria are ambiguous. Please select one of the following options:" -msgstr "ÐÑиÑеÑÑÑ Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°ÑнÑ. ÐибеÑÑÑÑ Ð¾Ð´Ð¸Ð½ з ваÑÑанÑÑв нижÑе:" - -#: templates/catalogue/fragment_short.html:12 -msgid "Expand fragment" -msgstr "РозвинÑÑи ÑÑагменÑ" - -#: templates/catalogue/fragment_short.html:22 -msgid "Hide fragment" -msgstr "Ð¡Ñ Ð¾Ð²Ð°Ñи ÑÑагменÑ" - -#: templates/catalogue/inline_tag_list.html:4 -#: templates/catalogue/tag_list.html:4 -msgid "See full category" -msgstr "ÐивиÑиÑÑ Ð¿Ð¾Ð²Ð½Ñ ÐºÐ°ÑегоÑÑÑ" - -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 -msgid "Please waitâ¦" -msgstr "" - -#: templates/catalogue/menu.html:24 -msgid "All books" -msgstr "УÑÑ ÐºÐ½Ð¸Ð¶ÐºÐ¸" - -#: templates/catalogue/menu.html:28 -msgid "Audiobooks" -msgstr "ÐÑдÑокниги" - -#: templates/catalogue/menu.html:32 -msgid "DAISY" -msgstr "DAISY" - -#: templates/catalogue/picture_detail.html:29 -msgid "Work is licensed under " -msgstr "ТвÑÑ Ð½Ð° лÑÑензÑÑ" - -#: templates/catalogue/picture_detail.html:31 -msgid "Based on" -msgstr "Ðа оÑновÑ" - -#: templates/catalogue/picture_detail.html:45 -msgid "Details" -msgstr "ÐеÑалÑ" - -#: templates/catalogue/picture_detail.html:48 -msgid "Author" -msgstr "ÐвÑоÑ" - -#: templates/catalogue/picture_detail.html:66 -msgid "Other resources" -msgstr "ÐнÑÑ ÑеÑÑÑÑи" - -#: templates/catalogue/picture_detail.html:69 -msgid "Source of the image" -msgstr "ÐжеÑело гÑаÑÑки" - -#: templates/catalogue/picture_detail.html:72 -msgid "Image on the Editor's Platform" -msgstr "ÐÑаÑÑка на ÑедакÑоÑÑÑкÑй плаÑÑоÑмÑ" - -#: templates/catalogue/picture_detail.html:83 -msgid "View XML source" -msgstr "ÐивиÑиÑÑ Ð´Ð¶ÐµÑело XML" - -#: templates/catalogue/picture_detail.html:86 -msgid "Work's themes " -msgstr "Теми Ñ ÑвоÑÑ" - -#: templates/catalogue/picture_list.html:8 -#: templates/catalogue/picture_list.html:10 -msgid "Listing of all pictures" -msgstr "СпиÑок ÑÑÑÑ Ð³ÑаÑÑк" - -#: templates/catalogue/player.html:35 -msgid "Download as" -msgstr "ÐаванÑажиÑи Ñк" - -#: templates/catalogue/player.html:88 -msgid "Artist" -msgstr "Ð¥Ñдожник" - -#: templates/catalogue/player.html:89 -msgid "Director" -msgstr "РежиÑеÑ" - -#: templates/catalogue/player.html:108 -msgid "Audiobooks were prepared as a part of the projects:" -msgstr "ÐÑдÑокниги вигоÑовлено в ÑÐ°Ð¼ÐºÐ°Ñ Ð¿ÑоекÑÑв:" - -#: templates/catalogue/player.html:113 -#, python-format -msgid "%(cs)s, funded by %(fb)s" -msgstr "%(cs)s, ÑÑнанÑованого Ñз коÑÑÑв %(fb)s" - -#: templates/catalogue/player.html:125 -#, python-format -msgid "" -"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -msgstr "" -"ÐÑдÑокниги вигоÑовлено в ÑÐ°Ð¼ÐºÐ°Ñ Ð¿ÑоекÑÑ %(cs)s, ÑÑнанÑованого Ñз коÑÑÑв " -"%(fb)s." - -#: templates/catalogue/player.html:127 -#, python-format -msgid "Audiobooks were prepared as a part of the %(cs)s project." -msgstr "ÐÑдÑокниги вигоÑовлено в ÑÐ°Ð¼ÐºÐ°Ñ Ð¿ÑоекÑÑ %(cs)s." - -#: templates/catalogue/recent_audiobooks_list.html:5 -#: templates/catalogue/recent_audiobooks_list.html:10 -#, fuzzy -msgid "Recent audiobooks" -msgstr "ÐÑÑÐ°Ð½Ð½Ñ Ð°ÑдÑокниги MP3" - -#: templates/catalogue/recent_daisy_list.html:5 -#: templates/catalogue/recent_daisy_list.html:10 -msgid "Recent DAISY files" -msgstr "" - -#: templates/catalogue/recent_list.html:5 -#: templates/catalogue/recent_list.html:10 -#, fuzzy -msgid "Recent publications" -msgstr "Ð²Ñ Ð¾Ð´Ð¸ÑÑ Ñ ÑÑÑпÑлÑне надбаннÑ" - -#: templates/catalogue/recent_list.html:15 -#, python-format -msgid "" -"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" -" and <a href=\"%(d)s\">recent DAISY files</a>." -msgstr "" - -#: templates/catalogue/search_multiple_hits.html:5 -#: templates/catalogue/search_no_hits.html:5 -#: templates/catalogue/search_no_hits.html:10 -#: templates/catalogue/search_too_short.html:5 -#: templates/catalogue/search_too_short.html:10 -msgid "Search" -msgstr "ÐоÑÑк" - -#: templates/catalogue/search_multiple_hits.html:11 -#: templates/catalogue/search_no_hits.html:16 -msgid "Did you mean" -msgstr "Ðи мали на ÑвазÑ" - -#: templates/catalogue/search_multiple_hits.html:52 -msgid "Results by title" -msgstr "РезÑлÑÑаÑи за заголовком" - -#: templates/catalogue/search_multiple_hits.html:67 -msgid "Results by authors" -msgstr "РезÑлÑÑаÑи за авÑоÑами" - -#: templates/catalogue/search_multiple_hits.html:80 -#, fuzzy -msgid "Results by translators" -msgstr "РезÑлÑÑаÑи за авÑоÑами" - -#: templates/catalogue/search_multiple_hits.html:93 -msgid "Results in text" -msgstr "РезÑлÑÑаÑи в ÑекÑÑÑ" - -#: templates/catalogue/search_multiple_hits.html:110 -msgid "Other results" -msgstr "ÐнÑÑ ÑезÑлÑÑаÑи" - -#: templates/catalogue/search_no_hits.html:19 -#: templates/catalogue/tagged_object_list.html:151 -msgid "Sorry! Search cirteria did not match any resources." -msgstr "Ðа жалÑ, ÐаÑÑ ÐºÑиÑеÑÑÑ Ð¿Ð¾ÑÑÐºÑ Ð½Ðµ вÑдповÑдаÑÑÑ Ð¶Ð¾Ð´Ð½Ð¸Ð¼ ÑезÑлÑÑаÑам." - -#: templates/catalogue/search_no_hits.html:21 -msgid "" -"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 "" -"СиÑÑема поÑÑÐºÑ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑ Ð·Ð´ÑйÑнÑваÑи поÑÑк за наÑÑÑпними кÑиÑеÑÑÑми: " -"заголовок, авÑоÑ, Ñема, ÐµÐ¿Ð¾Ñ Ð°, ÑÑд Ñа жанÑ.\n" -"\t\tÐа даний Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¿Ð¾ÑÑк Ñ Ð¿Ð¾Ð²Ð½Ð¾Ð¼Ñ Ð¾Ð±ÑÑÐ·Ñ ÑекÑÑÑ Ð½Ðµ Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¸Ð¼." - -#: templates/catalogue/search_too_short.html:13 -msgid "Sorry! Search query must have at least two characters." -msgstr "Ðа жалÑ, Ð´Ð»Ñ Ð¿Ð¾ÑÑÐºÑ Ð¿Ð¾ÑÑÑбно ввеÑÑи ÑонайменÑе два знаки." - -#: templates/catalogue/tag_list_split.html:5 -msgid "Literature" -msgstr "" - -#: templates/catalogue/tag_list_split.html:14 -msgid "Gallery" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:78 -msgid "in Culture.pl" -msgstr "" - -#: templates/catalogue/tagged_object_list.html:83 -#: templates/catalogue/tagged_object_list.html:113 -msgid "in Lektury.Gazeta.pl" -msgstr "на Lektury.Gazeta.pl" - -#: templates/catalogue/tagged_object_list.html:88 -#: templates/catalogue/tagged_object_list.html:118 -msgid "in Wikipedia" -msgstr "на ÐÑкÑпедÑÑ" - -#: templates/catalogue/snippets/custom_pdf_link_li.html:5 -msgid "Download a custom PDF" -msgstr "ÐаванÑажиÑи наÑÑÑоÑваний PDF" - -#: templates/catalogue/snippets/license_icon.html:6 -#: templates/catalogue/snippets/license_icon.html:8 -msgid "Free license" -msgstr "" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "ÐоклаÑÑи ÐºÐ½Ð¸Ð¶ÐºÑ Ð½Ð° полиÑÑ!" - -#~ msgid "Create new shelf" -#~ msgstr "СÑвоÑиÑи Ð½Ð¾Ð²Ñ Ð¿Ð¾Ð»Ð¸ÑÑ" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ Ð¶Ð¾Ð´Ð½Ð¸Ñ Ð¿Ð¾Ð»Ð¸ÑÑ. ÐожеÑе ÑÑвоÑиÑи полиÑÑ Ð½Ð¸Ð¶Ñе, ÑкÑо бажаÑÑе." - -#~ msgid "Put on the shelf!" -#~ msgstr "ÐоклаÑÑи на полиÑÑ!" - -#~ msgid "Shelves containing fragment" -#~ msgstr "ÐолиÑÑ, ÑÐºÑ Ð¼ÑÑÑÑÑÑ ÑÑагменÑ" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "У ÐÐ°Ñ Ð½ÐµÐ¼Ð°Ñ Ð¶Ð¾Ð´Ð½Ð¸Ñ Ð¿Ð¾Ð»Ð¸ÑÑ. ÐожеÑе ÑÑвоÑиÑи Ð¾Ð´Ð½Ñ Ð½Ð¸Ð¶Ñе, ÑкÑо бажаÑÑе." - -#~ msgid "Save all shelves" -#~ msgstr "ÐбеÑегÑи ÑÑÑ Ð¿Ð¾Ð»Ð¸ÑÑ" - -#~ msgid "Your shelves with books" -#~ msgstr "ÐаÑÑ Ð¿Ð¾Ð»Ð¸ÑÑ Ð· книжками" - -#~ msgid "remove" -#~ msgstr "видалиÑи" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "" -#~ "У ÐÐ°Ñ Ð½ÐµÐ¼Ð°Ñ Ð¶Ð¾Ð´Ð½Ð¾Ñ Ð¿Ð¾Ð»Ð¸ÑÑ. ÐожеÑе ÑÑвоÑиÑи Ð¾Ð´Ð½Ñ Ð½Ð¸Ð¶Ñе, ÑкÑо бажаÑÑе." - -#~ msgid "Create shelf" -#~ msgstr "СÑвоÑиÑи полиÑÑ" - -#~ msgid "Enter a valid JSON value. Error: %s" -#~ msgstr "ÐведÑÑÑ Ð¿ÑавилÑÐ½Ñ Ð²Ð°ÑÑÑÑÑÑ JSON. Ðомилка: %s" - -#~ msgid "A4" -#~ msgstr "Ð4" - -#~ msgid "A5" -#~ msgstr "Ð5" - -#~ msgid "Incorrect customization options for PDF" -#~ msgstr "ÐепÑавилÑÐ½Ñ Ð¿Ð°ÑамеÑÑи наÑÑÑоÑÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ PDF" - -#~ msgid "Bad method" -#~ msgstr "ÐепÑавилÑний ÑпоÑÑб" - -#~ msgid "title, author, theme/topic, epoch, kind, genre" -#~ msgstr "заголовок, авÑоÑ, Ñема, ÐµÐ¿Ð¾Ñ Ð°, ÑÑд, жанÑ" - -#~ msgid "main page" -#~ msgstr "головна ÑÑоÑÑнка" - -#~ msgid "Show tag on main page" -#~ msgstr "ÐоказаÑи ÑÐµÒ Ð½Ð° головнÑй ÑÑоÑÑнÑÑ" - -#~ msgid "year of death" -#~ msgstr "даÑа ÑмеÑÑÑ" - -#~ msgid "short HTML" -#~ msgstr "коÑоÑкий HTML" - -#~ msgid "HTML file" -#~ msgstr "Ñайл HTML" - -#~ msgid "PDF file" -#~ msgstr "Ñайл PDF" - -#~ msgid "EPUB file" -#~ msgstr "Ñайл EPUB" - -#~ msgid "ODT file" -#~ msgstr "Ñайл ODT" - -#~ msgid "TXT file" -#~ msgstr "Ñайл TXT" - -#~ msgid "MP3 file" -#~ msgstr "Ñайл MP3" - -#~ msgid "OGG file" -#~ msgstr "Ñайл OGG" - -#~ msgid "translator" -#~ msgstr "пеÑекладаÑ" - -#~ msgid "year of translator's death" -#~ msgstr "ÑÑк ÑмеÑÑÑ Ð¿ÐµÑекладаÑа" - -#~ msgid "book stub" -#~ msgstr "загоÑовка книжки" - -#~ msgid "<p>To maintain your shelves you need to be logged in.</p>" -#~ msgstr "<p>Щоб ÑпÑавлÑÑи ÑвоÑми полиÑÑми, ÑвÑйдÑÑ Ð² акаÑнÑ</p>" - -#~ msgid "<p>Shelves were sucessfully saved.</p>" -#~ msgstr "<p>ÐолиÑÑ ÑÑпÑÑно збеÑежено.</p>" - -#~ msgid "Book was successfully removed from the shelf" -#~ msgstr "ÐÐ½Ð¸Ð¶ÐºÑ Ð±Ñло ÑÑпÑÑно видалено з полиÑÑ" - -#~ msgid "<p>Shelf <strong>%s</strong> was successfully created</p>" -#~ msgstr "<p>ÐолиÑÑ <strong>%s</strong> ÑÑпÑÑно ÑÑвоÑено</p>" - -#~ msgid "<p>Shelf <strong>%s</strong> was successfully removed</p>" -#~ msgstr "<p>ÐолиÑÑ <strong>%s</strong> ÑÑпÑÑно видалено</p>" - -#~ msgid "content type" -#~ msgstr "Ñип змÑÑÑÑ" - -#~ msgid "object id" -#~ msgstr "ÐРоб'ÑкÑÑ" diff --git a/apps/catalogue/management/__init__.py b/apps/catalogue/management/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/catalogue/management/commands/__init__.py b/apps/catalogue/management/commands/__init__.py deleted file mode 100644 index 8b1378917..000000000 --- a/apps/catalogue/management/commands/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/catalogue/management/commands/checkcovers.py b/apps/catalogue/management/commands/checkcovers.py deleted file mode 100644 index 7535dd474..000000000 --- a/apps/catalogue/management/commands/checkcovers.py +++ /dev/null @@ -1,130 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from optparse import make_option -from django.contrib.sites.models import Site -from django.core.management.base import BaseCommand -from catalogue import app_settings -from django.utils.functional import lazy - - -def ancestor_has_cover(book): - while book.parent: - book = book.parent - if book.extra_info.get('cover_url'): - return True - return False - - -current_domain = lazy(lambda: Site.objects.get_current().domain, str)() -def full_url(obj): - return 'http://%s%s' % ( - current_domain, - obj.get_absolute_url()) - - -class Command(BaseCommand): - option_list = BaseCommand.option_list + ( - make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, - help='Suppress output'), - ) - help = 'Checks cover sources and licenses.' - - def handle(self, **options): - from collections import defaultdict - import re - from django.db import transaction - from catalogue.models import Book - - verbose = options['verbose'] - - without_cover = [] - with_ancestral_cover = [] - not_redakcja = [] - bad_license = defaultdict(list) - no_license = [] - - re_license = re.compile(ur'.*,\s*(CC.*)') - - redakcja_url = app_settings.REDAKCJA_URL - good_license = re.compile("(%s)" % ")|(".join( - app_settings.GOOD_LICENSES)) - - with transaction.commit_on_success(): - for book in Book.objects.all().order_by('slug').iterator(): - extra_info = book.extra_info - if not extra_info.get('cover_url'): - if ancestor_has_cover(book): - with_ancestral_cover.append(book) - else: - without_cover.append(book) - else: - if not extra_info.get('cover_source', '' - ).startswith(redakcja_url): - not_redakcja.append(book) - match = re_license.match(extra_info.get('cover_by', '')) - if match: - if not good_license.match(match.group(1)): - bad_license[match.group(1)].append(book) - else: - no_license.append(book) - - print """%d books with no covers, %d with inherited covers. -Bad licenses used: %s (%d covers without license). -%d covers not from %s. -""" % ( - len(without_cover), - len(with_ancestral_cover), - ", ".join(sorted(bad_license.keys())) or "none", - len(no_license), - len(not_redakcja), - redakcja_url, - ) - - if verbose: - if bad_license: - print - print "Bad license:" - print "============" - for lic, books in bad_license.items(): - print - print lic - for book in books: - print full_url(book) - - if no_license: - print - print "No license:" - print "===========" - for book in no_license: - print - print full_url(book) - print book.extra_info.get('cover_by') - print book.extra_info.get('cover_source') - print book.extra_info.get('cover_url') - - if not_redakcja: - print - print "Not from Redakcja or source missing:" - print "====================================" - for book in not_redakcja: - print - print full_url(book) - print book.extra_info.get('cover_by') - print book.extra_info.get('cover_source') - print book.extra_info.get('cover_url') - - if without_cover: - print - print "No cover:" - print "=========" - for book in without_cover: - print full_url(book) - - if with_ancestral_cover: - print - print "With ancestral cover:" - print "=====================" - for book in with_ancestral_cover: - print full_url(book) diff --git a/apps/catalogue/management/commands/checkintegrity.py b/apps/catalogue/management/commands/checkintegrity.py deleted file mode 100644 index 6ae2b9a2f..000000000 --- a/apps/catalogue/management/commands/checkintegrity.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from optparse import make_option -from django.core.management.base import BaseCommand - -from catalogue.models import Book - - -class Command(BaseCommand): - option_list = BaseCommand.option_list + ( - make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, - help='Suppress output'), - make_option('-d', '--dry-run', action='store_true', dest='dry_run', default=False, - help="Just check for problems, don't fix them"), - ) - help = 'Checks integrity of catalogue data.' - - def handle(self, **options): - from django.db import transaction - - verbose = options['verbose'] - - with transaction.commit_on_success(): - for book in Book.objects.all().iterator(): - try: - info = book.wldocument().book_info - except: - if verbose: - print "ERROR! Bad XML for book:", book.slug - print "To resolve: republish." - print - else: - should_be = [p.slug for p in info.parts] - is_now = [p.slug for p in book.children.all().order_by('parent_number')] - if should_be != is_now: - if verbose: - print "ERROR! Wrong children for book:", book.slug - print "Is: ", is_now - print "Should be:", should_be - print "To resolve: republish parent book." - print - - # Check for ancestry. - parents = [] - parent = book.parent - while parent: - parents.append(parent) - parent = parent.parent - ancestors = list(book.ancestor.all()) - if set(ancestors) != set(parents): - if options['verbose']: - print "Wrong ancestry for book:", book - print "Is: ", ", ".join(ancestors) - print "Should be:", ", ".join(parents) - if not options['dry_run']: - book.repopulate_ancestors() - if options['verbose']: - print "Fixed." - if options['verbose']: - print - - # TODO: check metadata tags, reset counters diff --git a/apps/catalogue/management/commands/importbooks.py b/apps/catalogue/management/commands/importbooks.py deleted file mode 100644 index a15faa0b6..000000000 --- a/apps/catalogue/management/commands/importbooks.py +++ /dev/null @@ -1,173 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import os -import sys -import time -from optparse import make_option -from django.conf import settings -from django.core.management.base import BaseCommand -from django.core.management.color import color_style -from django.core.files import File -from catalogue.utils import trim_query_log -from librarian.picture import ImageStore -from wolnelektury_core.management.profile import profile - -from catalogue.models import Book -from picture.models import Picture - -from search.index import Index - - -class Command(BaseCommand): - option_list = BaseCommand.option_list + ( - make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, - help='Verbosity level; 0=minimal output, 1=normal output, 2=all output'), - make_option('-f', '--force', action='store_true', dest='force', default=False, - help='Overwrite works already in the catalogue'), - make_option('-D', '--dont-build', dest='dont_build', - metavar="FORMAT,...", - help="Skip building specified formats"), - make_option('-S', '--no-search-index', action='store_false', dest='search_index', default=True, - help='Skip indexing imported works for search'), - make_option('-w', '--wait-until', dest='wait_until', metavar='TIME', - help='Wait until specified time (Y-M-D h:m:s)'), - make_option('-p', '--picture', action='store_true', dest='import_picture', default=False, - help='Import pictures'), - ) - help = 'Imports books from the specified directories.' - args = 'directory [directory ...]' - - def import_book(self, file_path, options): - verbose = options.get('verbose') - if options.get('dont_build'): - dont_build = options.get('dont_build').lower().split(',') - else: - dont_build = None - file_base, ext = os.path.splitext(file_path) - book = Book.from_xml_file(file_path, overwrite=options.get('force'), - dont_build=dont_build, - search_index_tags=False) - for ebook_format in Book.ebook_formats: - if os.path.isfile(file_base + '.' + ebook_format): - getattr(book, '%s_file' % ebook_format).save( - '%s.%s' % (book.slug, ebook_format), - File(file(file_base + '.' + ebook_format)), - save=False - ) - if verbose: - print "Importing %s.%s" % (file_base, ebook_format) - book.save() - - def import_picture(self, file_path, options, continue_on_error=True): - try: - image_store = ImageStore(os.path.dirname(file_path)) - picture = Picture.from_xml_file(file_path, image_store=image_store, overwrite=options.get('force')) - except Exception, ex: - if continue_on_error: - print "%s: %s" % (file_path, ex) - return - else: - raise ex - return picture - - # @profile - def handle(self, *directories, **options): - from django.db import transaction - - self.style = color_style() - - verbose = options.get('verbose') - import_picture = options.get('import_picture') - - wait_until = None - if options.get('wait_until'): - wait_until = time.mktime(time.strptime(options.get('wait_until'), '%Y-%m-%d %H:%M:%S')) - if verbose > 0: - print "Will wait until %s; it's %f seconds from now" % ( - time.strftime('%Y-%m-%d %H:%M:%S', - time.localtime(wait_until)), wait_until - time.time()) - - index = None - if options.get('search_index') and not settings.NO_SEARCH_INDEX: - index = Index() - try: - index.index_tags() - index.index.commit() - except Exception, e: - index.index.rollback() - raise e - - # Start transaction management. - transaction.commit_unless_managed() - transaction.enter_transaction_management() - transaction.managed(True) - - files_imported = 0 - files_skipped = 0 - - for dir_name in directories: - if not os.path.isdir(dir_name): - print self.style.ERROR("%s: Not a directory. Skipping." % dir_name) - else: - # files queue - files = sorted(os.listdir(dir_name)) - postponed = {} - while files: - trim_query_log(0) - file_name = files.pop(0) - file_path = os.path.join(dir_name, file_name) - file_base, ext = os.path.splitext(file_path) - - # Skip files that are not XML files - if not ext == '.xml': - continue - - if verbose > 0: - print "Parsing '%s'" % file_path - else: - sys.stdout.write('.') - sys.stdout.flush() - - # Import book files - try: - if import_picture: - self.import_picture(file_path, options) - else: - self.import_book(file_path, options) - - files_imported += 1 - transaction.commit() - - except (Book.AlreadyExists, Picture.AlreadyExists): - print self.style.ERROR('%s: Book or Picture already imported. Skipping. To overwrite use --force.' % - file_path) - files_skipped += 1 - - except Book.DoesNotExist, e: - if file_name not in postponed or postponed[file_name] < files_imported: - # push it back into the queue, maybe the missing child will show up - if verbose: - print self.style.NOTICE('Waiting for missing children') - files.append(file_name) - postponed[file_name] = files_imported - else: - # we're in a loop, nothing's being imported - some child is really missing - raise e - - # Print results - print - print "Results: %d files imported, %d skipped, %d total." % ( - files_imported, files_skipped, files_imported + files_skipped) - print - - if wait_until: - print 'Waiting...' - try: - time.sleep(wait_until - time.time()) - except IOError: - print "it's already too late" - - transaction.commit() - transaction.leave_transaction_management() diff --git a/apps/catalogue/management/commands/pack.py b/apps/catalogue/management/commands/pack.py deleted file mode 100755 index ba06341b8..000000000 --- a/apps/catalogue/management/commands/pack.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from optparse import make_option - -from django.core.management.base import BaseCommand -from django.core.management.color import color_style -import zipfile - -from catalogue.models import Book, Tag - - -class Command(BaseCommand): - option_list = BaseCommand.option_list + ( - make_option('-t', '--tags', dest='tags', metavar='SLUG,...', - help='Use only books tagged with this tags'), - make_option('-i', '--include', dest='include', metavar='SLUG,...', - help='Include specific books by slug'), - make_option('-e', '--exclude', dest='exclude', metavar='SLUG,...', - help='Exclude specific books by slug') - ) - help = 'Prepare ZIP package with files of given type.' - args = '[%s] output_path.zip' % '|'.join(Book.formats) - - def handle(self, ftype, path, **options): - self.style = color_style() - verbose = int(options.get('verbosity')) - tags = options.get('tags') - include = options.get('include') - exclude = options.get('exclude') - - if ftype in Book.formats: - field = "%s_file" % ftype - else: - print self.style.ERROR('Unknown file type.') - return - - books = [] - - if include: - books += list(Book.objects.filter(slug__in=include.split(',')).only('slug', field)) - - if tags: - books += list(Book.tagged.with_all(Tag.objects.filter(slug__in=tags.split(','))).only('slug', field)) - elif not include: - books = list(Book.objects.all().only('slug', field)) - - if exclude: - books = [book for book in books if book.slug not in exclude.split(',')] - - archive = zipfile.ZipFile(path, 'w', zipfile.ZIP_DEFLATED) - - processed = skipped = 0 - for book in books: - if verbose >= 2: - print 'Parsing', book.slug - content = getattr(book, field) - if not content: - if verbose >= 1: - print self.style.NOTICE('%s has no %s file' % (book.slug, ftype)) - skipped += 1 - continue - archive.write(content.path, str('%s.%s' % (book.slug, ftype))) - processed += 1 - archive.close() - - if not processed: - if skipped: - print self.style.ERROR("No books with %s files found" % ftype) - else: - print self.style.ERROR("No books found") - return - - if verbose >= 1: - print "%d processed, %d skipped" % (processed, skipped) - print "Results written to %s" % path diff --git a/apps/catalogue/management/commands/report_dead_links.py b/apps/catalogue/management/commands/report_dead_links.py deleted file mode 100644 index 34b1e7054..000000000 --- a/apps/catalogue/management/commands/report_dead_links.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from __future__ import print_function, unicode_literals - -from django.core.management.base import BaseCommand - - -class Command(BaseCommand): - help = 'Checks for dead links.' - - def handle(self, **options): - from catalogue.models import Book - from picture.models import Picture - from urllib2 import urlopen, HTTPError, URLError - from django.core.urlresolvers import reverse - from django.contrib.sites.models import Site - from django.contrib.sites.shortcuts import get_current_site - - domain = get_current_site(None).domain - - fields = [ - (Book, [ - ('gazeta_link', lambda b: b.gazeta_link), - ('wiki_link', lambda b: b.wiki_link), - ('źródÅo', lambda b: b.extra_info.get('source_url')), - ], 'admin:catalogue_book_change' - ), - (Picture, [ - ('gazeta_link', lambda p: p.culturepl_link), - ('wiki_link', lambda p: p.wiki_link), - ('źródÅo', lambda p: p.extra_info.get('source_url')), - ], 'admin:pictures_picture_change' - ) - ] - - for model, model_fields, admin_name in fields: - for obj in model.objects.all(): - clean = True - for name, get in model_fields: - url = get(obj) - if url: - try: - urlopen(url) - except (HTTPError, URLError, ValueError), e: - if clean: - clean = False - print(unicode(obj).encode('utf-8')) - print(('Na stronie: https://%s%s' % (domain, obj.get_absolute_url())).encode('utf-8')) - print(('Administracja: https://%s%s' % (domain, reverse(admin_name, args=[obj.pk]))).encode('utf-8')) - if obj.extra_info.get('about'): - print(('Redakcja: %s' % (obj.extra_info.get('about'),)).encode('utf-8')) - print((' %s (%s): %s' % (name, getattr(e, 'code', 'bÅÄ d'), url)).encode('utf-8')) - if not clean: - print() diff --git a/apps/catalogue/management/commands/savemedia.py b/apps/catalogue/management/commands/savemedia.py deleted file mode 100755 index 216c5e335..000000000 --- a/apps/catalogue/management/commands/savemedia.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import os.path - -from django.core.management.base import BaseCommand - -from catalogue.models import Book, BookMedia -from catalogue.utils import ExistingFile - - -class Command(BaseCommand): - help = "Saves uploaded media with a given book and a given name. If media has a source SHA1 info - matching media is replaced." - args = 'path slug name' - - def handle(self, *args, **options): - from django.db import transaction - - path, slug, name = args - - # Start transaction management. - transaction.commit_unless_managed() - transaction.enter_transaction_management() - transaction.managed(True) - - book = Book.objects.get(slug=slug) - - root, ext = os.path.splitext(path) - ext = ext.lower() - if ext: - ext = ext[1:] - if ext == 'zip': - ext = 'daisy' - - source_sha1 = BookMedia.read_source_sha1(path, ext) - print "Source file SHA1:", source_sha1 - try: - assert source_sha1 - bm = book.media.get(type=ext, source_sha1=source_sha1) - print "Replacing media: %s (%s)" % (bm.name.encode('utf-8'), ext) - except (AssertionError, BookMedia.DoesNotExist): - bm = BookMedia(book=book, type=ext) - print "Creating new media" - bm.name = name - bm.file.save(None, ExistingFile(path)) - bm.save() - transaction.commit() - transaction.leave_transaction_management() diff --git a/apps/catalogue/migrations/0001_initial.py b/apps/catalogue/migrations/0001_initial.py deleted file mode 100644 index 661fde840..000000000 --- a/apps/catalogue/migrations/0001_initial.py +++ /dev/null @@ -1,221 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import fnpdjango.storage -import jsonfield.fields -import catalogue.fields -import catalogue.models.bookmedia -from django.conf import settings -import catalogue.models.book - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('contenttypes', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Book', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('title', models.CharField(max_length=120, verbose_name='Title')), - ('sort_key', models.CharField(verbose_name='Sort key', max_length=120, editable=False, db_index=True)), - ('sort_key_author', models.CharField(default='', verbose_name='sort key by author', max_length=120, editable=False, db_index=True)), - ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), - ('common_slug', models.SlugField(max_length=120, verbose_name='Slug')), - ('language', models.CharField(default=b'pol', max_length=3, verbose_name='language code', db_index=True)), - ('description', models.TextField(verbose_name='Description', blank=True)), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date', db_index=True)), - ('changed_at', models.DateTimeField(auto_now=True, verbose_name='creation date', db_index=True)), - ('parent_number', models.IntegerField(default=0, verbose_name='Parent number')), - ('extra_info', jsonfield.fields.JSONField(default={}, verbose_name='Additional information')), - ('gazeta_link', models.CharField(max_length=240, blank=True)), - ('wiki_link', models.CharField(max_length=240, blank=True)), - ('cover', catalogue.fields.EbookField(b'cover', upload_to=catalogue.models.book._cover_upload_to, storage=fnpdjango.storage.BofhFileSystemStorage(), max_length=255, blank=True, null=True, verbose_name='cover')), - ('cover_thumb', catalogue.fields.EbookField(b'cover_thumb', max_length=255, upload_to=catalogue.models.book._cover_thumb_upload_to, null=True, verbose_name='cover thumbnail', blank=True)), - ('_related_info', jsonfield.fields.JSONField(null=True, editable=False, blank=True)), - ('txt_file', catalogue.fields.EbookField(b'txt', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._txt_upload_to, max_length=255, blank=True, verbose_name='TXT file')), - ('fb2_file', catalogue.fields.EbookField(b'fb2', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._fb2_upload_to, max_length=255, blank=True, verbose_name='FB2 file')), - ('pdf_file', catalogue.fields.EbookField(b'pdf', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._pdf_upload_to, max_length=255, blank=True, verbose_name='PDF file')), - ('epub_file', catalogue.fields.EbookField(b'epub', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._epub_upload_to, max_length=255, blank=True, verbose_name='EPUB file')), - ('mobi_file', catalogue.fields.EbookField(b'mobi', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._mobi_upload_to, max_length=255, blank=True, verbose_name='MOBI file')), - ('html_file', catalogue.fields.EbookField(b'html', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._html_upload_to, max_length=255, blank=True, verbose_name='HTML file')), - ('xml_file', catalogue.fields.EbookField(b'xml', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._xml_upload_to, max_length=255, blank=True, verbose_name='XML file')), - ('parent', models.ForeignKey(related_name=b'children', blank=True, to='catalogue.Book', null=True)), - ], - options={ - 'ordering': ('sort_key',), - 'verbose_name': 'book', - 'verbose_name_plural': 'Books', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='BookMedia', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('type', models.CharField(db_index=True, max_length=20, verbose_name='type', choices=[(b'mp3', 'MP3 file'), (b'ogg', 'Ogg Vorbis file'), (b'daisy', 'DAISY file')])), - ('name', models.CharField(max_length=512, verbose_name='name')), - ('file', catalogue.fields.OverwritingFileField(upload_to=catalogue.models.bookmedia._file_upload_to, max_length=600, verbose_name='XML file')), - ('uploaded_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date', db_index=True)), - ('extra_info', jsonfield.fields.JSONField(default={}, verbose_name='Additional information', editable=False)), - ('source_sha1', models.CharField(max_length=40, null=True, editable=False, blank=True)), - ('book', models.ForeignKey(related_name=b'media', to='catalogue.Book')), - ], - options={ - 'ordering': ('type', 'name'), - 'verbose_name': 'book media', - 'verbose_name_plural': 'book media', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Collection', - fields=[ - ('title', models.CharField(max_length=120, verbose_name='Title', db_index=True)), - ('title_de', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), - ('title_en', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), - ('title_es', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), - ('title_fr', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), - ('title_it', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), - ('title_lt', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), - ('title_pl', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), - ('title_ru', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), - ('title_uk', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), - ('slug', models.SlugField(max_length=120, serialize=False, verbose_name='Slug', primary_key=True)), - ('description', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_de', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_en', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_es', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_fr', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_it', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_lt', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_pl', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_ru', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_uk', models.TextField(null=True, verbose_name='Description', blank=True)), - ('book_slugs', models.TextField(verbose_name='Book stubs')), - ('kind', models.CharField(default=b'book', max_length=10, verbose_name='form', db_index=True, choices=[(b'book', 'book'), (b'picture', b'picture')])), - ], - options={ - 'ordering': ('title',), - 'verbose_name': 'collection', - 'verbose_name_plural': 'collections', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Fragment', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('text', models.TextField()), - ('short_text', models.TextField(editable=False)), - ('anchor', models.CharField(max_length=120)), - ('book', models.ForeignKey(related_name=b'fragments', to='catalogue.Book')), - ], - options={ - 'ordering': ('book', 'anchor'), - 'verbose_name': 'Fragment', - 'verbose_name_plural': 'Fragments', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Source', - fields=[ - ('netloc', models.CharField(max_length=120, serialize=False, verbose_name='network location', primary_key=True)), - ('name', models.CharField(max_length=120, verbose_name='name', blank=True)), - ('name_de', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), - ('name_en', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), - ('name_es', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), - ('name_fr', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), - ('name_it', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), - ('name_lt', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), - ('name_pl', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), - ('name_ru', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), - ('name_uk', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), - ], - options={ - 'ordering': ('netloc',), - 'verbose_name': 'source', - 'verbose_name_plural': 'sources', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Tag', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=50, verbose_name='name', db_index=True)), - ('name_de', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), - ('name_en', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), - ('name_es', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), - ('name_fr', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), - ('name_it', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), - ('name_lt', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), - ('name_pl', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), - ('name_ru', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), - ('name_uk', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), - ('slug', models.SlugField(max_length=120, verbose_name='Slug')), - ('sort_key', models.CharField(max_length=120, verbose_name='Sort key', db_index=True)), - ('category', models.CharField(db_index=True, max_length=50, verbose_name='Category', choices=[(b'author', 'author'), (b'epoch', 'period'), (b'kind', 'form'), (b'genre', 'genre'), (b'theme', 'motif'), (b'set', 'set'), (b'book', 'book'), (b'thing', 'thing')])), - ('description', models.TextField(verbose_name='Description', blank=True)), - ('description_de', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_en', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_es', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_fr', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_it', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_lt', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_pl', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_ru', models.TextField(null=True, verbose_name='Description', blank=True)), - ('description_uk', models.TextField(null=True, verbose_name='Description', blank=True)), - ('book_count', models.IntegerField(null=True, verbose_name='Number of books', blank=True)), - ('picture_count', models.IntegerField(null=True, verbose_name='picture count', blank=True)), - ('gazeta_link', models.CharField(max_length=240, blank=True)), - ('culturepl_link', models.CharField(max_length=240, blank=True)), - ('wiki_link', models.CharField(max_length=240, blank=True)), - ('wiki_link_de', models.CharField(max_length=240, null=True, blank=True)), - ('wiki_link_en', models.CharField(max_length=240, null=True, blank=True)), - ('wiki_link_es', models.CharField(max_length=240, null=True, blank=True)), - ('wiki_link_fr', models.CharField(max_length=240, null=True, blank=True)), - ('wiki_link_it', models.CharField(max_length=240, null=True, blank=True)), - ('wiki_link_lt', models.CharField(max_length=240, null=True, blank=True)), - ('wiki_link_pl', models.CharField(max_length=240, null=True, blank=True)), - ('wiki_link_ru', models.CharField(max_length=240, null=True, blank=True)), - ('wiki_link_uk', models.CharField(max_length=240, null=True, blank=True)), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date', db_index=True)), - ('changed_at', models.DateTimeField(auto_now=True, verbose_name='creation date', db_index=True)), - ('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)), - ], - options={ - 'ordering': ('sort_key',), - 'verbose_name': 'tag', - 'verbose_name_plural': 'tags', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='TagRelation', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('object_id', models.PositiveIntegerField(verbose_name='object id', db_index=True)), - ('content_type', models.ForeignKey(verbose_name='content type', to='contenttypes.ContentType')), - ('tag', models.ForeignKey(related_name=b'items', verbose_name='tag', to='catalogue.Tag')), - ], - options={ - 'db_table': 'catalogue_tag_relation', - }, - bases=(models.Model,), - ), - migrations.AlterUniqueTogether( - name='tagrelation', - unique_together=set([('tag', 'content_type', 'object_id')]), - ), - migrations.AlterUniqueTogether( - name='tag', - unique_together=set([('slug', 'category')]), - ), - ] diff --git a/apps/catalogue/migrations/0002_book_ancestor.py b/apps/catalogue/migrations/0002_book_ancestor.py deleted file mode 100644 index 9f304c3d7..000000000 --- a/apps/catalogue/migrations/0002_book_ancestor.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='book', - name='ancestor', - field=models.ManyToManyField(related_name=b'descendant', null=True, editable=False, to='catalogue.Book', blank=True), - preserve_default=True, - ), - ] diff --git a/apps/catalogue/migrations/0003_populate_ancestors.py b/apps/catalogue/migrations/0003_populate_ancestors.py deleted file mode 100644 index b6117570b..000000000 --- a/apps/catalogue/migrations/0003_populate_ancestors.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations - - -def populate_ancestors(apps, schema_editor): - """Fixes the ancestry cache.""" - # TODO: table names - from django.db import connection, transaction - if connection.vendor == 'postgres': - cursor = connection.cursor() - cursor.execute(""" - WITH RECURSIVE ancestry AS ( - SELECT book.id, book.parent_id - FROM catalogue_book AS book - WHERE book.parent_id IS NOT NULL - UNION - SELECT ancestor.id, book.parent_id - FROM ancestry AS ancestor, catalogue_book AS book - WHERE ancestor.parent_id = book.id - AND book.parent_id IS NOT NULL - ) - INSERT INTO catalogue_book_ancestor - (from_book_id, to_book_id) - SELECT id, parent_id - FROM ancestry - ORDER BY id; - """) - else: - Book = apps.get_model("catalogue", "Book") - for book in Book.objects.exclude(parent=None): - parent = book.parent - while parent is not None: - book.ancestor.add(parent) - parent = parent.parent - - -def remove_book_tags(apps, schema_editor): - Tag = apps.get_model("catalogue", "Tag") - Book = apps.get_model("catalogue", "Book") - Tag.objects.filter(category='book').delete() - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0002_book_ancestor'), - ] - - operations = [ - migrations.RunPython(populate_ancestors), - migrations.RunPython(remove_book_tags), - ] diff --git a/apps/catalogue/migrations/0004_remove_booktags_count_related_info.py b/apps/catalogue/migrations/0004_remove_booktags_count_related_info.py deleted file mode 100644 index 916224b25..000000000 --- a/apps/catalogue/migrations/0004_remove_booktags_count_related_info.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0003_populate_ancestors'), - ] - - operations = [ - migrations.AlterField( - model_name='tag', - name='category', - field=models.CharField(db_index=True, max_length=50, verbose_name='Category', choices=[(b'author', 'author'), (b'epoch', 'period'), (b'kind', 'form'), (b'genre', 'genre'), (b'theme', 'motif'), (b'set', 'set'), (b'thing', 'thing')]), - ), - - migrations.RemoveField( - model_name='tag', - name='book_count', - ), - migrations.RemoveField( - model_name='tag', - name='picture_count', - ), - migrations.RemoveField( - model_name='book', - name='_related_info', - ), - ] diff --git a/apps/catalogue/migrations/0005_auto_20141016_1337.py b/apps/catalogue/migrations/0005_auto_20141016_1337.py deleted file mode 100644 index 6de315722..000000000 --- a/apps/catalogue/migrations/0005_auto_20141016_1337.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0004_remove_booktags_count_related_info'), - ] - - operations = [ - migrations.AlterField( - model_name='book', - name='title', - field=models.CharField(max_length=32767, verbose_name='Title'), - ), - ] diff --git a/apps/catalogue/migrations/0006_auto_20141022_1059.py b/apps/catalogue/migrations/0006_auto_20141022_1059.py deleted file mode 100644 index f36eb0742..000000000 --- a/apps/catalogue/migrations/0006_auto_20141022_1059.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -def capitalize_objects(apps, schema_editor): - """Capitalize Polish names of things.""" - Tag = apps.get_model('catalogue', 'Tag') - for tag in Tag.objects.filter(category='thing'): - tag.name = tag.name_pl = tag.name.capitalize() - tag.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0005_auto_20141016_1337'), - ] - - operations = [ - migrations.RunPython(capitalize_objects), - ] diff --git a/apps/catalogue/migrations/0007_auto_20151123_1529.py b/apps/catalogue/migrations/0007_auto_20151123_1529.py deleted file mode 100644 index 86afa9889..000000000 --- a/apps/catalogue/migrations/0007_auto_20151123_1529.py +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0006_auto_20141022_1059'), - ] - - operations = [ - migrations.AlterField( - model_name='tag', - name='name', - field=models.CharField(max_length=120, verbose_name='name', db_index=True), - preserve_default=True, - ), - migrations.AlterField( - model_name='tag', - name='name_de', - field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), - preserve_default=True, - ), - migrations.AlterField( - model_name='tag', - name='name_en', - field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), - preserve_default=True, - ), - migrations.AlterField( - model_name='tag', - name='name_es', - field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), - preserve_default=True, - ), - migrations.AlterField( - model_name='tag', - name='name_fr', - field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), - preserve_default=True, - ), - migrations.AlterField( - model_name='tag', - name='name_it', - field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), - preserve_default=True, - ), - migrations.AlterField( - model_name='tag', - name='name_lt', - field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), - preserve_default=True, - ), - migrations.AlterField( - model_name='tag', - name='name_pl', - field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), - preserve_default=True, - ), - migrations.AlterField( - model_name='tag', - name='name_ru', - field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), - preserve_default=True, - ), - migrations.AlterField( - model_name='tag', - name='name_uk', - field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), - preserve_default=True, - ), - ] diff --git a/apps/catalogue/migrations/0008_auto_20151221_1225.py b/apps/catalogue/migrations/0008_auto_20151221_1225.py deleted file mode 100644 index ba6c47027..000000000 --- a/apps/catalogue/migrations/0008_auto_20151221_1225.py +++ /dev/null @@ -1,255 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models -import jsonfield.fields -import catalogue.fields -import catalogue.models.bookmedia - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0007_auto_20151123_1529'), - ] - - operations = [ - migrations.AlterModelOptions( - name='book', - options={'ordering': ('sort_key',), 'verbose_name': 'book', 'verbose_name_plural': 'books'}, - ), - migrations.AlterModelOptions( - name='fragment', - options={'ordering': ('book', 'anchor'), 'verbose_name': 'fragment', 'verbose_name_plural': 'fragments'}, - ), - migrations.AlterField( - model_name='book', - name='ancestor', - field=models.ManyToManyField(related_name='descendant', editable=False, to='catalogue.Book', blank=True), - ), - migrations.AlterField( - model_name='book', - name='common_slug', - field=models.SlugField(max_length=120, verbose_name='slug'), - ), - migrations.AlterField( - model_name='book', - name='description', - field=models.TextField(verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='book', - name='extra_info', - field=jsonfield.fields.JSONField(default={}, verbose_name='extra information'), - ), - migrations.AlterField( - model_name='book', - name='parent_number', - field=models.IntegerField(default=0, verbose_name='parent number'), - ), - migrations.AlterField( - model_name='book', - name='slug', - field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), - ), - migrations.AlterField( - model_name='book', - name='sort_key', - field=models.CharField(verbose_name='sort key', max_length=120, editable=False, db_index=True), - ), - migrations.AlterField( - model_name='book', - name='title', - field=models.CharField(max_length=32767, verbose_name='title'), - ), - migrations.AlterField( - model_name='bookmedia', - name='extra_info', - field=jsonfield.fields.JSONField(default={}, verbose_name='extra information', editable=False), - ), - migrations.AlterField( - model_name='bookmedia', - name='file', - field=catalogue.fields.OverwritingFileField(upload_to=catalogue.models.bookmedia._file_upload_to, max_length=600, verbose_name='file'), - ), - migrations.AlterField( - model_name='collection', - name='book_slugs', - field=models.TextField(verbose_name='book slugs'), - ), - migrations.AlterField( - model_name='collection', - name='description', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='description_de', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='description_en', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='description_es', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='description_fr', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='description_it', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='description_lt', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='description_pl', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='description_ru', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='description_uk', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='collection', - name='kind', - field=models.CharField(default=b'book', max_length=10, verbose_name='kind', db_index=True, choices=[(b'book', 'book'), (b'picture', b'picture')]), - ), - migrations.AlterField( - model_name='collection', - name='slug', - field=models.SlugField(max_length=120, serialize=False, verbose_name='slug', primary_key=True), - ), - migrations.AlterField( - model_name='collection', - name='title', - field=models.CharField(max_length=120, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='collection', - name='title_de', - field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='collection', - name='title_en', - field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='collection', - name='title_es', - field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='collection', - name='title_fr', - field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='collection', - name='title_it', - field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='collection', - name='title_lt', - field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='collection', - name='title_pl', - field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='collection', - name='title_ru', - field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='collection', - name='title_uk', - field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), - ), - migrations.AlterField( - model_name='tag', - name='category', - field=models.CharField(db_index=True, max_length=50, verbose_name='category', choices=[(b'author', 'author'), (b'epoch', 'epoch'), (b'kind', 'kind'), (b'genre', 'genre'), (b'theme', 'theme'), (b'set', 'set'), (b'thing', 'thing')]), - ), - migrations.AlterField( - model_name='tag', - name='description', - field=models.TextField(verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='description_de', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='description_en', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='description_es', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='description_fr', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='description_it', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='description_lt', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='description_pl', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='description_ru', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='description_uk', - field=models.TextField(null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='tag', - name='slug', - field=models.SlugField(max_length=120, verbose_name='slug'), - ), - migrations.AlterField( - model_name='tag', - name='sort_key', - field=models.CharField(max_length=120, verbose_name='sort key', db_index=True), - ), - ] diff --git a/apps/catalogue/migrations/__init__.py b/apps/catalogue/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/catalogue/models/__init__.py b/apps/catalogue/models/__init__.py deleted file mode 100644 index 73b51090c..000000000 --- a/apps/catalogue/models/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from catalogue.models.tag import Tag -from catalogue.models.bookmedia import BookMedia -from catalogue.models.fragment import Fragment -from catalogue.models.book import Book -from catalogue.models.collection import Collection -from catalogue.models.source import Source diff --git a/apps/catalogue/models/book.py b/apps/catalogue/models/book.py deleted file mode 100644 index 5f68e09ff..000000000 --- a/apps/catalogue/models/book.py +++ /dev/null @@ -1,552 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from collections import OrderedDict -from random import randint -import re -from django.conf import settings -from django.db import connection, models, transaction -from django.db.models import permalink -import django.dispatch -from django.contrib.contenttypes.fields import GenericRelation -from django.core.urlresolvers import reverse -from django.utils.translation import ugettext_lazy as _ -import jsonfield -from fnpdjango.storage import BofhFileSystemStorage -from ssify import flush_ssi_includes -from newtagging import managers -from catalogue import constants -from catalogue.fields import EbookField -from catalogue.models import Tag, Fragment, BookMedia -from catalogue.utils import create_zip -from catalogue import app_settings -from catalogue import tasks - -bofh_storage = BofhFileSystemStorage() - - -def _cover_upload_to(i, n): - return 'book/cover/%s.jpg' % i.slug - -def _cover_thumb_upload_to(i, n): - return 'book/cover_thumb/%s.jpg' % i.slug - -def _ebook_upload_to(upload_path): - def _upload_to(i, n): - return upload_path % i.slug - return _upload_to - - -class Book(models.Model): - """Represents a book imported from WL-XML.""" - title = models.CharField(_('title'), max_length=32767) - sort_key = models.CharField(_('sort key'), max_length=120, db_index=True, editable=False) - sort_key_author = models.CharField(_('sort key by author'), max_length=120, db_index=True, editable=False, default=u'') - slug = models.SlugField(_('slug'), max_length=120, db_index=True, - unique=True) - common_slug = models.SlugField(_('slug'), max_length=120, db_index=True) - language = models.CharField(_('language code'), max_length=3, db_index=True, - default=app_settings.DEFAULT_LANGUAGE) - description = models.TextField(_('description'), blank=True) - created_at = models.DateTimeField(_('creation date'), auto_now_add=True, db_index=True) - changed_at = models.DateTimeField(_('creation date'), auto_now=True, db_index=True) - parent_number = models.IntegerField(_('parent number'), default=0) - extra_info = jsonfield.JSONField(_('extra information'), default={}) - gazeta_link = models.CharField(blank=True, max_length=240) - wiki_link = models.CharField(blank=True, max_length=240) - # files generated during publication - - cover = EbookField('cover', _('cover'), - null=True, blank=True, - upload_to=_cover_upload_to, - storage=bofh_storage, max_length=255) - # Cleaner version of cover for thumbs - cover_thumb = EbookField('cover_thumb', _('cover thumbnail'), - null=True, blank=True, - upload_to=_cover_thumb_upload_to, - max_length=255) - ebook_formats = constants.EBOOK_FORMATS - formats = ebook_formats + ['html', 'xml'] - - parent = models.ForeignKey('self', blank=True, null=True, - related_name='children') - ancestor = models.ManyToManyField('self', blank=True, - editable=False, related_name='descendant', symmetrical=False) - - objects = models.Manager() - tagged = managers.ModelTaggedItemManager(Tag) - tags = managers.TagDescriptor(Tag) - tag_relations = GenericRelation(Tag.intermediary_table_model) - - html_built = django.dispatch.Signal() - published = django.dispatch.Signal() - - short_html_url_name = 'catalogue_book_short' - - class AlreadyExists(Exception): - pass - - class Meta: - ordering = ('sort_key',) - verbose_name = _('book') - verbose_name_plural = _('books') - app_label = 'catalogue' - - def __unicode__(self): - return self.title - - def save(self, force_insert=False, force_update=False, **kwargs): - from sortify import sortify - - self.sort_key = sortify(self.title)[:120] - self.title = unicode(self.title) # ??? - - try: - author = self.tags.filter(category='author')[0].sort_key - except IndexError: - author = u'' - self.sort_key_author = author - - ret = super(Book, self).save(force_insert, force_update, **kwargs) - - return ret - - @permalink - def get_absolute_url(self): - return ('catalogue.views.book_detail', [self.slug]) - - @staticmethod - @permalink - def create_url(slug): - return ('catalogue.views.book_detail', [slug]) - - @property - def name(self): - return self.title - - def language_code(self): - return constants.LANGUAGES_3TO2.get(self.language, self.language) - - def language_name(self): - return dict(settings.LANGUAGES).get(self.language_code(), "") - - def has_media(self, type_): - if type_ in Book.formats: - return bool(getattr(self, "%s_file" % type_)) - else: - return self.media.filter(type=type_).exists() - - def get_media(self, type_): - if self.has_media(type_): - if type_ in Book.formats: - return getattr(self, "%s_file" % type_) - else: - return self.media.filter(type=type_) - else: - return None - - def get_mp3(self): - return self.get_media("mp3") - def get_odt(self): - return self.get_media("odt") - def get_ogg(self): - return self.get_media("ogg") - def get_daisy(self): - return self.get_media("daisy") - - def has_description(self): - return len(self.description) > 0 - has_description.short_description = _('description') - has_description.boolean = True - - # ugly ugly ugly - def has_mp3_file(self): - return bool(self.has_media("mp3")) - has_mp3_file.short_description = 'MP3' - has_mp3_file.boolean = True - - def has_ogg_file(self): - return bool(self.has_media("ogg")) - has_ogg_file.short_description = 'OGG' - has_ogg_file.boolean = True - - def has_daisy_file(self): - return bool(self.has_media("daisy")) - has_daisy_file.short_description = 'DAISY' - has_daisy_file.boolean = True - - def wldocument(self, parse_dublincore=True, inherit=True): - from catalogue.import_utils import ORMDocProvider - from librarian.parser import WLDocument - - if inherit and self.parent: - meta_fallbacks = self.parent.cover_info() - else: - meta_fallbacks = None - - return WLDocument.from_file(self.xml_file.path, - provider=ORMDocProvider(self), - parse_dublincore=parse_dublincore, - meta_fallbacks=meta_fallbacks) - - @staticmethod - def zip_format(format_): - def pretty_file_name(book): - return "%s/%s.%s" % ( - book.extra_info['author'], - book.slug, - format_) - - field_name = "%s_file" % format_ - books = Book.objects.filter(parent=None).exclude(**{field_name: ""}) - paths = [(pretty_file_name(b), getattr(b, field_name).path) - for b in books.iterator()] - return create_zip(paths, app_settings.FORMAT_ZIPS[format_]) - - def zip_audiobooks(self, format_): - bm = BookMedia.objects.filter(book=self, type=format_) - paths = map(lambda bm: (None, bm.file.path), bm) - return create_zip(paths, "%s_%s" % (self.slug, format_)) - - def search_index(self, book_info=None, index=None, index_tags=True, commit=True): - if index is None: - from search.index import Index - index = Index() - try: - index.index_book(self, book_info) - if index_tags: - index.index_tags() - if commit: - index.index.commit() - except Exception, e: - index.index.rollback() - raise e - - - @classmethod - def from_xml_file(cls, xml_file, **kwargs): - from django.core.files import File - from librarian import dcparser - - # use librarian to parse meta-data - book_info = dcparser.parse(xml_file) - - if not isinstance(xml_file, File): - xml_file = File(open(xml_file)) - - try: - return cls.from_text_and_meta(xml_file, book_info, **kwargs) - finally: - xml_file.close() - - @classmethod - def from_text_and_meta(cls, raw_file, book_info, overwrite=False, - dont_build=None, search_index=True, - search_index_tags=True): - if dont_build is None: - dont_build = set() - dont_build = set.union(set(dont_build), set(app_settings.DONT_BUILD)) - - # check for parts before we do anything - children = [] - if hasattr(book_info, 'parts'): - for part_url in book_info.parts: - try: - children.append(Book.objects.get(slug=part_url.slug)) - except Book.DoesNotExist: - raise Book.DoesNotExist(_('Book "%s" does not exist.') % - part_url.slug) - - # Read book metadata - book_slug = book_info.url.slug - if re.search(r'[^a-z0-9-]', book_slug): - raise ValueError('Invalid characters in slug') - book, created = Book.objects.get_or_create(slug=book_slug) - - if created: - book_shelves = [] - old_cover = None - else: - if not overwrite: - raise Book.AlreadyExists(_('Book %s already exists') % ( - book_slug)) - # Save shelves for this book - book_shelves = list(book.tags.filter(category='set')) - old_cover = book.cover_info() - - # Save XML file - book.xml_file.save('%s.xml' % book.slug, raw_file, save=False) - - book.language = book_info.language - book.title = book_info.title - if book_info.variant_of: - book.common_slug = book_info.variant_of.slug - else: - book.common_slug = book.slug - book.extra_info = book_info.to_dict() - book.save() - - meta_tags = Tag.tags_from_info(book_info) - - book.tags = set(meta_tags + book_shelves) - - cover_changed = old_cover != book.cover_info() - obsolete_children = set(b for b in book.children.all() - if b not in children) - notify_cover_changed = [] - for n, child_book in enumerate(children): - new_child = child_book.parent != book - child_book.parent = book - child_book.parent_number = n - child_book.save() - if new_child or cover_changed: - notify_cover_changed.append(child_book) - # Disown unfaithful children and let them cope on their own. - for child in obsolete_children: - child.parent = None - child.parent_number = 0 - child.save() - if old_cover: - notify_cover_changed.append(child) - - cls.repopulate_ancestors() - - # No saves beyond this point. - - # Build cover. - if 'cover' not in dont_build: - book.cover.build_delay() - book.cover_thumb.build_delay() - - # Build HTML and ebooks. - book.html_file.build_delay() - if not children: - for format_ in constants.EBOOK_FORMATS_WITHOUT_CHILDREN: - if format_ not in dont_build: - getattr(book, '%s_file' % format_).build_delay() - for format_ in constants.EBOOK_FORMATS_WITH_CHILDREN: - if format_ not in dont_build: - getattr(book, '%s_file' % format_).build_delay() - - if not settings.NO_SEARCH_INDEX and search_index: - tasks.index_book.delay(book.id, book_info=book_info, index_tags=search_index_tags) - - for child in notify_cover_changed: - child.parent_cover_changed() - - cls.published.send(sender=cls, instance=book) - return book - - @classmethod - def repopulate_ancestors(cls): - """Fixes the ancestry cache.""" - # TODO: table names - with transaction.atomic(): - cursor = connection.cursor() - if connection.vendor == 'postgres': - cursor.execute("TRUNCATE catalogue_book_ancestor") - cursor.execute(""" - WITH RECURSIVE ancestry AS ( - SELECT book.id, book.parent_id - FROM catalogue_book AS book - WHERE book.parent_id IS NOT NULL - UNION - SELECT ancestor.id, book.parent_id - FROM ancestry AS ancestor, catalogue_book AS book - WHERE ancestor.parent_id = book.id - AND book.parent_id IS NOT NULL - ) - INSERT INTO catalogue_book_ancestor - (from_book_id, to_book_id) - SELECT id, parent_id - FROM ancestry - ORDER BY id; - """) - else: - cursor.execute("DELETE FROM catalogue_book_ancestor") - for b in cls.objects.exclude(parent=None): - parent = b.parent - while parent is not None: - b.ancestor.add(parent) - parent = parent.parent - - def flush_includes(self, languages=True): - if not languages: - return - if languages is True: - languages = [lc for (lc, _ln) in settings.LANGUAGES] - flush_ssi_includes([ - template % (self.pk, lang) - for template in [ - '/katalog/b/%d/mini.%s.html', - '/katalog/b/%d/mini_nolink.%s.html', - '/katalog/b/%d/short.%s.html', - '/katalog/b/%d/wide.%s.html', - '/api/include/book/%d.%s.json', - '/api/include/book/%d.%s.xml', - ] - for lang in languages - ]) - - def cover_info(self, inherit=True): - """Returns a dictionary to serve as fallback for BookInfo. - - For now, the only thing inherited is the cover image. - """ - need = False - info = {} - for field in ('cover_url', 'cover_by', 'cover_source'): - val = self.extra_info.get(field) - if val: - info[field] = val - else: - need = True - if inherit and need and self.parent is not None: - parent_info = self.parent.cover_info() - parent_info.update(info) - info = parent_info - return info - - def related_themes(self): - return Tag.objects.usage_for_queryset( - Fragment.objects.filter(models.Q(book=self) | models.Q(book__ancestor=self)), - counts=True).filter(category='theme') - - def parent_cover_changed(self): - """Called when parent book's cover image is changed.""" - if not self.cover_info(inherit=False): - if 'cover' not in app_settings.DONT_BUILD: - self.cover.build_delay() - self.cover_thumb.build_delay() - for format_ in constants.EBOOK_FORMATS_WITH_COVERS: - if format_ not in app_settings.DONT_BUILD: - getattr(self, '%s_file' % format_).build_delay() - for child in self.children.all(): - child.parent_cover_changed() - - def other_versions(self): - """Find other versions (i.e. in other languages) of the book.""" - return type(self).objects.filter(common_slug=self.common_slug).exclude(pk=self.pk) - - def parents(self): - books = [] - parent = self.parent - while parent is not None: - books.insert(0, parent) - parent = parent.parent - return books - - def pretty_title(self, html_links=False): - names = [(tag.name, tag.get_absolute_url()) - for tag in self.tags.filter(category='author')] - books = self.parents() + [self] - names.extend([(b.title, b.get_absolute_url()) for b in books]) - - if html_links: - names = ['<a href="%s">%s</a>' % (tag[1], tag[0]) for tag in names] - else: - names = [tag[0] for tag in names] - return ', '.join(names) - - @classmethod - def tagged_top_level(cls, tags): - """ Returns top-level books tagged with `tags`. - - It only returns those books which don't have ancestors which are - also tagged with those tags. - - """ - objects = cls.tagged.with_all(tags) - return objects.exclude(ancestor__in=objects) - - @classmethod - def book_list(cls, filter=None): - """Generates a hierarchical listing of all books. - - Books are optionally filtered with a test function. - - """ - - books_by_parent = {} - books = cls.objects.all().order_by('parent_number', 'sort_key').only( - 'title', 'parent', 'slug') - if filter: - books = books.filter(filter).distinct() - - book_ids = set(b['pk'] for b in books.values("pk").iterator()) - for book in books.iterator(): - parent = book.parent_id - if parent not in book_ids: - parent = None - books_by_parent.setdefault(parent, []).append(book) - else: - for book in books.iterator(): - books_by_parent.setdefault(book.parent_id, []).append(book) - - orphans = [] - books_by_author = OrderedDict() - for tag in Tag.objects.filter(category='author').iterator(): - books_by_author[tag] = [] - - for book in books_by_parent.get(None, ()): - authors = list(book.tags.filter(category='author')) - if authors: - for author in authors: - books_by_author[author].append(book) - else: - orphans.append(book) - - return books_by_author, orphans, books_by_parent - - _audiences_pl = { - "SP": (1, u"szkoÅa podstawowa"), - "SP1": (1, u"szkoÅa podstawowa"), - "SP2": (1, u"szkoÅa podstawowa"), - "P": (1, u"szkoÅa podstawowa"), - "G": (2, u"gimnazjum"), - "L": (3, u"liceum"), - "LP": (3, u"liceum"), - } - def audiences_pl(self): - audiences = self.extra_info.get('audiences', []) - audiences = sorted(set([self._audiences_pl.get(a, (99, a)) for a in audiences])) - return [a[1] for a in audiences] - - def stage_note(self): - stage = self.extra_info.get('stage') - if stage and stage < '0.4': - return (_('This work needs modernisation'), - reverse('infopage', args=['wymagajace-uwspolczesnienia'])) - else: - return None, None - - def choose_fragment(self): - fragments = self.fragments.order_by() - fragments_count = fragments.count() - if not fragments_count and self.children.exists(): - fragments = Fragment.objects.filter(book__ancestor=self).order_by() - fragments_count = fragments.count() - if fragments_count: - return fragments[randint(0, fragments_count - 1)] - elif self.parent: - return self.parent.choose_fragment() - else: - return None - - -# add the file fields -for format_ in Book.formats: - field_name = "%s_file" % format_ - # This weird globals() assignment makes Django migrations comfortable. - _upload_to = _ebook_upload_to('book/%s/%%s.%s' % (format_, format_)) - _upload_to.__name__ = '_%s_upload_to' % format_ - globals()[_upload_to.__name__] = _upload_to - - EbookField(format_, _("%s file" % format_.upper()), - upload_to=_upload_to, - storage=bofh_storage, - max_length=255, - blank=True, - default='' - ).contribute_to_class(Book, field_name) diff --git a/apps/catalogue/models/bookmedia.py b/apps/catalogue/models/bookmedia.py deleted file mode 100644 index 1ef3fd7b9..000000000 --- a/apps/catalogue/models/bookmedia.py +++ /dev/null @@ -1,134 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from collections import OrderedDict -import json -from collections import namedtuple -from django.db import models -from django.utils.translation import ugettext_lazy as _ -import jsonfield -from fnpdjango.utils.text.slughifi import slughifi -from catalogue.fields import OverwritingFileField - - -def _file_upload_to(i, _n): - return 'book/%(ext)s/%(name)s.%(ext)s' % { - 'ext': i.ext(), 'name': slughifi(i.name)} - -class BookMedia(models.Model): - """Represents media attached to a book.""" - FileFormat = namedtuple("FileFormat", "name ext") - formats = OrderedDict([ - ('mp3', FileFormat(name='MP3', ext='mp3')), - ('ogg', FileFormat(name='Ogg Vorbis', ext='ogg')), - ('daisy', FileFormat(name='DAISY', ext='daisy.zip')), - ]) - format_choices = [(k, _('%s file' % t.name)) - for k, t in formats.items()] - - type = models.CharField(_('type'), db_index=True, choices=format_choices, max_length=20) - name = models.CharField(_('name'), max_length=512) - file = OverwritingFileField(_('file'), max_length=600, - upload_to=_file_upload_to) - uploaded_at = models.DateTimeField(_('creation date'), auto_now_add=True, editable=False, db_index=True) - extra_info = jsonfield.JSONField(_('extra information'), default={}, editable=False) - book = models.ForeignKey('Book', related_name='media') - source_sha1 = models.CharField(null=True, blank=True, max_length=40, editable=False) - - def __unicode__(self): - return "%s (%s)" % (self.name, self.file.name.split("/")[-1]) - - class Meta: - ordering = ('type', 'name') - verbose_name = _('book media') - verbose_name_plural = _('book media') - app_label = 'catalogue' - - def save(self, *args, **kwargs): - from catalogue.utils import ExistingFile, remove_zip - - try: - old = BookMedia.objects.get(pk=self.pk) - except BookMedia.DoesNotExist: - old = None - else: - # if name changed, change the file name, too - if slughifi(self.name) != slughifi(old.name): - self.file.save(None, ExistingFile(self.file.path), save=False, leave=True) - - super(BookMedia, self).save(*args, **kwargs) - - # remove the zip package for book with modified media - if old: - remove_zip("%s_%s" % (old.book.slug, old.type)) - remove_zip("%s_%s" % (self.book.slug, self.type)) - - extra_info = self.extra_info - if isinstance(extra_info, basestring): - # Walkaround for weird jsonfield 'no-decode' optimization. - extra_info = json.loads(extra_info) - extra_info.update(self.read_meta()) - self.extra_info = extra_info - self.source_sha1 = self.read_source_sha1(self.file.path, self.type) - return super(BookMedia, self).save(*args, **kwargs) - - def read_meta(self): - """ - Reads some metadata from the audiobook. - """ - import mutagen - from mutagen import id3 - - artist_name = director_name = project = funded_by = '' - if self.type == 'mp3': - try: - audio = id3.ID3(self.file.path) - artist_name = ', '.join(', '.join(tag.text) for tag in audio.getall('TPE1')) - director_name = ', '.join(', '.join(tag.text) for tag in audio.getall('TPE3')) - project = ", ".join([t.data for t in audio.getall('PRIV') - if t.owner == 'wolnelektury.pl?project']) - funded_by = ", ".join([t.data for t in audio.getall('PRIV') - if t.owner == 'wolnelektury.pl?funded_by']) - except: - pass - elif self.type == 'ogg': - try: - audio = mutagen.File(self.file.path) - artist_name = ', '.join(audio.get('artist', [])) - director_name = ', '.join(audio.get('conductor', [])) - project = ", ".join(audio.get('project', [])) - funded_by = ", ".join(audio.get('funded_by', [])) - except: - pass - else: - return {} - return {'artist_name': artist_name, 'director_name': director_name, - 'project': project, 'funded_by': funded_by} - - def ext(self): - return self.formats[self.type].ext - - @staticmethod - def read_source_sha1(filepath, filetype): - """ - Reads source file SHA1 from audiobok metadata. - """ - import mutagen - from mutagen import id3 - - if filetype == 'mp3': - try: - audio = id3.ID3(filepath) - return [t.data for t in audio.getall('PRIV') - if t.owner == 'wolnelektury.pl?flac_sha1'][0] - except: - return None - elif filetype == 'ogg': - try: - audio = mutagen.File(filepath) - return audio.get('flac_sha1', [None])[0] - except: - return None - else: - return None diff --git a/apps/catalogue/models/collection.py b/apps/catalogue/models/collection.py deleted file mode 100644 index 098501eba..000000000 --- a/apps/catalogue/models/collection.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from django.db import models -from django.utils.translation import ugettext_lazy as _ -from ssify import flush_ssi_includes - - -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')) - - kind = models.CharField(_('kind'), max_length=10, blank=False, default='book', db_index=True, choices=((('book'), _('book')), (('picture'), ('picture')))) - - class Meta: - ordering = ('title',) - verbose_name = _('collection') - verbose_name_plural = _('collections') - app_label = 'catalogue' - - def __unicode__(self): - return self.title - - @models.permalink - def get_absolute_url(self): - return ("collection", [self.slug]) - - def get_query(self): - slugs = self.book_slugs.split() - # allow URIs - slugs = [slug.rstrip('/').rsplit('/', 1)[-1] if '/' in slug else slug - for slug in slugs] - return models.Q(slug__in=slugs) - - def flush_includes(self, languages=True): - if not languages: - return - if languages is True: - languages = [lc for (lc, _ln) in settings.LANGUAGES] - - flush_ssi_includes([ - '/katalog/%s.json' % lang for lang in languages]) diff --git a/apps/catalogue/models/fragment.py b/apps/catalogue/models/fragment.py deleted file mode 100644 index a3dbdea54..000000000 --- a/apps/catalogue/models/fragment.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from django.contrib.contenttypes.fields import GenericRelation -from django.core.urlresolvers import reverse -from django.db import models -from django.utils.translation import ugettext_lazy as _ -from newtagging import managers -from catalogue.models import Tag -from ssify import flush_ssi_includes - - -class Fragment(models.Model): - """Represents a themed fragment of a book.""" - text = models.TextField() - short_text = models.TextField(editable=False) - anchor = models.CharField(max_length=120) - book = models.ForeignKey('Book', related_name='fragments') - - objects = models.Manager() - tagged = managers.ModelTaggedItemManager(Tag) - tags = managers.TagDescriptor(Tag) - tag_relations = GenericRelation(Tag.intermediary_table_model) - - short_html_url_name = 'catalogue_fragment_short' - - class Meta: - ordering = ('book', 'anchor',) - verbose_name = _('fragment') - verbose_name_plural = _('fragments') - app_label = 'catalogue' - - def get_absolute_url(self): - return '%s#m%s' % (reverse('book_text', args=[self.book.slug]), self.anchor) - - def get_short_text(self): - """Returns short version of the fragment.""" - return self.short_text if self.short_text else self.text - - def flush_includes(self, languages=True): - if not languages: - return - if languages is True: - languages = [lc for (lc, _ln) in settings.LANGUAGES] - flush_ssi_includes([ - template % (self.pk, lang) - for template in [ - '/katalog/f/%d/short.%s.html', - '/api/include/fragment/%d.%s.json', - '/api/include/fragment/%d.%s.xml', - ] - for lang in languages - ]) diff --git a/apps/catalogue/models/source.py b/apps/catalogue/models/source.py deleted file mode 100644 index 9aff4efec..000000000 --- a/apps/catalogue/models/source.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.db import models -from django.utils.translation import ugettext_lazy as _ - - -class Source(models.Model): - """A collection of books, which might be defined before publishing them.""" - netloc = models.CharField(_('network location'), max_length=120, primary_key=True) - name = models.CharField(_('name'), max_length=120, blank=True) - - class Meta: - ordering = ('netloc',) - verbose_name = _('source') - verbose_name_plural = _('sources') - app_label = 'catalogue' - - def __unicode__(self): - return self.netloc - - def save(self, *args, **kwargs): - from catalogue.models import Book - try: - str(self.pk) - old_self = type(self).objects.get(pk=self) - except type(self).DoesNotExist: - old_name = u'' - old_netloc = self.netloc - else: - old_name = old_self.name - old_netloc = old_self.netloc - - ret = super(Source, self).save(*args, **kwargs) - - # If something really changed here, find relevant books - # and invalidate their cached includes. - if old_name != self.name or old_netloc != self.netloc: - for book in Book.objects.all(): - source = book.extra_info.get('source_url', '') - if self.netloc in source or (old_netloc != self.netloc - and old_netloc in source): - book.flush_includes() - return ret diff --git a/apps/catalogue/models/tag.py b/apps/catalogue/models/tag.py deleted file mode 100644 index 02bf6c07d..000000000 --- a/apps/catalogue/models/tag.py +++ /dev/null @@ -1,233 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from django.core.cache import caches -from django.contrib.auth.models import User -from django.db import models -from django.db.models import permalink -from django.dispatch import Signal -from django.utils.translation import ugettext_lazy as _ -from newtagging.models import TagBase -from ssify import flush_ssi_includes - - -# Those are hard-coded here so that makemessages sees them. -TAG_CATEGORIES = ( - ('author', _('author')), - ('epoch', _('epoch')), - ('kind', _('kind')), - ('genre', _('genre')), - ('theme', _('theme')), - ('set', _('set')), - ('thing', _('thing')), # things shown on pictures -) - - -class Tag(TagBase): - """A tag attachable to books and fragments (and possibly anything). - - Used to represent searchable metadata (authors, epochs, genres, kinds), - fragment themes (motifs) and some book hierarchy related kludges.""" - name = models.CharField(_('name'), max_length=120, db_index=True) - slug = models.SlugField(_('slug'), max_length=120, db_index=True) - sort_key = models.CharField(_('sort key'), max_length=120, db_index=True) - category = models.CharField(_('category'), max_length=50, blank=False, null=False, - db_index=True, choices=TAG_CATEGORIES) - description = models.TextField(_('description'), blank=True) - - user = models.ForeignKey(User, blank=True, null=True) - gazeta_link = models.CharField(blank=True, max_length=240) - culturepl_link = models.CharField(blank=True, max_length=240) - wiki_link = models.CharField(blank=True, max_length=240) - - created_at = models.DateTimeField(_('creation date'), auto_now_add=True, db_index=True) - changed_at = models.DateTimeField(_('creation date'), auto_now=True, db_index=True) - - after_change = Signal(providing_args=['instance', 'languages']) - - class UrlDeprecationWarning(DeprecationWarning): - pass - - categories_rev = { - 'autor': 'author', - 'epoka': 'epoch', - 'rodzaj': 'kind', - 'gatunek': 'genre', - 'motyw': 'theme', - 'polka': 'set', - 'obiekt': 'thing', - } - categories_dict = dict((item[::-1] for item in categories_rev.iteritems())) - - class Meta: - ordering = ('sort_key',) - verbose_name = _('tag') - verbose_name_plural = _('tags') - unique_together = (("slug", "category"),) - app_label = 'catalogue' - - def save(self, *args, **kwargs): - flush_cache = flush_all_includes = False - if self.pk and self.category != 'set': - # Flush the whole views cache. - # Seem a little harsh, but changed tag names, descriptions - # and links come up at any number of places. - flush_cache = True - - # Find in which languages we need to flush related includes. - old_self = type(self).objects.get(pk=self.pk) - # Category shouldn't normally be changed, but just in case. - if self.category != old_self.category: - flush_all_includes = True - languages_changed = self.languages_changed(old_self) - - ret = super(Tag, self).save(*args, **kwargs) - - if flush_cache: - caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() - if flush_all_includes: - flush_ssi_includes() - else: - self.flush_includes() - self.after_change.send(sender=type(self), instance=self, languages=languages_changed) - - return ret - - def languages_changed(self, old): - all_langs = [lc for (lc, _ln) in settings.LANGUAGES] - if (old.category, old.slug) != (self.category, self.slug): - return all_langs - languages = set() - for lang in all_langs: - name_field = 'name_%s' % lang - if getattr(old, name_field) != getattr(self, name_field): - languages.add(lang) - return languages - - def flush_includes(self, languages=True): - if not languages: - return - if languages is True: - languages = [lc for (lc, _ln) in settings.LANGUAGES] - flush_ssi_includes([ - template % (self.pk, lang) - for template in [ - '/api/include/tag/%d.%s.json', - '/api/include/tag/%d.%s.xml', - ] - for lang in languages - ]) - flush_ssi_includes([ - '/katalog/%s.json' % lang for lang in languages]) - - def __unicode__(self): - return self.name - - def __repr__(self): - return "Tag(slug=%r)" % self.slug - - @permalink - def get_absolute_url(self): - return ('catalogue.views.tagged_object_list', [self.url_chunk]) - - @classmethod - @permalink - def create_url(cls, category, slug): - return ('catalogue.views.tagged_object_list', [ - '/'.join((cls.categories_dict[category], slug)) - ]) - - def has_description(self): - return len(self.description) > 0 - has_description.short_description = _('description') - has_description.boolean = True - - @staticmethod - def get_tag_list(tags): - if isinstance(tags, basestring): - real_tags = [] - ambiguous_slugs = [] - category = None - deprecated = False - tags_splitted = tags.split('/') - for name in tags_splitted: - if category: - real_tags.append(Tag.objects.get(slug=name, category=category)) - category = None - elif name in Tag.categories_rev: - category = Tag.categories_rev[name] - else: - try: - real_tags.append(Tag.objects.get(slug=name)) - deprecated = True - except Tag.MultipleObjectsReturned, e: - ambiguous_slugs.append(name) - - if category: - # something strange left off - raise Tag.DoesNotExist() - if ambiguous_slugs: - # some tags should be qualified - e = Tag.MultipleObjectsReturned() - e.tags = real_tags - e.ambiguous_slugs = ambiguous_slugs - raise e - if deprecated: - e = Tag.UrlDeprecationWarning() - e.tags = real_tags - raise e - return real_tags - else: - return TagBase.get_tag_list(tags) - - @property - def url_chunk(self): - return '/'.join((Tag.categories_dict[self.category], self.slug)) - - @staticmethod - def tags_from_info(info): - from fnpdjango.utils.text.slughifi import slughifi - from sortify import sortify - meta_tags = [] - categories = (('kinds', 'kind'), ('genres', 'genre'), ('authors', 'author'), ('epochs', 'epoch')) - for field_name, category in categories: - try: - tag_names = getattr(info, field_name) - except: - try: - tag_names = [getattr(info, category)] - except: - # For instance, Pictures do not have 'genre' field. - continue - for tag_name in tag_names: - lang = getattr(tag_name, 'lang', settings.LANGUAGE_CODE) - tag_sort_key = tag_name - if category == 'author': - tag_sort_key = tag_name.last_name - tag_name = tag_name.readable() - if lang == settings.LANGUAGE_CODE: - # Allow creating new tag, if it's in default language. - tag, created = Tag.objects.get_or_create(slug=slughifi(tag_name), category=category) - if created: - tag_name = unicode(tag_name) - tag.name = tag_name - setattr(tag, "name_%s" % lang, tag_name) - tag.sort_key = sortify(tag_sort_key.lower()) - tag.save() - - meta_tags.append(tag) - else: - # Ignore unknown tags in non-default languages. - try: - tag = Tag.objects.get(category=category, **{"name_%s" % lang: tag_name}) - except Tag.DoesNotExist: - pass - else: - meta_tags.append(tag) - return meta_tags - - -# Pickle complains about not having this. -TagRelation = Tag.intermediary_table_model diff --git a/apps/catalogue/signals.py b/apps/catalogue/signals.py deleted file mode 100644 index 660d26493..000000000 --- a/apps/catalogue/signals.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from django.core.cache import caches -from django.db.models.signals import post_save, post_delete -from django.dispatch import receiver -from ssify import flush_ssi_includes -from newtagging.models import tags_updated -from picture.models import Picture, PictureArea -from .models import BookMedia, Book, Collection, Fragment, Tag - - -#### -# BookMedia -#### - - -@receiver([post_save, post_delete], sender=BookMedia) -def bookmedia_save(sender, instance, **kwargs): - instance.book.save() - - -#### -# Collection -#### - - -@receiver(post_save, sender=Collection) -def collection_save(sender, instance, **kwargs): - caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() - flush_ssi_includes([ - '/katalog/%s.json' % lang - for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) - - -@receiver(post_delete, sender=Collection) -def collection_delete(sender, instance, **kwargs): - flush_ssi_includes([ - '/katalog/%s.json' % lang - for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) - -#### -# Book -#### - - -@receiver(post_save, sender=Book) -def book_save(sender, instance, **kwargs): - # Books come out anywhere. - caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() - instance.flush_includes() - - -@receiver(post_delete, sender=Book) -def book_delete(sender, instance, **kwargs): - caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() - flush_ssi_includes([ - '/katalog/%s.json' % lang - for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) - - if not settings.NO_SEARCH_INDEX: - # remove the book from search index, when it is deleted. - from search.index import Index - idx = Index() - idx.remove_book(instance) - idx.index_tags() - - -#### -# Tag -#### - - -@receiver(Tag.after_change) -def tag_after_change(sender, instance, languages, **kwargs): - caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() - flush_ssi_includes([ - '/katalog/%s.json' % lang - for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) - - for model in Book, Picture: - for model_instance in model.tagged.with_all([instance]).only('pk'): - model_instance.flush_includes() - - if instance.category == 'author': - for model in Fragment, PictureArea: - for model_instance in model.tagged.with_all([instance]).only('pk'): - model_instance.flush_includes() - - -@receiver(tags_updated) -def receive_tags_updated(sender, instance, affected_tags, **kwargs): - categories = set(tag.category for tag in affected_tags - if tag.category not in ('set', 'book')) - if not categories: - return - - caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() - instance.flush_includes() - flush_ssi_includes([ - '/katalog/%s.json' % lang - for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) diff --git a/apps/catalogue/static/jplayer/Jplayer.swf b/apps/catalogue/static/jplayer/Jplayer.swf deleted file mode 100644 index 85c0ba38e..000000000 Binary files a/apps/catalogue/static/jplayer/Jplayer.swf and /dev/null differ diff --git a/apps/catalogue/static/jplayer/jplayer.blue.monday.css b/apps/catalogue/static/jplayer/jplayer.blue.monday.css deleted file mode 100644 index f8b314b6e..000000000 --- a/apps/catalogue/static/jplayer/jplayer.blue.monday.css +++ /dev/null @@ -1,627 +0,0 @@ -/* - * Skin for jPlayer Plugin (jQuery JavaScript Library) - * http://www.happyworm.com/jquery/jplayer - * - * Skin Name: Blue Monday - * - * Copyright (c) 2010-2011 Happyworm Ltd - * Dual licensed under the MIT and GPL licenses. - * - http://www.opensource.org/licenses/mit-license.php - * - http://www.gnu.org/copyleft/gpl.html - * - * Author: Silvia Benvenuti - * Skin Version: 4.0 (jPlayer 2.1.0) - * Date: 1st September 2011 - */ - -div.jp-audio, -div.jp-video { - - /* Edit the font-size to counteract inherited font sizing. - * Eg. 1.25em = 1 / 0.8em - */ - - font-size:1.25em; /* 1.25em for testing in site pages */ /* No parent CSS that can effect the size in the demos ZIP */ - - font-family:Verdana, Arial, sans-serif; - line-height:1.6; - color: #565656; - border:1px solid #009be3; - background-color:#eee; - position:relative; -} -div.jp-audio { - width:420px; -} -div.jp-video-270p { - width:480px; -} -div.jp-video-360p { - width:640px; -} -div.jp-video-full { - /* Rules for IE6 (full-screen) */ - width:480px; - height:270px; - /* Rules for IE7 (full-screen) - Otherwise the relative container causes other page items that are not position:static (default) to appear over the video/gui. */ - position:static !important; position:relative -} - -div.jp-video-full div.jp-jplayer { - top: 0; - left: 0; - position: fixed !important; position: relative; /* Rules for IE6 (full-screen) */ - overflow: hidden; - z-index:1000; -} - -div.jp-video-full div.jp-gui { - position: fixed !important; position: static; /* Rules for IE6 (full-screen) */ - top: 0; - left: 0; - width:100%; - height:100%; - z-index:1000; -} - -div.jp-video-full div.jp-interface { - position: absolute !important; position: relative; /* Rules for IE6 (full-screen) */ - bottom: 0; - left: 0; - z-index:1000; -} - -div.jp-interface { - position: relative; - background-color:#eee; - width:100%; -} - -div.jp-interface a { - color: #0c767d; -} - -div.jp-audio div.jp-type-single div.jp-interface { - height:80px; -} -div.jp-audio div.jp-type-playlist div.jp-interface { - height:80px; -} - -div.jp-video div.jp-interface { - border-top:1px solid #009be3; -} - -/* @group CONTROLS */ - -div.jp-controls-holder { - clear: both; - width:440px; - margin:0 auto; - position: relative; - overflow:hidden; - top:-8px; /* This negative value depends on the size of the text in jp-currentTime and jp-duration */ -} - -div.jp-interface ul.jp-controls { - list-style-type:none; - margin:0; - padding: 0; - overflow:hidden; -} - -div.jp-audio ul.jp-controls { - width: 380px; - padding:20px 20px 0 20px; -} - -div.jp-video div.jp-type-single ul.jp-controls { - width: 78px; - margin-left: 200px; -} - -div.jp-video div.jp-type-playlist ul.jp-controls { - width: 134px; - margin-left: 172px; -} -div.jp-video ul.jp-controls, -div.jp-interface ul.jp-controls li { - display:inline; - float: left; -} - -div.jp-interface ul.jp-controls a { - display:block; - overflow:hidden; - text-indent:-9999px; -} -a.jp-play, -a.jp-pause { - width:40px; - height:40px; -} - -a.jp-play { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 0 no-repeat; -} -a.jp-play:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -41px 0 no-repeat; -} -a.jp-pause { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -42px no-repeat; - display: none; -} -a.jp-pause:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -41px -42px no-repeat; -} - -a.jp-stop, a.jp-previous, a.jp-next { - width:28px; - height:28px; - margin-top:6px; -} - -a.jp-stop { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -83px no-repeat; - margin-left:10px; -} - -a.jp-stop:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -29px -83px no-repeat; -} - -a.jp-previous { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -112px no-repeat; -} -a.jp-previous:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -29px -112px no-repeat; -} - -a.jp-next { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -141px no-repeat; -} -a.jp-next:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -29px -141px no-repeat; -} - -/* @end */ - -/* @group progress bar */ - -div.jp-progress { - overflow:hidden; - background-color: #ddd; -} -div.jp-audio div.jp-progress { - position: absolute; - top:32px; - height:15px; -} -div.jp-audio div.jp-type-single div.jp-progress { - left:110px; - width:186px; -} -div.jp-audio div.jp-type-playlist div.jp-progress { - left:166px; - width:130px; -} -div.jp-video div.jp-progress { - top:0px; - left:0px; - width:100%; - height:10px; -} -div.jp-seek-bar { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -202px repeat-x; - width:0px; - height:100%; - cursor: pointer; -} -div.jp-play-bar { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -218px repeat-x ; - width:0px; - height:100%; -} - -/* The seeking class is added/removed inside jPlayer */ -div.jp-seeking-bg { - background: url("/static/jplayer/jplayer.blue.monday.seeking.gif"); -} - -/* @end */ - -/* @group volume controls */ - - -a.jp-mute, -a.jp-unmute, -a.jp-volume-max { - width:18px; - height:15px; - margin-top:12px; -} - -div.jp-audio div.jp-type-single a.jp-mute, -div.jp-audio div.jp-type-single a.jp-unmute { - margin-left: 210px; -} - -div.jp-audio div.jp-type-playlist a.jp-mute, -div.jp-audio div.jp-type-playlist a.jp-unmute { - margin-left: 154px; -} - -div.jp-audio a.jp-volume-max { - margin-left: 56px; -} - -div.jp-video a.jp-mute, -div.jp-video a.jp-unmute, -div.jp-video a.jp-volume-max { - position: absolute; - top:12px; - margin-top:0; -} - -div.jp-video a.jp-mute, -div.jp-video a.jp-unmute { - left: 50px; -} - -div.jp-video a.jp-volume-max { - left: 134px; -} - -a.jp-mute { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -170px no-repeat; -} -a.jp-mute:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -19px -170px no-repeat; -} -a.jp-unmute { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -60px -170px no-repeat; - display: none; -} -a.jp-unmute:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -79px -170px no-repeat; -} - a.jp-volume-max { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -186px no-repeat; -} -a.jp-volume-max:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -19px -186px no-repeat; -} - -div.jp-volume-bar { - position: absolute; - overflow:hidden; - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -250px repeat-x; - width:46px; - height:5px; - cursor: pointer; -} -div.jp-audio div.jp-volume-bar { - top:37px; - left:330px; -} -div.jp-video div.jp-volume-bar { - top:17px; - left:72px; -} -div.jp-volume-bar-value { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -256px repeat-x; - width:0px; - height:5px; -} - -/* @end */ - -/* @group current time and duration */ - -div.jp-audio div.jp-time-holder { - position:absolute; - top:50px; -} -div.jp-audio div.jp-type-single div.jp-time-holder { - left:110px; - width:186px; -} -div.jp-audio div.jp-type-playlist div.jp-time-holder { - left:166px; - width:130px; -} - -div.jp-current-time, -div.jp-duration { - width:60px; - font-size:.64em; - font-style:oblique; -} -div.jp-current-time { - float: left; - display:inline; -} -div.jp-duration { - float: right; - display:inline; - text-align: right; -} - -div.jp-video div.jp-current-time { - margin-left:20px; -} -div.jp-video div.jp-duration { - margin-right:20px; -} - -/* @end */ - -/* @group playlist */ - -div.jp-title { - font-weight:bold; - text-align:center; -} - -div.jp-title, -div.jp-playlist { - width:100%; - background-color:#ccc; - border-top:1px solid #009be3; -} -div.jp-type-single div.jp-title, -div.jp-type-playlist div.jp-title, -div.jp-type-single div.jp-playlist { - border-top:none; -} -div.jp-title ul, -div.jp-playlist ul { - list-style-type:none; - margin:0; - padding:0 20px; - font-size:.8em; -} - -div.jp-title li { - padding:5px 0; - font-weight:bold; -} -div.jp-playlist li { - padding:5px 0 4px 20px; - border-bottom:1px solid #eee; -} - -div.jp-playlist li div { - display:inline; -} - -/* Note that the first-child (IE6) and last-child (IE6/7/8) selectors do not work on IE */ - -div.jp-type-playlist div.jp-playlist li:last-child { - padding:5px 0 5px 20px; - border-bottom:none; -} -div.jp-type-playlist div.jp-playlist li.jp-playlist-current { - list-style-type:square; - list-style-position:inside; - padding-left:7px; -} -div.jp-type-playlist div.jp-playlist a { - color: #333; - text-decoration: none; -} -div.jp-type-playlist div.jp-playlist a:hover { - color:#0D7E85; -} -div.jp-type-playlist div.jp-playlist a.jp-playlist-current { - color:#0D7E85; -} - -div.jp-type-playlist div.jp-playlist a.jp-playlist-item-remove { - float:right; - display:inline; - text-align:right; - margin-right:10px; - font-weight:bold; - color:#666; -} -div.jp-type-playlist div.jp-playlist a.jp-playlist-item-remove:hover { - color:#0D7E85; -} -div.jp-type-playlist div.jp-playlist span.jp-free-media { - float:right; - display:inline; - text-align:right; - margin-right:10px; -} -div.jp-type-playlist div.jp-playlist span.jp-free-media a{ - color:#565656; -} -div.jp-type-playlist div.jp-playlist span.jp-free-media a:hover{ - color:#0D7E85; -} -span.jp-artist { - font-size:.8em; - color:#565656; -} - -/* @end */ - -div.jp-video-play { - position:absolute; - top:0; - left:0; - width:100%; - cursor:pointer; - background-color:rgba(0,0,0,0); /* Makes IE9 work with the active area over the whole video area. IE6/7/8 only have the button as active area. */ -} -div.jp-video-270p div.jp-video-play { - height:270px; -} -div.jp-video-360p div.jp-video-play { - height:360px; -} -div.jp-video-full div.jp-video-play { - height:100%; - z-index:1000; -} -a.jp-video-play-icon { - position:relative; - display:block; - width: 112px; - height: 100px; - - margin-left:-56px; - margin-top:-50px; - left:50%; - top:50%; - - background: url("/static/jplayer/jplayer.blue.monday.video.play.png") 0 0 no-repeat; - text-indent:-9999px; -} -div.jp-video-play:hover a.jp-video-play-icon { - background: url("/static/jplayer/jplayer.blue.monday.video.play.png") 0 -100px no-repeat; -} - - - - - -div.jp-jplayer audio, -div.jp-jplayer { - width:0px; - height:0px; -} - -div.jp-jplayer { - background-color: #000000; -} - - - - - -/* @group TOGGLES */ - -/* The audio toggles are nested inside jp-time-holder */ - -ul.jp-toggles { - list-style-type:none; - padding:0; - margin:0 auto; - overflow:hidden; -} - -div.jp-audio .jp-type-single ul.jp-toggles { - width:25px; -} -div.jp-audio .jp-type-playlist ul.jp-toggles { - width:55px; - margin: 0; - position: absolute; - left: 325px; - top: 50px; -} - -div.jp-video ul.jp-toggles { - margin-top:10px; - width:100px; -} - -ul.jp-toggles li { - display:block; - float:right; -} - -ul.jp-toggles li a { - display:block; - width:25px; - height:18px; - text-indent:-9999px; - line-height:100%; /* need this for IE6 */ -} - -a.jp-full-screen { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -310px no-repeat; - margin-left: 20px; -} - -a.jp-full-screen:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -30px -310px no-repeat; -} - -a.jp-restore-screen { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -60px -310px no-repeat; - margin-left: 20px; -} - -a.jp-restore-screen:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -90px -310px no-repeat; -} - -a.jp-repeat { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -290px no-repeat; -} - -a.jp-repeat:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -30px -290px no-repeat; -} - -a.jp-repeat-off { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -60px -290px no-repeat; -} - -a.jp-repeat-off:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -90px -290px no-repeat; -} - -a.jp-shuffle { - background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -270px no-repeat; - margin-left: 5px; -} - -a.jp-shuffle:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -30px -270px no-repeat; -} - -a.jp-shuffle-off { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -60px -270px no-repeat; - margin-left: 5px; -} - -a.jp-shuffle-off:hover { - background: url("/static/jplayer/jplayer.blue.monday.jpg") -90px -270px no-repeat; -} - - -/* @end */ - -/* @group NO SOLUTION error feedback */ - -.jp-no-solution { - position:absolute; - width:390px; - margin-left:-202px; - left:50%; - top: 10px; - - padding:5px; - font-size:.8em; - background-color:#eee; - border:2px solid #009be3; - color:#000; - display:none; -} - -.jp-no-solution a { - color:#000; -} - -.jp-no-solution span { - font-size:1em; - display:block; - text-align:center; - font-weight:bold; -} - -/* @end */ diff --git a/apps/catalogue/static/jplayer/jplayer.blue.monday.jpg b/apps/catalogue/static/jplayer/jplayer.blue.monday.jpg deleted file mode 100644 index adab53ff7..000000000 Binary files a/apps/catalogue/static/jplayer/jplayer.blue.monday.jpg and /dev/null differ diff --git a/apps/catalogue/static/jplayer/jplayer.blue.monday.seeking.gif b/apps/catalogue/static/jplayer/jplayer.blue.monday.seeking.gif deleted file mode 100644 index dbd2105ab..000000000 Binary files a/apps/catalogue/static/jplayer/jplayer.blue.monday.seeking.gif and /dev/null differ diff --git a/apps/catalogue/static/jplayer/jplayer.blue.monday.video.play.png b/apps/catalogue/static/jplayer/jplayer.blue.monday.video.play.png deleted file mode 100644 index 8e97df011..000000000 Binary files a/apps/catalogue/static/jplayer/jplayer.blue.monday.video.play.png and /dev/null differ diff --git a/apps/catalogue/static/jplayer/jplayer.playlist.min.js b/apps/catalogue/static/jplayer/jplayer.playlist.min.js deleted file mode 100644 index 138ccfa5e..000000000 --- a/apps/catalogue/static/jplayer/jplayer.playlist.min.js +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Playlist Object for the jPlayer Plugin - * http://www.jplayer.org - * - * Copyright (c) 2009 - 2013 Happyworm Ltd - * Dual licensed under the MIT and GPL licenses. - * - http://www.opensource.org/licenses/mit-license.php - * - http://www.gnu.org/copyleft/gpl.html - * - * Author: Mark J Panaghiston - * Version: 2.3.0 - * Date: 20th April 2013 - * - * Requires: - * - jQuery 1.7.0+ - * - jPlayer 2.3.0+ - */ -(function(b,f){jPlayerPlaylist=function(a,c,d){var e=this;this.current=0;this.removing=this.shuffled=this.loop=!1;this.cssSelector=b.extend({},this._cssSelector,a);this.options=b.extend(!0,{keyBindings:{next:{key:39,fn:function(){e.next()}},previous:{key:37,fn:function(){e.previous()}}}},this._options,d);this.playlist=[];this.original=[];this._initPlaylist(c);this.cssSelector.title=this.cssSelector.cssSelectorAncestor+" .jp-title";this.cssSelector.playlist=this.cssSelector.cssSelectorAncestor+" .jp-playlist"; -this.cssSelector.next=this.cssSelector.cssSelectorAncestor+" .jp-next";this.cssSelector.previous=this.cssSelector.cssSelectorAncestor+" .jp-previous";this.cssSelector.shuffle=this.cssSelector.cssSelectorAncestor+" .jp-shuffle";this.cssSelector.shuffleOff=this.cssSelector.cssSelectorAncestor+" .jp-shuffle-off";this.options.cssSelectorAncestor=this.cssSelector.cssSelectorAncestor;this.options.repeat=function(a){e.loop=a.jPlayer.options.loop};b(this.cssSelector.jPlayer).bind(b.jPlayer.event.ready,function(){e._init()}); -b(this.cssSelector.jPlayer).bind(b.jPlayer.event.ended,function(){e.next()});b(this.cssSelector.jPlayer).bind(b.jPlayer.event.play,function(){b(this).jPlayer("pauseOthers")});b(this.cssSelector.jPlayer).bind(b.jPlayer.event.resize,function(a){a.jPlayer.options.fullScreen?b(e.cssSelector.title).show():b(e.cssSelector.title).hide()});b(this.cssSelector.previous).click(function(){e.previous();b(this).blur();return!1});b(this.cssSelector.next).click(function(){e.next();b(this).blur();return!1});b(this.cssSelector.shuffle).click(function(){e.shuffle(!0); -return!1});b(this.cssSelector.shuffleOff).click(function(){e.shuffle(!1);return!1}).hide();this.options.fullScreen||b(this.cssSelector.title).hide();b(this.cssSelector.playlist+" ul").empty();this._createItemHandlers();b(this.cssSelector.jPlayer).jPlayer(this.options)};jPlayerPlaylist.prototype={_cssSelector:{jPlayer:"#jquery_jplayer_1",cssSelectorAncestor:"#jp_container_1"},_options:{playlistOptions:{autoPlay:!1,loopOnPrevious:!1,shuffleOnLoop:!0,enableRemoveControls:!1,displayTime:"slow",addTime:"fast", -removeTime:"fast",shuffleTime:"slow",itemClass:"jp-playlist-item",freeGroupClass:"jp-free-media",freeItemClass:"jp-playlist-item-free",removeItemClass:"jp-playlist-item-remove"}},option:function(a,b){if(b===f)return this.options.playlistOptions[a];this.options.playlistOptions[a]=b;switch(a){case "enableRemoveControls":this._updateControls();break;case "itemClass":case "freeGroupClass":case "freeItemClass":case "removeItemClass":this._refresh(!0),this._createItemHandlers()}return this},_init:function(){var a= -this;this._refresh(function(){a.options.playlistOptions.autoPlay?a.play(a.current):a.select(a.current)})},_initPlaylist:function(a){this.current=0;this.removing=this.shuffled=!1;this.original=b.extend(!0,[],a);this._originalPlaylist()},_originalPlaylist:function(){var a=this;this.playlist=[];b.each(this.original,function(b){a.playlist[b]=a.original[b]})},_refresh:function(a){var c=this;if(a&&!b.isFunction(a))b(this.cssSelector.playlist+" ul").empty(),b.each(this.playlist,function(a){b(c.cssSelector.playlist+ -" ul").append(c._createListItem(c.playlist[a]))}),this._updateControls();else{var d=b(this.cssSelector.playlist+" ul").children().length?this.options.playlistOptions.displayTime:0;b(this.cssSelector.playlist+" ul").slideUp(d,function(){var d=b(this);b(this).empty();b.each(c.playlist,function(a){d.append(c._createListItem(c.playlist[a]))});c._updateControls();b.isFunction(a)&&a();c.playlist.length?b(this).slideDown(c.options.playlistOptions.displayTime):b(this).show()})}},_createListItem:function(a){var c= -this,d="<li><div>",d=d+("<a href='javascript:;' class='"+this.options.playlistOptions.removeItemClass+"'>×</a>");if(a.free){var e=!0,d=d+("<span class='"+this.options.playlistOptions.freeGroupClass+"'>(");b.each(a,function(a,f){b.jPlayer.prototype.format[a]&&(e?e=!1:d+=" | ",d+="<a class='"+c.options.playlistOptions.freeItemClass+"' href='"+f+"' tabindex='1'>"+a+"</a>")});d+=")</span>"}d+="<a href='javascript:;' class='"+this.options.playlistOptions.itemClass+"' tabindex='1'>"+a.title+(a.artist? -" <span class='jp-artist'>by "+a.artist+"</span>":"")+"</a>";return d+="</div></li>"},_createItemHandlers:function(){var a=this;b(this.cssSelector.playlist).off("click","a."+this.options.playlistOptions.itemClass).on("click","a."+this.options.playlistOptions.itemClass,function(){var c=b(this).parent().parent().index();a.current!==c?a.play(c):b(a.cssSelector.jPlayer).jPlayer("play");b(this).blur();return!1});b(this.cssSelector.playlist).off("click","a."+this.options.playlistOptions.freeItemClass).on("click", -"a."+this.options.playlistOptions.freeItemClass,function(){b(this).parent().parent().find("."+a.options.playlistOptions.itemClass).click();b(this).blur();return!1});b(this.cssSelector.playlist).off("click","a."+this.options.playlistOptions.removeItemClass).on("click","a."+this.options.playlistOptions.removeItemClass,function(){var c=b(this).parent().parent().index();a.remove(c);b(this).blur();return!1})},_updateControls:function(){this.options.playlistOptions.enableRemoveControls?b(this.cssSelector.playlist+ -" ."+this.options.playlistOptions.removeItemClass).show():b(this.cssSelector.playlist+" ."+this.options.playlistOptions.removeItemClass).hide();this.shuffled?(b(this.cssSelector.shuffleOff).show(),b(this.cssSelector.shuffle).hide()):(b(this.cssSelector.shuffleOff).hide(),b(this.cssSelector.shuffle).show())},_highlight:function(a){this.playlist.length&&a!==f&&(b(this.cssSelector.playlist+" .jp-playlist-current").removeClass("jp-playlist-current"),b(this.cssSelector.playlist+" li:nth-child("+(a+1)+ -")").addClass("jp-playlist-current").find(".jp-playlist-item").addClass("jp-playlist-current"),b(this.cssSelector.title+" li").html(this.playlist[a].title+(this.playlist[a].artist?" <span class='jp-artist'>by "+this.playlist[a].artist+"</span>":"")))},setPlaylist:function(a){this._initPlaylist(a);this._init()},add:function(a,c){b(this.cssSelector.playlist+" ul").append(this._createListItem(a)).find("li:last-child").hide().slideDown(this.options.playlistOptions.addTime);this._updateControls();this.original.push(a); -this.playlist.push(a);c?this.play(this.playlist.length-1):1===this.original.length&&this.select(0)},remove:function(a){var c=this;if(a===f)return this._initPlaylist([]),this._refresh(function(){b(c.cssSelector.jPlayer).jPlayer("clearMedia")}),!0;if(this.removing)return!1;a=0>a?c.original.length+a:a;0<=a&&a<this.playlist.length&&(this.removing=!0,b(this.cssSelector.playlist+" li:nth-child("+(a+1)+")").slideUp(this.options.playlistOptions.removeTime,function(){b(this).remove();if(c.shuffled){var d= -c.playlist[a];b.each(c.original,function(a){if(c.original[a]===d)return c.original.splice(a,1),!1})}else c.original.splice(a,1);c.playlist.splice(a,1);c.original.length?a===c.current?(c.current=a<c.original.length?c.current:c.original.length-1,c.select(c.current)):a<c.current&&c.current--:(b(c.cssSelector.jPlayer).jPlayer("clearMedia"),c.current=0,c.shuffled=!1,c._updateControls());c.removing=!1}));return!0},select:function(a){a=0>a?this.original.length+a:a;0<=a&&a<this.playlist.length?(this.current= -a,this._highlight(a),b(this.cssSelector.jPlayer).jPlayer("setMedia",this.playlist[this.current])):this.current=0},play:function(a){a=0>a?this.original.length+a:a;0<=a&&a<this.playlist.length?this.playlist.length&&(this.select(a),b(this.cssSelector.jPlayer).jPlayer("play")):a===f&&b(this.cssSelector.jPlayer).jPlayer("play")},pause:function(){b(this.cssSelector.jPlayer).jPlayer("pause")},next:function(){var a=this.current+1<this.playlist.length?this.current+1:0;this.loop?0===a&&this.shuffled&&this.options.playlistOptions.shuffleOnLoop&& -1<this.playlist.length?this.shuffle(!0,!0):this.play(a):0<a&&this.play(a)},previous:function(){var a=0<=this.current-1?this.current-1:this.playlist.length-1;(this.loop&&this.options.playlistOptions.loopOnPrevious||a<this.playlist.length-1)&&this.play(a)},shuffle:function(a,c){var d=this;a===f&&(a=!this.shuffled);(a||a!==this.shuffled)&&b(this.cssSelector.playlist+" ul").slideUp(this.options.playlistOptions.shuffleTime,function(){(d.shuffled=a)?d.playlist.sort(function(){return 0.5-Math.random()}): -d._originalPlaylist();d._refresh(!0);c||!b(d.cssSelector.jPlayer).data("jPlayer").status.paused?d.play(0):d.select(0);b(this).slideDown(d.options.playlistOptions.shuffleTime)})}}})(jQuery); \ No newline at end of file diff --git a/apps/catalogue/static/jplayer/jquery.jplayer.min.js b/apps/catalogue/static/jplayer/jquery.jplayer.min.js deleted file mode 100644 index ecd3ab514..000000000 --- a/apps/catalogue/static/jplayer/jquery.jplayer.min.js +++ /dev/null @@ -1,107 +0,0 @@ -/* - * jPlayer Plugin for jQuery JavaScript Library - * http://www.jplayer.org - * - * Copyright (c) 2009 - 2013 Happyworm Ltd - * Licensed under the MIT license. - * http://opensource.org/licenses/MIT - * - * Author: Mark J Panaghiston - * Version: 2.4.0 - * Date: 5th June 2013 - */ - -(function(b,f){"function"===typeof define&&define.amd?define(["jquery"],f):b.jQuery?f(b.jQuery):f(b.Zepto)})(this,function(b,f){b.fn.jPlayer=function(a){var c="string"===typeof a,d=Array.prototype.slice.call(arguments,1),e=this;a=!c&&d.length?b.extend.apply(null,[!0,a].concat(d)):a;if(c&&"_"===a.charAt(0))return e;c?this.each(function(){var c=b(this).data("jPlayer"),h=c&&b.isFunction(c[a])?c[a].apply(c,d):c;if(h!==c&&h!==f)return e=h,!1}):this.each(function(){var c=b(this).data("jPlayer");c?c.option(a|| -{}):b(this).data("jPlayer",new b.jPlayer(a,this))});return e};b.jPlayer=function(a,c){if(arguments.length){this.element=b(c);this.options=b.extend(!0,{},this.options,a);var d=this;this.element.bind("remove.jPlayer",function(){d.destroy()});this._init()}};"function"!==typeof b.fn.stop&&(b.fn.stop=function(){});b.jPlayer.emulateMethods="load play pause";b.jPlayer.emulateStatus="src readyState networkState currentTime duration paused ended playbackRate";b.jPlayer.emulateOptions="muted volume";b.jPlayer.reservedEvent= -"ready flashreset resize repeat error warning";b.jPlayer.event={};b.each("ready flashreset resize repeat click error warning loadstart progress suspend abort emptied stalled play pause loadedmetadata loadeddata waiting playing canplay canplaythrough seeking seeked timeupdate ended ratechange durationchange volumechange".split(" "),function(){b.jPlayer.event[this]="jPlayer_"+this});b.jPlayer.htmlEvent="loadstart abort emptied stalled loadedmetadata loadeddata canplay canplaythrough ratechange".split(" "); -b.jPlayer.pause=function(){b.each(b.jPlayer.prototype.instances,function(a,c){c.data("jPlayer").status.srcSet&&c.jPlayer("pause")})};b.jPlayer.timeFormat={showHour:!1,showMin:!0,showSec:!0,padHour:!1,padMin:!0,padSec:!0,sepHour:":",sepMin:":",sepSec:""};var l=function(){this.init()};l.prototype={init:function(){this.options={timeFormat:b.jPlayer.timeFormat}},time:function(a){var c=new Date(1E3*(a&&"number"===typeof a?a:0)),b=c.getUTCHours();a=this.options.timeFormat.showHour?c.getUTCMinutes():c.getUTCMinutes()+ -60*b;c=this.options.timeFormat.showMin?c.getUTCSeconds():c.getUTCSeconds()+60*a;b=this.options.timeFormat.padHour&&10>b?"0"+b:b;a=this.options.timeFormat.padMin&&10>a?"0"+a:a;c=this.options.timeFormat.padSec&&10>c?"0"+c:c;b=""+(this.options.timeFormat.showHour?b+this.options.timeFormat.sepHour:"");b+=this.options.timeFormat.showMin?a+this.options.timeFormat.sepMin:"";return b+=this.options.timeFormat.showSec?c+this.options.timeFormat.sepSec:""}};var m=new l;b.jPlayer.convertTime=function(a){return m.time(a)}; -b.jPlayer.uaBrowser=function(a){a=a.toLowerCase();var b=/(opera)(?:.*version)?[ \/]([\w.]+)/,d=/(msie) ([\w.]+)/,e=/(mozilla)(?:.*? rv:([\w.]+))?/;a=/(webkit)[ \/]([\w.]+)/.exec(a)||b.exec(a)||d.exec(a)||0>a.indexOf("compatible")&&e.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}};b.jPlayer.uaPlatform=function(a){var b=a.toLowerCase(),d=/(android)/,e=/(mobile)/;a=/(ipad|iphone|ipod|android|blackberry|playbook|windows ce|webos)/.exec(b)||[];b=/(ipad|playbook)/.exec(b)||!e.exec(b)&&d.exec(b)|| -[];a[1]&&(a[1]=a[1].replace(/\s/g,"_"));return{platform:a[1]||"",tablet:b[1]||""}};b.jPlayer.browser={};b.jPlayer.platform={};var j=b.jPlayer.uaBrowser(navigator.userAgent);j.browser&&(b.jPlayer.browser[j.browser]=!0,b.jPlayer.browser.version=j.version);j=b.jPlayer.uaPlatform(navigator.userAgent);j.platform&&(b.jPlayer.platform[j.platform]=!0,b.jPlayer.platform.mobile=!j.tablet,b.jPlayer.platform.tablet=!!j.tablet);b.jPlayer.getDocMode=function(){var a;b.jPlayer.browser.msie&&(document.documentMode? -a=document.documentMode:(a=5,document.compatMode&&"CSS1Compat"===document.compatMode&&(a=7)));return a};b.jPlayer.browser.documentMode=b.jPlayer.getDocMode();b.jPlayer.nativeFeatures={init:function(){var a=document,b=a.createElement("video"),d={w3c:"fullscreenEnabled fullscreenElement requestFullscreen exitFullscreen fullscreenchange fullscreenerror".split(" "),moz:"mozFullScreenEnabled mozFullScreenElement mozRequestFullScreen mozCancelFullScreen mozfullscreenchange mozfullscreenerror".split(" "), -webkit:" webkitCurrentFullScreenElement webkitRequestFullScreen webkitCancelFullScreen webkitfullscreenchange ".split(" "),webkitVideo:"webkitSupportsFullscreen webkitDisplayingFullscreen webkitEnterFullscreen webkitExitFullscreen ".split(" ")},e=["w3c","moz","webkit","webkitVideo"],g,h;this.fullscreen=b={support:{w3c:!!a[d.w3c[0]],moz:!!a[d.moz[0]],webkit:"function"===typeof a[d.webkit[3]],webkitVideo:"function"===typeof b[d.webkitVideo[2]]},used:{}};g=0;for(h=e.length;g<h;g++){var f=e[g];if(b.support[f]){b.spec= -f;b.used[f]=!0;break}}if(b.spec){var k=d[b.spec];b.api={fullscreenEnabled:!0,fullscreenElement:function(b){b=b?b:a;return b[k[1]]},requestFullscreen:function(a){return a[k[2]]()},exitFullscreen:function(b){b=b?b:a;return b[k[3]]()}};b.event={fullscreenchange:k[4],fullscreenerror:k[5]}}else b.api={fullscreenEnabled:!1,fullscreenElement:function(){return null},requestFullscreen:function(){},exitFullscreen:function(){}},b.event={}}};b.jPlayer.nativeFeatures.init();b.jPlayer.focus=null;b.jPlayer.keyIgnoreElementNames= -"INPUT TEXTAREA";var n=function(a){var c=b.jPlayer.focus,d;c&&(b.each(b.jPlayer.keyIgnoreElementNames.split(/\s+/g),function(b,c){if(a.target.nodeName.toUpperCase()===c.toUpperCase())return d=!0,!1}),d||b.each(c.options.keyBindings,function(d,g){if(g&&a.which===g.key&&b.isFunction(g.fn))return a.preventDefault(),g.fn(c),!1}))};b.jPlayer.keys=function(a){b(document.documentElement).unbind("keydown.jPlayer");a&&b(document.documentElement).bind("keydown.jPlayer",n)};b.jPlayer.keys(!0);b.jPlayer.prototype= -{count:0,version:{script:"2.4.0",needFlash:"2.4.0",flash:"unknown"},options:{swfPath:"js",solution:"html, flash",supplied:"mp3",preload:"metadata",volume:0.8,muted:!1,wmode:"opaque",backgroundColor:"#000000",cssSelectorAncestor:"#jp_container_1",cssSelector:{videoPlay:".jp-video-play",play:".jp-play",pause:".jp-pause",stop:".jp-stop",seekBar:".jp-seek-bar",playBar:".jp-play-bar",mute:".jp-mute",unmute:".jp-unmute",volumeBar:".jp-volume-bar",volumeBarValue:".jp-volume-bar-value",volumeMax:".jp-volume-max", -currentTime:".jp-current-time",duration:".jp-duration",fullScreen:".jp-full-screen",restoreScreen:".jp-restore-screen",repeat:".jp-repeat",repeatOff:".jp-repeat-off",gui:".jp-gui",noSolution:".jp-no-solution"},smoothPlayBar:!1,fullScreen:!1,fullWindow:!1,autohide:{restored:!1,full:!0,fadeIn:200,fadeOut:600,hold:1E3},loop:!1,repeat:function(a){a.jPlayer.options.loop?b(this).unbind(".jPlayerRepeat").bind(b.jPlayer.event.ended+".jPlayer.jPlayerRepeat",function(){b(this).jPlayer("play")}):b(this).unbind(".jPlayerRepeat")}, -nativeVideoControls:{},noFullWindow:{msie:/msie [0-6]\./,ipad:/ipad.*?os [0-4]\./,iphone:/iphone/,ipod:/ipod/,android_pad:/android [0-3]\.(?!.*?mobile)/,android_phone:/android.*?mobile/,blackberry:/blackberry/,windows_ce:/windows ce/,iemobile:/iemobile/,webos:/webos/},noVolume:{ipad:/ipad/,iphone:/iphone/,ipod:/ipod/,android_pad:/android(?!.*?mobile)/,android_phone:/android.*?mobile/,blackberry:/blackberry/,windows_ce:/windows ce/,iemobile:/iemobile/,webos:/webos/,playbook:/playbook/},timeFormat:{}, -keyEnabled:!1,audioFullScreen:!1,keyBindings:{play:{key:32,fn:function(a){a.status.paused?a.play():a.pause()}},fullScreen:{key:13,fn:function(a){(a.status.video||a.options.audioFullScreen)&&a._setOption("fullScreen",!a.options.fullScreen)}},muted:{key:8,fn:function(a){a._muted(!a.options.muted)}},volumeUp:{key:38,fn:function(a){a.volume(a.options.volume+0.1)}},volumeDown:{key:40,fn:function(a){a.volume(a.options.volume-0.1)}}},verticalVolume:!1,idPrefix:"jp",noConflict:"jQuery",emulateHtml:!1,errorAlerts:!1, -warningAlerts:!1},optionsAudio:{size:{width:"0px",height:"0px",cssClass:""},sizeFull:{width:"0px",height:"0px",cssClass:""}},optionsVideo:{size:{width:"480px",height:"270px",cssClass:"jp-video-270p"},sizeFull:{width:"100%",height:"100%",cssClass:"jp-video-full"}},instances:{},status:{src:"",media:{},paused:!0,format:{},formatType:"",waitForPlay:!0,waitForLoad:!0,srcSet:!1,video:!1,seekPercent:0,currentPercentRelative:0,currentPercentAbsolute:0,currentTime:0,duration:0,videoWidth:0,videoHeight:0,readyState:0, -networkState:0,playbackRate:1,ended:0},internal:{ready:!1},solution:{html:!0,flash:!0},format:{mp3:{codec:'audio/mpeg; codecs="mp3"',flashCanPlay:!0,media:"audio"},m4a:{codec:'audio/mp4; codecs="mp4a.40.2"',flashCanPlay:!0,media:"audio"},oga:{codec:'audio/ogg; codecs="vorbis"',flashCanPlay:!1,media:"audio"},wav:{codec:'audio/wav; codecs="1"',flashCanPlay:!1,media:"audio"},webma:{codec:'audio/webm; codecs="vorbis"',flashCanPlay:!1,media:"audio"},fla:{codec:"audio/x-flv",flashCanPlay:!0,media:"audio"}, -rtmpa:{codec:'audio/rtmp; codecs="rtmp"',flashCanPlay:!0,media:"audio"},m4v:{codec:'video/mp4; codecs="avc1.42E01E, mp4a.40.2"',flashCanPlay:!0,media:"video"},ogv:{codec:'video/ogg; codecs="theora, vorbis"',flashCanPlay:!1,media:"video"},webmv:{codec:'video/webm; codecs="vorbis, vp8"',flashCanPlay:!1,media:"video"},flv:{codec:"video/x-flv",flashCanPlay:!0,media:"video"},rtmpv:{codec:'video/rtmp; codecs="rtmp"',flashCanPlay:!0,media:"video"}},_init:function(){var a=this;this.element.empty();this.status= -b.extend({},this.status);this.internal=b.extend({},this.internal);this.options.timeFormat=b.extend({},b.jPlayer.timeFormat,this.options.timeFormat);this.internal.cmdsIgnored=b.jPlayer.platform.ipad||b.jPlayer.platform.iphone||b.jPlayer.platform.ipod;this.internal.domNode=this.element.get(0);this.options.keyEnabled&&!b.jPlayer.focus&&(b.jPlayer.focus=this);this.formats=[];this.solutions=[];this.require={};this.htmlElement={};this.html={};this.html.audio={};this.html.video={};this.flash={};this.css= -{};this.css.cs={};this.css.jq={};this.ancestorJq=[];this.options.volume=this._limitValue(this.options.volume,0,1);b.each(this.options.supplied.toLowerCase().split(","),function(c,d){var e=d.replace(/^\s+|\s+$/g,"");if(a.format[e]){var f=!1;b.each(a.formats,function(a,b){if(e===b)return f=!0,!1});f||a.formats.push(e)}});b.each(this.options.solution.toLowerCase().split(","),function(c,d){var e=d.replace(/^\s+|\s+$/g,"");if(a.solution[e]){var f=!1;b.each(a.solutions,function(a,b){if(e===b)return f=!0, -!1});f||a.solutions.push(e)}});this.internal.instance="jp_"+this.count;this.instances[this.internal.instance]=this.element;this.element.attr("id")||this.element.attr("id",this.options.idPrefix+"_jplayer_"+this.count);this.internal.self=b.extend({},{id:this.element.attr("id"),jq:this.element});this.internal.audio=b.extend({},{id:this.options.idPrefix+"_audio_"+this.count,jq:f});this.internal.video=b.extend({},{id:this.options.idPrefix+"_video_"+this.count,jq:f});this.internal.flash=b.extend({},{id:this.options.idPrefix+ -"_flash_"+this.count,jq:f,swf:this.options.swfPath+(".swf"!==this.options.swfPath.toLowerCase().slice(-4)?(this.options.swfPath&&"/"!==this.options.swfPath.slice(-1)?"/":"")+"Jplayer.swf":"")});this.internal.poster=b.extend({},{id:this.options.idPrefix+"_poster_"+this.count,jq:f});b.each(b.jPlayer.event,function(b,c){a.options[b]!==f&&(a.element.bind(c+".jPlayer",a.options[b]),a.options[b]=f)});this.require.audio=!1;this.require.video=!1;b.each(this.formats,function(b,c){a.require[a.format[c].media]= -!0});this.options=this.require.video?b.extend(!0,{},this.optionsVideo,this.options):b.extend(!0,{},this.optionsAudio,this.options);this._setSize();this.status.nativeVideoControls=this._uaBlocklist(this.options.nativeVideoControls);this.status.noFullWindow=this._uaBlocklist(this.options.noFullWindow);this.status.noVolume=this._uaBlocklist(this.options.noVolume);b.jPlayer.nativeFeatures.fullscreen.api.fullscreenEnabled&&this._fullscreenAddEventListeners();this._restrictNativeVideoControls();this.htmlElement.poster= -document.createElement("img");this.htmlElement.poster.id=this.internal.poster.id;this.htmlElement.poster.onload=function(){(!a.status.video||a.status.waitForPlay)&&a.internal.poster.jq.show()};this.element.append(this.htmlElement.poster);this.internal.poster.jq=b("#"+this.internal.poster.id);this.internal.poster.jq.css({width:this.status.width,height:this.status.height});this.internal.poster.jq.hide();this.internal.poster.jq.bind("click.jPlayer",function(){a._trigger(b.jPlayer.event.click)});this.html.audio.available= -!1;this.require.audio&&(this.htmlElement.audio=document.createElement("audio"),this.htmlElement.audio.id=this.internal.audio.id,this.html.audio.available=!!this.htmlElement.audio.canPlayType&&this._testCanPlayType(this.htmlElement.audio));this.html.video.available=!1;this.require.video&&(this.htmlElement.video=document.createElement("video"),this.htmlElement.video.id=this.internal.video.id,this.html.video.available=!!this.htmlElement.video.canPlayType&&this._testCanPlayType(this.htmlElement.video)); -this.flash.available=this._checkForFlash(10.1);this.html.canPlay={};this.flash.canPlay={};b.each(this.formats,function(b,c){a.html.canPlay[c]=a.html[a.format[c].media].available&&""!==a.htmlElement[a.format[c].media].canPlayType(a.format[c].codec);a.flash.canPlay[c]=a.format[c].flashCanPlay&&a.flash.available});this.html.desired=!1;this.flash.desired=!1;b.each(this.solutions,function(c,d){if(0===c)a[d].desired=!0;else{var e=!1,f=!1;b.each(a.formats,function(b,c){a[a.solutions[0]].canPlay[c]&&("video"=== -a.format[c].media?f=!0:e=!0)});a[d].desired=a.require.audio&&!e||a.require.video&&!f}});this.html.support={};this.flash.support={};b.each(this.formats,function(b,c){a.html.support[c]=a.html.canPlay[c]&&a.html.desired;a.flash.support[c]=a.flash.canPlay[c]&&a.flash.desired});this.html.used=!1;this.flash.used=!1;b.each(this.solutions,function(c,d){b.each(a.formats,function(b,c){if(a[d].support[c])return a[d].used=!0,!1})});this._resetActive();this._resetGate();this._cssSelectorAncestor(this.options.cssSelectorAncestor); -!this.html.used&&!this.flash.used?(this._error({type:b.jPlayer.error.NO_SOLUTION,context:"{solution:'"+this.options.solution+"', supplied:'"+this.options.supplied+"'}",message:b.jPlayer.errorMsg.NO_SOLUTION,hint:b.jPlayer.errorHint.NO_SOLUTION}),this.css.jq.noSolution.length&&this.css.jq.noSolution.show()):this.css.jq.noSolution.length&&this.css.jq.noSolution.hide();if(this.flash.used){var c,d="jQuery="+encodeURI(this.options.noConflict)+"&id="+encodeURI(this.internal.self.id)+"&vol="+this.options.volume+ -"&muted="+this.options.muted;if(b.jPlayer.browser.msie&&(9>Number(b.jPlayer.browser.version)||9>b.jPlayer.browser.documentMode)){d=['<param name="movie" value="'+this.internal.flash.swf+'" />','<param name="FlashVars" value="'+d+'" />','<param name="allowScriptAccess" value="always" />','<param name="bgcolor" value="'+this.options.backgroundColor+'" />','<param name="wmode" value="'+this.options.wmode+'" />'];c=document.createElement('<object id="'+this.internal.flash.id+'" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="0" height="0" tabindex="-1"></object>'); -for(var e=0;e<d.length;e++)c.appendChild(document.createElement(d[e]))}else e=function(a,b,c){var d=document.createElement("param");d.setAttribute("name",b);d.setAttribute("value",c);a.appendChild(d)},c=document.createElement("object"),c.setAttribute("id",this.internal.flash.id),c.setAttribute("name",this.internal.flash.id),c.setAttribute("data",this.internal.flash.swf),c.setAttribute("type","application/x-shockwave-flash"),c.setAttribute("width","1"),c.setAttribute("height","1"),c.setAttribute("tabindex", -"-1"),e(c,"flashvars",d),e(c,"allowscriptaccess","always"),e(c,"bgcolor",this.options.backgroundColor),e(c,"wmode",this.options.wmode);this.element.append(c);this.internal.flash.jq=b(c)}this.html.used&&(this.html.audio.available&&(this._addHtmlEventListeners(this.htmlElement.audio,this.html.audio),this.element.append(this.htmlElement.audio),this.internal.audio.jq=b("#"+this.internal.audio.id)),this.html.video.available&&(this._addHtmlEventListeners(this.htmlElement.video,this.html.video),this.element.append(this.htmlElement.video), -this.internal.video.jq=b("#"+this.internal.video.id),this.status.nativeVideoControls?this.internal.video.jq.css({width:this.status.width,height:this.status.height}):this.internal.video.jq.css({width:"0px",height:"0px"}),this.internal.video.jq.bind("click.jPlayer",function(){a._trigger(b.jPlayer.event.click)})));this.options.emulateHtml&&this._emulateHtmlBridge();this.html.used&&!this.flash.used&&setTimeout(function(){a.internal.ready=!0;a.version.flash="n/a";a._trigger(b.jPlayer.event.repeat);a._trigger(b.jPlayer.event.ready)}, -100);this._updateNativeVideoControls();this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide();b.jPlayer.prototype.count++},destroy:function(){this.clearMedia();this._removeUiClass();this.css.jq.currentTime.length&&this.css.jq.currentTime.text("");this.css.jq.duration.length&&this.css.jq.duration.text("");b.each(this.css.jq,function(a,b){b.length&&b.unbind(".jPlayer")});this.internal.poster.jq.unbind(".jPlayer");this.internal.video.jq&&this.internal.video.jq.unbind(".jPlayer");this._fullscreenRemoveEventListeners(); -this===b.jPlayer.focus&&(b.jPlayer.focus=null);this.options.emulateHtml&&this._destroyHtmlBridge();this.element.removeData("jPlayer");this.element.unbind(".jPlayer");this.element.empty();delete this.instances[this.internal.instance]},enable:function(){},disable:function(){},_testCanPlayType:function(a){try{return a.canPlayType(this.format.mp3.codec),!0}catch(b){return!1}},_uaBlocklist:function(a){var c=navigator.userAgent.toLowerCase(),d=!1;b.each(a,function(a,b){if(b&&b.test(c))return d=!0,!1}); -return d},_restrictNativeVideoControls:function(){this.require.audio&&this.status.nativeVideoControls&&(this.status.nativeVideoControls=!1,this.status.noFullWindow=!0)},_updateNativeVideoControls:function(){this.html.video.available&&this.html.used&&(this.htmlElement.video.controls=this.status.nativeVideoControls,this._updateAutohide(),this.status.nativeVideoControls&&this.require.video?(this.internal.poster.jq.hide(),this.internal.video.jq.css({width:this.status.width,height:this.status.height})): -this.status.waitForPlay&&this.status.video&&(this.internal.poster.jq.show(),this.internal.video.jq.css({width:"0px",height:"0px"})))},_addHtmlEventListeners:function(a,c){var d=this;a.preload=this.options.preload;a.muted=this.options.muted;a.volume=this.options.volume;a.addEventListener("progress",function(){c.gate&&(d.internal.cmdsIgnored&&0<this.readyState&&(d.internal.cmdsIgnored=!1),d._getHtmlStatus(a),d._updateInterface(),d._trigger(b.jPlayer.event.progress))},!1);a.addEventListener("timeupdate", -function(){c.gate&&(d._getHtmlStatus(a),d._updateInterface(),d._trigger(b.jPlayer.event.timeupdate))},!1);a.addEventListener("durationchange",function(){c.gate&&(d._getHtmlStatus(a),d._updateInterface(),d._trigger(b.jPlayer.event.durationchange))},!1);a.addEventListener("play",function(){c.gate&&(d._updateButtons(!0),d._html_checkWaitForPlay(),d._trigger(b.jPlayer.event.play))},!1);a.addEventListener("playing",function(){c.gate&&(d._updateButtons(!0),d._seeked(),d._trigger(b.jPlayer.event.playing))}, -!1);a.addEventListener("pause",function(){c.gate&&(d._updateButtons(!1),d._trigger(b.jPlayer.event.pause))},!1);a.addEventListener("waiting",function(){c.gate&&(d._seeking(),d._trigger(b.jPlayer.event.waiting))},!1);a.addEventListener("seeking",function(){c.gate&&(d._seeking(),d._trigger(b.jPlayer.event.seeking))},!1);a.addEventListener("seeked",function(){c.gate&&(d._seeked(),d._trigger(b.jPlayer.event.seeked))},!1);a.addEventListener("volumechange",function(){c.gate&&(d.options.volume=a.volume, -d.options.muted=a.muted,d._updateMute(),d._updateVolume(),d._trigger(b.jPlayer.event.volumechange))},!1);a.addEventListener("suspend",function(){c.gate&&(d._seeked(),d._trigger(b.jPlayer.event.suspend))},!1);a.addEventListener("ended",function(){c.gate&&(b.jPlayer.browser.webkit||(d.htmlElement.media.currentTime=0),d.htmlElement.media.pause(),d._updateButtons(!1),d._getHtmlStatus(a,!0),d._updateInterface(),d._trigger(b.jPlayer.event.ended))},!1);a.addEventListener("error",function(){c.gate&&(d._updateButtons(!1), -d._seeked(),d.status.srcSet&&(clearTimeout(d.internal.htmlDlyCmdId),d.status.waitForLoad=!0,d.status.waitForPlay=!0,d.status.video&&!d.status.nativeVideoControls&&d.internal.video.jq.css({width:"0px",height:"0px"}),d._validString(d.status.media.poster)&&!d.status.nativeVideoControls&&d.internal.poster.jq.show(),d.css.jq.videoPlay.length&&d.css.jq.videoPlay.show(),d._error({type:b.jPlayer.error.URL,context:d.status.src,message:b.jPlayer.errorMsg.URL,hint:b.jPlayer.errorHint.URL})))},!1);b.each(b.jPlayer.htmlEvent, -function(e,g){a.addEventListener(this,function(){c.gate&&d._trigger(b.jPlayer.event[g])},!1)})},_getHtmlStatus:function(a,b){var d=0,e=0,g=0,f=0;isFinite(a.duration)&&(this.status.duration=a.duration);d=a.currentTime;e=0<this.status.duration?100*d/this.status.duration:0;"object"===typeof a.seekable&&0<a.seekable.length?(g=0<this.status.duration?100*a.seekable.end(a.seekable.length-1)/this.status.duration:100,f=0<this.status.duration?100*a.currentTime/a.seekable.end(a.seekable.length-1):0):(g=100, -f=e);b&&(e=f=d=0);this.status.seekPercent=g;this.status.currentPercentRelative=f;this.status.currentPercentAbsolute=e;this.status.currentTime=d;this.status.videoWidth=a.videoWidth;this.status.videoHeight=a.videoHeight;this.status.readyState=a.readyState;this.status.networkState=a.networkState;this.status.playbackRate=a.playbackRate;this.status.ended=a.ended},_resetStatus:function(){this.status=b.extend({},this.status,b.jPlayer.prototype.status)},_trigger:function(a,c,d){a=b.Event(a);a.jPlayer={}; -a.jPlayer.version=b.extend({},this.version);a.jPlayer.options=b.extend(!0,{},this.options);a.jPlayer.status=b.extend(!0,{},this.status);a.jPlayer.html=b.extend(!0,{},this.html);a.jPlayer.flash=b.extend(!0,{},this.flash);c&&(a.jPlayer.error=b.extend({},c));d&&(a.jPlayer.warning=b.extend({},d));this.element.trigger(a)},jPlayerFlashEvent:function(a,c){if(a===b.jPlayer.event.ready)if(this.internal.ready){if(this.flash.gate){if(this.status.srcSet){var d=this.status.currentTime,e=this.status.paused;this.setMedia(this.status.media); -0<d&&(e?this.pause(d):this.play(d))}this._trigger(b.jPlayer.event.flashreset)}}else this.internal.ready=!0,this.internal.flash.jq.css({width:"0px",height:"0px"}),this.version.flash=c.version,this.version.needFlash!==this.version.flash&&this._error({type:b.jPlayer.error.VERSION,context:this.version.flash,message:b.jPlayer.errorMsg.VERSION+this.version.flash,hint:b.jPlayer.errorHint.VERSION}),this._trigger(b.jPlayer.event.repeat),this._trigger(a);if(this.flash.gate)switch(a){case b.jPlayer.event.progress:this._getFlashStatus(c); -this._updateInterface();this._trigger(a);break;case b.jPlayer.event.timeupdate:this._getFlashStatus(c);this._updateInterface();this._trigger(a);break;case b.jPlayer.event.play:this._seeked();this._updateButtons(!0);this._trigger(a);break;case b.jPlayer.event.pause:this._updateButtons(!1);this._trigger(a);break;case b.jPlayer.event.ended:this._updateButtons(!1);this._trigger(a);break;case b.jPlayer.event.click:this._trigger(a);break;case b.jPlayer.event.error:this.status.waitForLoad=!0;this.status.waitForPlay= -!0;this.status.video&&this.internal.flash.jq.css({width:"0px",height:"0px"});this._validString(this.status.media.poster)&&this.internal.poster.jq.show();this.css.jq.videoPlay.length&&this.status.video&&this.css.jq.videoPlay.show();this.status.video?this._flash_setVideo(this.status.media):this._flash_setAudio(this.status.media);this._updateButtons(!1);this._error({type:b.jPlayer.error.URL,context:c.src,message:b.jPlayer.errorMsg.URL,hint:b.jPlayer.errorHint.URL});break;case b.jPlayer.event.seeking:this._seeking(); -this._trigger(a);break;case b.jPlayer.event.seeked:this._seeked();this._trigger(a);break;case b.jPlayer.event.ready:break;default:this._trigger(a)}return!1},_getFlashStatus:function(a){this.status.seekPercent=a.seekPercent;this.status.currentPercentRelative=a.currentPercentRelative;this.status.currentPercentAbsolute=a.currentPercentAbsolute;this.status.currentTime=a.currentTime;this.status.duration=a.duration;this.status.videoWidth=a.videoWidth;this.status.videoHeight=a.videoHeight;this.status.readyState= -4;this.status.networkState=0;this.status.playbackRate=1;this.status.ended=!1},_updateButtons:function(a){a===f?a=!this.status.paused:this.status.paused=!a;this.css.jq.play.length&&this.css.jq.pause.length&&(a?(this.css.jq.play.hide(),this.css.jq.pause.show()):(this.css.jq.play.show(),this.css.jq.pause.hide()));this.css.jq.restoreScreen.length&&this.css.jq.fullScreen.length&&(this.status.noFullWindow?(this.css.jq.fullScreen.hide(),this.css.jq.restoreScreen.hide()):this.options.fullWindow?(this.css.jq.fullScreen.hide(), -this.css.jq.restoreScreen.show()):(this.css.jq.fullScreen.show(),this.css.jq.restoreScreen.hide()));this.css.jq.repeat.length&&this.css.jq.repeatOff.length&&(this.options.loop?(this.css.jq.repeat.hide(),this.css.jq.repeatOff.show()):(this.css.jq.repeat.show(),this.css.jq.repeatOff.hide()))},_updateInterface:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.width(this.status.seekPercent+"%");this.css.jq.playBar.length&&(this.options.smoothPlayBar?this.css.jq.playBar.stop().animate({width:this.status.currentPercentAbsolute+ -"%"},250,"linear"):this.css.jq.playBar.width(this.status.currentPercentRelative+"%"));this.css.jq.currentTime.length&&this.css.jq.currentTime.text(this._convertTime(this.status.currentTime));this.css.jq.duration.length&&this.css.jq.duration.text(this._convertTime(this.status.duration))},_convertTime:l.prototype.time,_seeking:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.addClass("jp-seeking-bg")},_seeked:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.removeClass("jp-seeking-bg")}, -_resetGate:function(){this.html.audio.gate=!1;this.html.video.gate=!1;this.flash.gate=!1},_resetActive:function(){this.html.active=!1;this.flash.active=!1},setMedia:function(a){var c=this,d=!1,e=this.status.media.poster!==a.poster;this._resetMedia();this._resetGate();this._resetActive();b.each(this.formats,function(e,f){var j="video"===c.format[f].media;b.each(c.solutions,function(b,e){if(c[e].support[f]&&c._validString(a[f])){var g="html"===e;j?(g?(c.html.video.gate=!0,c._html_setVideo(a),c.html.active= -!0):(c.flash.gate=!0,c._flash_setVideo(a),c.flash.active=!0),c.css.jq.videoPlay.length&&c.css.jq.videoPlay.show(),c.status.video=!0):(g?(c.html.audio.gate=!0,c._html_setAudio(a),c.html.active=!0):(c.flash.gate=!0,c._flash_setAudio(a),c.flash.active=!0),c.css.jq.videoPlay.length&&c.css.jq.videoPlay.hide(),c.status.video=!1);d=!0;return!1}});if(d)return!1});if(d){if((!this.status.nativeVideoControls||!this.html.video.gate)&&this._validString(a.poster))e?this.htmlElement.poster.src=a.poster:this.internal.poster.jq.show(); -this.status.srcSet=!0;this.status.media=b.extend({},a);this._updateButtons(!1);this._updateInterface()}else this._error({type:b.jPlayer.error.NO_SUPPORT,context:"{supplied:'"+this.options.supplied+"'}",message:b.jPlayer.errorMsg.NO_SUPPORT,hint:b.jPlayer.errorHint.NO_SUPPORT})},_resetMedia:function(){this._resetStatus();this._updateButtons(!1);this._updateInterface();this._seeked();this.internal.poster.jq.hide();clearTimeout(this.internal.htmlDlyCmdId);this.html.active?this._html_resetMedia():this.flash.active&& -this._flash_resetMedia()},clearMedia:function(){this._resetMedia();this.html.active?this._html_clearMedia():this.flash.active&&this._flash_clearMedia();this._resetGate();this._resetActive()},load:function(){this.status.srcSet?this.html.active?this._html_load():this.flash.active&&this._flash_load():this._urlNotSetError("load")},focus:function(){this.options.keyEnabled&&(b.jPlayer.focus=this)},play:function(a){a="number"===typeof a?a:NaN;this.status.srcSet?(this.focus(),this.html.active?this._html_play(a): -this.flash.active&&this._flash_play(a)):this._urlNotSetError("play")},videoPlay:function(){this.play()},pause:function(a){a="number"===typeof a?a:NaN;this.status.srcSet?this.html.active?this._html_pause(a):this.flash.active&&this._flash_pause(a):this._urlNotSetError("pause")},pauseOthers:function(){var a=this;b.each(this.instances,function(b,d){a.element!==d&&d.data("jPlayer").status.srcSet&&d.jPlayer("pause")})},stop:function(){this.status.srcSet?this.html.active?this._html_pause(0):this.flash.active&& -this._flash_pause(0):this._urlNotSetError("stop")},playHead:function(a){a=this._limitValue(a,0,100);this.status.srcSet?this.html.active?this._html_playHead(a):this.flash.active&&this._flash_playHead(a):this._urlNotSetError("playHead")},_muted:function(a){this.options.muted=a;this.html.used&&this._html_mute(a);this.flash.used&&this._flash_mute(a);!this.html.video.gate&&!this.html.audio.gate&&(this._updateMute(a),this._updateVolume(this.options.volume),this._trigger(b.jPlayer.event.volumechange))}, -mute:function(a){a=a===f?!0:!!a;this._muted(a)},unmute:function(a){a=a===f?!0:!!a;this._muted(!a)},_updateMute:function(a){a===f&&(a=this.options.muted);this.css.jq.mute.length&&this.css.jq.unmute.length&&(this.status.noVolume?(this.css.jq.mute.hide(),this.css.jq.unmute.hide()):a?(this.css.jq.mute.hide(),this.css.jq.unmute.show()):(this.css.jq.mute.show(),this.css.jq.unmute.hide()))},volume:function(a){a=this._limitValue(a,0,1);this.options.volume=a;this.html.used&&this._html_volume(a);this.flash.used&& -this._flash_volume(a);!this.html.video.gate&&!this.html.audio.gate&&(this._updateVolume(a),this._trigger(b.jPlayer.event.volumechange))},volumeBar:function(a){if(this.css.jq.volumeBar.length){var c=b(a.currentTarget),d=c.offset(),e=a.pageX-d.left,g=c.width();a=c.height()-a.pageY+d.top;c=c.height();this.options.verticalVolume?this.volume(a/c):this.volume(e/g)}this.options.muted&&this._muted(!1)},volumeBarValue:function(){},_updateVolume:function(a){a===f&&(a=this.options.volume);a=this.options.muted? -0:a;this.status.noVolume?(this.css.jq.volumeBar.length&&this.css.jq.volumeBar.hide(),this.css.jq.volumeBarValue.length&&this.css.jq.volumeBarValue.hide(),this.css.jq.volumeMax.length&&this.css.jq.volumeMax.hide()):(this.css.jq.volumeBar.length&&this.css.jq.volumeBar.show(),this.css.jq.volumeBarValue.length&&(this.css.jq.volumeBarValue.show(),this.css.jq.volumeBarValue[this.options.verticalVolume?"height":"width"](100*a+"%")),this.css.jq.volumeMax.length&&this.css.jq.volumeMax.show())},volumeMax:function(){this.volume(1); -this.options.muted&&this._muted(!1)},_cssSelectorAncestor:function(a){var c=this;this.options.cssSelectorAncestor=a;this._removeUiClass();this.ancestorJq=a?b(a):[];a&&1!==this.ancestorJq.length&&this._warning({type:b.jPlayer.warning.CSS_SELECTOR_COUNT,context:a,message:b.jPlayer.warningMsg.CSS_SELECTOR_COUNT+this.ancestorJq.length+" found for cssSelectorAncestor.",hint:b.jPlayer.warningHint.CSS_SELECTOR_COUNT});this._addUiClass();b.each(this.options.cssSelector,function(a,b){c._cssSelector(a,b)}); -this._updateInterface();this._updateButtons();this._updateAutohide();this._updateVolume();this._updateMute()},_cssSelector:function(a,c){var d=this;"string"===typeof c?b.jPlayer.prototype.options.cssSelector[a]?(this.css.jq[a]&&this.css.jq[a].length&&this.css.jq[a].unbind(".jPlayer"),this.options.cssSelector[a]=c,this.css.cs[a]=this.options.cssSelectorAncestor+" "+c,this.css.jq[a]=c?b(this.css.cs[a]):[],this.css.jq[a].length&&this.css.jq[a].bind("click.jPlayer",function(c){c.preventDefault();d[a](c); -b(this).blur()}),c&&1!==this.css.jq[a].length&&this._warning({type:b.jPlayer.warning.CSS_SELECTOR_COUNT,context:this.css.cs[a],message:b.jPlayer.warningMsg.CSS_SELECTOR_COUNT+this.css.jq[a].length+" found for "+a+" method.",hint:b.jPlayer.warningHint.CSS_SELECTOR_COUNT})):this._warning({type:b.jPlayer.warning.CSS_SELECTOR_METHOD,context:a,message:b.jPlayer.warningMsg.CSS_SELECTOR_METHOD,hint:b.jPlayer.warningHint.CSS_SELECTOR_METHOD}):this._warning({type:b.jPlayer.warning.CSS_SELECTOR_STRING,context:c, -message:b.jPlayer.warningMsg.CSS_SELECTOR_STRING,hint:b.jPlayer.warningHint.CSS_SELECTOR_STRING})},seekBar:function(a){if(this.css.jq.seekBar.length){var c=b(a.currentTarget),d=c.offset();a=a.pageX-d.left;c=c.width();this.playHead(100*a/c)}},playBar:function(){},repeat:function(){this._loop(!0)},repeatOff:function(){this._loop(!1)},_loop:function(a){this.options.loop!==a&&(this.options.loop=a,this._updateButtons(),this._trigger(b.jPlayer.event.repeat))},currentTime:function(){},duration:function(){}, -gui:function(){},noSolution:function(){},option:function(a,c){var d=a;if(0===arguments.length)return b.extend(!0,{},this.options);if("string"===typeof a){var e=a.split(".");if(c===f){for(var d=b.extend(!0,{},this.options),g=0;g<e.length;g++)if(d[e[g]]!==f)d=d[e[g]];else return this._warning({type:b.jPlayer.warning.OPTION_KEY,context:a,message:b.jPlayer.warningMsg.OPTION_KEY,hint:b.jPlayer.warningHint.OPTION_KEY}),f;return d}for(var g=d={},h=0;h<e.length;h++)h<e.length-1?(g[e[h]]={},g=g[e[h]]):g[e[h]]= -c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,c){var d=this;switch(a){case "volume":this.volume(c);break;case "muted":this._muted(c);break;case "cssSelectorAncestor":this._cssSelectorAncestor(c);break;case "cssSelector":b.each(c,function(a,b){d._cssSelector(a,b)});break;case "fullScreen":if(this.options[a]!==c){var e=b.jPlayer.nativeFeatures.fullscreen.used.webkitVideo;if(!e||e&&!this.status.waitForPlay)e|| -(this.options[a]=c),c?this._requestFullscreen():this._exitFullscreen(),e||this._setOption("fullWindow",c)}break;case "fullWindow":this.options[a]!==c&&(this._removeUiClass(),this.options[a]=c,this._refreshSize());break;case "size":!this.options.fullWindow&&this.options[a].cssClass!==c.cssClass&&this._removeUiClass();this.options[a]=b.extend({},this.options[a],c);this._refreshSize();break;case "sizeFull":this.options.fullWindow&&this.options[a].cssClass!==c.cssClass&&this._removeUiClass();this.options[a]= -b.extend({},this.options[a],c);this._refreshSize();break;case "autohide":this.options[a]=b.extend({},this.options[a],c);this._updateAutohide();break;case "loop":this._loop(c);break;case "nativeVideoControls":this.options[a]=b.extend({},this.options[a],c);this.status.nativeVideoControls=this._uaBlocklist(this.options.nativeVideoControls);this._restrictNativeVideoControls();this._updateNativeVideoControls();break;case "noFullWindow":this.options[a]=b.extend({},this.options[a],c);this.status.nativeVideoControls= -this._uaBlocklist(this.options.nativeVideoControls);this.status.noFullWindow=this._uaBlocklist(this.options.noFullWindow);this._restrictNativeVideoControls();this._updateButtons();break;case "noVolume":this.options[a]=b.extend({},this.options[a],c);this.status.noVolume=this._uaBlocklist(this.options.noVolume);this._updateVolume();this._updateMute();break;case "emulateHtml":this.options[a]!==c&&((this.options[a]=c)?this._emulateHtmlBridge():this._destroyHtmlBridge());break;case "timeFormat":this.options[a]= -b.extend({},this.options[a],c);break;case "keyEnabled":this.options[a]=c;!c&&this===b.jPlayer.focus&&(b.jPlayer.focus=null);break;case "keyBindings":this.options[a]=b.extend(!0,{},this.options[a],c);break;case "audioFullScreen":this.options[a]=c}return this},_refreshSize:function(){this._setSize();this._addUiClass();this._updateSize();this._updateButtons();this._updateAutohide();this._trigger(b.jPlayer.event.resize)},_setSize:function(){this.options.fullWindow?(this.status.width=this.options.sizeFull.width, -this.status.height=this.options.sizeFull.height,this.status.cssClass=this.options.sizeFull.cssClass):(this.status.width=this.options.size.width,this.status.height=this.options.size.height,this.status.cssClass=this.options.size.cssClass);this.element.css({width:this.status.width,height:this.status.height})},_addUiClass:function(){this.ancestorJq.length&&this.ancestorJq.addClass(this.status.cssClass)},_removeUiClass:function(){this.ancestorJq.length&&this.ancestorJq.removeClass(this.status.cssClass)}, -_updateSize:function(){this.internal.poster.jq.css({width:this.status.width,height:this.status.height});!this.status.waitForPlay&&this.html.active&&this.status.video||this.html.video.available&&this.html.used&&this.status.nativeVideoControls?this.internal.video.jq.css({width:this.status.width,height:this.status.height}):!this.status.waitForPlay&&(this.flash.active&&this.status.video)&&this.internal.flash.jq.css({width:this.status.width,height:this.status.height})},_updateAutohide:function(){var a= -this,b=function(){a.css.jq.gui.fadeIn(a.options.autohide.fadeIn,function(){clearTimeout(a.internal.autohideId);a.internal.autohideId=setTimeout(function(){a.css.jq.gui.fadeOut(a.options.autohide.fadeOut)},a.options.autohide.hold)})};this.css.jq.gui.length&&(this.css.jq.gui.stop(!0,!0),clearTimeout(this.internal.autohideId),this.element.unbind(".jPlayerAutohide"),this.css.jq.gui.unbind(".jPlayerAutohide"),this.status.nativeVideoControls?this.css.jq.gui.hide():this.options.fullWindow&&this.options.autohide.full|| -!this.options.fullWindow&&this.options.autohide.restored?(this.element.bind("mousemove.jPlayer.jPlayerAutohide",b),this.css.jq.gui.bind("mousemove.jPlayer.jPlayerAutohide",b),this.css.jq.gui.hide()):this.css.jq.gui.show())},fullScreen:function(){this._setOption("fullScreen",!0)},restoreScreen:function(){this._setOption("fullScreen",!1)},_fullscreenAddEventListeners:function(){var a=this,c=b.jPlayer.nativeFeatures.fullscreen;c.api.fullscreenEnabled&&c.event.fullscreenchange&&("function"!==typeof this.internal.fullscreenchangeHandler&& -(this.internal.fullscreenchangeHandler=function(){a._fullscreenchange()}),document.addEventListener(c.event.fullscreenchange,this.internal.fullscreenchangeHandler,!1))},_fullscreenRemoveEventListeners:function(){var a=b.jPlayer.nativeFeatures.fullscreen;this.internal.fullscreenchangeHandler&&document.addEventListener(a.event.fullscreenchange,this.internal.fullscreenchangeHandler,!1)},_fullscreenchange:function(){this.options.fullScreen&&!b.jPlayer.nativeFeatures.fullscreen.api.fullscreenElement()&& -this._setOption("fullScreen",!1)},_requestFullscreen:function(){var a=this.ancestorJq.length?this.ancestorJq[0]:this.element[0],c=b.jPlayer.nativeFeatures.fullscreen;c.used.webkitVideo&&(a=this.htmlElement.video);c.api.fullscreenEnabled&&c.api.requestFullscreen(a)},_exitFullscreen:function(){var a=b.jPlayer.nativeFeatures.fullscreen,c;a.used.webkitVideo&&(c=this.htmlElement.video);a.api.fullscreenEnabled&&a.api.exitFullscreen(c)},_html_initMedia:function(a){var c=b(this.htmlElement.media).empty(); -b.each(a.track||[],function(a,b){var g=document.createElement("track");g.setAttribute("kind",b.kind?b.kind:"");g.setAttribute("src",b.src?b.src:"");g.setAttribute("srclang",b.srclang?b.srclang:"");g.setAttribute("label",b.label?b.label:"");b.def&&g.setAttribute("default",b.def);c.append(g)});this.htmlElement.media.src=this.status.src;"none"!==this.options.preload&&this._html_load();this._trigger(b.jPlayer.event.timeupdate)},_html_setFormat:function(a){var c=this;b.each(this.formats,function(b,e){if(c.html.support[e]&& -a[e])return c.status.src=a[e],c.status.format[e]=!0,c.status.formatType=e,!1})},_html_setAudio:function(a){this._html_setFormat(a);this.htmlElement.media=this.htmlElement.audio;this._html_initMedia(a)},_html_setVideo:function(a){this._html_setFormat(a);this.status.nativeVideoControls&&(this.htmlElement.video.poster=this._validString(a.poster)?a.poster:"");this.htmlElement.media=this.htmlElement.video;this._html_initMedia(a)},_html_resetMedia:function(){this.htmlElement.media&&(this.htmlElement.media.id=== -this.internal.video.id&&!this.status.nativeVideoControls&&this.internal.video.jq.css({width:"0px",height:"0px"}),this.htmlElement.media.pause())},_html_clearMedia:function(){this.htmlElement.media&&(this.htmlElement.media.src="about:blank",this.htmlElement.media.load())},_html_load:function(){this.status.waitForLoad&&(this.status.waitForLoad=!1,this.htmlElement.media.load());clearTimeout(this.internal.htmlDlyCmdId)},_html_play:function(a){var b=this,d=this.htmlElement.media;this._html_load();if(isNaN(a))d.play(); -else{this.internal.cmdsIgnored&&d.play();try{if(!d.seekable||"object"===typeof d.seekable&&0<d.seekable.length)d.currentTime=a,d.play();else throw 1;}catch(e){this.internal.htmlDlyCmdId=setTimeout(function(){b.play(a)},250);return}}this._html_checkWaitForPlay()},_html_pause:function(a){var b=this,d=this.htmlElement.media;0<a?this._html_load():clearTimeout(this.internal.htmlDlyCmdId);d.pause();if(!isNaN(a))try{if(!d.seekable||"object"===typeof d.seekable&&0<d.seekable.length)d.currentTime=a;else throw 1; -}catch(e){this.internal.htmlDlyCmdId=setTimeout(function(){b.pause(a)},250);return}0<a&&this._html_checkWaitForPlay()},_html_playHead:function(a){var b=this,d=this.htmlElement.media;this._html_load();try{if("object"===typeof d.seekable&&0<d.seekable.length)d.currentTime=a*d.seekable.end(d.seekable.length-1)/100;else if(0<d.duration&&!isNaN(d.duration))d.currentTime=a*d.duration/100;else throw"e";}catch(e){this.internal.htmlDlyCmdId=setTimeout(function(){b.playHead(a)},250);return}this.status.waitForLoad|| -this._html_checkWaitForPlay()},_html_checkWaitForPlay:function(){this.status.waitForPlay&&(this.status.waitForPlay=!1,this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide(),this.status.video&&(this.internal.poster.jq.hide(),this.internal.video.jq.css({width:this.status.width,height:this.status.height})))},_html_volume:function(a){this.html.audio.available&&(this.htmlElement.audio.volume=a);this.html.video.available&&(this.htmlElement.video.volume=a)},_html_mute:function(a){this.html.audio.available&& -(this.htmlElement.audio.muted=a);this.html.video.available&&(this.htmlElement.video.muted=a)},_flash_setAudio:function(a){var c=this;try{b.each(this.formats,function(b,d){if(c.flash.support[d]&&a[d]){switch(d){case "m4a":case "fla":c._getMovie().fl_setAudio_m4a(a[d]);break;case "mp3":c._getMovie().fl_setAudio_mp3(a[d]);break;case "rtmpa":c._getMovie().fl_setAudio_rtmp(a[d])}c.status.src=a[d];c.status.format[d]=!0;c.status.formatType=d;return!1}}),"auto"===this.options.preload&&(this._flash_load(), -this.status.waitForLoad=!1)}catch(d){this._flashError(d)}},_flash_setVideo:function(a){var c=this;try{b.each(this.formats,function(b,d){if(c.flash.support[d]&&a[d]){switch(d){case "m4v":case "flv":c._getMovie().fl_setVideo_m4v(a[d]);break;case "rtmpv":c._getMovie().fl_setVideo_rtmp(a[d])}c.status.src=a[d];c.status.format[d]=!0;c.status.formatType=d;return!1}}),"auto"===this.options.preload&&(this._flash_load(),this.status.waitForLoad=!1)}catch(d){this._flashError(d)}},_flash_resetMedia:function(){this.internal.flash.jq.css({width:"0px", -height:"0px"});this._flash_pause(NaN)},_flash_clearMedia:function(){try{this._getMovie().fl_clearMedia()}catch(a){this._flashError(a)}},_flash_load:function(){try{this._getMovie().fl_load()}catch(a){this._flashError(a)}this.status.waitForLoad=!1},_flash_play:function(a){try{this._getMovie().fl_play(a)}catch(b){this._flashError(b)}this.status.waitForLoad=!1;this._flash_checkWaitForPlay()},_flash_pause:function(a){try{this._getMovie().fl_pause(a)}catch(b){this._flashError(b)}0<a&&(this.status.waitForLoad= -!1,this._flash_checkWaitForPlay())},_flash_playHead:function(a){try{this._getMovie().fl_play_head(a)}catch(b){this._flashError(b)}this.status.waitForLoad||this._flash_checkWaitForPlay()},_flash_checkWaitForPlay:function(){this.status.waitForPlay&&(this.status.waitForPlay=!1,this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide(),this.status.video&&(this.internal.poster.jq.hide(),this.internal.flash.jq.css({width:this.status.width,height:this.status.height})))},_flash_volume:function(a){try{this._getMovie().fl_volume(a)}catch(b){this._flashError(b)}}, -_flash_mute:function(a){try{this._getMovie().fl_mute(a)}catch(b){this._flashError(b)}},_getMovie:function(){return document[this.internal.flash.id]},_getFlashPluginVersion:function(){var a=0,b;if(window.ActiveXObject)try{if(b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash")){var d=b.GetVariable("$version");d&&(d=d.split(" ")[1].split(","),a=parseInt(d[0],10)+"."+parseInt(d[1],10))}}catch(e){}else navigator.plugins&&0<navigator.mimeTypes.length&&(b=navigator.plugins["Shockwave Flash"])&&(a=navigator.plugins["Shockwave Flash"].description.replace(/.*\s(\d+\.\d+).*/, -"$1"));return 1*a},_checkForFlash:function(a){var b=!1;this._getFlashPluginVersion()>=a&&(b=!0);return b},_validString:function(a){return a&&"string"===typeof a},_limitValue:function(a,b,d){return a<b?b:a>d?d:a},_urlNotSetError:function(a){this._error({type:b.jPlayer.error.URL_NOT_SET,context:a,message:b.jPlayer.errorMsg.URL_NOT_SET,hint:b.jPlayer.errorHint.URL_NOT_SET})},_flashError:function(a){var c;c=this.internal.ready?"FLASH_DISABLED":"FLASH";this._error({type:b.jPlayer.error[c],context:this.internal.flash.swf, -message:b.jPlayer.errorMsg[c]+a.message,hint:b.jPlayer.errorHint[c]});this.internal.flash.jq.css({width:"1px",height:"1px"})},_error:function(a){this._trigger(b.jPlayer.event.error,a);this.options.errorAlerts&&this._alert("Error!"+(a.message?"\n\n"+a.message:"")+(a.hint?"\n\n"+a.hint:"")+"\n\nContext: "+a.context)},_warning:function(a){this._trigger(b.jPlayer.event.warning,f,a);this.options.warningAlerts&&this._alert("Warning!"+(a.message?"\n\n"+a.message:"")+(a.hint?"\n\n"+a.hint:"")+"\n\nContext: "+ -a.context)},_alert:function(a){alert("jPlayer "+this.version.script+" : id='"+this.internal.self.id+"' : "+a)},_emulateHtmlBridge:function(){var a=this;b.each(b.jPlayer.emulateMethods.split(/\s+/g),function(b,d){a.internal.domNode[d]=function(b){a[d](b)}});b.each(b.jPlayer.event,function(c,d){var e=!0;b.each(b.jPlayer.reservedEvent.split(/\s+/g),function(a,b){if(b===c)return e=!1});e&&a.element.bind(d+".jPlayer.jPlayerHtml",function(){a._emulateHtmlUpdate();var b=document.createEvent("Event");b.initEvent(c, -!1,!0);a.internal.domNode.dispatchEvent(b)})})},_emulateHtmlUpdate:function(){var a=this;b.each(b.jPlayer.emulateStatus.split(/\s+/g),function(b,d){a.internal.domNode[d]=a.status[d]});b.each(b.jPlayer.emulateOptions.split(/\s+/g),function(b,d){a.internal.domNode[d]=a.options[d]})},_destroyHtmlBridge:function(){var a=this;this.element.unbind(".jPlayerHtml");b.each((b.jPlayer.emulateMethods+" "+b.jPlayer.emulateStatus+" "+b.jPlayer.emulateOptions).split(/\s+/g),function(b,d){delete a.internal.domNode[d]})}}; -b.jPlayer.error={FLASH:"e_flash",FLASH_DISABLED:"e_flash_disabled",NO_SOLUTION:"e_no_solution",NO_SUPPORT:"e_no_support",URL:"e_url",URL_NOT_SET:"e_url_not_set",VERSION:"e_version"};b.jPlayer.errorMsg={FLASH:"jPlayer's Flash fallback is not configured correctly, or a command was issued before the jPlayer Ready event. Details: ",FLASH_DISABLED:"jPlayer's Flash fallback has been disabled by the browser due to the CSS rules you have used. Details: ",NO_SOLUTION:"No solution can be found by jPlayer in this browser. Neither HTML nor Flash can be used.", -NO_SUPPORT:"It is not possible to play any media format provided in setMedia() on this browser using your current options.",URL:"Media URL could not be loaded.",URL_NOT_SET:"Attempt to issue media playback commands, while no media url is set.",VERSION:"jPlayer "+b.jPlayer.prototype.version.script+" needs Jplayer.swf version "+b.jPlayer.prototype.version.needFlash+" but found "};b.jPlayer.errorHint={FLASH:"Check your swfPath option and that Jplayer.swf is there.",FLASH_DISABLED:"Check that you have not display:none; the jPlayer entity or any ancestor.", -NO_SOLUTION:"Review the jPlayer options: support and supplied.",NO_SUPPORT:"Video or audio formats defined in the supplied option are missing.",URL:"Check media URL is valid.",URL_NOT_SET:"Use setMedia() to set the media URL.",VERSION:"Update jPlayer files."};b.jPlayer.warning={CSS_SELECTOR_COUNT:"e_css_selector_count",CSS_SELECTOR_METHOD:"e_css_selector_method",CSS_SELECTOR_STRING:"e_css_selector_string",OPTION_KEY:"e_option_key"};b.jPlayer.warningMsg={CSS_SELECTOR_COUNT:"The number of css selectors found did not equal one: ", -CSS_SELECTOR_METHOD:"The methodName given in jPlayer('cssSelector') is not a valid jPlayer method.",CSS_SELECTOR_STRING:"The methodCssSelector given in jPlayer('cssSelector') is not a String or is empty.",OPTION_KEY:"The option requested in jPlayer('option') is undefined."};b.jPlayer.warningHint={CSS_SELECTOR_COUNT:"Check your css selector and the ancestor.",CSS_SELECTOR_METHOD:"Check your method name.",CSS_SELECTOR_STRING:"Check your css selector is a string.",OPTION_KEY:"Check your option name."}}); \ No newline at end of file diff --git a/apps/catalogue/static/player/openplayer.js b/apps/catalogue/static/player/openplayer.js deleted file mode 100644 index 4fe27bd31..000000000 --- a/apps/catalogue/static/player/openplayer.js +++ /dev/null @@ -1,18 +0,0 @@ -(function($) { - $(function() { - - - -$('.open-player').click(function(event) { - event.preventDefault(); - window.open($(this).attr('href'), - 'player', - 'width=422, height=500, scrollbars=1' - ); -}); - - - - }); -})(jQuery); - diff --git a/apps/catalogue/static/player/player.css b/apps/catalogue/static/player/player.css deleted file mode 100644 index 829a9a1c0..000000000 --- a/apps/catalogue/static/player/player.css +++ /dev/null @@ -1,21 +0,0 @@ -#player h1 { - font-size: 2em; - margin: .5em; -} - -.player-info { - margin: 1em; -} - - -.play { - cursor: pointer; -} - -.play:hover { - color: #0D7E85; -} - -.daisy-list { - list-style: none; -} diff --git a/apps/catalogue/static/player/player.js b/apps/catalogue/static/player/player.js deleted file mode 100755 index 69dceed55..000000000 --- a/apps/catalogue/static/player/player.js +++ /dev/null @@ -1,34 +0,0 @@ -(function($) { - $(function() { - - $("#jplayer").each(function() { - var $self = $(this); - $self.jPlayer({ - swfPath: "/static/jplayer/", - solution: "html,flash", - supplied: $self.attr('data-supplied'), - - ready: function() { - var player = $(this); - var setMedia = function(elem) { - var li = $(elem).parent(); - $('.jp-playlist-current').removeClass('jp-playlist-current'); - $(li).addClass('jp-playlist-current'); - var media = {} - - $('.mp3', li).each(function() {media['mp3'] = $(this).attr('href')}); - $('.ogg', li).each(function() {media['oga'] = $(this).attr('href')}); - - return player.jPlayer("setMedia", media); - }; - setMedia($('.play').first()).jPlayer("play"); - - $('.play').click(function() { - setMedia(this).jPlayer("play"); - }); - } - }); - }); - - }); -})(jQuery) \ No newline at end of file diff --git a/apps/catalogue/tasks.py b/apps/catalogue/tasks.py deleted file mode 100644 index a2b8be088..000000000 --- a/apps/catalogue/tasks.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from datetime import datetime -from traceback import print_exc -from celery.task import task -from celery.utils.log import get_task_logger -from django.conf import settings -from wolnelektury.utils import localtime_to_utc -from waiter.models import WaitedFile - -task_logger = get_task_logger(__name__) - - -# TODO: move to model? -def touch_tag(tag): - update_dict = { - 'changed_at': localtime_to_utc(datetime.now()), - } - - type(tag).objects.filter(pk=tag.pk).update(**update_dict) - - -@task -def index_book(book_id, book_info=None, **kwargs): - from catalogue.models import Book - try: - return Book.objects.get(id=book_id).search_index(book_info, **kwargs) - except Exception, e: - print "Exception during index: %s" % e - print_exc() - raise e - - -@task(ignore_result=True, rate_limit=settings.CATALOGUE_CUSTOMPDF_RATE_LIMIT) -def build_custom_pdf(book_id, customizations, file_name, waiter_id=None): - """Builds a custom PDF file.""" - try: - from django.core.files import File - from django.core.files.storage import DefaultStorage - from catalogue.models import Book - - task_logger.info(DefaultStorage().path(file_name)) - if not DefaultStorage().exists(file_name): - kwargs = { - 'cover': True, - } - if 'no-cover' in customizations: - kwargs['cover'] = False - customizations.remove('no-cover') - pdf = Book.objects.get(pk=book_id).wldocument().as_pdf( - customizations=customizations, - morefloats=settings.LIBRARIAN_PDF_MOREFLOATS, - **kwargs) - DefaultStorage().save(file_name, File(open(pdf.get_filename()))) - finally: - if waiter_id is not None: - WaitedFile.objects.filter(pk=waiter_id).delete() diff --git a/apps/catalogue/templates/catalogue/audiobook_list.html b/apps/catalogue/templates/catalogue/audiobook_list.html deleted file mode 100644 index 75576f4ad..000000000 --- a/apps/catalogue/templates/catalogue/audiobook_list.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "catalogue/book_list.html" %} -{% load i18n %} -{% load catalogue_tags %} -{% load ssi_include from ssify %} - -{% block bodyid %}book-a-list{% endblock %} - -{% block titleextra %}{% trans "Listing of all audiobooks" %}{% endblock %} - -{% block metadescription %}Darmowe audiobooki na wolnej licencji. Lektury czytane przez znanych aktorów.{% endblock %} - -{% block extrahead %} - <link rel="alternate" type="application/atom+xml" title="{% trans "Latest MP3 audiobooks" %}" href="{% url 'audiobook_feed' 'mp3' %}" /> - <link rel="alternate" type="application/atom+xml" title="{% trans "Latest Ogg Vorbis audiobooks" %}" href="{% url 'audiobook_feed' 'ogg' %}" /> -{% endblock %} - -{% block book_list_header %}{% trans "Listing of all audiobooks" %}{% endblock %} - -{% block book_list_info %} -{% ssi_include 'chunk' key='audiobook-list' %} -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/book_detail.html b/apps/catalogue/templates/catalogue/book_detail.html deleted file mode 100644 index 7e8128fa7..000000000 --- a/apps/catalogue/templates/catalogue/book_detail.html +++ /dev/null @@ -1,36 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load common_tags catalogue_tags %} -{% load ssify %} -{% load build_absolute_uri from fnp_common %} - -{% block titleextra %}{{ book.pretty_title }}{% endblock %} -{% block ogimage %}{% if book.cover %}{{ book.cover.url|build_absolute_uri:request }}{% endif %}{% endblock %} - -{% block metadescription %}{% book_title book %}. {{ block.super }}{% endblock %} - -{% block bodyid %}book-detail{% endblock %} - -{% block body %} - -{% ssi_include 'catalogue_book_wide' pk=book.pk %} - -{% work_list book_children %} - -{% spaceless %} -{% if book.other_versions %} -<section class="see-also" style="display: inline-block;"> -<h1>{% trans "Other versions" %}:</h1> -{% for rel in book.other_versions %} - {% ssi_include 'catalogue_book_mini' pk=rel.pk %} -{% endfor %} -</section> -{% endif %} - -<section class="see-also" style="display: inline-block;"> -<h1>{% trans "See also" %}:</h1> -{% related_books book taken=book.other_versions|length %} -</section> -{% endspaceless %} - -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/book_fragments.html b/apps/catalogue/templates/catalogue/book_fragments.html deleted file mode 100644 index d46f869d8..000000000 --- a/apps/catalogue/templates/catalogue/book_fragments.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load work_list from catalogue_tags %} - -{% block titleextra %}{% trans "Theme" %} {{ theme }} {% trans "in work " %} {{ book }}{% endblock %} - -{% block bodyid %}tagged-object-list{% endblock %} - -{% block body %} - <div class="left-column"> - <h1>{% trans "Theme" %} - <a href="{{ theme.get_absolute_url }}">{{ theme }}</a> - <br/>{% trans "in work " %} - <a href="{{ book.get_absolute_url }}">{{ book }}</a></h1> - </div> - - <div class="right-column"> - {% work_list fragments %} - </div> -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/book_info.html b/apps/catalogue/templates/catalogue/book_info.html deleted file mode 100755 index e245335ee..000000000 --- a/apps/catalogue/templates/catalogue/book_info.html +++ /dev/null @@ -1,46 +0,0 @@ -{% load i18n %} -{% load catalogue_tags %} - -<p> - {% if book.extra_info.license %} - {% trans "This work is licensed under:" %} - <a href="{{ book.extra_info.license }}">{{ book.extra_info.license_description }}</a> - {% else %} - {% blocktrans %}This work isn't covered by copyright and is part of the - public domain, which means it can be freely used, published and - distributed. If there are any additional copyrighted materials - provided with this work (such as annotations, motifs etc.), those - materials are licensed under the - <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0</a> - license.{% endblocktrans %} - {% endif %} -</p> - -{% if book.extra_info.source_name %} - <p>{% trans "Resource prepared based on:" %} {{ book.extra_info.source_name }}</p> -{% endif %} - -{% if book.extra_info.description %} - <p>{{ book.extra_info.description }}</p> -{% endif %} - -{% if book.extra_info.editor or book.extra_info.technical_editor %} - <p>{% if is_picture %} - {% trans "Edited by:" %} - {% else %} - {% trans "Edited and annotated by:" %} - {% endif %} - {% all_editors book.extra_info %}.</p> -{% endif %} - -{% if book.extra_info.funders %} - <p>{% trans "Publication funded by:" %} - {% for funder in book.extra_info.funders %}{{ funder }}{% if not forloop.last %}, {% else %}.{% endif %}{% endfor %} - </p> -{% endif %} - -{% if book.extra_info.cover_by %} - <p>{% trans "Cover image by:" %} - <a href="{{ book.extra_info.cover_source }}"> - {{ book.extra_info.cover_by }}</a>.</p> -{% endif %} diff --git a/apps/catalogue/templates/catalogue/book_list.html b/apps/catalogue/templates/catalogue/book_list.html deleted file mode 100644 index e29cd50ec..000000000 --- a/apps/catalogue/templates/catalogue/book_list.html +++ /dev/null @@ -1,39 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} -{% load ssi_include from ssify %} - -{% block bodyid %}book-a-list{% endblock %} - -{% block titleextra %}{% trans "Listing of all works" %}{% endblock %} - -{% block body %} -{% spaceless %} - - <h1>{% block book_list_header %}{% trans "Listing of all works" %}{% endblock %}</h1> - - <div class="left-column"><div class="normal-text" style="margin-bottom: 2em"> - {% block book_list_info %} - {% ssi_include 'chunk' key='book-list' %} - {% endblock %} - </div></div> - - <div style='clear:both;'></div> - - <a name="top"></a> - - <div id="book-list-nav"> - <h2>{% trans "Table of Content" %}</h2> - <div id="book-list-nav-index"> - {{ rendered_nav }} - </div> - </div> - <div id="book-list"> - {% block book_list %} - {{ rendered_book_list }} - {% endblock %} - </div> - <a id="book-list-up" href="#top">{% trans "â top â" %}</a> - -{% endspaceless %} -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/book_mini_box.html b/apps/catalogue/templates/catalogue/book_mini_box.html deleted file mode 100755 index 88ec16dfd..000000000 --- a/apps/catalogue/templates/catalogue/book_mini_box.html +++ /dev/null @@ -1,22 +0,0 @@ -{% spaceless %} -<div class="book-mini-box"> - <div class="book-mini-box-inner"> - {% if with_link %} - <a href="{{ book.get_absolute_url }}"> - {% endif %} - {% if book.cover_thumb %} - <img src="{{ book.cover_thumb.url }}" alt="{{ author_str }} â {{ book.title }}" class="cover" /> - {% endif %} - {% if show_lang %} - <span class="language" title="{{ book.language_name }}">{{ book.language_code }}</span> - {% endif %} - <div class="desc"> - <span class="mono author">{{ author_str }}</span> - <span class="title">{{ book.title }}</span> - </div> - {% if with_link %} - </a> - {% endif %} - </div> -</div> -{% endspaceless %} \ No newline at end of file diff --git a/apps/catalogue/templates/catalogue/book_searched.html b/apps/catalogue/templates/catalogue/book_searched.html deleted file mode 100644 index 357491ce6..000000000 --- a/apps/catalogue/templates/catalogue/book_searched.html +++ /dev/null @@ -1,38 +0,0 @@ -{% spaceless %} - -{% load i18n %} -{% load inline_tag_list from catalogue_tags %} -{% load ssi_include from ssify %} - -<div class="search-result"> - -{% ssi_include 'catalogue_book_short' pk=book.pk %} - -<div class="snippets"> - {% for hit in hits %} - {% if hit.snippet %} - <div class="snippet-text"><a href="{% url 'book_text' book.slug %}#sec{{hit.section_number}}">{{hit.snippet|safe}}</a></div> - {% else %} - {% if hit.fragment %} - <div class="snippet-text"> - {% if hit.themes_hit %} - {% inline_tag_list hit.themes_hit %} - {% endif %} - <a href="{{hit.fragment.get_absolute_url}}"> - {% if hit.snippet %} - {{hit.snippet|safe}} - {% else %} - {{hit.fragment.text|truncatewords_html:15|safe}} - {% endif %} - </a> - </div> - {% endif %} - {% endif %} - {% endfor %} -</div> - -<div style="clear: right"></div> - -</div> - -{% endspaceless %} \ No newline at end of file diff --git a/apps/catalogue/templates/catalogue/book_short.html b/apps/catalogue/templates/catalogue/book_short.html deleted file mode 100644 index b069cb585..000000000 --- a/apps/catalogue/templates/catalogue/book_short.html +++ /dev/null @@ -1,135 +0,0 @@ -{% spaceless %} -{% load i18n %} -{% load catalogue_tags ssify %} -{% load likes_book book_shelf_tags from social_tags %} -<div class="{% block box-class %}book-box{% endblock %}"> -<div class="book-box-inner"> -<div class="book-left-column"> - - - - -<div class="book-box-body"> - - -{% likes_book book.pk as likes %} -<div class="star {{ likes.if }}{{ likes.else }}un{{ likes.endif }}like"> - <div class="if-like" > - <a id="social-book-sets-{{ book.slug }}" data-callback='social-book-sets' class='ajaxable' href='{% url "social_book_sets" book.slug %}'>â </a> - </div> - <div class="if-unlike"> - <form id="social-like-book-{{ book.slug }}" data-callback='social-like-book' method='post' class='ajax-form' action='{% url "social_like_book" book.slug %}'> - {% ssi_csrf_token %} - <button type='submit'>â</button> - </form> - </div> -</div> - - - <div class="book-box-head"> - <div class="author"> - {% for tag in tags.author %} - <a href="{{ tag.get_absolute_url }}">{{ tag.name }}</a>{% if not forloop.last %}, - {% endif %}{% endfor %}{% for parent in parents %}, - <a href="{{ parent.get_absolute_url }}">{{ parent.title }}</a>{% endfor %} - </div> - <div class="title"> - {% if main_link %}<a href="{{ main_link }}">{% endif %}{{ book.title }}{% if main_link %}</a>{% endif %} - </div> - </div> - -<div class="cover-area"> - {% if book.cover_thumb %} - {% if main_link %}<a href="{{ main_link }}">{% endif %} - <img src="{{ book.cover_thumb.url }}" alt="Cover" class="cover" /> - {% if main_link %}</a>{% endif %} - {% endif %} - {% block cover-area-extra %}{% endblock %} -</div> - <div class="tags"> - {% spaceless %} - - <span class="category"> - <span class="mono"> {% trans "Epoch" %}:</span> <span class="book-box-tag"> - {% for tag in tags.epoch %} - <a href="{{ tag.get_absolute_url }}">{{ tag.name }}</a> - {% if not forloop.last %}<span>, </span>{% endif %} - {% endfor %} - </span></span> - - <span class="category"> - <span class="mono"> {% trans "Kind" %}:</span> <span class="book-box-tag"> - {% for tag in tags.kind %} - <a href="{{ tag.get_absolute_url }}">{{ tag.name }}</a> - {% if not forloop.last %}<span>, </span>{% endif %} - {% endfor %} - </span></span> - - <span class="category"> - <span class="mono"> {% trans "Genre" %}:</span> <span class="book-box-tag"> - {% for tag in tags.genre %} - <a href="{{ tag.get_absolute_url }}">{{ tag.name }}</a> - {% if not forloop.last %}<span>, </span>{% endif %} - {% endfor %} - </span></span> - - {% if show_lang %} - <span class="category"> - <span class="mono"> {% trans "Language" %}:</span> <span class="book-box-tag"> - <a>{{ book.language_name }}</a> - </span></span> - {% endif %} - - {% if stage_note %} - <br><span class="category"> - <a{% if stage_note_url %} href="{{ stage_note_url }}"{% endif %}>{{ stage_note }}</a> - </span> - {% endif %} - - {% endspaceless %} - </div> - </div> - {% book_shelf_tags book.pk %} - - <ul class="book-box-tools"> - <li class="book-box-read"> - {% if book.html_file %} - <a href="{% url 'book_text' book.slug %}" class="downarrow">{% trans "Read online" %}</a> - {% endif %} - </li> - <li class="book-box-download hoverget"> - <a class="downarrow hoverclick">{% trans "Download" %}</a> - <div class="book-box-formats"> - {% if book.pdf_file %} - <span><a href="{{ book.pdf_file.url}}">PDF</a> {% trans "to print" %}</span> - {% endif %} - {% if book.epub_file %} - <span><a href="{{ book.epub_file.url}}">EPUB</a> {% trans "for an e-book reader" %}</span> - {% endif %} - {% if book.mobi_file %} - <span><a href="{{ book.mobi_file.url}}">MOBI</a> {% trans "for Kindle" %}</span> - {% endif %} - {% if book.fb2_file %} - <span><a href="{{ book.fb2_file.url}}">FB2</a> {% trans "FictionBook" %}</span> - {% endif %} - {% if book.txt_file %} - <span><a href="{{ book.txt_file.url}}">TXT</a> {% trans "for advanced usage" %}</span> - {% endif %} - </div> - </li> - <li class="book-box-audiobook"> - {% if has_audio %} - <a href="{% url 'book_player' book.slug %}" class="open-player downarrow">{% trans "Listen" %}</a> - {% endif %} - </li> - </ul> - {% block book-box-extra-info %}{% endblock %} - {% block box-append %} - {% endblock %} - </div> - {% block right-column %} - {% endblock %} - <div class="clearboth"></div> -</div> -</div> -{% endspaceless %} \ No newline at end of file diff --git a/apps/catalogue/templates/catalogue/book_text.html b/apps/catalogue/templates/catalogue/book_text.html deleted file mode 100644 index 339cfc7b2..000000000 --- a/apps/catalogue/templates/catalogue/book_text.html +++ /dev/null @@ -1,100 +0,0 @@ -{% extends "catalogue/viewer_base.html" %} -{% load i18n %} -{% load catalogue_tags ssify %} -{% load thumbnail %} - - -{% block title %}{{ book.pretty_title }}{% endblock %} - - -{% block menu %} -<li><a href="{{ book.get_absolute_url }}" id="menu-book" data-box="book-short"> - <img src="{% if book.cover_thumb %}{% thumbnail book.cover_thumb '80x111' as thumb %}{{ thumb.url }}{% empty %}{{ book.cover_thumb.url }}{% endthumbnail %}{% endif %}" - width="80" height="111" - alt="{{ book.pretty_title }}" - title="{{ book.pretty_title }}"> -</a></li> - -{% if book.other_versions.exists %} - <li id="menu-other"><a href="#" data-box="other"> - <span class="label">{% trans "Other versions" %}</span> - </a> - </li> -{% endif %} - -<li id="menu-toc"><a href="#" data-box="toc"> - <span class="label">{% trans "Table of contents" %}</span> -</a></li> - -<li id="menu-themes"><a href="#" data-box="themes"> - <span class="label">{% trans "Themes" %}</span> -</a></li> - -<li id="menu-settings"><a href="#" data-box="settings"> - <span class="label">{% trans "Settings" %}</span> -</a></li> - -<li id="menu-nota_red"><a href="#" data-box="nota_red"> - <span class="label">{% trans "Edit. note" %}</span> -</a></li> - -<li id="menu-info"><a href="#info" data-box="info"> - <span class="label">{% trans "Infobox" %}</span> -</a></li> -{% endblock menu %} - - - -{% block big-pane %} -<div id="big-pane" style=""> - -<article id="main-text"> -<!--#include file='{{ book.html_file.url }}'--> -</article> - -<article id="other-text"> - <a class="other-text-close" href="#">{% trans "Close" %}</a> - <div id="other-text-waiter">{% trans "Please wait..." %}</div> - <div id="other-text-body" style="display: none;"></div> -</article> -{% endblock big-pane %} - - - - - -{% block footer %} -<div id="info" class="box"> - {% book_info book %} -</div> - -{% if book.other_versions.exists %} -<div class="box" id="other"> - <h2>{% trans "Other versions of the book" %}</h2> - <a class="other-text-close" href="#">{% trans "Close the other version" %}</a> - <ul> - {% spaceless %} - {% for other_version in book.other_versions %} - <li><a class="display-other" - data-other="{{ other_version.html_file.url }}" - href="{% url 'book_text' other_version.slug %}"> - {% ssi_include 'catalogue_book_mini_nolink' pk=other_version.pk %} - </a> - </li> - {% endfor %} - {% endspaceless %} - </ul> -</div> -{% endif %} - -<div class="box" id="settings"> - <h2>{% trans "Settings" %}</h2> - <a href="#" class="settings-switch" id="settings-line-numbers" data-setting="always-hide-line-numbers">{% trans "Display line numbers" %}</a><br/> - <a href="#" class="settings-switch" id="settings-themes" data-setting="always-hide-themes">{% trans "Display themes" %}</a><br/> - <a href="#" class="settings-switch" id="settings-annotations" data-setting="no-annotations">{% trans "Display footnotes" %}</a><br/> -</div> - -<div class="box" id="book-short"> - {% ssi_include 'catalogue_book_short' pk=book.pk %} -</div> -{% endblock footer %} diff --git a/apps/catalogue/templates/catalogue/book_wide.html b/apps/catalogue/templates/catalogue/book_wide.html deleted file mode 100644 index b84acdb53..000000000 --- a/apps/catalogue/templates/catalogue/book_wide.html +++ /dev/null @@ -1,84 +0,0 @@ -{% extends "catalogue/book_short.html" %} -{% load i18n %} -{% load choose_fragment download_audio tag_list custom_pdf_link_li license_icon source_name from catalogue_tags %} -{% load choose_cite from social_tags %} -{% load ssi_include from ssify %} - - -{% block box-class %}book-wide-box{% endblock %} - - -{% block cover-area-extra %} -{% if extra_info.license %} - {% license_icon extra_info.license %} -{% endif %} -{% endblock %} - - - -{% block book-box-extra-info %} -{% if themes %} - <div class="hidden-box-wrapper" id="theme-list-wrapper"> - <p><a class="mono hidden-box-trigger theme-list-link" - href="#">{% trans "Motifs and themes" %}</a></p> - <div class="hidden-box"> - <ul> - {% for theme in themes %} - <li><a href="{% url 'book_fragments' book.slug theme.slug %}">{{ theme }} ({{ theme.count }})</a></li> - {% endfor %} - </ul> - </div> - </div> -{% else %} - <p> </p> -{% endif %} -{% endblock %} - - -{% block right-column %} -<div class="right-column"> - <div class="quote"> - {% choose_cite book.pk as cite_promo %} - {% choose_fragment book.pk unless=cite_promo as fragment_promo %} - {{ cite_promo.if }} - {% ssi_include 'social_cite' pk=cite_promo %} - {{ cite_promo.endif }} - {{ fragment_promo.if }} - {% ssi_include 'catalogue_fragment_promo' pk=fragment_promo %} - {{ fragment_promo.endif }} - </div> - - <div class="other-tools"> - <h2 class="mono">{% trans "See" %}</h2> - <ul class="plain"> - {% if extra_info.source_url %} - <li><a href="{{ extra_info.source_url }}">{% trans "Source" %}</a> {% trans "of the book" %} - {% trans "in" %} {% source_name extra_info.source_url %}</li> - {% endif %} - <li><a href="{{ book.xml_file.url }}">{% trans "Source XML file" %}</a></li> - {% if extra_info.about and not hide_about %} - <li>{% trans "Book on" %} <a href="{{ extra_info.about }}">{% trans "Editor's Platform" %}</a></li> - {% endif %} - {% if book.gazeta_link %} - <li><a href="{{ book.gazeta_link }}">{% trans "Book description on Lektury.Gazeta.pl" %}</a></li> - {% endif %} - {% if book.wiki_link %} - <li><a href="{{ book.wiki_link }}">{% trans "Book description on Wikipedia" %}</a></li> - {% endif %} - <li><a href="{% url 'poem_from_book' book.slug %}">{% trans "Mix this book" %}</a></li> - </ul> - </div> - <div class="other-download"> - <h2 class="mono">{% trans "Download" %}</h2> - <ul class="plain"> - <li> - {% if related.media.mp3 or related.media.ogg or related.media.daisy %} - {% trans "Download all audiobooks for this book" %}: - {% download_audio book %}. - {% endif %} - </li> - {% custom_pdf_link_li book %} - </ul> - </div> -</div> -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/catalogue.html b/apps/catalogue/templates/catalogue/catalogue.html deleted file mode 100644 index c7cee4096..000000000 --- a/apps/catalogue/templates/catalogue/catalogue.html +++ /dev/null @@ -1,38 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} - - -{% block titleextra %}{% trans "Catalogue" %}{% endblock %} - -{% block bodyid %}catalogue-catalogue{% endblock %} - -{% block body %} - <h1>{% trans "Catalogue" %}</h1> - - <div class="normal-text catalogue-catalogue"> - - <p><a href="{% url 'reporting_catalogue_pdf' %}"> - {% trans "Download the catalogue in PDF format." %} - </a></p> - - <h2 class="white-box">{% trans "Authors" %}<a name="autorzy"></a></h2> - <div class="white-box">{{ output.author }}</div> - - <h2 class="white-box">{% trans "Kinds" %}<a name="rodzaje"></a></h2> - <div class="white-box" lang="pl">{{ output.kind }}</div> - - <h2 class="white-box">{% trans "Genres" %}<a name="gatunki"></a></h2> - <div class="white-box" lang="pl">{{ output.genre }}</div> - - <h2 class="white-box">{% trans "Epochs" %}<a name="epoki"></a></h2> - <div class="white-box" lang="pl">{{ output.epoch }}</div> - - <h2 class="white-box">{% trans "Themes and topics" %}<a name="motywy"></a></h2> - <div class="white-box" lang="pl">{{ output.theme }}</div> - - <h2 class="white-box">{% trans "Collections" %}<a name="kolekcje"></a></h2> - <div class="white-box" lang="pl">{{ output.collections }}</div> - - </div> -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/collection.html b/apps/catalogue/templates/catalogue/collection.html deleted file mode 100755 index 4bb12c938..000000000 --- a/apps/catalogue/templates/catalogue/collection.html +++ /dev/null @@ -1,10 +0,0 @@ -{% extends "catalogue/book_list.html" %} -{% load i18n %} - -{% block titleextra %}{{ context.collection.title }}{% endblock %} - -{% block book_list_header %}{{ context.collection.title }}{% endblock %} - -{% block book_list_info %} -{{ context.collection.description|safe }} -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/collection_list.html b/apps/catalogue/templates/catalogue/collection_list.html deleted file mode 100755 index 38466f157..000000000 --- a/apps/catalogue/templates/catalogue/collection_list.html +++ /dev/null @@ -1,5 +0,0 @@ -<ul> -{% for collection in collections %} - <li><a href="{{ collection.get_absolute_url }}">{{ collection }}</a></li> -{% endfor %} -</ul> diff --git a/apps/catalogue/templates/catalogue/daisy_list.html b/apps/catalogue/templates/catalogue/daisy_list.html deleted file mode 100644 index 65d9d6bcd..000000000 --- a/apps/catalogue/templates/catalogue/daisy_list.html +++ /dev/null @@ -1,17 +0,0 @@ -{% extends "catalogue/book_list.html" %} -{% load i18n %} -{% load ssi_include from ssify %} - -{% block bodyid %}book-a-list{% endblock %} - -{% block titleextra %}{% trans "Listing of all DAISY files" %}{% endblock %} - -{% block extrahead %} - <link rel="alternate" type="application/atom+xml" title="{% trans "Latest DAISY audiobooks" %}" href="{% url 'audiobook_feed' 'daisy' %}" /> -{% endblock %} - -{% block book_list_header %}{% trans "Listing of all DAISY files" %}{% endblock %} - -{% block book_list_info %} -{% ssi_include 'chunk' key='daisy-list' %} -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/differentiate_tags.html b/apps/catalogue/templates/catalogue/differentiate_tags.html deleted file mode 100644 index b8ef906ef..000000000 --- a/apps/catalogue/templates/catalogue/differentiate_tags.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} - -{% block titleextra %}{% title_from_tags tags %}{% endblock %} - -{% block bodyid %}differentiate_tags{% endblock %} - -{% block body %} - <h1>{% title_from_tags tags %}</h1> - - <p>{% trans "The criteria are ambiguous. Please select one of the following options:" %}</p> - <div id="books-list"> - {% for option in options %} - <div class="book-description" - <p><a href="{% url 'tagged_object_list' option.url_args %}">{% if tags %}{% title_from_tags tags %}, {% endif %}<em>{%title_from_tags option.tags %}</em>{% if unparsed %}, {{unparsed|join:', '}}{% endif %}</a></p> - </div> - {% endfor %} - </div> -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/fragment_promo.html b/apps/catalogue/templates/catalogue/fragment_promo.html deleted file mode 100755 index cf817ae7c..000000000 --- a/apps/catalogue/templates/catalogue/fragment_promo.html +++ /dev/null @@ -1,8 +0,0 @@ -{% if fragment %} -<a href="{{ fragment.get_absolute_url }}" class="cite"> - <blockquote class="cite-body"> - {{ fragment.get_short_text|safe }} - </blockquote> - <p class="mono source">{{ fragment.book.pretty_title }}</p> -</a> -{% endif %} diff --git a/apps/catalogue/templates/catalogue/fragment_short.html b/apps/catalogue/templates/catalogue/fragment_short.html deleted file mode 100644 index b5921f215..000000000 --- a/apps/catalogue/templates/catalogue/fragment_short.html +++ /dev/null @@ -1,26 +0,0 @@ -{% load i18n %} -{% load book_title_html from catalogue_tags %} - -<div class="cite {% if fragment.short_text %}fragment-with-short{% endif %}"> - {% if fragment.short_text %} - <div class="fragment-short-text"> - <blockquote class="cite-body"> - <a href="{{ fragment.get_absolute_url }}" class="fragment"> - {{ fragment.short_text|safe }} - </a> - </blockquote> - <a href="#" class="toggle mono">â {% trans "Expand fragment" %} â</a> - </div> - {% endif %} - <div class="fragment-long-text" {% if fragment.short_text %}style="display:none;"{% endif %}> - <blockquote class="cite-body fragment-text"> - <a href="{{ fragment.get_absolute_url }}" class="fragment"> - {{ fragment.text|safe }} - </a> - </blockquote> - {% if fragment.short_text %} - <a href="#" class="toggle mono">â {% trans "Hide fragment" %} â</a> - {% endif %} - </div> -<p class="mono source">{% book_title_html fragment.book %}</p> -</div> diff --git a/apps/catalogue/templates/catalogue/inline_tag_list.html b/apps/catalogue/templates/catalogue/inline_tag_list.html deleted file mode 100755 index 59b1acce9..000000000 --- a/apps/catalogue/templates/catalogue/inline_tag_list.html +++ /dev/null @@ -1,17 +0,0 @@ -{% load i18n %} -{% load catalogue_tags %} -{% if one_tag %} - {% trans "See full category" %} <a href="{% catalogue_url one_tag %}">{{ one_tag }}</a> -{% else %} - <ul> - {% if choices %} - {% for tag in tags %} - <li><a href="{% catalogue_url choices tag %}">{{ tag }}{% if tag.count %} ({{ tag.count }}){% endif %}</a></li> - {% endfor %} - {% else %} - {% for tag in tags %} - <li><a href="{{ tag.get_absolute_url }}">{% if tag.count %} ({{ tag.count }}){% endif %}</a></li> - {% endfor %} - {% endif %} - </ul> -{% endif %} diff --git a/apps/catalogue/templates/catalogue/menu.html b/apps/catalogue/templates/catalogue/menu.html deleted file mode 100644 index 5ddbd3b23..000000000 --- a/apps/catalogue/templates/catalogue/menu.html +++ /dev/null @@ -1,41 +0,0 @@ -{% spaceless %} -{% load i18n static %} - -<a id="show-menu" href="{% url 'catalogue' %}"> - <span class="long">{% trans "Catalogue of the library" %}</span> - <span class="short">{% trans "Catalogue" %}</span> -</a> -<ul id="menu"> - {% for category, name, hash in categories %} - <li class="hidden-box-wrapper menu"> - <a href="{% url 'catalogue' %}#{{ hash }}" class="hidden-box-trigger menu load-menu">{{ name }}</a> - <div class="hidden-box" id="menu-{{ category }}"> - <img src="{% static "img/indicator.gif" %}" alt="{% trans "Please waitâ¦" %}" /> - </div> - </li> - {% endfor %} - - <li class="hidden-box-wrapper menu"> - <a href="{% url 'catalogue' %}#kolekcje" class="hidden-box-trigger menu load-menu">{% trans "Collections" %}</a> - <div class="hidden-box" id="menu-collections"> - <img src="{% static "img/indicator.gif" %}" alt="{% trans "Please waitâ¦" %}" /> - </div> - </li> - - <li class="menu"> - <a href="{% url 'book_list' %}" class="menu">{% trans "All books" %}</a> - </li> - <li class="menu"> - <a href="{% url 'audiobook_list' %}" class="menu">{% trans "Audiobooks" %}</a> - </li> - <li class="menu"> - <a href="{% url 'daisy_list' %}" class="menu">{% trans "DAISY" %}</a> - </li> - <li class="menu"> - <a href="{% url 'picture_list_thumb' %}" class="menu"> - <span class='mono'>{% trans "Gallery" %}</span></a> - </li> - -</ul> - -{% endspaceless %} \ No newline at end of file diff --git a/apps/catalogue/templates/catalogue/picture_detail.html b/apps/catalogue/templates/catalogue/picture_detail.html deleted file mode 100644 index b8b70c6be..000000000 --- a/apps/catalogue/templates/catalogue/picture_detail.html +++ /dev/null @@ -1,94 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags pagination_tags %} -{% load thumbnail %} - - -{% block titleextra %}{{ picture.title }}{% endblock %} - -{% block bodyid %}picture-detail{% endblock %} - -{% block body %} - <h1>{{picture.title}}</h1> - - <div id="books-list"> - <div id='breadcrumbs'> - {% if categories.author %} - {% for tag in categories.author %} - <a href="{{ tag.get_absolute_url }}">{{ tag }}</a>{% if not forloop.last %}, {% endif %} - {% endfor %} - » - {% endif %} - </div> - - {% thumbnail picture.image_file "400x500" upscale="false" as im %} - <img style="margin:{{ im|margin:"500x500" }}" src="{{ im.url }}" width="{{ im.x }}" height="{{ im.y }}" /> - {% endthumbnail %} - - {% if picture.info.license %} - <p>{% trans "Work is licensed under " %} <a href="{{ picture.info.license }}">{{ picture.info.license_description }}</a>.</p> - {% endif %} - <p>{% trans "Based on" %}: {{ picture.info.source_name }}</p> - {% if picture.info.description %} - <div id="description"> - <div id='description-long'>{{ picture.info.description|safe }}</div> -{%comment%} <div id='description-short'>{{ picture.info.description|safe|truncatewords_html:30 }}</div>{%endcomment%} - </div> - <div id="toggle-description"><p></p></div> - {% endif %} - - </div> - - <div id="tags-list"> - <div id="book-info"> - <h2>{% trans "Details" %}</h2> - <ul> - <li> - {% trans "Author" %}: - {% for tag in categories.author %} - <a href="{{ tag.get_absolute_url }}">{{ tag }}</a>{% if not forloop.last %}, {% endif %} - {% endfor %} - </li> - <li> - {% trans "Epoch" %}: - {% for tag in categories.epoch %} - <a href="{{ tag.get_absolute_url }}">{{ tag }}</a>{% if not forloop.last %}, {% endif %} - {% endfor %} - </li> - <li> - {% trans "Kind" %}: - {% for tag in categories.kind %} - <a href="{{ tag.get_absolute_url }}">{{ tag }}</a>{% if not forloop.last %}, {% endif %} - {% endfor %} - </li> - </ul> - <h2>{% trans "Other resources" %}</h2> - <ul> - {% if picture.info.source_url %} - <li><a href="{{ picture.info.source_url }}">{% trans "Source of the image" %}</a></li> - {% endif %} - {% if picture.info.about and not hide_about %} - <li><a href="{{ picture.info.about }}">{% trans "Image on the Editor's Platform" %}</a></li> - {% endif %} -{% comment %} - {% if book.gazeta_link %} - <li><a href="{{ book.gazeta_link }}">{% trans "Picture description on Lektury.Gazeta.pl" %}</a></li> - {% endif %} - {% if book.wiki_link %} - <li><a href="{{ book.wiki_link }}">{% trans "Book description on Wikipedia" %}</a></li> - {% endif %} -{% endcomment %} - </ul> - <p><a href="{{ picture.xml_file.url }}">{% trans "View XML source" %}</a></p> - </div> - <div id="themes-list"> - <h2>{% trans "Work's themes " %}</h2> - <ul> - {% for theme in picture_themes %} - <li><a href="{{ theme.get_absolute_url }}">{{ theme }} ({{ theme.count }})</a></li> - {% endfor %} - </ul> - </div> - <div class="clearboth"></div> - </div> -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/picture_list.html b/apps/catalogue/templates/catalogue/picture_list.html deleted file mode 100644 index ce61ec48b..000000000 --- a/apps/catalogue/templates/catalogue/picture_list.html +++ /dev/null @@ -1,32 +0,0 @@ -{% extends "catalogue/book_list.html" %} -{% load i18n %} -{% load catalogue_tags chunks %} -{% load thumbnail %} - -{% block bodyid %}picture-list{% endblock %} - -{% block titleextra %}{% trans "Listing of all works" %}{% endblock %} - -{% block picture_list_header %}{% trans "Listing of all works" %}{% endblock %} - - -{% block book_list %} -{% for author, group in pictures_by_author.items %} -<a name="{{ author.slug }}"/> -<div class="group"> - <h2><a href="{{ author.get_absolute_url }}">{{ author }}</a></h2> - {% for picture in group %} - <div class="picture"> - {% thumbnail picture.image_file "300x300" as im %} - <img style="float: left; margin:{{ im|margin:"300x300" }}" src="{{ im.url }}" width="{{ im.x }}" height="{{ im.y }}" /> - {% endthumbnail %} - <span class="title"><a href="{{picture.get_absolute_url}}">{{picture.title}}</a></span> - <br class="clearboth"/> - </div> - {% endfor %} -</div> - -{% endfor %} - -{% endblock %} - diff --git a/apps/catalogue/templates/catalogue/player.html b/apps/catalogue/templates/catalogue/player.html deleted file mode 100755 index 701fbe850..000000000 --- a/apps/catalogue/templates/catalogue/player.html +++ /dev/null @@ -1,140 +0,0 @@ -<!DOCTYPE html> -<html> - {% load static from staticfiles %} - {% load i18n pipeline %} - {% load catalogue_tags %} - {% load thumbnail %} - <head> - <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> - <meta name="description" - content="{{ book.title }} - darmowy audiobook na wolnej licencji" /> - <title>{% trans "Wolne Lektury" %} :: - {{ book.title }} - {{ audiobook }}</title> - <link rel="icon" href="{% static "img/favicon.png" %}" type="image/png" /> - {% stylesheet "all" %} - {% stylesheet "player" %} - - </head> - <body id="{% block bodyid %}player{% endblock %}"> - - {% if book.cover_thumb %} - <img src=" - {% thumbnail book.cover_thumb "101x140" as thumb %} - {{ thumb.url }} - {% empty %} - {{ book.cover_thumb.url }} - {% endthumbnail %} - " alt="Cover" style="float: left; margin: .5em 1em 1em 1em;" /> - {% endif %} - - -<h1>{% book_title book %}</h1> - -<div class="player-info normal-text"> - <p><a target="_blank" href="{{ book.get_absolute_url }}">{% trans "Book's page" %}</a>.</p> - <p>{% trans "Download as" %} {% download_audio book False %}.</p> - - {% if book.has_daisy_file %} - <p>DAISY:</p> - <ul class="daisy-list"> - {% for media in book.get_daisy %} - <li><a href="{{ media.file.url }}">{{ media.name }}</a></li> - {% endfor %} - </ul> - {% endif %} -</div> - -<div style="clear: both"></div> - -<div class="jp-type-playlist"> - <div id="jplayer" class="jp-jplayer" - data-supplied="{% if have_oggs %}oga,{% endif %}mp3"></div> - <div id="jp_container_1" class="jp-audio"> - <div class="jp-type-single"> - <div class="jp-gui jp-interface"> - <ul class="jp-controls"> - <li><a href="javascript:;" class="jp-play" tabindex="1">play</a></li> - <li><a href="javascript:;" class="jp-pause" tabindex="1">pause</a></li> - <li><a href="javascript:;" class="jp-stop" tabindex="1">stop</a></li> - <li><a href="javascript:;" class="jp-mute" tabindex="1" title="mute">mute</a></li> - <li><a href="javascript:;" class="jp-unmute" tabindex="1" title="unmute">unmute</a></li> - <li><a href="javascript:;" class="jp-volume-max" tabindex="1" title="max volume">max volume</a></li> - </ul> - <div class="jp-progress"> - <div class="jp-seek-bar"> - <div class="jp-play-bar"></div> - </div> - </div> - <div class="jp-volume-bar"> - <div class="jp-volume-bar-value"></div> - </div> - <div class="jp-time-holder"> - <div class="jp-current-time"></div> - <div class="jp-duration"></div> - </div> - </div> - - <div class="jp-playlist"> - <ul> - - {% for i in audiobooks %} - <li> - <span class='jp-free-media'> - (<a class='mp3' href='{{ i.mp3.file.url }}'>mp3</a>{% if i.ogg %} - | <a class='ogg' href='{{ i.ogg.file.url }}'>ogg</a>{% endif %}) - </span> - <div class='play'>{{ i.mp3.name }} - <div class='extra-info'> - {% trans "Artist" %}: <span class='artist'>{{ i.mp3.extra_info.artist_name }}</span>, - {% trans "Director" %}: <span class='director'>{{ i.mp3.extra_info.director_name }}</span> - </div> - </div> - </li> - {% endfor %} - - </ul> - </div> - - <div class="jp-no-solution"> - <span>Update Required</span> - To play the media you will need to either update your browser to a recent version or update your <a href="http://get.adobe.com/flashplayer/" target="_blank">Flash plugin</a>. - </div> - </div> - </div> -</div> - - - {% if projects|length > 1 %} - <p>{% trans "Audiobooks were prepared as a part of the projects:" %}</p> - <ul> - {% for cs, fb in projects %} - <li> - {% if fb %} - {% blocktrans %}{{ cs }}, funded by {{ fb }}{% endblocktrans %} - {% else %} - {{ cs }} - {% endif %} - </li> - {% endfor %} - </ul> - {% else %} - <p> - {% with projects.0.0 as cs %} - {% with projects.0.1 as fb %} - {% if fb %} - {% blocktrans %}Audiobooks were prepared as a part of the {{ cs }} project funded by {{ fb }}.{% endblocktrans %} - {% else %} - {% blocktrans %}Audiobooks were prepared as a part of the {{ cs }} project.{% endblocktrans %} - {% endif %} - {% endwith %} - {% endwith %} - </p> - {% endif %} - - - <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> - {% javascript "player" %} - - {{ piwik_tag|safe }} - </body> -</html> diff --git a/apps/catalogue/templates/catalogue/recent_audiobooks_list.html b/apps/catalogue/templates/catalogue/recent_audiobooks_list.html deleted file mode 100755 index 762cb80d7..000000000 --- a/apps/catalogue/templates/catalogue/recent_audiobooks_list.html +++ /dev/null @@ -1,15 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} - -{% block titleextra %}{% trans "Recent audiobooks" %}{% endblock %} - -{% block bodyid %}recent-list{% endblock %} - -{% block body %} - <h1>{% trans "Recent audiobooks" %}</h1> - - <div id="books-list"> - {% work_list object_list %} - </div> -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/recent_daisy_list.html b/apps/catalogue/templates/catalogue/recent_daisy_list.html deleted file mode 100755 index 6675af206..000000000 --- a/apps/catalogue/templates/catalogue/recent_daisy_list.html +++ /dev/null @@ -1,15 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} - -{% block titleextra %}{% trans "Recent DAISY files" %}{% endblock %} - -{% block bodyid %}recent-list{% endblock %} - -{% block body %} - <h1>{% trans "Recent DAISY files" %}</h1> - - <div id="books-list"> - {% work_list object_list %} - </div> -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/recent_list.html b/apps/catalogue/templates/catalogue/recent_list.html deleted file mode 100755 index 28a96b831..000000000 --- a/apps/catalogue/templates/catalogue/recent_list.html +++ /dev/null @@ -1,22 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} - -{% block titleextra %}{% trans "Recent publications" %}{% endblock %} - -{% block bodyid %}recent-list{% endblock %} - -{% block body %} - <h1>{% trans "Recent publications" %}</h1> - - {% url 'recent_audiobooks_list' as a %} - {% url 'recent_daisy_list' as d %} - <p class='normal-text'> - {% blocktrans %}You can also see <a href="{{a}}">recent audiobooks</a> - and <a href="{{d}}">recent DAISY files</a>.{% endblocktrans %} - </p> - - <div id="books-list"> - {% work_list object_list %} - </div> -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/related_books.html b/apps/catalogue/templates/catalogue/related_books.html deleted file mode 100755 index 6407d5a04..000000000 --- a/apps/catalogue/templates/catalogue/related_books.html +++ /dev/null @@ -1,25 +0,0 @@ -{% spaceless %} -{% load catalogue_random_book from catalogue_tags %} -{% load picture_random_picture from picture_tags %} -{% load ssi_include from ssify %} - -{% for pic in pics %} - {% ssi_include 'picture_mini' pk=pic.pk %} -{% endfor %} - -{% for book in books %} - {% ssi_include 'catalogue_book_mini' pk=book.pk %} -{% endfor %} - -{% if random %} - {% catalogue_random_book random_excluded_books as random_book_pk %} - {% picture_random_picture random_excluded_pics unless=random_book_pk as random_pic_pk %} - {{ random_book_pk.if }} - {% ssi_include 'catalogue_book_mini' pk=random_book_pk %} - {{ random_book_pk.endif }} - {{ random_pic_pk.if }} - {% ssi_include 'picture_mini' pk=random_pic_pk %} - {{ random_pic_pk.endif }} -{% endif %} - -{% endspaceless %} \ No newline at end of file diff --git a/apps/catalogue/templates/catalogue/search_multiple_hits.html b/apps/catalogue/templates/catalogue/search_multiple_hits.html deleted file mode 100644 index d1e1dedf7..000000000 --- a/apps/catalogue/templates/catalogue/search_multiple_hits.html +++ /dev/null @@ -1,129 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load pagination_tags %} -{% load inline_tag_list from catalogue_tags %} -{% load book_searched from search_tags %} -{% load ssi_include from ssify %} - -{% block titleextra %}{% trans "Search" %}{% endblock %} - -{% block bodyid %}tagged-object-list{% endblock %} - -{% block body %} - {% if did_you_mean %} - <span class="did_you_mean">{% trans "Did you mean" %} <a href="{% url 'search' %}?q={{did_you_mean|urlencode}}">{{did_you_mean|lower}}</a>?</span> - {% endif %} - <!-- tu pójdÄ trafienia w tagi: Autorzy - z description oraz motywy i rodzaje --> - <div class="inline-tag-lists top-tag-list"> - {% if tags.author %} - <div> - <div class="mono inline-header">{% trans "Authors" %}:</div> - <div class="inline-body"> - {% inline_tag_list tags.author %} - </div> - </div> - {% endif %} - {% if tags.kind %} - <div> - <div class="mono inline-header">{% trans "Kinds" %}:</div> - <div class="inline-body"> - {% inline_tag_list tags.kind %} - </div> - </div> - {% endif %} - {% if tags.genre %} - <div> - <div class="mono inline-header">{% trans "Genres" %}:</div> - <div class="inline-body"> - {% inline_tag_list tags.genre %} - </div> - </div> - {% endif %} - {% if tags.epoch %} - <div class="inline-tag-list"> - <div class="mono inline-header">{% trans "Epochs" %}:</div> - <div class="inline-body"> - {% inline_tag_list tags.epoch %} - </div> - </div> - {% endif %} - </div> - - {% if results.title %} - <div class="book-list-header"> - <div class="book-box-inner"> - <p>{% trans "Results by title" %}</p> - </div> - </div> - <div> - <ol class="work-list"> - {% for result in results.title %}<li class="Book-item"> - {% ssi_include 'catalogue_book_short' pk=result.book.pk %} - </li>{% endfor %} - </ol> - </div> - {% endif %} - - {% if results.author %} - <div class="book-list-header"> - <div class="book-box-inner"> - <p>{% trans "Results by authors" %}</p> - </div> - </div> - <div> - <ol class="work-list"> - {% for author in results.author %}<li class="Book-item">{% ssi_include 'catalogue_book_short' pk=author.book.pk %}</li>{% endfor %} - </ol> - </div> - {% endif %} - - {% if results.translator %} - <div class="book-list-header"> - <div class="book-box-inner"> - <p>{% trans "Results by translators" %}</p> - </div> - </div> - <div> - <ol class="work-list"> - {% for translator in results.translator %}<li class="Book-item">{% ssi_include 'catalogue_book_short' pk=translator.book.pk %}</li>{% endfor %} - </ol> - </div> - {% endif %} - - {% if results.content %} - <div class="book-list-header"> - <div class="book-box-inner"> - <p>{% trans "Results in text" %}</p> - </div> - </div> - <div> - <ol class="work-list"> - {% for result in results.content %} - <li class="Book-item"> - {% book_searched result %} - </li> - {% endfor %} - </ol> - </div> - {% endif %} - - {% if results.other %} - <div class="book-list-header"> - <div class="book-box-inner"> - <p>{% trans "Other results" %}</p> - </div> - </div> - <div> - <ol class="work-list"> - {% for result in results.other %} - <li class="Book-item"> - {% book_searched result %} - </li> - {% endfor %} - </ol> - </div> - {% endif %} - - - -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/search_no_hits.html b/apps/catalogue/templates/catalogue/search_no_hits.html deleted file mode 100644 index a2c9a63a7..000000000 --- a/apps/catalogue/templates/catalogue/search_no_hits.html +++ /dev/null @@ -1,30 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags pagination_tags %} - -{% block titleextra %}{% trans "Search" %}{% endblock %} - -{% block bodyid %}tagged-object-list{% endblock %} - -{% block body %} - <h1>{% trans "Search" %}</h1> - - <div class="left-column"> - <div class="normal-text"> - <p> - {% if did_you_mean %} - <span class="did_you_mean">{% trans "Did you mean" %} <a href="{% url 'search' %}?q={{did_you_mean|urlencode}}">{{did_you_mean|lower}}</a>?</span> - {% endif %} - </p> - <p>{% trans "Sorry! Search cirteria did not match any resources." %}</p> - - <p>{% blocktrans %}Search engine supports following criteria: title, author, theme/topic, epoch, kind and genre. - As for now we do not support full text search.{% endblocktrans %}</p> - {% include "info/join_us.html" %} - </div> - </div> - - <div class="right-column"> - {% include "publishing_suggest.html" %} - </div> -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/search_too_short.html b/apps/catalogue/templates/catalogue/search_too_short.html deleted file mode 100644 index 62d0ad022..000000000 --- a/apps/catalogue/templates/catalogue/search_too_short.html +++ /dev/null @@ -1,17 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags pagination_tags %} - -{% block titleextra %}{% trans "Search" %}{% endblock %} - -{% block bodyid %}tagged-object-list{% endblock %} - -{% block body %} - <h1>{% trans "Search" %}</h1> - - <div id="books-list"> - <p>{% trans "Sorry! Search query must have at least two characters." %}</p> - {% include "info/join_us.html" %} - </div> - -{% endblock %} \ No newline at end of file diff --git a/apps/catalogue/templates/catalogue/snippets/audiobook_list.html b/apps/catalogue/templates/catalogue/snippets/audiobook_list.html deleted file mode 100755 index d7f599274..000000000 --- a/apps/catalogue/templates/catalogue/snippets/audiobook_list.html +++ /dev/null @@ -1,12 +0,0 @@ -{% load catalogue_tags %} - -{% audiobook_tree orphans books_by_parent %} -{% for author, group in books_by_author.items %} - {% if group %} - <a name="{{ author.slug }}"></a> - <div class="group"> - <h2><a href="{{ author.get_absolute_url }}">{{ author }}</a></h2> - {% audiobook_tree group books_by_parent %} - </div> - {% endif %} -{% endfor %} diff --git a/apps/catalogue/templates/catalogue/snippets/book_list.html b/apps/catalogue/templates/catalogue/snippets/book_list.html deleted file mode 100755 index 526dcbbcc..000000000 --- a/apps/catalogue/templates/catalogue/snippets/book_list.html +++ /dev/null @@ -1,12 +0,0 @@ -{% load catalogue_tags %} - -{% book_tree orphans books_by_parent %} -{% for author, group in books_by_author.items %} - {% if group %} - <a name="{{ author.slug }}"></a> - <div class="group"> - <h2><a href="{{ author.get_absolute_url }}">{{ author }}</a></h2> - {% book_tree group books_by_parent %} - </div> - {% endif %} -{% endfor %} diff --git a/apps/catalogue/templates/catalogue/snippets/book_list_nav.html b/apps/catalogue/templates/catalogue/snippets/book_list_nav.html deleted file mode 100755 index 258824df3..000000000 --- a/apps/catalogue/templates/catalogue/snippets/book_list_nav.html +++ /dev/null @@ -1,10 +0,0 @@ -{% for index, authors in books_nav.items %} - <ul> - <li><a class="book-list-index" href="#">{{ index|upper }}</a></li> - <ul class="book-list-show-index"> - {% for author in authors %} - <li><a href="#{{ author.slug }}">{{ author }}</a></li> - {% endfor %} - </ul> - </ul> -{% endfor %} diff --git a/apps/catalogue/templates/catalogue/snippets/custom_pdf_link_li.html b/apps/catalogue/templates/catalogue/snippets/custom_pdf_link_li.html deleted file mode 100644 index 353ad8bdf..000000000 --- a/apps/catalogue/templates/catalogue/snippets/custom_pdf_link_li.html +++ /dev/null @@ -1,7 +0,0 @@ -{% load i18n %} -{% if not NO_CUSTOM_PDF %} -<li> - <a href="{% url 'custom_pdf_form' book.slug %}" id="custom-pdf" - class="ajaxable">{% trans "Download a custom PDF" %}</a> -</li> -{% endif %} diff --git a/apps/catalogue/templates/catalogue/snippets/license_icon.html b/apps/catalogue/templates/catalogue/snippets/license_icon.html deleted file mode 100755 index 732e3bf92..000000000 --- a/apps/catalogue/templates/catalogue/snippets/license_icon.html +++ /dev/null @@ -1,10 +0,0 @@ -{% load i18n %} -{% load static from staticfiles %} - -{% if license_url %} -<a class="license-icon" href="{{ license_url }}" - title="{% trans "Free license" %}: {{ license_description }}"> - <img src="{% static icon %}" - alt="{% trans "Free license" %}: {{ license_description }}" /> -</a> -{% endif %} diff --git a/apps/catalogue/templates/catalogue/tag_list.html b/apps/catalogue/templates/catalogue/tag_list.html deleted file mode 100644 index e0fecc020..000000000 --- a/apps/catalogue/templates/catalogue/tag_list.html +++ /dev/null @@ -1,21 +0,0 @@ -{% spaceless %} - -{% load i18n %} -{% load catalogue_tags %} -{% if one_tag %} - <p>{% trans "See full category" %} <a href="{% catalogue_url one_tag %}">{{ one_tag }}</a></p> -{% else %} - <ul> - {% if choices %} - {% for tag in tags %} - <li><a href="{% catalogue_url choices tag %}">{{ tag }}{% if tag.count %} ({{ tag.count }}){% endif %}</a></li> - {% endfor %} - {% else %} - {% for tag in tags %} - <li><a href="{{ tag.get_absolute_url }}">{{ tag }}{% if tag.count %} ({{ tag.count }}){% endif %}</a></li> - {% endfor %} - {% endif %} - </ul> -{% endif %} - -{% endspaceless %} \ No newline at end of file diff --git a/apps/catalogue/templates/catalogue/tag_list_split.html b/apps/catalogue/templates/catalogue/tag_list_split.html deleted file mode 100644 index cb7ab26ec..000000000 --- a/apps/catalogue/templates/catalogue/tag_list_split.html +++ /dev/null @@ -1,10 +0,0 @@ -{% load i18n %} -{% if books %} -<p>{% trans "Literature" %}:</p> -<div>{{books|safe}}</div> -{% endif %} - -{% if pictures %} -<p>{% trans "Gallery" %}:</p> -<div>{{pictures|safe}}</div> -{% endif %} diff --git a/apps/catalogue/templates/catalogue/tagged_object_list.html b/apps/catalogue/templates/catalogue/tagged_object_list.html deleted file mode 100644 index 3df560a6f..000000000 --- a/apps/catalogue/templates/catalogue/tagged_object_list.html +++ /dev/null @@ -1,167 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags switch_tag social_tags %} -{% load ssi_include from ssify %} - -{% block titleextra %}{% title_from_tags tags %}{% endblock %} - -{% block bodyid %}tagged-object-list{% endblock %} - -{% block body %} -<div class="left-column"> - <div class="page-desc"> - <h1>{% html_title_from_tags tags %}</h1> - - {% with tags|last as last_tag %} - {% if last_tag.has_description %} - <div id="description" class="normal-text"> - <div id='description-long' style="display:none">{{ last_tag.description|safe }}</div> - <div id='description-short'>{{ last_tag.description|safe|truncatewords_html:40 }}</div> - </div> - {% endif %} - - <div class="clearboth"></div> - <div class="inline-tag-lists"> - {% if categories.author %} - <div> - <div class="mono inline-header">{% trans "Authors" %}:</div> - <div class="inline-body"> - {% inline_tag_list categories.author tags %} - </div> - </div> - {% endif %} - {% if categories.kind %} - <div> - <div class="mono inline-header">{% trans "Kinds" %}:</div> - <div class="inline-body"> - {% inline_tag_list categories.kind tags %} - </div> - </div> - {% endif %} - {% if categories.genre %} - <div> - <div class="mono inline-header">{% trans "Genres" %}:</div> - <div class="inline-body"> - {% inline_tag_list categories.genre tags %} - </div> - </div> - {% endif %} - {% if categories.epoch %} - <div class="inline-tag-list"> - <div class="mono inline-header">{% trans "Epochs" %}:</div> - <div class="inline-body"> - {% inline_tag_list categories.epoch tags %} - </div> - </div> - {% endif %} - - {% if categories.theme %} - <div class="hidden-box-wrapper"> - <p><a href="#" class="hidden-box-trigger theme-list-link mono"> - {% trans "Motifs and themes" %}</a></p> - <div class="hidden-box"> - {% tag_list categories.theme tags %} - </div> - </div> - {% endif %} - </div> - - <div class="clearboth"></div> - - - {% if theme_is_set %} - <div class="see-also"> - {% if last_tag.gazeta_link or last_tag.wiki_link %} - <h2 class='mono'>{% trans "See also" %}:</h2> - <ul> - {% if last_tag.culturepl_link %} - <li><a href="{{ last_tag.gazeta_link }}"> - {% trans "in Culture.pl" %} - </a></li> - {% endif %} - {% if last_tag.gazeta_link %} - <li><a href="{{ last_tag.gazeta_link }}"> - {% trans "in Lektury.Gazeta.pl" %} - </a></li> - {% endif %} - {% if last_tag.wiki_link %} - <li><a href="{{ last_tag.wiki_link }}"> - {% trans "in Wikipedia" %} - </a></li> - {% endif %} - </ul> - {% endif %} - </div> - {% endif %} - - - </div> - </div> - - - <div class="right-column"> - {% if theme_is_set %} - {% work_list object_list %} - {% else %} - - {% choose_cite tag_ids=tag_ids as cite_promo_pk %} - {% choose_fragment tag_ids=tag_ids unless=cite_promo_pk as fragment_promo_pk %} - {{ cite_promo_pk.if }} - {% ssi_include 'social_cite' pk=cite_promo_pk %} - {{ cite_promo_pk.endif }} - {{ fragment_promo_pk.if }} - {% ssi_include 'catalogue_fragment_promo' pk=fragment_promo_pk %} - {{ fragment_promo_pk.endif }} - - <div class="see-also"> - {% if last_tag.gazeta_link or last_tag.wiki_link %} - <h2 class='mono'>{% trans "See also" %}:</h2> - <ul> - {% if last_tag.gazeta_link %} - <li><a href="{{ last_tag.gazeta_link }}"> - {% trans "in Lektury.Gazeta.pl" %} - </a></li> - {% endif %} - {% if last_tag.wiki_link %} - <li><a href="{{ last_tag.wiki_link }}"> - {% trans "in Wikipedia" %} - </a></li> - {% endif %} - {% if last_tag.culturepl_link %} - <li><a href="{{ last_tag.culturepl_link }}"> - {% trans "in Culture.pl" %} - </a></li> - {% endif %} - </ul> - {% endif %} - </div> - - <div class="download"> - {% comment %} - <h2 class='mono'>{% trans "Download" %}:</h2> - <ul> - <li><a href="">wszystko</a></li> - <li><a href="">czÄÅÄ</a></li> - </ul> - {% endcomment %} - </div> - {% endif %} - - </div> - - <div class="clearboth"></div> - - - - {% if not theme_is_set %} - <div id="books-list"> - {% if object_list %} - {% work_list object_list %} - {% else %} - {% trans "Sorry! Search cirteria did not match any resources." %} - {% include "info/join_us.html" %} - {% endif %} - </div> - {% endif %} - {% endwith %} -{% endblock %} diff --git a/apps/catalogue/templates/catalogue/viewer_base.html b/apps/catalogue/templates/catalogue/viewer_base.html deleted file mode 100644 index 416b9defe..000000000 --- a/apps/catalogue/templates/catalogue/viewer_base.html +++ /dev/null @@ -1,74 +0,0 @@ -<!DOCTYPE html> -{% load i18n %} -{% load static from staticfiles %} -{% load pipeline %} -<html class="no-js"> - <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> - <title>{% block title %}{% endblock %} :: {% trans "Wolne Lektury" %}</title> - <link rel="icon" href="{% static "img/favicon.png" %}" type="image/x-icon" /> - {% stylesheet "book_text" %} - {% block extrahead %}{% endblock %} - - </head> - <body id="{% block body-id %}reader{% endblock %}"> - <nav id="no-menu"><ul> - <li><a href="#" id="menu-toggle-on"></a></li> - {% block no-menu-extra %}{% endblock %} - </ul></nav> - - <nav id="menu"><ul> - <li><a href="#" id="menu-toggle-off"></a></li> - - <li><a href="/"> - <img src="{% static 'img/logo-neon.png' %}" width="80" - alt="Wolne Lektury" - title="Wolne Lektury"> - </a></li> - - {% block menu %} - {% endblock menu %} - - </ul></nav> - - {% block big-pane %} - <div id="big-pane"> - - {% block main %} - <article id="main-text"> - {% block main-text %}{% endblock %} - </article> - {% endblock main %} - {% endblock big-pane %} - - - <footer> - {% block footer %}{% endblock %} - - <div id="box-underlay"></div> - - {# template #} - <div id="ajaxable-window" class='dialog-window'> - <div class="header"><a href="#" class="jqmClose">{% trans "Close" %}</a></div> - <div class="target"> - <p><img src="{% static "img/indicator.gif" %}" alt="*"/> {% trans "Loading" %}</p> - </div> - </div> - </footer> - - </div> - - <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> - {% block js-dependencies %}{% endblock %} - <script type="text/javascript"> - var LANGUAGE_CODE = "{{ LANGUAGE_CODE }}"; - var STATIC_URL = "{{ STATIC_URL }}"; - </script> - {% javascript "book_text" %} - - {{ piwik_tag|safe }} - {% block extrabody %}{% endblock %} - <script src="{% static "js/contrib/modernizr.custom.19652.js" %}"></script> - </body> -</html> diff --git a/apps/catalogue/templates/catalogue/work-list.html b/apps/catalogue/templates/catalogue/work-list.html deleted file mode 100755 index 30265255a..000000000 --- a/apps/catalogue/templates/catalogue/work-list.html +++ /dev/null @@ -1,19 +0,0 @@ -{% spaceless %} - -{% load pagination_tags %} -{% load class_name from catalogue_tags %} -{% load ssi_include from ssify %} - -{% autopaginate object_list 10 %} - -<ol class='work-list'> -{% for item in object_list %} - <li class='{{ item|class_name }}-item'> - {% ssi_include item.short_html_url_name pk=item.pk %} - </li> -{% endfor %} -</ol> - -{% paginate %} - -{% endspaceless %} diff --git a/apps/catalogue/templatetags/__init__.py b/apps/catalogue/templatetags/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/catalogue/templatetags/catalogue_tags.py b/apps/catalogue/templatetags/catalogue_tags.py deleted file mode 100644 index 6e81caec2..000000000 --- a/apps/catalogue/templatetags/catalogue_tags.py +++ /dev/null @@ -1,445 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from random import randint, random -from urlparse import urlparse - -from django.conf import settings -from django import template -from django.template import Node, Variable, Template, Context -from django.core.urlresolvers import reverse -from django.contrib.auth.forms import UserCreationForm, AuthenticationForm -from django.utils.cache import add_never_cache_headers -from django.utils.translation import ugettext as _ - -from ssify import ssi_variable -from catalogue.models import Book, BookMedia, Fragment, Tag, Source -from catalogue.constants import LICENSES -from picture.models import Picture - -register = template.Library() - - -class RegistrationForm(UserCreationForm): - def as_ul(self): - "Returns this form rendered as HTML <li>s -- excluding the <ul></ul>." - return self._html_output(u'<li>%(errors)s%(label)s %(field)s<span class="help-text">%(help_text)s</span></li>', u'<li>%s</li>', '</li>', u' %s', False) - - -class LoginForm(AuthenticationForm): - def as_ul(self): - "Returns this form rendered as HTML <li>s -- excluding the <ul></ul>." - return self._html_output(u'<li>%(errors)s%(label)s %(field)s<span class="help-text">%(help_text)s</span></li>', u'<li>%s</li>', '</li>', u' %s', False) - - -def iterable(obj): - try: - iter(obj) - return True - except TypeError: - return False - - -def capfirst(text): - try: - return '%s%s' % (text[0].upper(), text[1:]) - except IndexError: - return '' - - -@register.simple_tag -def html_title_from_tags(tags): - if len(tags) < 2: - return title_from_tags(tags) - template = Template("{{ category }}: <a href='{{ tag.get_absolute_url }}'>{{ tag.name }}</a>") - return capfirst(",<br/>".join( - template.render(Context({'tag': tag, 'category': _(tag.category)})) for tag in tags)) - - -def simple_title(tags): - title = [] - for tag in tags: - title.append("%s: %s" % (_(tag.category), tag.name)) - return capfirst(', '.join(title)) - - -@register.simple_tag -def book_title(book, html_links=False): - return book.pretty_title(html_links) - - -@register.simple_tag -def book_title_html(book): - return book_title(book, html_links=True) - - -@register.simple_tag -def title_from_tags(tags): - def split_tags(tags): - result = {} - for tag in tags: - result[tag.category] = tag - return result - - # TODO: Remove this after adding flection mechanism - return simple_title(tags) - - class Flection(object): - def get_case(self, name, flection): - return name - flection = Flection() - - self = split_tags(tags) - - title = u'' - - # Specjalny przypadek oglÄ dania wszystkich lektur na danej póÅce - if len(self) == 1 and 'set' in self: - return u'PóÅka %s' % self['set'] - - # Specjalny przypadek "TwórczoÅÄ w pozytywizmie", wtedy gdy tylko epoka - # jest wybrana przez użytkownika - if 'epoch' in self and len(self) == 1: - text = u'TwórczoÅÄ w %s' % flection.get_case(unicode(self['epoch']), u'miejscownik') - return capfirst(text) - - # Specjalny przypadek "Dramat w twórczoÅci Sofoklesa", wtedy gdy podane - # sÄ tylko rodzaj literacki i autor - if 'kind' in self and 'author' in self and len(self) == 2: - text = u'%s w twórczoÅci %s' % (unicode(self['kind']), - flection.get_case(unicode(self['author']), u'dopeÅniacz')) - return capfirst(text) - - # Przypadki ogólniejsze - if 'theme' in self: - title += u'Motyw %s' % unicode(self['theme']) - - if 'genre' in self: - if 'theme' in self: - title += u' w %s' % flection.get_case(unicode(self['genre']), u'miejscownik') - else: - title += unicode(self['genre']) - - if 'kind' in self or 'author' in self or 'epoch' in self: - if 'genre' in self or 'theme' in self: - if 'kind' in self: - title += u' w %s ' % flection.get_case(unicode(self['kind']), u'miejscownik') - else: - title += u' w twórczoÅci ' - else: - title += u'%s ' % unicode(self.get('kind', u'twórczoÅÄ')) - - if 'author' in self: - title += flection.get_case(unicode(self['author']), u'dopeÅniacz') - elif 'epoch' in self: - title += flection.get_case(unicode(self['epoch']), u'dopeÅniacz') - - return capfirst(title) - - -@register.simple_tag -def book_tree(book_list, books_by_parent): - text = "".join("<li><a href='%s'>%s</a>%s</li>" % ( - book.get_absolute_url(), book.title, book_tree(books_by_parent.get(book, ()), books_by_parent) - ) for book in book_list) - - if text: - return "<ol>%s</ol>" % text - else: - return '' - -@register.simple_tag -def audiobook_tree(book_list, books_by_parent): - text = "".join("<li><a class='open-player' href='%s'>%s</a>%s</li>" % ( - reverse("book_player", args=[book.slug]), book.title, audiobook_tree(books_by_parent.get(book, ()), books_by_parent) - ) for book in book_list) - - if text: - return "<ol>%s</ol>" % text - else: - return '' - -@register.simple_tag -def book_tree_texml(book_list, books_by_parent, depth=1): - return "".join(""" - <cmd name='hspace'><parm>%(depth)dem</parm></cmd>%(title)s - <spec cat='align' /><cmd name="note"><parm>%(audiences)s</parm></cmd> - <spec cat='align' /><cmd name="note"><parm>%(audiobook)s</parm></cmd> - <ctrl ch='\\' /> - %(children)s - """ % { - "depth": depth, - "title": book.title, - "audiences": ", ".join(book.audiences_pl()), - "audiobook": "audiobook" if book.has_media('mp3') else "", - "children": book_tree_texml(books_by_parent.get(book.id, ()), books_by_parent, depth + 1) - } for book in book_list) - - -@register.simple_tag -def book_tree_csv(author, book_list, books_by_parent, depth=1, max_depth=3, delimeter="\t"): - def quote_if_necessary(s): - try: - s.index(delimeter) - s.replace('"', '\\"') - return '"%s"' % s - except ValueError: - return s - - return "".join("""%(author)s%(d)s%(preindent)s%(title)s%(d)s%(postindent)s%(audiences)s%(d)s%(audiobook)s -%(children)s""" % { - "d": delimeter, - "preindent": delimeter * (depth - 1), - "postindent": delimeter * (max_depth - depth), - "depth": depth, - "author": quote_if_necessary(author.name), - "title": quote_if_necessary(book.title), - "audiences": ", ".join(book.audiences_pl()), - "audiobook": "audiobook" if book.has_media('mp3') else "", - "children": book_tree_csv(author, books_by_parent.get(book.id, ()), books_by_parent, depth + 1) - } for book in book_list) - -@register.simple_tag -def all_editors(extra_info): - editors = [] - if 'editors' in extra_info: - editors += extra_info['editors'] - if 'technical_editors' in extra_info: - editors += extra_info['technical_editors'] - # support for extra_info-s from librarian<1.2 - if 'editor' in extra_info: - editors.append(extra_info['editor']) - if 'technical_editor' in extra_info: - editors.append(extra_info['technical_editor']) - return ', '.join( - ' '.join(p.strip() for p in person.rsplit(',', 1)[::-1]) - for person in sorted(set(editors))) - - -@register.simple_tag -def user_creation_form(): - return RegistrationForm(prefix='registration').as_ul() - - -@register.simple_tag -def authentication_form(): - return LoginForm(prefix='login').as_ul() - - -@register.tag -def catalogue_url(parser, token): - bits = token.split_contents() - - tags_to_add = [] - tags_to_remove = [] - for bit in bits[1:]: - if bit[0] == '-': - tags_to_remove.append(bit[1:]) - else: - tags_to_add.append(bit) - - return CatalogueURLNode(tags_to_add, tags_to_remove) - - -class CatalogueURLNode(Node): - def __init__(self, tags_to_add, tags_to_remove): - self.tags_to_add = [Variable(tag) for tag in tags_to_add] - self.tags_to_remove = [Variable(tag) for tag in tags_to_remove] - - def render(self, context): - tags_to_add = [] - tags_to_remove = [] - - for tag_variable in self.tags_to_add: - tag = tag_variable.resolve(context) - if isinstance(tag, (list, dict)): - tags_to_add += [t for t in tag] - else: - tags_to_add.append(tag) - - for tag_variable in self.tags_to_remove: - tag = tag_variable.resolve(context) - if iterable(tag): - tags_to_remove += [t for t in tag] - else: - tags_to_remove.append(tag) - - tag_slugs = [tag.url_chunk for tag in tags_to_add] - for tag in tags_to_remove: - try: - tag_slugs.remove(tag.url_chunk) - except KeyError: - pass - - if len(tag_slugs) > 0: - return reverse('tagged_object_list', kwargs={'tags': '/'.join(tag_slugs)}) - else: - return reverse('main_page') - - -@register.inclusion_tag('catalogue/tag_list.html') -def tag_list(tags, choices=None): - if choices is None: - choices = [] - if len(tags) == 1 and tags[0].category not in [t.category for t in choices]: - one_tag = tags[0] - return locals() - - -@register.inclusion_tag('catalogue/inline_tag_list.html') -def inline_tag_list(tags, choices=None): - return tag_list(tags, choices) - - -@register.inclusion_tag('catalogue/collection_list.html') -def collection_list(collections): - return locals() - - -@register.inclusion_tag('catalogue/book_info.html') -def book_info(book): - return { - 'is_picture': isinstance(book, Picture), - 'book': book, - } - - -@register.inclusion_tag('catalogue/work-list.html', takes_context=True) -def work_list(context, object_list): - request = context.get('request') - return locals() - - -# TODO: These are no longer just books. -@register.inclusion_tag('catalogue/related_books.html', takes_context=True) -def related_books(context, instance, limit=6, random=1, taken=0): - limit = limit - taken - max_books = limit - random - is_picture = isinstance(instance, Picture) - - pics_qs = Picture.objects.all() - if is_picture: - pics_qs = pics_qs.exclude(pk=instance.pk) - pics = Picture.tagged.related_to(instance, pics_qs) - if pics.exists(): - # Reserve one spot for an image. - max_books -= 1 - - books_qs = Book.objects.all() - if not is_picture: - books_qs = books_qs.exclude(common_slug=instance.common_slug).exclude(ancestor=instance) - books = Book.tagged.related_to(instance, books_qs)[:max_books] - - pics = pics[:1 + max_books - books.count()] - - random_excluded_books = [b.pk for b in books] - random_excluded_pics = [p.pk for p in pics] - (random_excluded_pics if is_picture else random_excluded_books).append(instance.pk) - - return { - 'request': context['request'], - 'books': books, - 'pics': pics, - 'random': random, - 'random_excluded_books': random_excluded_books, - 'random_excluded_pics': random_excluded_pics, - } - - -@register.inclusion_tag('catalogue/menu.html') -def catalogue_menu(): - return {'categories': [ - ('author', _('Authors'), 'autorzy'), - ('genre', _('Genres'), 'gatunki'), - ('kind', _('Kinds'), 'rodzaje'), - ('epoch', _('Epochs'), 'epoki'), - ('theme', _('Themes'), 'motywy'), - ]} - - -@register.simple_tag -def download_audio(book, daisy=True): - links = [] - if book.has_media('mp3'): - links.append("<a href='%s'>%s</a>" % - (reverse('download_zip_mp3', args=[book.slug]), - BookMedia.formats['mp3'].name)) - if book.has_media('ogg'): - links.append("<a href='%s'>%s</a>" % - (reverse('download_zip_ogg', args=[book.slug]), - BookMedia.formats['ogg'].name)) - if daisy and book.has_media('daisy'): - for dsy in book.get_media('daisy'): - links.append("<a href='%s'>%s</a>" % - (dsy.file.url, BookMedia.formats['daisy'].name)) - return ", ".join(links) - - -@register.inclusion_tag("catalogue/snippets/custom_pdf_link_li.html") -def custom_pdf_link_li(book): - return { - 'book': book, - 'NO_CUSTOM_PDF': settings.NO_CUSTOM_PDF, - } - - -@register.inclusion_tag("catalogue/snippets/license_icon.html") -def license_icon(license_url): - """Creates a license icon, if the license_url is known.""" - known = LICENSES.get(license_url) - if known is None: - return {} - return { - "license_url": license_url, - "icon": "img/licenses/%s.png" % known['icon'], - "license_description": known['description'], - } - - -@register.filter -def class_name(obj): - return obj.__class__.__name__ - - -@register.simple_tag -def source_name(url): - url = url.lstrip() - netloc = urlparse(url).netloc - if not netloc: - netloc = urlparse('http://' + url).netloc - if not netloc: - return '' - source, created = Source.objects.get_or_create(netloc=netloc) - return source.name or netloc - - -@ssi_variable(register, patch_response=[add_never_cache_headers]) -def catalogue_random_book(request, exclude_ids): - from .. import app_settings - if random() < app_settings.RELATED_RANDOM_PICTURE_CHANCE: - return None - queryset = Book.objects.exclude(pk__in=exclude_ids) - count = queryset.count() - if count: - return queryset[randint(0, count - 1)].pk - else: - return None - - -@ssi_variable(register, patch_response=[add_never_cache_headers]) -def choose_fragment(request, book_id=None, tag_ids=None, unless=False): - if unless: - return None - - if book_id is not None: - fragment = Book.objects.get(pk=book_id).choose_fragment() - else: - if tag_ids is not None: - tags = Tag.objects.filter(pk__in=tag_ids) - fragments = Fragment.tagged.with_all(tags).order_by().only('id') - else: - fragments = Fragment.objects.all().order_by().only('id') - fragment_count = fragments.count() - fragment = fragments[randint(0, fragment_count - 1)] if fragment_count else None - return fragment.pk if fragment is not None else None diff --git a/apps/catalogue/test_utils.py b/apps/catalogue/test_utils.py deleted file mode 100644 index 9d87311dd..000000000 --- a/apps/catalogue/test_utils.py +++ /dev/null @@ -1,93 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from os.path import abspath, dirname, join -import tempfile -from traceback import extract_stack -from django.test import TestCase -from django.test.utils import override_settings -from fnpdjango.utils.text.slughifi import slughifi -from librarian import WLURI -from django.conf import settings - - -@override_settings( - MEDIA_ROOT=tempfile.mkdtemp(prefix='djangotest_'), - CATALOGUE_DONT_BUILD=set(['pdf', 'mobi', 'epub', 'txt', 'fb2', 'cover']), - NO_SEARCH_INDEX=True, - CELERY_ALWAYS_EAGER=True, - CACHES={ - 'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}, - }, - SOLR=settings.SOLR_TEST, - SSIFY_RENDER=False, -) -class WLTestCase(TestCase): - """ - Generic base class for tests. Adds settings freeze and clears MEDIA_ROOT. - """ - longMessage = True - - -class PersonStub(object): - - def __init__(self, first_names, last_name): - self.first_names = first_names - self.last_name = last_name - - def readable(self): - return " ".join(self.first_names + (self.last_name,)) - - -class BookInfoStub(object): - _empty_fields = ['cover_url', 'variant_of'] - # allow single definition for multiple-value fields - _salias = { - 'authors': 'author', - } - - def __init__(self, **kwargs): - self.__dict = kwargs - - def __setattr__(self, key, value): - if not key.startswith('_'): - self.__dict[key] = value - return object.__setattr__(self, key, value) - - def __getattr__(self, key): - try: - return self.__dict[key] - except KeyError: - if key in self._empty_fields: - return None - elif key in self._salias: - return [getattr(self, self._salias[key])] - else: - raise - - def to_dict(self): - return dict((key, unicode(value)) for key, value in self.__dict.items()) - - -def info_args(title, language=None): - """ generate some keywords for comfortable BookInfoCreation """ - slug = unicode(slughifi(title)) - if language is None: - language = u'pol' - return { - 'title': unicode(title), - 'url': WLURI.from_slug(slug), - 'about': u"http://wolnelektury.pl/example/URI/%s" % slug, - 'language': language, - } - - -def get_fixture(path, app=None): - if app is not None: - mod_path = app.__file__ - f_path = join(dirname(abspath(mod_path)), 'tests/files', path) - else: - mod_path = extract_stack(limit=2)[0][0] - f_path = join(dirname(abspath(mod_path)), 'files', path) - return f_path diff --git a/apps/catalogue/tests/__init__.py b/apps/catalogue/tests/__init__.py deleted file mode 100644 index 9c41af207..000000000 --- a/apps/catalogue/tests/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from catalogue.tests.book_import import * -from catalogue.tests.bookmedia import * -from catalogue.tests.cover import * -from catalogue.tests.search import * -from catalogue.tests.tags import * -from catalogue.tests.templatetags import * -from .visit import * diff --git a/apps/catalogue/tests/book_import.py b/apps/catalogue/tests/book_import.py deleted file mode 100644 index 775fc2929..000000000 --- a/apps/catalogue/tests/book_import.py +++ /dev/null @@ -1,450 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings - -from django.core.files.base import ContentFile -from catalogue.test_utils import * -from catalogue import models -from librarian import WLURI - -from nose.tools import raises -from os import path, makedirs - -class BookImportLogicTests(WLTestCase): - - def setUp(self): - WLTestCase.setUp(self) - self.book_info = BookInfoStub( - url=WLURI.from_slug(u"default-book"), - about=u"http://wolnelektury.pl/example/URI/default_book", - title=u"Default Book", - author=PersonStub(("Jim",), "Lazy"), - kind="X-Kind", - genre="X-Genre", - epoch="X-Epoch", - language=u"pol", - ) - - self.expected_tags = [ - ('author', 'jim-lazy'), - ('genre', 'x-genre'), - ('epoch', 'x-epoch'), - ('kind', 'x-kind'), - ] - self.expected_tags.sort() - - def test_empty_book(self): - BOOK_TEXT = "<utwor />" - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - - self.assertEqual(book.title, "Default Book") - self.assertEqual(book.slug, "default-book") - self.assert_(book.parent is None) - self.assertFalse(book.has_html_file()) - - # no fragments generated - self.assertEqual(book.fragments.count(), 0) - - # TODO: this should be filled out probably... - self.assertEqual(book.wiki_link, '') - self.assertEqual(book.gazeta_link, '') - self.assertEqual(book.description, '') - - tags = [ (tag.category, tag.slug) for tag in book.tags ] - tags.sort() - - self.assertEqual(tags, self.expected_tags) - - def test_not_quite_empty_book(self): - """ Not empty, but without any real text. - - Should work like any other non-empty book. - """ - - BOOK_TEXT = """<utwor> - <liryka_l> - <nazwa_utworu>Nic</nazwa_utworu> - </liryka_l></utwor> - """ - - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - self.assertTrue(book.has_html_file()) - - def test_book_with_fragment(self): - BOOK_TEXT = """<utwor> - <opowiadanie> - <akap><begin id="m01" /><motyw id="m01">Love</motyw>Ala ma kota<end id="m01" /></akap> - </opowiadanie></utwor> - """ - - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - self.assertTrue(book.has_html_file()) - - self.assertEqual(book.fragments.count(), 1) - self.assertEqual(book.fragments.all()[0].text, u'<p class="paragraph">Ala ma kota</p>\n') - - self.assert_(('theme', 'love') in [ (tag.category, tag.slug) for tag in book.fragments.all()[0].tags ]) - - def test_book_with_empty_theme(self): - """ empty themes should be ignored """ - - BOOK_TEXT = """<utwor> - <opowiadanie> - <akap><begin id="m01" /><motyw id="m01"> , Love , , </motyw>Ala ma kota<end id="m01" /></akap> - </opowiadanie></utwor> - """ - - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - self.assert_([('theme', 'love')], - [ (tag.category, tag.slug) for tag in book.fragments.all()[0].tags.filter(category='theme') ]) - - def test_book_with_no_theme(self): - """ fragments with no themes shouldn't be created at all """ - - BOOK_TEXT = """<utwor> - <opowiadanie> - <akap><begin id="m01" /><motyw id="m01"></motyw>Ala ma kota<end id="m01" /></akap> - </opowiadanie></utwor> - """ - - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - self.assertEqual(book.fragments.count(), 0) - self.assertEqual(book.tags.filter(category='theme').count(), 0) - - @raises(ValueError) - def test_book_with_invalid_slug(self): - """ Book with invalid characters in slug shouldn't be imported """ - self.book_info.url = WLURI.from_slug(u"default_book") - BOOK_TEXT = "<utwor />" - models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - - def test_book_replace_title(self): - BOOK_TEXT = """<utwor />""" - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - self.book_info.title = u"Extraordinary" - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info, overwrite=True) - - tags = [ (tag.category, tag.slug) for tag in book.tags ] - tags.sort() - - self.assertEqual(tags, self.expected_tags) - - def test_book_replace_author(self): - BOOK_TEXT = """<utwor />""" - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - self.book_info.author = PersonStub(("Hans", "Christian"), "Andersen") - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info, overwrite=True) - - tags = [ (tag.category, tag.slug) for tag in book.tags ] - tags.sort() - - self.expected_tags.remove(('author', 'jim-lazy')) - self.expected_tags.append(('author', 'hans-christian-andersen')) - self.expected_tags.sort() - - self.assertEqual(tags, self.expected_tags) - - # the old tag shouldn't disappear - models.Tag.objects.get(slug="jim-lazy", category="author") - - def test_book_remove_fragment(self): - BOOK_TEXT = """<utwor> - <opowiadanie> - <akap> - <begin id="m01" /><motyw id="m01">Love</motyw>Ala ma kota<end id="m01" /> - <begin id="m02" /><motyw id="m02">Hatred</motyw>To kot Ali<end id="m02" /> - </akap> - </opowiadanie></utwor> - """ - BOOK_TEXT_AFTER = """<utwor> - <opowiadanie> - <akap> - <begin id="m01" /><motyw id="m01">Love</motyw>Ala ma kota<end id="m01" /> - To kot Ali - </akap> - </opowiadanie></utwor> - """ - - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - self.assertEqual(book.fragments.count(), 2) - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT_AFTER), self.book_info, overwrite=True) - self.assertEqual(book.fragments.count(), 1) - - def test_multiple_tags(self): - BOOK_TEXT = """<utwor />""" - self.book_info.authors = self.book_info.author, PersonStub(("Joe",), "Dilligent"), - self.book_info.kinds = self.book_info.kind, 'Y-Kind', - self.book_info.genres = self.book_info.genre, 'Y-Genre', - self.book_info.epochs = self.book_info.epoch, 'Y-Epoch', - - self.expected_tags.extend([ - ('author', 'joe-dilligent'), - ('genre', 'y-genre'), - ('epoch', 'y-epoch'), - ('kind', 'y-kind'), - ]) - self.expected_tags.sort() - - book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - tags = [ (tag.category, tag.slug) for tag in book.tags ] - tags.sort() - - self.assertEqual(tags, self.expected_tags) - - -class ChildImportTests(WLTestCase): - - def setUp(self): - WLTestCase.setUp(self) - self.child_info = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='X-Kind', - author=PersonStub(("Joe",), "Doe"), - **info_args("Child") - ) - - self.parent_info = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='X-Kind', - author=PersonStub(("Jim",), "Lazy"), - parts=[self.child_info.url], - **info_args("Parent") - ) - - def test_child(self): - TEXT = """<utwor />""" - child = models.Book.from_text_and_meta(ContentFile(TEXT), self.child_info) - parent = models.Book.from_text_and_meta(ContentFile(TEXT), self.parent_info) - author = parent.tags.get(category='author') - books = self.client.get(author.get_absolute_url()).context['object_list'] - self.assertEqual(len(books), 1, - "Only parent book should be visible on author's page") - - def test_child_replace(self): - PARENT_TEXT = """<utwor />""" - CHILD_TEXT = """<utwor> - <opowiadanie> - <akap><begin id="m01" /><motyw id="m01">Pies</motyw>Ala ma kota<end id="m01" /></akap> - </opowiadanie></utwor> - """ - child = models.Book.from_text_and_meta(ContentFile(CHILD_TEXT), self.child_info) - parent = models.Book.from_text_and_meta(ContentFile(PARENT_TEXT), self.parent_info) - CHILD_TEXT = """<utwor> - <opowiadanie> - <akap><begin id="m01" /><motyw id="m01">Kot</motyw>Ala ma kota<end id="m01" /></akap> - </opowiadanie></utwor> - """ - child = models.Book.from_text_and_meta(ContentFile(CHILD_TEXT), self.child_info, overwrite=True) - themes = parent.related_themes() - self.assertEqual(['Kot'], [tag.name for tag in themes], - 'wrong related theme list') - - -class TreeImportTest(WLTestCase): - def setUp(self): - WLTestCase.setUp(self) - self.child_info = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='X-Kind', - author=PersonStub(("Joe",), "Doe"), - **info_args("Child") - ) - self.CHILD_TEXT = """<utwor> - <opowiadanie> - <akap><begin id="m01" /><motyw id="m01">Pies</motyw> - Ala ma kota<end id="m01" /></akap> - </opowiadanie></utwor> - """ - self.child = models.Book.from_text_and_meta( - ContentFile(self.CHILD_TEXT), self.child_info) - - self.book_info = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='X-Kind', - author=PersonStub(("Joe",), "Doe"), - parts=[self.child_info.url], - **info_args("Book") - ) - self.BOOK_TEXT = """<utwor />""" - self.book = models.Book.from_text_and_meta( - ContentFile(self.BOOK_TEXT), self.book_info) - - self.parent_info = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='X-Kind', - author=PersonStub(("Jim",), "Lazy"), - parts=[self.book_info.url], - **info_args("Parent") - ) - self.PARENT_TEXT = """<utwor />""" - self.parent = models.Book.from_text_and_meta( - ContentFile(self.PARENT_TEXT), self.parent_info) - - def test_ok(self): - self.assertEqual( - list(self.client.get('/katalog/gatunek/x-genre/' - ).context['object_list']), - [self.parent], - u"There should be only parent on common tag page." - ) - pies = models.Tag.objects.get(slug='pies') - themes = self.parent.related_themes() - self.assertEqual(len(themes), 1, - u"There should be child theme in parent theme counter." - ) - # TODO: book_count is deprecated, update here. - #~ epoch = models.Tag.objects.get(slug='x-epoch') - #~ self.assertEqual(epoch.book_count, 1, - #~ u"There should be only parent in common tag's counter." - #~ ) - - def test_child_republish(self): - CHILD_TEXT = """<utwor> - <opowiadanie> - <akap><begin id="m01" /><motyw id="m01">Pies, Kot</motyw> - Ala ma kota<end id="m01" /></akap> - </opowiadanie></utwor> - """ - models.Book.from_text_and_meta( - ContentFile(CHILD_TEXT), self.child_info, overwrite=True) - self.assertEqual( - list(self.client.get('/katalog/gatunek/x-genre/' - ).context['object_list']), - [self.parent], - u"There should only be parent on common tag page." - ) - pies = models.Tag.objects.get(slug='pies') - kot = models.Tag.objects.get(slug='kot') - self.assertEqual(len(self.parent.related_themes()), 2, - u"There should be child themes in parent theme counter." - ) - # TODO: book_count is deprecated, update here. - #~ epoch = models.Tag.objects.get(slug='x-epoch') - #~ self.assertEqual(epoch.book_count, 1, - #~ u"There should only be parent in common tag's counter." - #~ ) - - def test_book_change_child(self): - second_child_info = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='Other-Kind', - author=PersonStub(("Joe",), "Doe"), - **info_args("Second Child") - ) - SECOND_CHILD_TEXT = """<utwor> - <opowiadanie> - <akap><begin id="m01" /><motyw id="m01">Kot</motyw> - Ala ma kota<end id="m01" /></akap> - </opowiadanie></utwor> - """ - # Import a second child. - second_child = models.Book.from_text_and_meta( - ContentFile(SECOND_CHILD_TEXT), second_child_info) - # The book has only this new child now. - self.book_info.parts = [second_child_info.url] - self.book = models.Book.from_text_and_meta( - ContentFile(self.BOOK_TEXT), self.book_info, overwrite=True) - - self.assertEqual( - set(self.client.get('/katalog/gatunek/x-genre/' - ).context['object_list']), - set([self.parent, self.child]), - u"There should be parent and old child on common tag page." - ) - kot = models.Tag.objects.get(slug='kot') - self.assertEqual(len(self.parent.related_themes()), 1, - u"There should only be new child themes in parent theme counter." - ) - epoch = models.Tag.objects.get(slug='x-epoch') - # book_count deprecated, update test. - #~ self.assertEqual(epoch.book_count, 2, - #~ u"There should be parent and old child in common tag's counter." - #~ ) - self.assertEqual( - list(self.client.get('/katalog/lektura/parent/motyw/kot/' - ).context['fragments']), - [second_child.fragments.all()[0]], - u"There should be new child's fragments on parent's theme page." - ) - self.assertEqual( - list(self.client.get('/katalog/lektura/parent/motyw/pies/' - ).context['fragments']), - [], - u"There should be no old child's fragments on parent's theme page." - ) - - -class MultilingualBookImportTest(WLTestCase): - def setUp(self): - WLTestCase.setUp(self) - common_uri = WLURI.from_slug('common-slug') - - self.pol_info = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='X-Kind', - author=PersonStub(("Joe",), "Doe"), - variant_of=common_uri, - **info_args(u"KsiÄ Å¼ka") - ) - - self.eng_info = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='X-Kind', - author=PersonStub(("Joe",), "Doe"), - variant_of=common_uri, - **info_args("A book", "eng") - ) - - def test_multilingual_import(self): - BOOK_TEXT = """<utwor><opowiadanie><akap>A</akap></opowiadanie></utwor>""" - - book1 = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.pol_info) - book2 = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.eng_info) - - self.assertEqual( - set([b.language for b in models.Book.objects.all()]), - set(['pol', 'eng']), - 'Books imported in wrong languages.' - ) - - -class BookImportGenerateTest(WLTestCase): - def setUp(self): - WLTestCase.setUp(self) - xml = path.join(path.dirname(__file__), 'files/fraszka-do-anusie.xml') - self.book = models.Book.from_xml_file(xml) - - def test_gen_pdf(self): - self.book.pdf_file.build() - book = models.Book.objects.get(pk=self.book.pk) - self.assertTrue(path.exists(book.pdf_file.path)) - - def test_gen_pdf_parent(self): - """This book contains a child.""" - xml = path.join(path.dirname(__file__), "files/fraszki.xml") - parent = models.Book.from_xml_file(xml) - parent.pdf_file.build() - parent = models.Book.objects.get(pk=parent.pk) - self.assertTrue(path.exists(parent.pdf_file.path)) - - def test_custom_pdf(self): - from catalogue.tasks import build_custom_pdf - out = 'test-custom.pdf' - absoulute_path = path.join(settings.MEDIA_ROOT, out) - - if not path.exists(path.dirname(absoulute_path)): - makedirs(path.dirname(absoulute_path)) - - build_custom_pdf(self.book.id, - customizations=['nofootnotes', '13pt', 'a4paper'], file_name=out) - self.assertTrue(path.exists(absoulute_path)) diff --git a/apps/catalogue/tests/bookmedia.py b/apps/catalogue/tests/bookmedia.py deleted file mode 100644 index 2d3cf539d..000000000 --- a/apps/catalogue/tests/bookmedia.py +++ /dev/null @@ -1,119 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from os.path import basename, exists, join, dirname -from django.core.files.base import ContentFile - -from catalogue.test_utils import * -from catalogue import models, utils - -class BookMediaTests(WLTestCase): - - def setUp(self): - WLTestCase.setUp(self) - self.file = ContentFile('X') - self.file2 = ContentFile('Y') - self.book = models.Book.objects.create(slug='test-book') - - def test_diacritics(self): - bm = models.BookMedia(book=self.book, type="ogg", - name=u"ZażóÅÄ gÄÅlÄ jaźÅ") - bm.file.save(None, self.file) - self.assertEqual(basename(bm.file.name), 'zazolc-gesla-jazn.ogg') - - def test_long_name(self): - bm = models.BookMedia(book=self.book, type="ogg", - name="Some very very very very very very very very very very very very very very very very long file name") - bm.file.save(bm.name, self.file) - - # reload to see what was really saved - bm = models.BookMedia.objects.get(pk=bm.pk) - self.assertEqual(bm.file.size, 1) - - def test_overwrite(self): - """ - File gets overwritten with same filename on update. - """ - - bm = models.BookMedia(book=self.book, type='ogg', - name="Some media") - bm.file.save(None, self.file) - bm.file.save(None, self.file2) - - self.assertEqual(bm.file.read(), 'Y') - self.assertEqual(basename(bm.file.name), 'some-media.ogg') - - def test_no_clobber(self): - """ - File save doesn't clobber some other media with similar name. - """ - - bm = models.BookMedia(book=self.book, type='ogg', - name=u"Tytul") - bm.file.save(None, self.file) - bm2 = models.BookMedia(book=self.book, type='ogg', - name=u"TytuÅ") - bm2.file.save(None, self.file2) - self.assertEqual(basename(bm.file.name), 'tytul.ogg') - self.assertNotEqual(basename(bm2.file.name), 'tytul.ogg') - self.assertEqual(bm.file.read(), 'X') - self.assertEqual(bm2.file.read(), 'Y') - - def test_change_name(self): - """ - File name reflects name change. - """ - - bm = models.BookMedia(book=self.book, type='ogg', name="Title") - bm.file.save(None, self.file) - bm.name = "Other Title" - bm.save() - self.assertEqual(basename(bm.file.name), 'other-title.ogg') - self.assertEqual(bm.file.read(), 'X') - - def test_change_name_no_clobber(self): - """ - File name after change won't clobber some other file - with similar name. - """ - - bm = models.BookMedia(book=self.book, type='ogg', name="Title") - bm.file.save(None, self.file) - bm2 = models.BookMedia(book=self.book, type='ogg', name="Other title") - bm2.file.save(None, self.file2) - bm2.name = "Title" - bm2.save() - self.assertNotEqual(basename(bm2.file.name), 'title.ogg') - self.assertEqual(bm.file.read(), 'X') - self.assertEqual(bm2.file.read(), 'Y') - - def test_zip_audiobooks(self): - paths = [ - (None, join(dirname(__file__), "files/fraszka-do-anusie.xml")), - (None, join(dirname(__file__), "files/fraszki.xml")), - ] - - url = utils.create_zip(paths, 'test-zip-slug') - self.assertEqual("zip/test-zip-slug.zip", url) - self.assertTrue(exists(join(settings.MEDIA_ROOT, url))) - - utils.remove_zip('test-zip-slug') - self.assertFalse(exists(join(settings.MEDIA_ROOT, url))) - - def test_remove_zip_on_media_change(self): - bm = models.BookMedia(book=self.book, type='ogg', name="Title") - bm.file.save(None, self.file) - bm.save() - - zip_url = self.book.zip_audiobooks('ogg') - self.assertEqual('zip/'+self.book.slug+'_ogg.zip', zip_url) - self.assertTrue(exists(join(settings.MEDIA_ROOT, zip_url))) - - bm2 = models.BookMedia(book=self.book, type='ogg', name="Other title") - bm2.file.save(None, self.file2) - bm2.name = "Title" - bm2.save() - # was the audiobook zip deleted? - self.assertFalse(exists(join(settings.MEDIA_ROOT, zip_url))) diff --git a/apps/catalogue/tests/cover.py b/apps/catalogue/tests/cover.py deleted file mode 100755 index 0e08556b4..000000000 --- a/apps/catalogue/tests/cover.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.core.files.base import ContentFile -from catalogue.test_utils import BookInfoStub, PersonStub, info_args, WLTestCase -from catalogue.models import Book -from mock import patch - - -class CoverTests(WLTestCase): - """Checks in parent_cover_changed is properly called.""" - def setUp(self): - WLTestCase.setUp(self) - self.TEXT = """<utwor />""" - self.child = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='X-Kind', - author=PersonStub(("Joe",), "Doe"), - **info_args("Child") - ) - - self.parent = BookInfoStub( - genre='X-Genre', - epoch='X-Epoch', - kind='X-Kind', - author=PersonStub(("Jim",), "Lazy"), - cover_url="http://example.com/cover.jpg", - parts=[self.child.url], - **info_args("Parent") - ) - - @patch.object(Book, 'parent_cover_changed', autospec=True) - def test_simple_import(self, parent_cover_changed): - child = Book.from_text_and_meta(ContentFile(self.TEXT), self.child) - parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent) - parent_cover_changed.assert_called_with(child) - - # Now reimport parent. - parent_cover_changed.reset_mock() - parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent, - overwrite=True) - self.assertEqual(parent_cover_changed.call_count, 0) - - # Now change cover in parent. - parent_cover_changed.reset_mock() - self.parent.cover_url = "http://example.com/other-cover.jpg" - parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent, - overwrite=True) - parent_cover_changed.assert_called_with(child) - - @patch.object(Book, 'parent_cover_changed', autospec=True) - def test_change_cover(self, parent_cover_changed): - child = Book.from_text_and_meta(ContentFile(self.TEXT), self.child) - parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent) - parent_cover_changed.assert_called_with(child) - - @patch.object(Book, 'parent_cover_changed', autospec=True) - def test_new_child(self, parent_cover_changed): - # Add parent without child first. - parts, self.parent.parts = self.parent.parts, [] - parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent) - - # Now import child and reimport parent. - child = Book.from_text_and_meta(ContentFile(self.TEXT), self.child) - self.parent.parts = parts - parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent, - overwrite=True) - parent_cover_changed.assert_called_with(child) - - # Now remove the child. - parent_cover_changed.reset_mock() - self.parent.parts = [] - parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent, - overwrite=True) - parent_cover_changed.assert_called_with(child) diff --git a/apps/catalogue/tests/files/fraszka-do-anusie.xml b/apps/catalogue/tests/files/fraszka-do-anusie.xml deleted file mode 100755 index 3bbda155e..000000000 --- a/apps/catalogue/tests/files/fraszka-do-anusie.xml +++ /dev/null @@ -1,49 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> -<utwor> - <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<rdf:Description rdf:about="http://wiki.wolnepodreczniki.pl/index.php?title=Lektury:S%C4%99p-Szarzy%C5%84ski/Rytmy/Fraszka_do_Anusie"> -<dc:creator xml:lang="pl">SÄp SzarzyÅski, MikoÅaj</dc:creator> -<dc:title xml:lang="pl">Fraszka do Anusie</dc:title> -<dc:contributor.editor xml:lang="pl">SekuÅa, Aleksandra</dc:contributor.editor> -<dc:contributor.technical_editor xml:lang="pl">Sutkowska, Olga</dc:contributor.technical_editor> -<dc:publisher xml:lang="pl">Fundacja Nowoczesna Polska</dc:publisher> -<dc:subject.period xml:lang="pl">Barok</dc:subject.period> -<dc:subject.type xml:lang="pl">Liryka</dc:subject.type> -<dc:subject.genre xml:lang="pl">Fraszka</dc:subject.genre> -<dc:description xml:lang="pl">Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez BibliotekÄ NarodowÄ z egzemplarza pochodzÄ cego ze zbiorów BN.</dc:description> -<dc:identifier.url xml:lang="pl">http://wolnelektury.pl/katalog/lektura/fraszka-do-anusie</dc:identifier.url> -<dc:source.URL xml:lang="pl">http://www.polona.pl/Content/8759</dc:source.URL> -<dc:source xml:lang="pl">SzarzyÅski SÄp, MikoÅaj (ca 1550-1581), Rytmy abo Wiersze polskie w wyborze, E. Wende, Warszawa, 1914</dc:source> -<dc:rights xml:lang="pl">Domena publiczna - MikoÅaj SÄp SzarzyÅski zm. 1581</dc:rights> -<dc:date.pd xml:lang="pl">1581</dc:date.pd> -<dc:format xml:lang="pl">xml</dc:format> -<dc:type xml:lang="pl">text</dc:type> -<dc:type xml:lang="en">text</dc:type> -<dc:date xml:lang="pl">2008-12-29</dc:date> -<dc:audience xml:lang="pl">L</dc:audience> -<dc:audience xml:lang="pl">L</dc:audience> -<dc:language xml:lang="pl">pol</dc:language> -</rdf:Description> -</rdf:RDF> - <liryka_l> - -<autor_utworu>MikoÅaj SÄp SzarzyÅski</autor_utworu> - -<nazwa_utworu>Fraszka do Anusie</nazwa_utworu> - - - -<strofa><begin id="b1230084410751"/><motyw id="m1230084410751">Kochanek, Åzy, MiÅoÅÄ, Oko, Serce, Wzrok</motyw>JeÅli oczu hamowaÄ swoich nie umiaÅy/ -LeÅnych krynic boginie, aby nie pÅakaÅy,/ -Gdy baczyÅy<pe><slowo_obce>baczyÅy</slowo_obce> --- tu: zobaczyÅy, patrzyÅy na.</pe> przy studni Narcyza piÄknego,/ -A on umarÅ prze miÅoÅÄ oblicza swojego;/ -JeÅli nieÅmiertelnym stanom żaÅoÅÄ rozkazuje,/ -Gdy niebaczna fortuna co niesÅusznie psuje:</strofa> - -<strofa>Jakoż ja mam hamowaÄ, by na lice moje/ -Z oczu smutnych żaÅoÅne nie pÅynÄÅy zdroje?/ -Jako serce powÅciÄ gaÄ, aby nie wzdychaÅo/ -I od ciÄżkiej żaÅoÅci omdlewaÄ nie miaÅo?<end id="e1230084410751"/></strofa> - -</liryka_l> -</utwor> diff --git a/apps/catalogue/tests/files/fraszki.xml b/apps/catalogue/tests/files/fraszki.xml deleted file mode 100755 index 90e7c1245..000000000 --- a/apps/catalogue/tests/files/fraszki.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> -<utwor> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<rdf:Description rdf:about=""> -<dc:creator xml:lang="pl">Kochanowski, Jan</dc:creator> -<dc:title xml:lang="pl">Fraszki</dc:title> -<dc:relation.hasPart xml:lang="pl">http://wolnelektury.pl/katalog/lektura/fraszka-do-anusie</dc:relation.hasPart> - -<dc:publisher xml:lang="pl">Fundacja Nowoczesna Polska</dc:publisher> -<dc:subject.period xml:lang="pl">Renesans</dc:subject.period> -<dc:subject.type xml:lang="pl">Liryka</dc:subject.type> -<dc:subject.genre xml:lang="pl">Fraszka</dc:subject.genre> - -<dc:description xml:lang="pl"></dc:description> -<dc:identifier.url xml:lang="pl">http://wolnelektury.pl/katalog/lektura/fraszki</dc:identifier.url> -<dc:source xml:lang="pl"></dc:source> -<dc:rights xml:lang="pl">Domena publiczna - Jan Kochanowski zm. 1584</dc:rights> -<dc:date.pd xml:lang="pl">1584</dc:date.pd> -<dc:format xml:lang="pl">xml</dc:format> -<dc:type xml:lang="pl">text</dc:type> - -<dc:type xml:lang="en">text</dc:type> -<dc:date xml:lang="pl">2008-11-12</dc:date> -<dc:language xml:lang="pl">pol</dc:language> -</rdf:Description> -</rdf:RDF> -</utwor> diff --git a/apps/catalogue/tests/search.py b/apps/catalogue/tests/search.py deleted file mode 100644 index 77afae4c3..000000000 --- a/apps/catalogue/tests/search.py +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from catalogue import models, views -from catalogue.test_utils import * - -from nose.tools import raises - -class BasicSearchLogicTests(WLTestCase): - - def setUp(self): - WLTestCase.setUp(self) - self.author_tag = models.Tag.objects.create( - name=u'Adam Mickiewicz [SubWord]', - category=u'author', slug="one") - - self.unicode_tag = models.Tag.objects.create( - name=u'Tadeusz Å»eleÅski (Boy)', - category=u'author', slug="two") - - self.polish_tag = models.Tag.objects.create( - name=u'ÄÃÄÅÅŻŹÄÅÄÃ³Ä ÅÅżźÄÅ', - category=u'author', slug="three") - - @raises(ValueError) - def test_empty_query(self): - """ Check that empty queries raise an error. """ - views.find_best_matches(u'') - - @raises(ValueError) - def test_one_letter_query(self): - """ Check that one letter queries aren't permitted. """ - views.find_best_matches(u't') - - def test_match_by_prefix(self): - """ Tags should be matched by prefix of words within it's name. """ - self.assertEqual(views.find_best_matches(u'Ada'), (self.author_tag,)) - self.assertEqual(views.find_best_matches(u'Mic'), (self.author_tag,)) - self.assertEqual(views.find_best_matches(u'Mickiewicz'), (self.author_tag,)) - - def test_match_case_insensitive(self): - """ Tag names should match case insensitive. """ - self.assertEqual(views.find_best_matches(u'adam mickiewicz'), (self.author_tag,)) - - def test_match_case_insensitive_unicode(self): - """ Tag names should match case insensitive (unicode). """ - self.assertEqual(views.find_best_matches(u'tadeusz żeleÅski (boy)'), (self.unicode_tag,)) - - def test_word_boundary(self): - self.assertEqual(views.find_best_matches(u'SubWord'), (self.author_tag,)) - self.assertEqual(views.find_best_matches(u'[SubWord'), (self.author_tag,)) - - def test_unrelated_search(self): - self.assertEqual(views.find_best_matches(u'alamakota'), tuple()) - self.assertEqual(views.find_best_matches(u'Adama'), ()) - - def test_infix_doesnt_match(self): - """ Searching for middle of a word shouldn't match. """ - self.assertEqual(views.find_best_matches(u'deusz'), tuple()) - - def test_diactricts_removal_pl(self): - """ Tags should match both with and without national characters. """ - self.assertEqual(views.find_best_matches(u'ÄÃÄÅÅŻŹÄÅÄÃ³Ä ÅÅżźÄÅ'), (self.polish_tag,)) - self.assertEqual(views.find_best_matches(u'EOASLZZCNeoaslzzcn'), (self.polish_tag,)) - self.assertEqual(views.find_best_matches(u'eoaslzzcneoaslzzcn'), (self.polish_tag,)) - - def test_diactricts_query_removal_pl(self): - """ Tags without national characters shouldn't be matched by queries with them. """ - self.assertEqual(views.find_best_matches(u'AdÄ m'), ()) - - def test_sloppy(self): - self.assertEqual(views.find_best_matches(u'Å»elenski'), (self.unicode_tag,)) - self.assertEqual(views.find_best_matches(u'zelenski'), (self.unicode_tag,)) diff --git a/apps/catalogue/tests/tags.py b/apps/catalogue/tests/tags.py deleted file mode 100644 index 42ea6e245..000000000 --- a/apps/catalogue/tests/tags.py +++ /dev/null @@ -1,297 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.core.files.base import ContentFile -from django.test import Client -from catalogue import models -from catalogue.test_utils import * - - -class BooksByTagTests(WLTestCase): - """ tests the /katalog/category/tag page for found books """ - - def setUp(self): - WLTestCase.setUp(self) - author = PersonStub(("Common",), "Man") - - # grandchild - self.gchild_info = BookInfoStub(genre='Genre', epoch='Epoch', kind='Kind', author=author, - **info_args("GChild")) - # child - self.child_info = BookInfoStub(genre='Genre', epoch='Epoch', kind='Other Kind', author=author, - parts=[self.gchild_info.url], - **info_args("Child")) - # parent - self.parent_info = BookInfoStub(genre='Genre', epoch='Epoch', kind='Kind', author=author, - parts=[self.child_info.url], - **info_args("Parent")) - - self.book_file = ContentFile('<utwor />') - - def test_nonexistent_tag(self): - """ Looking for a non-existent tag should yield 404 """ - self.assertEqual(404, self.client.get('/katalog/autor/czeslaw-milosz/').status_code) - - def test_book_tag(self): - """ Looking for a book tag isn't permitted """ - models.Book.from_text_and_meta(self.book_file, self.gchild_info) - self.assertEqual(404, self.client.get('/katalog/gchild/').status_code) - - def test_tag_empty(self): - """ Tag with no books should return no books """ - models.Book.from_text_and_meta(self.book_file, self.gchild_info) - models.Tag.objects.create(name='Empty tag', slug='empty', category='author') - - context = self.client.get('/katalog/autor/empty/').context - self.assertEqual(0, len(context['object_list'])) - - def test_tag_eliminate(self): - """ Filtering by tag should only yield top-level qualifying books. """ - for info in self.gchild_info, self.child_info, self.parent_info: - models.Book.from_text_and_meta(self.book_file, info) - - # all three qualify - context = self.client.get('/katalog/gatunek/genre/').context - self.assertEqual([book.title for book in context['object_list']], - ['Parent']) - - # parent and gchild qualify, child doesn't - context = self.client.get('/katalog/rodzaj/kind/').context - self.assertEqual([book.title for book in context['object_list']], - ['Parent']) - - # Filtering by child's tag should yield the child - context = self.client.get('/katalog/rodzaj/other-kind/').context - self.assertEqual([book.title for book in context['object_list']], - ['Child']) - - -class TagRelatedTagsTests(WLTestCase): - """ tests the /katalog/category/tag/ page for related tags """ - - def setUp(self): - WLTestCase.setUp(self) - self.client = Client() - author = PersonStub(("Common",), "Man") - - gchild_info = BookInfoStub(author=author, genre="GchildGenre", epoch='Epoch', kind="Kind", - **info_args(u"GChild")) - child1_info = BookInfoStub(author=author, genre="ChildGenre", epoch='Epoch', kind="ChildKind", - parts=[gchild_info.url], - **info_args(u"Child1")) - child2_info = BookInfoStub(author=author, genre="ChildGenre", epoch='Epoch', kind="ChildKind", - **info_args(u"Child2")) - parent_info = BookInfoStub(author=author, genre="Genre", epoch='Epoch', kind="Kind", - parts=[child1_info.url, child2_info.url], - **info_args(u"Parent")) - - for info in gchild_info, child1_info, child2_info, parent_info: - book_text = """<utwor><opowiadanie><akap> - <begin id="m01" /> - <motyw id="m01">Theme, %sTheme</motyw> - Ala ma kota - <end id="m01" /> - </akap></opowiadanie></utwor> - """ % info.title.encode('utf-8') - book = models.Book.from_text_and_meta(ContentFile(book_text), info) - book.save() - - tag_empty = models.Tag(name='Empty tag', slug='empty', category='author') - tag_empty.save() - - def test_empty(self): - """ empty tag should have no related tags """ - - cats = self.client.get('/katalog/autor/empty/').context['categories'] - self.assertEqual({k: v for (k, v) in cats.items() if v}, {}, - 'tags related to empty tag') - - def test_has_related(self): - """ related own and descendants' tags should be generated """ - - cats = self.client.get('/katalog/rodzaj/kind/').context['categories'] - self.assertTrue('Common Man' in [tag.name for tag in cats['author']], - 'missing `author` related tag') - self.assertTrue('Epoch' in [tag.name for tag in cats['epoch']], - 'missing `epoch` related tag') - self.assertFalse(cats.get("kind", False), - "There should be no child-only related `kind` tags") - self.assertTrue("Genre" in [tag.name for tag in cats['genre']], - 'missing `genre` related tag') - self.assertFalse("ChildGenre" in [tag.name for tag in cats['genre']], - "There should be no child-only related `genre` tags") - self.assertTrue("GchildGenre" in [tag.name for tag in cats['genre']], - "missing grandchild's related tag") - self.assertTrue('Theme' in [tag.name for tag in cats['theme']], - "missing related theme") - self.assertFalse('Child1Theme' in [tag.name for tag in cats['theme']], - "There should be no child-only related `theme` tags") - self.assertTrue('GChildTheme' in [tag.name for tag in cats['theme']], - "missing grandchild's related theme") - - def test_related_differ(self): - """ related tags shouldn't include filtering tags """ - - response = self.client.get('/katalog/rodzaj/kind/') - cats = response.context['categories'] - self.assertFalse(cats.get('kind', False), - 'filtering tag wrongly included in related') - cats = self.client.get('/katalog/motyw/theme/').context['categories'] - self.assertFalse('Theme' in [tag.name for tag in cats['theme']], - 'filtering theme wrongly included in related') - - def test_parent_tag_once(self): - """ if parent and descendants have a common tag, count it only once """ - - cats = self.client.get('/katalog/rodzaj/kind/').context['categories'] - self.assertEqual([(tag.name, tag.count) for tag in cats['epoch']], - [('Epoch', 1)], - 'wrong related tag epoch tag on tag page') - - - def test_siblings_tags_count(self): - """ if children have tags and parent hasn't, count the children """ - - cats = self.client.get('/katalog/epoka/epoch/').context['categories'] - self.assertTrue(('ChildKind', 2) in [(tag.name, tag.count) for tag in cats['kind']], - 'wrong related kind tags on tag page, got: ' + - unicode([(tag.name, tag.count) for tag in cats['kind']])) - - # all occurencies of theme should be counted - self.assertTrue(('Theme', 4) in [(tag.name, tag.count) for tag in cats['theme']], - 'wrong related theme count') - - def test_query_child_tag(self): - """ - If child and parent have a common tag, but parent isn't included - in the result, child should still count. - """ - cats = self.client.get('/katalog/gatunek/childgenre/').context['categories'] - self.assertTrue(('Epoch', 2) in [(tag.name, tag.count) for tag in cats['epoch']], - 'wrong related kind tags on tag page, got: ' + - unicode([(tag.name, tag.count) for tag in cats['epoch']])) - - -class CleanTagRelationTests(WLTestCase): - """ tests for tag relations cleaning after deleting things """ - - def setUp(self): - WLTestCase.setUp(self) - author = PersonStub(("Common",), "Man") - - book_info = BookInfoStub(author=author, genre="G", epoch='E', kind="K", - **info_args(u"Book")) - book_text = """<utwor><opowiadanie><akap> - <begin id="m01" /><motyw id="m01">Theme</motyw>Ala ma kota - <end id="m01" /> - </akap></opowiadanie></utwor> - """ - self.book = models.Book.from_text_and_meta(ContentFile(book_text), book_info) - - def test_delete_objects(self): - """ there should be no related tags left after deleting some objects """ - - models.Book.objects.all().delete() - cats = self.client.get('/katalog/rodzaj/k/').context['categories'] - self.assertEqual({k: v for (k, v) in cats.items() if v}, {}) - self.assertEqual(models.Fragment.objects.all().count(), 0, - "orphaned fragments left") - self.assertEqual(models.Tag.intermediary_table_model.objects.all().count(), 0, - "orphaned TagRelation objects left") - - def test_deleted_tag(self): - """ there should be no tag relations left after deleting tags """ - - models.Tag.objects.all().delete() - self.assertEqual(len(self.book.related_themes()), 0) - self.assertEqual(models.Tag.intermediary_table_model.objects.all().count(), 0, - "orphaned TagRelation objects left") - - -class TestIdenticalTag(WLTestCase): - - def setUp(self): - WLTestCase.setUp(self) - author = PersonStub((), "Tag") - - self.book_info = BookInfoStub(author=author, - genre="tag", - epoch='tag', - kind="tag", - **info_args(u"tag")) - self.book_text = """<utwor> - <opowiadanie> - <akap> - <begin id="m01" /><motyw id="m01">tag</motyw>Ala ma kota<end id="m01" /> - </akap> - </opowiadanie> - </utwor> - """ - - - def test_book_tags(self): - """ there should be all related tags in relevant categories """ - book = models.Book.from_text_and_meta(ContentFile(self.book_text), self.book_info) - - related_themes = book.related_themes() - for category in 'author', 'kind', 'genre', 'epoch': - self.assertTrue('tag' in [tag.slug for tag in book.tags.filter(category=category)], - 'missing related tag for %s' % category) - self.assertTrue('tag' in [tag.slug for tag in related_themes]) - - def test_qualified_url(self): - models.Book.from_text_and_meta(ContentFile(self.book_text), self.book_info) - categories = {'author': 'autor', 'theme': 'motyw', 'epoch': 'epoka', 'kind':'rodzaj', 'genre':'gatunek'} - for cat, localcat in categories.iteritems(): - context = self.client.get('/katalog/%s/tag/' % localcat).context - self.assertEqual(1, len(context['object_list'])) - self.assertNotEqual({}, context['categories']) - self.assertFalse(context['categories'].get(cat, False)) - - -class BookTagsTests(WLTestCase): - """ tests the /katalog/lektura/book/ page for related tags """ - - def setUp(self): - WLTestCase.setUp(self) - author1 = PersonStub(("Common",), "Man") - author2 = PersonStub(("Jim",), "Lazy") - - child_info = BookInfoStub(authors=(author1, author2), genre="ChildGenre", epoch='Epoch', kind="ChildKind", - **info_args(u"Child")) - parent_info = BookInfoStub(author=author1, genre="Genre", epoch='Epoch', kind="Kind", - parts=[child_info.url], - **info_args(u"Parent")) - - for info in child_info, parent_info: - book_text = """<utwor><opowiadanie><akap> - <begin id="m01" /> - <motyw id="m01">Theme, %sTheme</motyw> - Ala ma kota - <end id="m01" /> - </akap></opowiadanie></utwor> - """ % info.title.encode('utf-8') - models.Book.from_text_and_meta(ContentFile(book_text), info) - - def test_book_tags(self): - """ book should have own tags and whole tree's themes """ - - book = models.Book.objects.get(slug='parent') - related_themes = book.related_themes() - - self.assertEqual([t.slug for t in book.tags.filter(category='author')], - ['common-man']) - self.assertEqual([t.slug for t in book.tags.filter(category='kind')], - ['kind']) - self.assertEqual([(tag.name, tag.count) for tag in related_themes], - [('ChildTheme', 1), ('ParentTheme', 1), ('Theme', 2)]) - - def test_catalogue_tags(self): - """ test main page tags and counts """ - context = self.client.get('/katalog/').context - self.assertEqual([(tag.name, tag.count) for tag in context['categories']['author']], - [('Jim Lazy', 1), ('Common Man', 1)]) - self.assertEqual([(tag.name, tag.count) for tag in context['categories']['theme']], - [('ChildTheme', 1), ('ParentTheme', 1), ('Theme', 2)]) - diff --git a/apps/catalogue/tests/templatetags.py b/apps/catalogue/tests/templatetags.py deleted file mode 100644 index a66d604de..000000000 --- a/apps/catalogue/tests/templatetags.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from catalogue import models -from catalogue.templatetags import catalogue_tags -from catalogue.test_utils import * -from django.core.files.base import ContentFile - - -class BookDescTests(WLTestCase): - """ tests book_title template tag """ - - def setUp(self): - WLTestCase.setUp(self) - authors = PersonStub(("Common",), "Man"), PersonStub(("Jane",), "Doe") - - child_info = BookInfoStub(authors=authors, genre="Genre", epoch='Epoch', kind="Kind", - **info_args(u"Child")) - parent_info = BookInfoStub(authors=authors, genre="Genre", epoch='Epoch', kind="Kind", - parts=[child_info.url], - **info_args(u"Parent")) - - self.child = models.Book.from_text_and_meta(ContentFile('<utwor/>'), child_info) - models.Book.from_text_and_meta(ContentFile('<utwor/>'), parent_info) - self.child = models.Book.objects.get(pk=self.child.pk) - - def test_book_desc(self): - """ book description should return authors, ancestors, book """ - self.assertEqual(catalogue_tags.book_title(self.child), 'Jane Doe, Common Man, Parent, Child') diff --git a/apps/catalogue/tests/visit.py b/apps/catalogue/tests/visit.py deleted file mode 100644 index cab3c987d..000000000 --- a/apps/catalogue/tests/visit.py +++ /dev/null @@ -1,80 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from catalogue import models -from catalogue.test_utils import BookInfoStub, PersonStub, WLTestCase, info_args -from django.core.files.base import ContentFile - - -class VisitTest(WLTestCase): - """Simply create some objects and visit some views.""" - - def setUp(self): - WLTestCase.setUp(self) - author = PersonStub(("Jane",), "Doe") - book_info = BookInfoStub(author=author, genre="Genre", - epoch='Epoch', kind="Kind", **info_args(u"A book")) - self.book = models.Book.from_text_and_meta(ContentFile(''' - <utwor> - <opowiadanie> - <akap> - <begin id="b1" /> - <motyw id="m1">Theme</motyw> - Test - <end id="e1" /> - </akap> - </opowiadanie> - </utwor> - '''), book_info) - self.collection = models.Collection.objects.create( - title='Biblioteczka Boya', slug='boy', book_slugs='a-book') - - def test_visit_urls(self): - """ book description should return authors, ancestors, book """ - url_map = { - 200: [ - '', - 'lektury/', - 'lektury/boy/', - 'nowe/', - 'lektura/a-book/', - 'lektura/a-book.html', - 'lektura/a-book/motyw/theme/', - 'motyw/theme/', - 'autor/jane-doe/', - 'autor/jane-doe/gatunek/genre/', - 'autor/jane-doe/gatunek/genre/motyw/theme/', - 'pl.json', - 'b/%d/mini.pl.html' % self.book.pk, - 'b/%d/mini_nolink.pl.html' % self.book.pk, - 'b/%d/short.pl.html' % self.book.pk, - 'b/%d/wide.pl.html' % self.book.pk, - 'f/%d/promo.pl.html' % self.book.fragments.all()[0].pk, - 'f/%d/short.pl.html' % self.book.fragments.all()[0].pk, - ], - 404: [ - 'lektury/nonexistent/', # Nonexistent Collection. - 'lektura/nonexistent/', # Nonexistent Book. - 'lektura/nonexistent.html', # Nonexistent Book's HTML. - 'lektura/nonexistent/motyw/theme/', # Nonexistent Book's theme. - 'lektura/a-book/motyw/nonexistent/', # Nonexistent theme in a Book. - 'autor/nonexistent/', # Nonexistent author. - 'motyw/nonexistent/', # Nonexistent theme. - 'zh.json', # Nonexistent language. - 'b/%d/mini.pl.html' % (self.book.pk + 100), # Nonexistent book. - 'b/%d/mini_nolink.pl.html' % (self.book.pk + 100), # Nonexistent book. - 'b/%d/short.pl.html' % (self.book.pk + 100), # Nonexistent book. - 'b/%d/wide.pl.html' % (self.book.pk + 100), # Nonexistent book. - 'f/%d/promo.pl.html' % (self.book.fragments.all()[0].pk + 100), # Nonexistent fragment. - 'f/%d/short.pl.html' % (self.book.fragments.all()[0].pk + 100), # Nonexistent fragment. - ] - } - prefix = '/katalog/' - for expected_status, urls in url_map.items(): - for url in urls: - print(url) - status = self.client.get(prefix + url).status_code - self.assertEqual(status, expected_status, - "Wrong status code for '%s'. Expected %d, got %d." % ( - prefix + url, expected_status, status)) diff --git a/apps/catalogue/translation.py b/apps/catalogue/translation.py deleted file mode 100644 index 319736515..000000000 --- a/apps/catalogue/translation.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# - -from modeltranslation.translator import translator, TranslationOptions -from catalogue.models import Collection, Tag, Source - -class TagTranslationOptions(TranslationOptions): - fields = ('name', 'description', 'wiki_link') - -class CollectionTranslationOptions(TranslationOptions): - fields = ('title', 'description') - -class SourceTranslationOptions(TranslationOptions): - fields = ('name',) - -translator.register(Tag, TagTranslationOptions) -translator.register(Collection, CollectionTranslationOptions) -translator.register(Source, SourceTranslationOptions) diff --git a/apps/catalogue/urls.py b/apps/catalogue/urls.py deleted file mode 100644 index b7c59a055..000000000 --- a/apps/catalogue/urls.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url -from django.db.models import Max -from django.views.generic import ListView, RedirectView -from catalogue.feeds import AudiobookFeed -from catalogue.views import CustomPDFFormView -from catalogue.models import Book - - -SLUG = r'[a-z0-9-]*' - -urlpatterns = patterns('picture.views', - # pictures - currently pictures are coupled with catalogue, hence the url is here - url(r'^obraz/$', 'picture_list_thumb', name='picture_list_thumb'), - url(r'^obraz/(?P<slug>%s).html$' % SLUG, 'picture_viewer', name='picture_viewer'), - url(r'^obraz/(?P<slug>%s)/$' % SLUG, 'picture_detail'), - - url(r'^p/(?P<pk>\d+)/mini\.(?P<lang>.+)\.html', 'picture_mini', name='picture_mini'), - url(r'^p/(?P<pk>\d+)/short\.(?P<lang>.+)\.html', 'picture_short', name='picture_short'), - url(r'^pa/(?P<pk>\d+)/short\.(?P<lang>.+)\.html', 'picturearea_short', name='picture_area_short'), -) - -urlpatterns += patterns('', - # old search page - redirected - url(r'^szukaj/$', RedirectView.as_view( - url='/szukaj/', query_string=True, permanent=True)), -) - -urlpatterns += patterns('catalogue.views', - url(r'^$', 'catalogue', name='catalogue'), - - url(r'^lektury/$', 'book_list', name='book_list'), - url(r'^lektury/(?P<slug>[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'^tags/$', 'tags_starting_with', name='hint'), - url(r'^jtags/?$', 'json_tags_starting_with', name='jhint'), - url(r'^nowe/$', ListView.as_view( - queryset=Book.objects.filter(parent=None).order_by('-created_at'), - template_name='catalogue/recent_list.html'), name='recent_list'), - url(r'^nowe/audiobooki/$', ListView.as_view( - queryset=Book.objects.filter(media__type='ogg').annotate(m=Max('media__uploaded_at')).order_by('-m'), - template_name='catalogue/recent_audiobooks_list.html'), name='recent_audiobooks_list'), - url(r'^nowe/daisy/$', ListView.as_view( - queryset=Book.objects.filter(media__type='daisy').annotate(m=Max('media__uploaded_at')).order_by('-m'), - template_name='catalogue/recent_daisy_list.html'), name='recent_daisy_list'), - - url(r'^custompdf/(?P<slug>%s)/$' % SLUG, CustomPDFFormView(), name='custom_pdf_form'), - - url(r'^audiobooki/(?P<type>mp3|ogg|daisy|all).xml$', AudiobookFeed(), name='audiobook_feed'), - - - # zip - url(r'^zip/pdf\.zip$', 'download_zip', {'format': 'pdf', 'slug': None}, 'download_zip_pdf'), - url(r'^zip/epub\.zip$', 'download_zip', {'format': 'epub', 'slug': None}, 'download_zip_epub'), - url(r'^zip/mobi\.zip$', 'download_zip', {'format': 'mobi', 'slug': None}, 'download_zip_mobi'), - url(r'^zip/mp3/(?P<slug>%s)\.zip' % SLUG, 'download_zip', {'format': 'mp3'}, 'download_zip_mp3'), - url(r'^zip/ogg/(?P<slug>%s)\.zip' % SLUG, 'download_zip', {'format': 'ogg'}, 'download_zip_ogg'), - - # Public interface. Do not change this URLs. - url(r'^lektura/(?P<slug>%s)\.html$' % SLUG, 'book_text', name='book_text'), - url(r'^lektura/(?P<slug>%s)/audiobook/$' % SLUG, 'player', name='book_player'), - url(r'^lektura/(?P<slug>%s)/$' % SLUG, 'book_detail', name='book_detail'), - url(r'^lektura/(?P<slug>%s)/motyw/(?P<theme_slug>[a-zA-Z0-9-]+)/$' % SLUG, - 'book_fragments', name='book_fragments'), - - # Includes. - url(r'^(?P<lang>[^/]+)\.json$', 'catalogue_json'), - url(r'^b/(?P<pk>\d+)/mini\.(?P<lang>.+)\.html', 'book_mini', name='catalogue_book_mini'), - url(r'^b/(?P<pk>\d+)/mini_nolink\.(?P<lang>.+)\.html', 'book_mini', {'with_link': False}, name='catalogue_book_mini_nolink'), - url(r'^b/(?P<pk>\d+)/short\.(?P<lang>.+)\.html', 'book_short', name='catalogue_book_short'), - url(r'^b/(?P<pk>\d+)/wide\.(?P<lang>.+)\.html', 'book_wide', name='catalogue_book_wide'), - url(r'^f/(?P<pk>\d+)/promo\.(?P<lang>.+)\.html', 'fragment_promo', name='catalogue_fragment_promo'), - url(r'^f/(?P<pk>\d+)/short\.(?P<lang>.+)\.html', 'fragment_short', name='catalogue_fragment_short'), - - # This should be the last pattern. - url(r'^(?P<tags>[a-zA-Z0-9-/]*)/$', 'tagged_object_list', name='tagged_object_list'), -) diff --git a/apps/catalogue/utils.py b/apps/catalogue/utils.py deleted file mode 100644 index bcc5a0b33..000000000 --- a/apps/catalogue/utils.py +++ /dev/null @@ -1,358 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from collections import defaultdict -import hashlib -import random -import re -import time -from base64 import urlsafe_b64encode - -from django.http import HttpResponse -from django.core.files.uploadedfile import UploadedFile -from django.core.files.storage import DefaultStorage -from django.utils.encoding import force_unicode -from django.conf import settings -from os import mkdir, path, unlink -from errno import EEXIST, ENOENT -from fcntl import flock, LOCK_EX -from zipfile import ZipFile - -from reporting.utils import read_chunks - -# Use the system (hardware-based) random number generator if it exists. -if hasattr(random, 'SystemRandom'): - randrange = random.SystemRandom().randrange -else: - randrange = random.randrange -MAX_SESSION_KEY = 18446744073709551616L # 2 << 63 - - -def get_random_hash(seed): - sha_digest = hashlib.sha1('%s%s%s%s' % - (randrange(0, MAX_SESSION_KEY), time.time(), unicode(seed).encode('utf-8', 'replace'), - settings.SECRET_KEY)).digest() - return urlsafe_b64encode(sha_digest).replace('=', '').replace('_', '-').lower() - - -def split_tags(*tag_lists): - if len(tag_lists) == 1: - result = defaultdict(list) - for tag in tag_lists[0]: - result[tag.category].append(tag) - else: - result = defaultdict(dict) - for tag_list in tag_lists: - for tag in tag_list: - try: - result[tag.category][tag.pk].count += tag.count - except KeyError: - result[tag.category][tag.pk] = tag - for k, v in result.items(): - result[k] = sorted(v.values(), key=lambda tag: tag.sort_key) - return result - - -class ExistingFile(UploadedFile): - - def __init__(self, path, *args, **kwargs): - self.path = path - super(ExistingFile, self).__init__(*args, **kwargs) - - def temporary_file_path(self): - return self.path - - def close(self): - pass - - -class LockFile(object): - """ - A file lock monitor class; createas an ${objname}.lock - file in directory dir, and locks it exclusively. - To be used in 'with' construct. - """ - def __init__(self, dir, objname): - self.lockname = path.join(dir, objname + ".lock") - - def __enter__(self): - self.lock = open(self.lockname, 'w') - flock(self.lock, LOCK_EX) - - def __exit__(self, *err): - try: - unlink(self.lockname) - except OSError as oe: - if oe.errno != EEXIST: - raise oe - self.lock.close() - - -#@task -def create_zip(paths, zip_slug): - """ - Creates a zip in MEDIA_ROOT/zip directory containing files from path. - Resulting archive filename is ${zip_slug}.zip - Returns it's path relative to MEDIA_ROOT (no initial slash) - """ - # directory to store zip files - zip_path = path.join(settings.MEDIA_ROOT, 'zip') - - try: - mkdir(zip_path) - except OSError as oe: - if oe.errno != EEXIST: - raise oe - zip_filename = zip_slug + ".zip" - - with LockFile(zip_path, zip_slug): - if not path.exists(path.join(zip_path, zip_filename)): - zipf = ZipFile(path.join(zip_path, zip_filename), 'w') - try: - for arcname, p in paths: - if arcname is None: - arcname = path.basename(p) - zipf.write(p, arcname) - finally: - zipf.close() - - return 'zip/' + zip_filename - - -def remove_zip(zip_slug): - """ - removes the ${zip_slug}.zip file from zip store. - """ - zip_file = path.join(settings.MEDIA_ROOT, 'zip', zip_slug + '.zip') - try: - unlink(zip_file) - except OSError as oe: - if oe.errno != ENOENT: - raise oe - - -class AttachmentHttpResponse(HttpResponse): - """Response serving a file to be downloaded. - """ - def __init__(self, file_path, file_name, mimetype): - super(AttachmentHttpResponse, self).__init__(mimetype=mimetype) - self['Content-Disposition'] = 'attachment; filename=%s' % file_name - self.file_path = file_path - self.file_name = file_name - - with open(DefaultStorage().path(self.file_path)) as f: - for chunk in read_chunks(f): - self.write(chunk) - -class MultiQuerySet(object): - def __init__(self, *args, **kwargs): - self.querysets = args - self._count = None - - def count(self): - if not self._count: - self._count = sum(len(qs) for qs in self.querysets) - return self._count - - def __len__(self): - return self.count() - - def __getitem__(self, item): - try: - (offset, stop, step) = item.indices(self.count()) - except AttributeError: - # it's not a slice - make it one - return self[item : item + 1][0] - items = [] - total_len = stop - offset - for qs in self.querysets: - if len(qs) < offset: - offset -= len(qs) - else: - items += list(qs[offset:stop]) - if len(items) >= total_len: - return items - else: - offset = 0 - stop = total_len - len(items) - continue - -class SortedMultiQuerySet(MultiQuerySet): - def __init__(self, *args, **kwargs): - self.order_by = kwargs.pop('order_by', None) - self.sortfn = kwargs.pop('sortfn', None) - if self.order_by is not None: - self.sortfn = lambda a, b: cmp((getattr(a, f) for f in self.order_by), - (getattr(b, f) for f in self.order_by)) - super(SortedMultiQuerySet, self).__init__(*args, **kwargs) - - def __getitem__(self, item): - sort_heads = [0] * len(self.querysets) - try: - (offset, stop, step) = item.indices(self.count()) - except AttributeError: - # it's not a slice - make it one - return self[item : item + 1][0] - items = [] - total_len = stop - offset - skipped = 0 - i_s = range(len(sort_heads)) - - while len(items) < total_len: - candidate = None - candidate_i = None - for i in i_s: - def get_next(): - return self.querysets[i][sort_heads[i]] - try: - if candidate is None: - candidate = get_next() - candidate_i = i - else: - competitor = get_next() - if self.sortfn(candidate, competitor) > 0: - candidate = competitor - candidate_i = i - except IndexError: - continue # continue next sort_head - # we have no more elements: - if candidate is None: - break - sort_heads[candidate_i] += 1 - if skipped < offset: - skipped += 1 - continue # continue next item - items.append(candidate) - - return items - - -def truncate_html_words(s, num, end_text='...'): - """Truncates HTML to a certain number of words (not counting tags and - comments). Closes opened tags if they were correctly closed in the given - html. Takes an optional argument of what should be used to notify that the - string has been truncated, defaulting to ellipsis (...). - - Newlines in the HTML are preserved. - - This is just a version of django.utils.text.truncate_html_words with no space before the end_text. - """ - s = force_unicode(s) - length = int(num) - if length <= 0: - return u'' - html4_singlets = ('br', 'col', 'link', 'base', 'img', 'param', 'area', 'hr', 'input') - # Set up regular expressions - re_words = re.compile(r'&.*?;|<.*?>|(\w[\w-]*)', re.U) - re_tag = re.compile(r'<(/)?([^ ]+?)(?: (/)| .*?)?>') - # Count non-HTML words and keep note of open tags - pos = 0 - end_text_pos = 0 - words = 0 - open_tags = [] - while words <= length: - m = re_words.search(s, pos) - if not m: - # Checked through whole string - break - pos = m.end(0) - if m.group(1): - # It's an actual non-HTML word - words += 1 - if words == length: - end_text_pos = pos - continue - # Check for tag - tag = re_tag.match(m.group(0)) - if not tag or end_text_pos: - # Don't worry about non tags or tags after our truncate point - continue - closing_tag, tagname, self_closing = tag.groups() - tagname = tagname.lower() # Element names are always case-insensitive - if self_closing or tagname in html4_singlets: - pass - elif closing_tag: - # Check for match in open tags list - try: - i = open_tags.index(tagname) - except ValueError: - pass - else: - # SGML: An end tag closes, back to the matching start tag, all unclosed intervening start tags with omitted end tags - open_tags = open_tags[i+1:] - else: - # Add it to the start of the open tags list - open_tags.insert(0, tagname) - if words <= length: - # Don't try to close tags if we don't need to truncate - return s - out = s[:end_text_pos] - if end_text: - out += end_text - # Close any tags still open - for tag in open_tags: - out += '</%s>' % tag - # Return string - return out - - -def customizations_hash(customizations): - customizations.sort() - return hash(tuple(customizations)) - - -def get_customized_pdf_path(book, customizations): - """ - Returns a MEDIA_ROOT relative path for a customized pdf. The name will contain a hash of customization options. - """ - h = customizations_hash(customizations) - return 'book/%s/%s-custom-%s.pdf' % (book.slug, book.slug, h) - - -def clear_custom_pdf(book): - """ - Returns a list of paths to generated customized pdf of a book - """ - from waiter.utils import clear_cache - clear_cache('book/%s' % book.slug) - - -class AppSettings(object): - """Allows specyfying custom settings for an app, with default values. - - Just subclass, set some properties and instantiate with a prefix. - Getting a SETTING from an instance will check for prefix_SETTING - in project settings if set, else take the default. The value will be - then filtered through _more_SETTING method, if there is one. - - """ - def __init__(self, prefix): - self._prefix = prefix - - def __getattribute__(self, name): - if name.startswith('_'): - return object.__getattribute__(self, name) - value = getattr(settings, - "%s_%s" % (self._prefix, name), - object.__getattribute__(self, name)) - more = "_more_%s" % name - if hasattr(self, more): - value = getattr(self, more)(value) - return value - - -def trim_query_log(trim_to=25): - """ -connection.queries includes all SQL statements -- INSERTs, UPDATES, SELECTs, etc. Each time your app hits the database, the query will be recorded. -This can sometimes occupy lots of memory, so trim it here a bit. - """ - if settings.DEBUG: - from django.db import connection - connection.queries = trim_to > 0 \ - and connection.queries[-trim_to:] \ - or [] - - -def delete_from_cache_by_language(cache, key_template): - cache.delete_many([key_template % lc for lc, ln in settings.LANGUAGES]) diff --git a/apps/catalogue/views.py b/apps/catalogue/views.py deleted file mode 100644 index a25a08ffa..000000000 --- a/apps/catalogue/views.py +++ /dev/null @@ -1,691 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from collections import OrderedDict -import re - -from django.conf import settings -from django.template import RequestContext -from django.template.loader import render_to_string -from django.shortcuts import render_to_response, get_object_or_404, render -from django.http import HttpResponse, HttpResponseRedirect, Http404, HttpResponsePermanentRedirect, JsonResponse -from django.core.urlresolvers import reverse -from django.db.models import Q -from django.contrib.auth.decorators import login_required, user_passes_test -from django.utils.http import urlquote_plus -from django.utils import translation -from django.utils.translation import ugettext as _, ugettext_lazy - -from ajaxable.utils import AjaxableFormView -from pdcounter import models as pdcounter_models -from pdcounter import views as pdcounter_views -from picture.models import Picture, PictureArea -from picture.views import picture_list_thumb -from ssify import ssi_included, ssi_expect, SsiVariable as V -from suggest.forms import PublishingSuggestForm -from catalogue import forms -from catalogue.helpers import get_top_level_related_tags -from catalogue import models -from catalogue.utils import split_tags, MultiQuerySet, SortedMultiQuerySet -from catalogue.templatetags.catalogue_tags import tag_list, collection_list - -staff_required = user_passes_test(lambda user: user.is_staff) - - -def catalogue(request, as_json=False): - common_categories = ('author',) - split_categories = ('epoch', 'genre', 'kind') - - categories = split_tags( - get_top_level_related_tags(categories=common_categories), - models.Tag.objects.usage_for_model( - models.Fragment, counts=True).filter(category='theme'), - models.Tag.objects.usage_for_model( - Picture, counts=True).filter(category__in=common_categories), - models.Tag.objects.usage_for_model( - PictureArea, counts=True).filter( - category='theme') - ) - book_categories = split_tags( - get_top_level_related_tags(categories=split_categories) - ) - picture_categories = split_tags( - models.Tag.objects.usage_for_model( - Picture, counts=True).filter( - category__in=split_categories), - ) - - collections = models.Collection.objects.all() - - def render_tag_list(tags): - return render_to_string('catalogue/tag_list.html', tag_list(tags)) - - def render_split(with_books, with_pictures): - ctx = {} - if with_books: - ctx['books'] = render_tag_list(with_books) - if with_pictures: - ctx['pictures'] = render_tag_list(with_pictures) - return render_to_string('catalogue/tag_list_split.html', ctx) - - output = {} - output['theme'] = render_tag_list(categories.get('theme', [])) - for category in common_categories: - output[category] = render_tag_list(categories.get(category, [])) - for category in split_categories: - output[category] = render_split( - book_categories.get(category, []), - picture_categories.get(category, [])) - - output['collections'] = render_to_string( - 'catalogue/collection_list.html', collection_list(collections)) - if as_json: - return JsonResponse(output) - else: - return render_to_response('catalogue/catalogue.html', locals(), - context_instance=RequestContext(request)) - - -@ssi_included -def catalogue_json(request): - return catalogue(request, True) - - -def book_list(request, filter=None, get_filter=None, - template_name='catalogue/book_list.html', - nav_template_name='catalogue/snippets/book_list_nav.html', - list_template_name='catalogue/snippets/book_list.html', - context=None, - ): - """ generates a listing of all books, optionally filtered with a test function """ - if get_filter: - filter = get_filter() - books_by_author, orphans, books_by_parent = models.Book.book_list(filter) - books_nav = OrderedDict() - for tag in books_by_author: - if books_by_author[tag]: - books_nav.setdefault(tag.sort_key[0], []).append(tag) - rendered_nav = render_to_string(nav_template_name, locals()) - rendered_book_list = render_to_string(list_template_name, locals()) - return render_to_response(template_name, locals(), - context_instance=RequestContext(request)) - - -def audiobook_list(request): - return book_list(request, Q(media__type='mp3') | Q(media__type='ogg'), - template_name='catalogue/audiobook_list.html', - list_template_name='catalogue/snippets/audiobook_list.html', - ) - - -def daisy_list(request): - return book_list(request, Q(media__type='daisy'), - template_name='catalogue/daisy_list.html', - ) - - -def collection(request, slug): - coll = get_object_or_404(models.Collection, slug=slug) - if coll.kind == 'book': - view = book_list - tmpl = "catalogue/collection.html" - elif coll.kind == 'picture': - view = picture_list_thumb - tmpl = "picture/collection.html" - else: - raise ValueError('How do I show this kind of collection? %s' % coll.kind) - return view(request, get_filter=coll.get_query, - template_name=tmpl, - context={'collection': coll}) - - -def differentiate_tags(request, tags, ambiguous_slugs): - beginning = '/'.join(tag.url_chunk for tag in tags) - unparsed = '/'.join(ambiguous_slugs[1:]) - options = [] - for tag in models.Tag.objects.filter(slug=ambiguous_slugs[0]): - options.append({ - 'url_args': '/'.join((beginning, tag.url_chunk, unparsed)).strip('/'), - 'tags': [tag] - }) - return render_to_response('catalogue/differentiate_tags.html', - {'tags': tags, 'options': options, 'unparsed': ambiguous_slugs[1:]}, - context_instance=RequestContext(request)) - - -# TODO: Rewrite this hellish piece of code which tries to do everything -def tagged_object_list(request, tags=''): - # preliminary tests and conditions - try: - tags = models.Tag.get_tag_list(tags) - except models.Tag.DoesNotExist: - # Perhaps the user is asking about an author in Public Domain - # counter (they are not represented in tags) - chunks = tags.split('/') - if len(chunks) == 2 and chunks[0] == 'autor': - return pdcounter_views.author_detail(request, chunks[1]) - else: - raise Http404 - except models.Tag.MultipleObjectsReturned, e: - # Ask the user to disambiguate - return differentiate_tags(request, e.tags, e.ambiguous_slugs) - except models.Tag.UrlDeprecationWarning, e: - return HttpResponsePermanentRedirect(reverse('tagged_object_list', args=['/'.join(tag.url_chunk for tag in e.tags)])) - - try: - if len(tags) > settings.MAX_TAG_LIST: - raise Http404 - except AttributeError: - pass - - # beginning of digestion - theme_is_set = [tag for tag in tags if tag.category == 'theme'] - shelf_is_set = [tag for tag in tags if tag.category == 'set'] - only_shelf = shelf_is_set and len(tags) == 1 - only_my_shelf = only_shelf and request.user.is_authenticated() and request.user == tags[0].user - tags_pks = [tag.pk for tag in tags] - - objects = None - - if theme_is_set: - shelf_tags = [tag for tag in tags if tag.category == 'set'] - fragment_tags = [tag for tag in tags if tag.category != 'set'] - fragments = models.Fragment.tagged.with_all(fragment_tags) - areas = PictureArea.tagged.with_all(fragment_tags) - - if shelf_tags: - books = models.Book.tagged.with_all(shelf_tags).order_by() - fragments = fragments.filter(Q(book__in=books) | Q(book__ancestor__in=books)) - areas = PictureArea.objects.none() - - categories = split_tags( - models.Tag.objects.usage_for_queryset(fragments, counts=True - ).exclude(pk__in=tags_pks), - models.Tag.objects.usage_for_queryset(areas, counts=True - ).exclude(pk__in=tags_pks) - ) - - # we want the Pictures to go first - objects = MultiQuerySet(areas, fragments) - else: - all_books = models.Book.tagged.with_all(tags) - if shelf_is_set: - books = all_books.order_by('sort_key_author', 'title') - pictures = Picture.objects.none() - related_book_tags = models.Tag.objects.usage_for_queryset( - books, counts=True).exclude( - category='set').exclude(pk__in=tags_pks) - else: - books = models.Book.tagged_top_level(tags).order_by( - 'sort_key_author', 'title') - pictures = Picture.tagged.with_all(tags).order_by( - 'sort_key_author', 'title') - related_book_tags = get_top_level_related_tags(tags) - - fragments = models.Fragment.objects.filter(book__in=all_books) - areas = PictureArea.objects.filter(picture__in=pictures) - - categories = split_tags( - related_book_tags, - models.Tag.objects.usage_for_queryset( - pictures, counts=True).exclude(pk__in=tags_pks), - models.Tag.objects.usage_for_queryset( - fragments, counts=True).filter( - category='theme').exclude(pk__in=tags_pks), - models.Tag.objects.usage_for_queryset( - areas, counts=True).filter( - category__in=('theme', 'thing')).exclude( - pk__in=tags_pks), - ) - - objects = SortedMultiQuerySet(pictures, books, - order_by=('sort_key_author', 'title')) - - return render_to_response('catalogue/tagged_object_list.html', - { - 'object_list': objects, - 'categories': categories, - 'only_shelf': only_shelf, - 'only_my_shelf': only_my_shelf, - 'formats_form': forms.DownloadFormatsForm(), - 'tags': tags, - 'tag_ids': tags_pks, - 'theme_is_set': theme_is_set, - }, - context_instance=RequestContext(request)) - - -def book_fragments(request, slug, theme_slug): - book = get_object_or_404(models.Book, slug=slug) - theme = get_object_or_404(models.Tag, slug=theme_slug, category='theme') - fragments = models.Fragment.tagged.with_all([theme]).filter( - Q(book=book) | Q(book__ancestor=book)) - - return render_to_response('catalogue/book_fragments.html', locals(), - context_instance=RequestContext(request)) - - -def book_detail(request, slug): - try: - book = models.Book.objects.get(slug=slug) - except models.Book.DoesNotExist: - return pdcounter_views.book_stub_detail(request, slug) - - book_children = book.children.all().order_by('parent_number', 'sort_key') - return render_to_response('catalogue/book_detail.html', locals(), - context_instance=RequestContext(request)) - - -def player(request, slug): - book = get_object_or_404(models.Book, slug=slug) - if not book.has_media('mp3'): - raise Http404 - - ogg_files = {} - for m in book.media.filter(type='ogg').order_by().iterator(): - ogg_files[m.name] = m - - audiobooks = [] - have_oggs = True - projects = set() - for mp3 in book.media.filter(type='mp3').iterator(): - # ogg files are always from the same project - meta = mp3.extra_info - project = meta.get('project') - if not project: - # temporary fallback - project = u'CzytamySÅuchajÄ c' - - projects.add((project, meta.get('funded_by', ''))) - - media = {'mp3': mp3} - - ogg = ogg_files.get(mp3.name) - if ogg: - media['ogg'] = ogg - else: - have_oggs = False - audiobooks.append(media) - - projects = sorted(projects) - - extra_info = book.extra_info - - return render_to_response('catalogue/player.html', locals(), - context_instance=RequestContext(request)) - - -def book_text(request, slug): - book = get_object_or_404(models.Book, slug=slug) - - if not book.has_html_file(): - raise Http404 - return render_to_response('catalogue/book_text.html', locals(), - context_instance=RequestContext(request)) - - -# ========== -# = Search = -# ========== - -def _no_diacritics_regexp(query): - """ returns a regexp for searching for a query without diacritics - - should be locale-aware """ - names = { - u'a':u'aÄ Ä', u'c':u'cÄÄ', u'e':u'eÄÄ', u'l': u'lÅÅ', u'n':u'nÅÅ', u'o':u'oóÃ', u's':u'sÅÅ', u'z':u'zźżŹŻ', - u'Ä ':u'Ä Ä', u'Ä':u'ÄÄ', u'Ä':u'ÄÄ', u'Å': u'ÅÅ', u'Å':u'ÅÅ', u'ó':u'óÃ', u'Å':u'ÅÅ', u'ź':u'źŹ', u'ż':u'żŻ' - } - def repl(m): - l = m.group() - return u"(%s)" % '|'.join(names[l]) - return re.sub(u'[%s]' % (u''.join(names.keys())), repl, query) - -def unicode_re_escape(query): - """ Unicode-friendly version of re.escape """ - return re.sub(r'(?u)(\W)', r'\\\1', query) - -def _word_starts_with(name, prefix): - """returns a Q object getting models having `name` contain a word - starting with `prefix` - - We define word characters as alphanumeric and underscore, like in JS. - - Works for MySQL, PostgreSQL, Oracle. - For SQLite, _sqlite* version is substituted for this. - """ - kwargs = {} - - prefix = _no_diacritics_regexp(unicode_re_escape(prefix)) - # can't use [[:<:]] (word start), - # but we want both `xy` and `(xy` to catch `(xyz)` - kwargs['%s__iregex' % name] = u"(^|[^[:alnum:]_])%s" % prefix - - return Q(**kwargs) - - -def _word_starts_with_regexp(prefix): - prefix = _no_diacritics_regexp(unicode_re_escape(prefix)) - return ur"(^|(?<=[^\wÄ ÄÄÅÅóÅźżÄÄÄÅÅÃÅŹŻ]))%s" % prefix - - -def _sqlite_word_starts_with(name, prefix): - """ version of _word_starts_with for SQLite - - SQLite in Django uses Python re module - """ - kwargs = {} - kwargs['%s__iregex' % name] = _word_starts_with_regexp(prefix) - return Q(**kwargs) - - -if hasattr(settings, 'DATABASES'): - if settings.DATABASES['default']['ENGINE'] == 'django.db.backends.sqlite3': - _word_starts_with = _sqlite_word_starts_with -elif settings.DATABASE_ENGINE == 'sqlite3': - _word_starts_with = _sqlite_word_starts_with - - -class App(): - def __init__(self, name, view): - self.name = name - self._view = view - self.lower = name.lower() - self.category = 'application' - def view(self): - return reverse(*self._view) - -_apps = ( - App(u'LeÅmianator', (u'lesmianator', )), - ) - - -def _tags_starting_with(prefix, user=None): - prefix = prefix.lower() - # PD counter - book_stubs = pdcounter_models.BookStub.objects.filter(_word_starts_with('title', prefix)) - authors = pdcounter_models.Author.objects.filter(_word_starts_with('name', prefix)) - - books = models.Book.objects.filter(_word_starts_with('title', prefix)) - tags = models.Tag.objects.filter(_word_starts_with('name', prefix)) - if user and user.is_authenticated(): - tags = tags.filter(~Q(category='set') | Q(user=user)) - else: - tags = tags.exclude(category='set') - - prefix_regexp = re.compile(_word_starts_with_regexp(prefix)) - return list(books) + list(tags) + [app for app in _apps if prefix_regexp.search(app.lower)] + list(book_stubs) + list(authors) - - -def _get_result_link(match, tag_list): - if isinstance(match, models.Tag): - return reverse('catalogue.views.tagged_object_list', - kwargs={'tags': '/'.join(tag.url_chunk for tag in tag_list + [match])} - ) - elif isinstance(match, App): - return match.view() - else: - return match.get_absolute_url() - - -def _get_result_type(match): - if isinstance(match, models.Book) or isinstance(match, pdcounter_models.BookStub): - match_type = 'book' - else: - match_type = match.category - return match_type - - -def books_starting_with(prefix): - prefix = prefix.lower() - return models.Book.objects.filter(_word_starts_with('title', prefix)) - - -def find_best_matches(query, user=None): - """ Finds a models.Book, Tag, models.BookStub or Author best matching a query. - - Returns a with: - - zero elements when nothing is found, - - one element when a best result is found, - - more then one element on multiple exact matches - - Raises a ValueError on too short a query. - """ - - query = query.lower() - if len(query) < 2: - raise ValueError("query must have at least two characters") - - result = tuple(_tags_starting_with(query, user)) - # remove pdcounter stuff - book_titles = set(match.pretty_title().lower() for match in result - if isinstance(match, models.Book)) - authors = set(match.name.lower() for match in result - if isinstance(match, models.Tag) and match.category == 'author') - result = tuple(res for res in result if not ( - (isinstance(res, pdcounter_models.BookStub) and res.pretty_title().lower() in book_titles) - or (isinstance(res, pdcounter_models.Author) and res.name.lower() in authors) - )) - - exact_matches = tuple(res for res in result if res.name.lower() == query) - if exact_matches: - return exact_matches - else: - return tuple(result)[:1] - - -def search(request): - tags = request.GET.get('tags', '') - prefix = request.GET.get('q', '') - - try: - tag_list = models.Tag.get_tag_list(tags) - except: - tag_list = [] - - try: - result = find_best_matches(prefix, request.user) - except ValueError: - return render_to_response('catalogue/search_too_short.html', {'tags':tag_list, 'prefix':prefix}, - context_instance=RequestContext(request)) - - if len(result) == 1: - return HttpResponseRedirect(_get_result_link(result[0], tag_list)) - elif len(result) > 1: - return render_to_response('catalogue/search_multiple_hits.html', - {'tags':tag_list, 'prefix':prefix, 'results':((x, _get_result_link(x, tag_list), _get_result_type(x)) for x in result)}, - context_instance=RequestContext(request)) - else: - form = PublishingSuggestForm(initial={"books": prefix + ", "}) - return render_to_response('catalogue/search_no_hits.html', - {'tags':tag_list, 'prefix':prefix, "pubsuggest_form": form}, - context_instance=RequestContext(request)) - - -def tags_starting_with(request): - prefix = request.GET.get('q', '') - # Prefix must have at least 2 characters - if len(prefix) < 2: - return HttpResponse('') - tags_list = [] - result = "" - for tag in _tags_starting_with(prefix, request.user): - if not tag.name in tags_list: - result += "\n" + tag.name - tags_list.append(tag.name) - return HttpResponse(result) - -def json_tags_starting_with(request, callback=None): - # Callback for JSONP - prefix = request.GET.get('q', '') - callback = request.GET.get('callback', '') - # Prefix must have at least 2 characters - if len(prefix) < 2: - return HttpResponse('') - tags_list = [] - for tag in _tags_starting_with(prefix, request.user): - if not tag.name in tags_list: - tags_list.append(tag.name) - if request.GET.get('mozhint', ''): - result = [prefix, tags_list] - else: - result = {"matches": tags_list} - response = JsonResponse(result, safe=False) - if callback: - response.content = callback + "(" + response.content + ");" - return response - - -# ========= -# = Admin = -# ========= -@login_required -@staff_required -def import_book(request): - """docstring for import_book""" - book_import_form = forms.BookImportForm(request.POST, request.FILES) - if book_import_form.is_valid(): - try: - book_import_form.save() - except: - import sys - import pprint - import traceback - info = sys.exc_info() - exception = pprint.pformat(info[1]) - tb = '\n'.join(traceback.format_tb(info[2])) - return HttpResponse(_("An error occurred: %(exception)s\n\n%(tb)s") % {'exception':exception, 'tb':tb}, mimetype='text/plain') - return HttpResponse(_("Book imported successfully")) - else: - return HttpResponse(_("Error importing file: %r") % book_import_form.errors) - - -# info views for API - -def book_info(request, id, lang='pl'): - book = get_object_or_404(models.Book, id=id) - # set language by hand - translation.activate(lang) - return render_to_response('catalogue/book_info.html', locals(), - context_instance=RequestContext(request)) - - -def tag_info(request, id): - tag = get_object_or_404(models.Tag, id=id) - return HttpResponse(tag.description) - - -def download_zip(request, format, slug=None): - url = None - if format in models.Book.ebook_formats: - url = models.Book.zip_format(format) - elif format in ('mp3', 'ogg') and slug is not None: - book = get_object_or_404(models.Book, slug=slug) - url = book.zip_audiobooks(format) - else: - raise Http404('No format specified for zip package') - return HttpResponseRedirect(urlquote_plus(settings.MEDIA_URL + url, safe='/?=')) - - -class CustomPDFFormView(AjaxableFormView): - form_class = forms.CustomPDFForm - title = ugettext_lazy('Download custom PDF') - submit = ugettext_lazy('Download') - honeypot = True - - def __call__(self, *args, **kwargs): - if settings.NO_CUSTOM_PDF: - raise Http404('Custom PDF is disabled') - return super(CustomPDFFormView, self).__call__(*args, **kwargs) - - def form_args(self, request, obj): - """Override to parse view args and give additional args to the form.""" - return (obj,), {} - - def get_object(self, request, slug, *args, **kwargs): - return get_object_or_404(models.Book, slug=slug) - - def context_description(self, request, obj): - return obj.pretty_title() - - -#### -# Includes -#### - - -@ssi_included -def book_mini(request, pk, with_link=True): - book = get_object_or_404(models.Book, pk=pk) - author_str = ", ".join(tag.name - for tag in book.tags.filter(category='author')) - return render(request, 'catalogue/book_mini_box.html', { - 'book': book, - 'author_str': author_str, - 'with_link': with_link, - 'show_lang': book.language_code() != settings.LANGUAGE_CODE, - }) - - -@ssi_included(get_ssi_vars=lambda pk: (lambda ipk: ( - ('ssify.get_csrf_token',), - ('social_tags.likes_book', (ipk,)), - ('social_tags.book_shelf_tags', (ipk,)), - ))(ssi_expect(pk, int))) -def book_short(request, pk): - book = get_object_or_404(models.Book, pk=pk) - stage_note, stage_note_url = book.stage_note() - - return render(request, 'catalogue/book_short.html', { - 'book': book, - 'has_audio': book.has_media('mp3'), - 'main_link': book.get_absolute_url(), - 'parents': book.parents(), - 'tags': split_tags(book.tags.exclude(category__in=('set', 'theme'))), - 'show_lang': book.language_code() != settings.LANGUAGE_CODE, - 'stage_note': stage_note, - 'stage_note_url': stage_note_url, - }) - - -@ssi_included(get_ssi_vars=lambda pk: book_short.get_ssi_vars(pk) + - (lambda ipk: ( - ('social_tags.choose_cite', [ipk]), - ('catalogue_tags.choose_fragment', [ipk], { - 'unless': V('social_tags.choose_cite', [ipk])}), - ))(ssi_expect(pk, int))) -def book_wide(request, pk): - book = get_object_or_404(models.Book, pk=pk) - stage_note, stage_note_url = book.stage_note() - extra_info = book.extra_info - - return render(request, 'catalogue/book_wide.html', { - 'book': book, - 'has_audio': book.has_media('mp3'), - 'parents': book.parents(), - 'tags': split_tags(book.tags.exclude(category__in=('set', 'theme'))), - 'show_lang': book.language_code() != settings.LANGUAGE_CODE, - 'stage_note': stage_note, - 'stage_note_url': stage_note_url, - - 'main_link': reverse('book_text', args=[book.slug]) if book.html_file else None, - 'extra_info': extra_info, - 'hide_about': extra_info.get('about', '').startswith('http://wiki.wolnepodreczniki.pl'), - 'themes': book.related_themes(), - }) - - -@ssi_included -def fragment_short(request, pk): - fragment = get_object_or_404(models.Fragment, pk=pk) - return render(request, 'catalogue/fragment_short.html', - {'fragment': fragment}) - - -@ssi_included -def fragment_promo(request, pk): - fragment = get_object_or_404(models.Fragment, pk=pk) - return render(request, 'catalogue/fragment_promo.html', { - 'fragment': fragment - }) diff --git a/apps/chunks/__init__.py b/apps/chunks/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/chunks/admin.py b/apps/chunks/admin.py deleted file mode 100644 index 61e9f8757..000000000 --- a/apps/chunks/admin.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.contrib import admin - -from chunks.models import Chunk, Attachment - - -class ChunkAdmin(admin.ModelAdmin): - list_display = ('key', 'description',) - search_fields = ('key', 'content',) - -admin.site.register(Chunk, ChunkAdmin) - - -class AttachmentAdmin(admin.ModelAdmin): - list_display = ('key',) - search_fields = ('key',) - -admin.site.register(Attachment, AttachmentAdmin) diff --git a/apps/chunks/locale/de/LC_MESSAGES/django.mo b/apps/chunks/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index b9a35c717..000000000 Binary files a/apps/chunks/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/de/LC_MESSAGES/django.po b/apps/chunks/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index 8451d6319..000000000 --- a/apps/chunks/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,74 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-04-11 22:56+0100\n" -"Last-Translator: Kamil <kjaklukowski@gmail.com>\n" -"Language-Team: \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "Schlüssel" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "Die einzigartige Bezeichnung für dieses Chunk von Inhalten" - -#: models.py:12 -msgid "description" -msgstr "Beschreibung" - -#: models.py:13 -msgid "content" -msgstr "Inhalt" - -#: models.py:17 -msgid "chunk" -msgstr "Chunk" - -#: models.py:18 -msgid "chunks" -msgstr "Chunks" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "Die einzigartige Bezeichnung für diese Beilage" - -#: models.py:38 -msgid "attachment" -msgstr "Beilage" - -#: models.py:38 -msgid "attachments" -msgstr "Beilagen" - -#~ msgid "title" -#~ msgstr "Titel" - -#~ msgid "slug" -#~ msgstr "Slug" - -#~ msgid "file" -#~ msgstr "Datei" - -#~ msgid "author" -#~ msgstr "Autor" - -#~ msgid "slideshare ID" -#~ msgstr "Dia-ID" - -#~ msgid "HTML" -#~ msgstr "HTML" - -#~ msgid "document" -#~ msgstr "Dokument" diff --git a/apps/chunks/locale/en/LC_MESSAGES/django.mo b/apps/chunks/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index 948c8ead2..000000000 Binary files a/apps/chunks/locale/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/en/LC_MESSAGES/django.po b/apps/chunks/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index fa9b726c4..000000000 --- a/apps/chunks/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,53 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 20:05+0100\n" -"Last-Translator: xxx <xxx>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "key" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "A unique name for this piece of content" - -#: models.py:12 -msgid "description" -msgstr "description" - -#: models.py:13 -msgid "content" -msgstr "content" - -#: models.py:17 -msgid "chunk" -msgstr "piece" - -#: models.py:18 -msgid "chunks" -msgstr "pieces" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "A unique name for this attachment" - -#: models.py:38 -msgid "attachment" -msgstr "attachment" - -#: models.py:38 -msgid "attachments" -msgstr "attachments" diff --git a/apps/chunks/locale/es/LC_MESSAGES/django.mo b/apps/chunks/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index f476287e0..000000000 Binary files a/apps/chunks/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/es/LC_MESSAGES/django.po b/apps/chunks/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index f5c97195c..000000000 --- a/apps/chunks/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,53 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-18 13:02+0100\n" -"Last-Translator: Anna Jopp <aniajopp@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "clave" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "El nombre único para este elemento del contenido" - -#: models.py:12 -msgid "description" -msgstr "descripción" - -#: models.py:13 -msgid "content" -msgstr "contenido" - -#: models.py:17 -msgid "chunk" -msgstr "elemento" - -#: models.py:18 -msgid "chunks" -msgstr "elementos" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "El nombre único para este archivo adjunto" - -#: models.py:38 -msgid "attachment" -msgstr "archivo adjunto" - -#: models.py:38 -msgid "attachments" -msgstr "archivos adjuntos" diff --git a/apps/chunks/locale/fr/LC_MESSAGES/django.mo b/apps/chunks/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index 2ededce27..000000000 Binary files a/apps/chunks/locale/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/fr/LC_MESSAGES/django.po b/apps/chunks/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index 21730632e..000000000 --- a/apps/chunks/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,53 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-22 20:52+0100\n" -"Last-Translator: Ela Janota <amarillis5@wp.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "clé" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "Un nom unique pour ce fragment du contenu" - -#: models.py:12 -msgid "description" -msgstr "description" - -#: models.py:13 -msgid "content" -msgstr "contenu" - -#: models.py:17 -msgid "chunk" -msgstr "fragment" - -#: models.py:18 -msgid "chunks" -msgstr "fragments" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "Un nom unique pour cette pièce jointe" - -#: models.py:38 -msgid "attachment" -msgstr "pièce jointe" - -#: models.py:38 -msgid "attachments" -msgstr "pièces jointes" diff --git a/apps/chunks/locale/it/LC_MESSAGES/django.mo b/apps/chunks/locale/it/LC_MESSAGES/django.mo deleted file mode 100644 index 1f02d2425..000000000 Binary files a/apps/chunks/locale/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/it/LC_MESSAGES/django.po b/apps/chunks/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index 1e17a5fb3..000000000 --- a/apps/chunks/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,54 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-21 16:52+0100\n" -"Last-Translator: xxx\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "Chiave" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "un nome unico per questo allegato" - -#: models.py:12 -msgid "description" -msgstr "descrizione" - -#: models.py:13 -msgid "content" -msgstr "contenuto" - -#: models.py:17 -msgid "chunk" -msgstr "blocco" - -#: models.py:18 -msgid "chunks" -msgstr "blocchi" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "Un nome unico per questo allegato" - -#: models.py:38 -msgid "attachment" -msgstr "allegato" - -#: models.py:38 -msgid "attachments" -msgstr "allegati" diff --git a/apps/chunks/locale/jp/LC_MESSAGES/django.mo b/apps/chunks/locale/jp/LC_MESSAGES/django.mo deleted file mode 100644 index c9739db34..000000000 Binary files a/apps/chunks/locale/jp/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/jp/LC_MESSAGES/django.po b/apps/chunks/locale/jp/LC_MESSAGES/django.po deleted file mode 100644 index ceae77c94..000000000 --- a/apps/chunks/locale/jp/LC_MESSAGES/django.po +++ /dev/null @@ -1,54 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "" - -#: models.py:12 -msgid "description" -msgstr "" - -#: models.py:13 -msgid "content" -msgstr "" - -#: models.py:17 -msgid "chunk" -msgstr "" - -#: models.py:18 -msgid "chunks" -msgstr "" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "" - -#: models.py:38 -msgid "attachment" -msgstr "" - -#: models.py:38 -msgid "attachments" -msgstr "" diff --git a/apps/chunks/locale/lt/LC_MESSAGES/django.mo b/apps/chunks/locale/lt/LC_MESSAGES/django.mo deleted file mode 100644 index 582f7d416..000000000 Binary files a/apps/chunks/locale/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/lt/LC_MESSAGES/django.po b/apps/chunks/locale/lt/LC_MESSAGES/django.po deleted file mode 100644 index 5499a2129..000000000 --- a/apps/chunks/locale/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,54 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-01 16:13+0100\n" -"Last-Translator: Aneta\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "raktas" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "Unikalus Å¡io turinio gabalo pavadnimas" - -#: models.py:12 -msgid "description" -msgstr "apraÅ¡ymas" - -#: models.py:13 -msgid "content" -msgstr "turinys" - -#: models.py:17 -msgid "chunk" -msgstr "gabalas" - -#: models.py:18 -msgid "chunks" -msgstr "gabalai" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "Unikalus Å¡io priedo pavadnimas" - -#: models.py:38 -msgid "attachment" -msgstr "priedas" - -#: models.py:38 -msgid "attachments" -msgstr "priedai" diff --git a/apps/chunks/locale/pl/LC_MESSAGES/django.mo b/apps/chunks/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 54db07239..000000000 Binary files a/apps/chunks/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/pl/LC_MESSAGES/django.po b/apps/chunks/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 176e57df5..000000000 --- a/apps/chunks/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,54 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2010-05-19 16:19\n" -"Last-Translator: <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "klucz" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "Unikalna nazwa dla tego kawaÅka treÅci" - -#: models.py:12 -msgid "description" -msgstr "opis" - -#: models.py:13 -msgid "content" -msgstr "zawartoÅÄ" - -#: models.py:17 -msgid "chunk" -msgstr "kawaÅek" - -#: models.py:18 -msgid "chunks" -msgstr "kawaÅki" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "Unikalna nazwa dla tego zaÅÄ cznika" - -#: models.py:38 -msgid "attachment" -msgstr "zaÅÄ cznik" - -#: models.py:38 -msgid "attachments" -msgstr "zaÅÄ czniki" diff --git a/apps/chunks/locale/ru/LC_MESSAGES/django.mo b/apps/chunks/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index ebf2dad2b..000000000 Binary files a/apps/chunks/locale/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/ru/LC_MESSAGES/django.po b/apps/chunks/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index 5ba98838b..000000000 --- a/apps/chunks/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,53 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 22:10+0100\n" -"Last-Translator: xxx <xxx>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "клÑÑ" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "УникалÑное Ð¸Ð¼Ñ Ð´Ð»Ñ ÑÑого ÑÑагменÑа ÑодеÑжаниÑ" - -#: models.py:12 -msgid "description" -msgstr "опиÑание" - -#: models.py:13 -msgid "content" -msgstr "ÑодеÑжание" - -#: models.py:17 -msgid "chunk" -msgstr "ÑÑагменÑ" - -#: models.py:18 -msgid "chunks" -msgstr "ÑÑагменÑÑ" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "УникалÑное Ð¸Ð¼Ñ Ð´Ð»Ñ ÑÑого пÑиложениÑ" - -#: models.py:38 -msgid "attachment" -msgstr "пÑиложение" - -#: models.py:38 -msgid "attachments" -msgstr "пÑиложениÑ" diff --git a/apps/chunks/locale/uk/LC_MESSAGES/django.mo b/apps/chunks/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index 60dbea6a6..000000000 Binary files a/apps/chunks/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/chunks/locale/uk/LC_MESSAGES/django.po b/apps/chunks/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index 620d87341..000000000 --- a/apps/chunks/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,53 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 17:29+0100\n" -"Last-Translator: xxx <xxx>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 models.py:33 -msgid "key" -msgstr "клÑÑ" - -#: models.py:11 -msgid "A unique name for this chunk of content" -msgstr "УнÑкалÑна назва Ð´Ð»Ñ ÑÑÑÑ ÑаÑÑини змÑÑÑÑ" - -#: models.py:12 -msgid "description" -msgstr "опиÑ" - -#: models.py:13 -msgid "content" -msgstr "змÑÑÑ" - -#: models.py:17 -msgid "chunk" -msgstr "ÑаÑÑина" - -#: models.py:18 -msgid "chunks" -msgstr "ÑаÑÑини" - -#: models.py:33 -msgid "A unique name for this attachment" -msgstr "УнÑкалÑна назва Ð´Ð»Ñ ÑÑого додаÑкÑ" - -#: models.py:38 -msgid "attachment" -msgstr "додаÑок" - -#: models.py:38 -msgid "attachments" -msgstr "додаÑки" diff --git a/apps/chunks/migrations/0001_initial.py b/apps/chunks/migrations/0001_initial.py deleted file mode 100644 index 878e4fbfb..000000000 --- a/apps/chunks/migrations/0001_initial.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Attachment', - fields=[ - ('key', models.CharField(help_text='A unique name for this attachment', max_length=255, serialize=False, verbose_name='key', primary_key=True)), - ('attachment', models.FileField(upload_to=b'chunks/attachment')), - ], - options={ - 'ordering': ('key',), - 'verbose_name': 'attachment', - 'verbose_name_plural': 'attachments', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Chunk', - fields=[ - ('key', models.CharField(help_text='A unique name for this piece of content', max_length=255, serialize=False, verbose_name='key', primary_key=True)), - ('description', models.CharField(max_length=255, null=True, verbose_name='Description', blank=True)), - ('content', models.TextField(null=True, verbose_name='content', blank=True)), - ('content_de', models.TextField(null=True, verbose_name='content', blank=True)), - ('content_en', models.TextField(null=True, verbose_name='content', blank=True)), - ('content_es', models.TextField(null=True, verbose_name='content', blank=True)), - ('content_fr', models.TextField(null=True, verbose_name='content', blank=True)), - ('content_it', models.TextField(null=True, verbose_name='content', blank=True)), - ('content_lt', models.TextField(null=True, verbose_name='content', blank=True)), - ('content_pl', models.TextField(null=True, verbose_name='content', blank=True)), - ('content_ru', models.TextField(null=True, verbose_name='content', blank=True)), - ('content_uk', models.TextField(null=True, verbose_name='content', blank=True)), - ], - options={ - 'ordering': ('key',), - 'verbose_name': 'piece', - 'verbose_name_plural': 'pieces', - }, - bases=(models.Model,), - ), - ] diff --git a/apps/chunks/migrations/0002_auto_20140911_1253.py b/apps/chunks/migrations/0002_auto_20140911_1253.py deleted file mode 100644 index 09d541cd4..000000000 --- a/apps/chunks/migrations/0002_auto_20140911_1253.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -def null_to_blank(apps, schema_editor): - Chunk = apps.get_model("chunks", "Chunk") - Chunk.objects.filter(content=None).update(content='') - Chunk.objects.filter(description=None).update(description='') - - -class Migration(migrations.Migration): - - dependencies = [ - ('chunks', '0001_initial'), - ] - - operations = [ - migrations.RunPython(null_to_blank), - migrations.AlterField( - model_name='chunk', - name='content', - field=models.TextField(verbose_name='content', blank=True), - ), - migrations.AlterField( - model_name='chunk', - name='description', - field=models.CharField(max_length=255, verbose_name='Description', blank=True), - ), - ] diff --git a/apps/chunks/migrations/0003_auto_20151221_1225.py b/apps/chunks/migrations/0003_auto_20151221_1225.py deleted file mode 100644 index a7d7ca33b..000000000 --- a/apps/chunks/migrations/0003_auto_20151221_1225.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('chunks', '0002_auto_20140911_1253'), - ] - - operations = [ - migrations.AlterModelOptions( - name='chunk', - options={'ordering': ('key',), 'verbose_name': 'chunk', 'verbose_name_plural': 'chunks'}, - ), - migrations.AlterField( - model_name='chunk', - name='description', - field=models.CharField(max_length=255, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='chunk', - name='key', - field=models.CharField(help_text='A unique name for this chunk of content', max_length=255, serialize=False, verbose_name='key', primary_key=True), - ), - ] diff --git a/apps/chunks/migrations/__init__.py b/apps/chunks/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/chunks/models.py b/apps/chunks/models.py deleted file mode 100644 index 7f5410b24..000000000 --- a/apps/chunks/models.py +++ /dev/null @@ -1,45 +0,0 @@ -from django.conf import settings -from django.db import models -from django.utils.translation import ugettext_lazy as _ -from ssify import flush_ssi_includes - - -class Chunk(models.Model): - """ - A Chunk is a piece of content associated with a unique key that can be inserted into - any template with the use of a special template tag. - """ - key = models.CharField(_('key'), help_text=_('A unique name for this chunk of content'), primary_key=True, max_length=255) - description = models.CharField(_('description'), blank=True, max_length=255) - content = models.TextField(_('content'), blank=True) - - class Meta: - ordering = ('key',) - verbose_name = _('chunk') - verbose_name_plural = _('chunks') - - def __unicode__(self): - return self.key - - def save(self, *args, **kwargs): - ret = super(Chunk, self).save(*args, **kwargs) - self.flush_includes() - return ret - - def flush_includes(self): - flush_ssi_includes([ - '/chunks/chunk/%s.%s.html' % (self.key, lang) - for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) - - - -class Attachment(models.Model): - key = models.CharField(_('key'), help_text=_('A unique name for this attachment'), primary_key=True, max_length=255) - attachment = models.FileField(upload_to='chunks/attachment') - - class Meta: - ordering = ('key',) - verbose_name, verbose_name_plural = _('attachment'), _('attachments') - - def __unicode__(self): - return self.key diff --git a/apps/chunks/translation.py b/apps/chunks/translation.py deleted file mode 100644 index 46f1c7ac4..000000000 --- a/apps/chunks/translation.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# - -from modeltranslation.translator import translator, TranslationOptions -from chunks.models import Chunk - -class ChunkTranslationOptions(TranslationOptions): - fields = ('content',) - -translator.register(Chunk, ChunkTranslationOptions) diff --git a/apps/chunks/urls.py b/apps/chunks/urls.py deleted file mode 100644 index 005cadd02..000000000 --- a/apps/chunks/urls.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url - -urlpatterns = patterns('chunks.views', - url(r'^chunk/(?P<key>.+)\.(?P<lang>.+)\.html$', 'chunk', name='chunk'), -) diff --git a/apps/chunks/views.py b/apps/chunks/views.py deleted file mode 100644 index cbcf5bf6c..000000000 --- a/apps/chunks/views.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.http import HttpResponse -from ssify import ssi_included -from .models import Chunk - -@ssi_included -def chunk(request, key): - chunk, created = Chunk.objects.get_or_create(key=key) - return HttpResponse(chunk.content) diff --git a/apps/dictionary/__init__.py b/apps/dictionary/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/dictionary/constants.py b/apps/dictionary/constants.py deleted file mode 100644 index e99dc3ff0..000000000 --- a/apps/dictionary/constants.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from __future__ import unicode_literals - -from django.utils.translation import ugettext_lazy as _ - - -FN_TYPES = { - 'pa': _("author's footnotes"), - 'pe': _("Wolne Lektury editorial footnotes"), - 'pr': _("source editorial footnotes"), - 'pt': _("translator's footnotes"), -} diff --git a/apps/dictionary/locale/pl/LC_MESSAGES/django.mo b/apps/dictionary/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index c95d7b4e5..000000000 Binary files a/apps/dictionary/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/dictionary/locale/pl/LC_MESSAGES/django.po b/apps/dictionary/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 1cb8844e8..000000000 --- a/apps/dictionary/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,79 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: WolneLektury-dictionary\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-10-24 11:58+0200\n" -"PO-Revision-Date: 2014-10-24 11:58+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: pl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 1.5.4\n" - -#: constants.py:11 -msgid "author's footnotes" -msgstr "przypisy autorskie" - -#: constants.py:12 -msgid "Wolne Lektury editorial footnotes" -msgstr "przypisy redaktorów Wolnych Lektur" - -#: constants.py:13 -msgid "source editorial footnotes" -msgstr "przypisy redakcji źródÅa" - -#: constants.py:14 -msgid "translator's footnotes" -msgstr "przypisy tÅumacza" - -#: templates/dictionary/note_list.html:8 -#: templates/dictionary/note_list.html:12 -msgid "Footnotes" -msgstr "Przypisy" - -#: templates/dictionary/note_list.html:17 -msgid "By first letter" -msgstr "Pierwsza litera" - -#: templates/dictionary/note_list.html:19 -#: templates/dictionary/note_list.html:21 -#: templates/dictionary/note_list.html:37 -#: templates/dictionary/note_list.html:39 -#: templates/dictionary/note_list.html:56 -#: templates/dictionary/note_list.html:58 -#: templates/dictionary/note_list.html:74 -#: templates/dictionary/note_list.html:76 -msgid "all" -msgstr "wszystkie" - -#: templates/dictionary/note_list.html:35 -msgid "By type" -msgstr "WedÅug typu" - -#: templates/dictionary/note_list.html:54 -msgid "By qualifier" -msgstr "WedÅug kwalifikatora" - -#: templates/dictionary/note_list.html:72 -msgid "By language" -msgstr "WedÅug jÄzyka" - -#: templates/dictionary/note_list.html:92 -#, python-format -msgid "%(c)s footnote found" -msgid_plural "%(c)s footnotes found" -msgstr[0] "Znaleziono %(c)s przypis." -msgstr[1] "Znaleziono %(c)s przypisy." -msgstr[2] "Znaleziono %(c)s przypisów." - -#~ msgid "Footnotes on WolneLektury.pl" -#~ msgstr "Przypisy w WolneLektury.pl" diff --git a/apps/dictionary/migrations/0001_initial.py b/apps/dictionary/migrations/0001_initial.py deleted file mode 100644 index 1908a840a..000000000 --- a/apps/dictionary/migrations/0001_initial.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Note', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('anchor', models.CharField(max_length=64)), - ('html', models.TextField()), - ('sort_key', models.CharField(max_length=128, db_index=True)), - ('book', models.ForeignKey(to='catalogue.Book')), - ], - options={ - 'ordering': ['sort_key'], - }, - bases=(models.Model,), - ), - ] diff --git a/apps/dictionary/migrations/0002_auto_20141006_1422.py b/apps/dictionary/migrations/0002_auto_20141006_1422.py deleted file mode 100644 index a9bad32b9..000000000 --- a/apps/dictionary/migrations/0002_auto_20141006_1422.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0004_remove_booktags_count_related_info'), - ('dictionary', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='NoteSource', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('anchor', models.CharField(max_length=64)), - ('book', models.ForeignKey(to='catalogue.Book')), - ('note', models.ForeignKey(to='dictionary.Note')), - ], - options={ - 'ordering': ['book'], - }, - bases=(models.Model,), - ), - migrations.RemoveField( - model_name='note', - name='anchor', - ), - migrations.RemoveField( - model_name='note', - name='book', - ), - migrations.AddField( - model_name='note', - name='fn_type', - field=models.CharField(default='', max_length=10, db_index=True), - preserve_default=False, - ), - migrations.AddField( - model_name='note', - name='language', - field=models.CharField(default='', max_length=10, db_index=True), - preserve_default=False, - ), - migrations.AddField( - model_name='note', - name='qualifier', - field=models.CharField(default='', max_length=128, db_index=True, blank=True), - preserve_default=False, - ), - ] diff --git a/apps/dictionary/migrations/0003_auto_20141023_1445.py b/apps/dictionary/migrations/0003_auto_20141023_1445.py deleted file mode 100644 index ee4beeebe..000000000 --- a/apps/dictionary/migrations/0003_auto_20141023_1445.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('dictionary', '0002_auto_20141006_1422'), - ] - - operations = [ - migrations.CreateModel( - name='Qualifier', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('qualifier', models.CharField(unique=True, max_length=128, db_index=True)), - ('name', models.CharField(max_length=255)), - ], - options={ - 'ordering': ['qualifier'], - }, - bases=(models.Model,), - ), - migrations.RemoveField( - model_name='note', - name='qualifier', - ), - migrations.AddField( - model_name='note', - name='qualifiers', - field=models.ManyToManyField(to='dictionary.Qualifier', null=True), - preserve_default=True, - ), - ] diff --git a/apps/dictionary/migrations/0004_auto_20151221_1225.py b/apps/dictionary/migrations/0004_auto_20151221_1225.py deleted file mode 100644 index ee7252ce0..000000000 --- a/apps/dictionary/migrations/0004_auto_20151221_1225.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dictionary', '0003_auto_20141023_1445'), - ] - - operations = [ - migrations.AlterField( - model_name='note', - name='qualifiers', - field=models.ManyToManyField(to='dictionary.Qualifier'), - ), - ] diff --git a/apps/dictionary/migrations/__init__.py b/apps/dictionary/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/dictionary/models.py b/apps/dictionary/models.py deleted file mode 100644 index cc2b0ac51..000000000 --- a/apps/dictionary/models.py +++ /dev/null @@ -1,91 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.db import models, transaction -from celery.task import task -from sortify import sortify -from celery.utils.log import get_task_logger - -task_logger = get_task_logger(__name__) - -from catalogue.models import Book - - -class Qualifier(models.Model): - qualifier = models.CharField(max_length=128, db_index=True, unique=True) - name = models.CharField(max_length=255) - - class Meta: - ordering = ['qualifier'] - - def __unicode__(self): - return self.name or self.qualifier - - -class Note(models.Model): - """Represents a single annotation from a book.""" - html = models.TextField() - sort_key = models.CharField(max_length=128, db_index=True) - fn_type = models.CharField(max_length=10, db_index=True) - qualifiers = models.ManyToManyField(Qualifier) - language = models.CharField(max_length=10, db_index=True) - - class Meta: - ordering = ['sort_key'] - - -class NoteSource(models.Model): - """Represents a single annotation from a book.""" - note = models.ForeignKey(Note) - book = models.ForeignKey(Book) - anchor = models.CharField(max_length=64) - - class Meta: - ordering = ['book'] - - -@task(ignore_result=True) -def build_notes(book): - task_logger.info(book.slug) - with transaction.atomic(): - book.notesource_set.all().delete() - if book.html_file: - from librarian import html - from librarian.fn_qualifiers import FN_QUALIFIERS - - for anchor, fn_type, qualifiers, text_str, html_str in \ - html.extract_annotations(book.html_file.path): - sort_key = sortify(text_str).strip()[:128] - - language = book.language - note = None - notes = Note.objects.filter(sort_key=sort_key, - fn_type=fn_type, - language=language, html=html_str) - if notes: - note = notes[0] - else: - note = Note.objects.create( - sort_key=sort_key, - html=html_str, - fn_type=fn_type, - language=language - ) - - qualifier_objects = [] - for qualifier in qualifiers: - obj, created = Qualifier.objects.get_or_create( - qualifier=qualifier, defaults={ - 'name': FN_QUALIFIERS.get(qualifier, '') - }) - qualifier_objects.append(obj) - note.qualifiers = qualifier_objects - note.notesource_set.create(book=book, anchor=anchor) - - Note.objects.filter(notesource=None).delete() - - -def notes_from_book(sender, instance, **kwargs): - build_notes.delay(instance) -Book.html_built.connect(notes_from_book) diff --git a/apps/dictionary/templates/dictionary/note_list.html b/apps/dictionary/templates/dictionary/note_list.html deleted file mode 100755 index 9428655b0..000000000 --- a/apps/dictionary/templates/dictionary/note_list.html +++ /dev/null @@ -1,116 +0,0 @@ -{% extends "base.html" %} -{% load i18n pagination_tags %} -{% load set_get from set_get %} - - -{% block bodyid %}footnotes{% endblock %} - -{% block titleextra %}{% trans "Footnotes" %}{% endblock %} - - -{% block body %} - <h1>{% trans "Footnotes" %}</h1> - -<div class="normal-text"> - -<p> -{% trans "By first letter" %}: -{% if letter %} - <a href='?{% set_get "page" "ltr" %}'>{% trans "all" %}</a> -{% else %} - <strong>{% trans "all" %}</strong> -{% endif %} - -{% for let in letters %} - | - {% if let == letter %} - <strong>{{ let|upper }}</strong> - {% else %} - <a href='?{% set_get "page" ltr=let %}'>{{ let|upper }}</a> - {% endif %} -{% endfor %} -</p> - -<p> -{% trans "By type" %}: -{% if fn_type %} - <a href='?{% set_get "page" "type" %}'>{% trans "all" %}</a> -{% else %} - <strong>{% trans "all" %}</strong> -{% endif %} - -{% for fnt, fnt_name in fn_types %} - | - {% if fnt == fn_type %} - <strong>{{ fnt_name }}</strong> - {% else %} - <a href='?{% set_get "page" type=fnt %}'>{{ fnt_name }}</a> - {% endif %} -{% endfor %} -</p> - - -<p> -{% trans "By qualifier" %}: -{% if qualifier %} - <a href='?{% set_get "page" "qual" %}'>{% trans "all" %}</a> -{% else %} - <strong>{% trans "all" %}</strong> -{% endif %} - -{% for qual in qualifiers %} - | - {% if qual == qualifier %} - <strong>{{ qual }}</strong> - {% else %} - <a href='?{% set_get "page" qual=qual.qualifier %}'>{{ qual }}</a> - {% endif %} -{% endfor %} -</p> - -<p> -{% trans "By language" %}: -{% if language %} - <a href='?{% set_get "page" "lang" %}'>{% trans "all" %}</a> -{% else %} - <strong>{% trans "all" %}</strong> -{% endif %} - -{% for lang, lang_name in languages %} - | - {% if lang == language %} - <strong>{{ lang_name }}</strong> - {% else %} - <a href='?{% set_get "page" lang=lang %}'>{{ lang_name }}</a> - {% endif %} -{% endfor %} -</p> - -<hr/> - -<p> -{% blocktrans count object_list.count as c %}{{c}} footnote found{% plural %}{{c}} footnotes found{% endblocktrans %} -</p> - -{% if object_list.exists %} - -{% autopaginate object_list 100 %} -{% paginate %} -{% for obj in object_list %} - <div class='dictionary-note'> - {{ obj.html|safe }} - {% for note_source in obj.notesource_set.all %} - <div class='dictionary-note-source'> - <a href='{% url "book_text" note_source.book.slug %}#{{ note_source.anchor }}'>{{ note_source.book.pretty_title }}</a> - (<a href='{{ note_source.book.extra_info.about }}'>źródÅo na Platformie Redakcyjnej</a>) - </div> - {% endfor %} - </div> -{% endfor %} -{% paginate %} - -{% endif %} - -</div> - -{% endblock %} diff --git a/apps/dictionary/templatetags/__init__.py b/apps/dictionary/templatetags/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/dictionary/templatetags/set_get.py b/apps/dictionary/templatetags/set_get.py deleted file mode 100644 index 9afe3e87f..000000000 --- a/apps/dictionary/templatetags/set_get.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import template -from django.utils.http import urlencode - -register = template.Library() - - -@register.simple_tag(takes_context=True) -def set_get(context, *omit, **kwargs): - request = context['request'] - query = request.GET.dict() - for k in omit: - if k in query: - del query[k] - for k, v in kwargs.items(): - query[k] = v - return urlencode(query) diff --git a/apps/dictionary/tests.py b/apps/dictionary/tests.py deleted file mode 100755 index 0c83cf183..000000000 --- a/apps/dictionary/tests.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.core.files.base import ContentFile -from catalogue.test_utils import * -from catalogue.models import Book - - -class DictionaryTests(WLTestCase): - - def setUp(self): - WLTestCase.setUp(self) - self.book_info = BookInfoStub( - author=PersonStub(("Jim",), "Lazy"), - kind="X-Kind", - genre="X-Genre", - epoch="X-Epoch", - **info_args(u"Default Book") - ) - - def test_book_with_footnote(self): - BOOK_TEXT = """<utwor> - <opowiadanie> - <akap><pe><slowo_obce>rose</slowo_obce> --- kind of a flower.</pe></akap> - <akap><pe><slowo_obce>rose</slowo_obce> --- kind of a flower.</pe></akap> - <akap><pe><slowo_obce>rose</slowo_obce> (techn.) --- #FF007F.</pe></akap> - </opowiadanie></utwor> - """ - - book = Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) - - self.assertEqual( - len(self.client.get('/przypisy/').context['object_list']), - 2, - 'There should be two notes on the note list.') - - self.assertEqual( - len(self.client.get('/przypisy/?ltr=a').context['object_list']), - 0, - 'There should not be a note for the letter A.') - - self.assertEqual( - len(self.client.get('/przypisy/?ltr=r').context['object_list']), - 2, - 'Both notes start with the letter R.') - - self.assertEqual( - len(self.client.get('/przypisy/?qual=techn.').context['object_list']), - 1, - 'There should be a note qualified with \'techn.\' qualifier.') - diff --git a/apps/dictionary/urls.py b/apps/dictionary/urls.py deleted file mode 100755 index 2320f4773..000000000 --- a/apps/dictionary/urls.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url -from dictionary.views import NotesView - -urlpatterns = patterns('dictionary.views', - url(r'^$', NotesView.as_view(), name='dictionary_notes'), -) - diff --git a/apps/dictionary/views.py b/apps/dictionary/views.py deleted file mode 100755 index 69c6bf65c..000000000 --- a/apps/dictionary/views.py +++ /dev/null @@ -1,83 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.views.generic.list import ListView -from django.conf import settings -from django.db.models import Count, Q -from catalogue.constants import LANGUAGES_3TO2 -from .constants import FN_TYPES -from .models import Note, Qualifier - - -class NotesView(ListView): - def get_queryset(self): - objects = Note.objects.all() - filters = {} - - try: - self.qualifier = Qualifier.objects.get(qualifier=self.request.GET.get('qual')) - except Qualifier.DoesNotExist: - self.qualifier = None - else: - filters['qualifier'] = Q(qualifiers=self.qualifier) - - self.language = self.request.GET.get('lang') - if self.language: - filters['language'] = Q(language=self.language) - - self.fn_type = self.request.GET.get('type') - if self.fn_type: - filters['fn_type'] = Q(fn_type=self.fn_type) - - self.letter = self.request.GET.get('ltr') - if self.letter == "0-9": - objects = objects.filter(sort_key__regex=r"^[0-9]") - #filters['letter'] = Q(sort_key__regex=r"^[0-9]") - elif self.letter: - objects = objects.filter(sort_key__startswith=self.letter) - #filters['letter'] = Q(sort_key__startswith=self.letter) - - self.letters = ["0-9"] + [chr(a) for a in range(ord('a'), ord('z')+1)] - - nobj = objects - for key, fltr in filters.items(): - if key != 'qualifier': - nobj = nobj.filter(fltr) - self.qualifiers = Qualifier.objects.filter(note__in=nobj).distinct() - - nobj = objects - for key, fltr in filters.items(): - if key != 'language': - nobj = nobj.filter(fltr) - self.languages = nobj.order_by('language').values_list( - 'language', flat=True).distinct() - lang_names = dict(settings.LANGUAGES) - self.languages = [ - (lang, lang_names.get(LANGUAGES_3TO2.get(lang, lang), lang)) - for lang in self.languages] - - nobj = objects - for key, fltr in filters.items(): - if key != 'fn_type': - nobj = nobj.filter(fltr) - self.fn_types = nobj.order_by('fn_type').values_list( - 'fn_type', flat=True).distinct() - self.fn_types = [(fnt, FN_TYPES[fnt]) for fnt in self.fn_types] - - for f in filters.values(): - objects = objects.filter(f) - - return objects - - def get_context_data(self, **kwargs): - context = super(NotesView, self).get_context_data(**kwargs) - context['letters'] = self.letters - context['letter'] = self.letter - context['qualifiers'] = self.qualifiers - context['qualifier'] = self.qualifier - context['languages'] = self.languages - context['language'] = self.language - context['fn_types'] = self.fn_types - context['fn_type'] = self.fn_type - return context diff --git a/apps/funding/__init__.py b/apps/funding/__init__.py deleted file mode 100644 index 9e81e9ec3..000000000 --- a/apps/funding/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings as settings -from catalogue.utils import AppSettings - - -class Settings(AppSettings): - """Default settings for funding app.""" - DEFAULT_LANGUAGE = u'pl' - DEFAULT_AMOUNT = 20 - MIN_AMOUNT = 1 - DAYS_NEAR = 2 - - -app_settings = Settings('FUNDING') diff --git a/apps/funding/admin.py b/apps/funding/admin.py deleted file mode 100644 index d70aef66a..000000000 --- a/apps/funding/admin.py +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.utils.translation import ugettext_lazy as _ -from django.contrib import admin -from .models import Offer, Perk, Funding, Spent - - -class OfferAdmin(admin.ModelAdmin): - model = Offer - list_display = ['title', 'author', 'target', 'sum', 'is_win', 'start', 'end'] - search_fields = ['title', 'author'] - readonly_fields = ('cover_img_tag',) - - -class PerkAdmin(admin.ModelAdmin): - model = Perk - search_fields = ['name', 'long_name'] - list_display = ['name', 'long_name', 'price', 'end_date', 'offer'] - list_filter = ['offer'] - - - -class PayedFilter(admin.SimpleListFilter): - title = _('payment complete') - parameter_name = 'payed' - def lookups(self, request, model_admin): - return ( - ('yes', _('Yes')), - ('no', _('No')), - ) - def queryset(self, request, queryset): - if self.value() == 'yes': - return queryset.exclude(payed_at=None) - elif self.value() == 'no': - return queryset.filter(payed_at=None) - -class PerksFilter(admin.SimpleListFilter): - title = _('perks') - parameter_name = 'perks' - def lookups(self, request, model_admin): - return ( - ('yes', _('Yes')), - ('no', _('No')), - ) - def queryset(self, request, queryset): - if self.value() == 'yes': - return queryset.exclude(perks=None) - elif self.value() == 'no': - return queryset.filter(perks=None) - - -class FundingAdmin(admin.ModelAdmin): - model = Funding - list_display = ['payed_at', 'offer', 'amount', 'name', 'email', 'perk_names'] - search_fields = ['name', 'email', 'offer__title', 'offer__author'] - list_filter = [PayedFilter, 'offer', PerksFilter] - - - -class SpentAdmin(admin.ModelAdmin): - model = Spent - list_display = ['book', 'amount', 'timestamp'] - search_fields = ['book__title'] - - -admin.site.register(Offer, OfferAdmin) -admin.site.register(Perk, PerkAdmin) -admin.site.register(Funding, FundingAdmin) -admin.site.register(Spent, SpentAdmin) diff --git a/apps/funding/forms.py b/apps/funding/forms.py deleted file mode 100644 index 6ed9076dd..000000000 --- a/apps/funding/forms.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import forms -from django.utils import formats -from django.utils.translation import ugettext_lazy as _, ugettext, get_language -from .models import Funding -from .widgets import PerksAmountWidget -from . import app_settings - - -class FundingForm(forms.Form): - required_css_class = 'required' - - amount = forms.DecimalField(label=_("Amount"), decimal_places=2, - widget=PerksAmountWidget()) - name = forms.CharField(label=_("Name"), required=False, - help_text=_("Optional name for public list of contributors")) - email = forms.EmailField(label=_("Contact e-mail"), - help_text=_("We'll use it to contact you about the <strong>details needed for your perks</strong>,<br/>" - "and to send you updates about your payment and the fundraiser status (which you can always turn off).<br/>" - "Your e-mail won't be publicised."), required=False) - - def __init__(self, offer, *args, **kwargs): - self.offer = offer - super(FundingForm, self).__init__(*args, **kwargs) - self.fields['amount'].widget.form_instance = self - - def clean_amount(self): - if self.cleaned_data['amount'] < app_settings.MIN_AMOUNT: - min_amount = app_settings.MIN_AMOUNT - if isinstance(min_amount, float): - min_amount = formats.number_format(min_amount, 2) - raise forms.ValidationError( - ugettext("The minimum amount is %(amount)s PLN.") % { - 'amount': min_amount}) - return self.cleaned_data['amount'] - - def clean(self): - if not self.offer.is_current(): - raise forms.ValidationError(ugettext("This offer is out of date.")) - return self.cleaned_data - - def save(self): - funding = Funding.objects.create( - offer=self.offer, - name=self.cleaned_data['name'], - email=self.cleaned_data['email'], - amount=self.cleaned_data['amount'], - language_code=get_language(), - ) - funding.perks = funding.offer.get_perks(funding.amount) - return funding - diff --git a/apps/funding/locale/pl/LC_MESSAGES/django.mo b/apps/funding/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index e08978e46..000000000 Binary files a/apps/funding/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/funding/locale/pl/LC_MESSAGES/django.po b/apps/funding/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index b1a27359a..000000000 --- a/apps/funding/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,656 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-04-16 13:13+0200\n" -"PO-Revision-Date: 2015-04-16 13:13+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 1.5.4\n" - -#: admin.py:26 -msgid "payment complete" -msgstr "pÅatnoÅÄ doszÅa do skutku" - -#: admin.py:30 admin.py:44 -msgid "Yes" -msgstr "Tak" - -#: admin.py:31 admin.py:45 -msgid "No" -msgstr "Nie" - -#: admin.py:40 models.py:216 models.py:234 -msgid "perks" -msgstr "prezenty" - -#: forms.py:16 templates/funding/wlfund.html:27 -msgid "Amount" -msgstr "Kwota" - -#: forms.py:18 -msgid "Name" -msgstr "ImiÄ i nazwisko na listÄ darczyÅców" - -#: forms.py:19 -msgid "Optional name for public list of contributors" -msgstr "" -"Opcjonalnie imiÄ i nazwisko lub pseudonim do publicznej listy darczyÅców." - -#: forms.py:20 -msgid "Contact e-mail" -msgstr "E-mail kontaktowy" - -#: forms.py:21 -msgid "" -"We'll use it to contact you about the <strong>details needed for your perks</" -"strong>,<br/>and to send you updates about your payment and the fundraiser " -"status (which you can always turn off).<br/>Your e-mail won't be publicised." -msgstr "" -"Użyjemy go do kontaktu w sprawie <strong>danych potrzebnych do realizacji " -"prezentów</strong><br/>i do informowania CiÄ o zmianach statusu pÅatnoÅci i " -"zbiórki (z czego zawsze możesz zrezygnowaÄ).<br/>Twój adres e-mail nie " -"bÄdzie upubliczniony." - -#: forms.py:36 -#, python-format -msgid "The minimum amount is %(amount)s PLN." -msgstr "Minimalna kwota wpÅaty to %(amount)s zÅ." - -#: forms.py:42 -msgid "This offer is out of date." -msgstr "Ta zbiórka jest już nieaktywna." - -#: models.py:25 -msgid "author" -msgstr "autor" - -#: models.py:26 -msgid "title" -msgstr "tytuÅ" - -#: models.py:27 -msgid "slug" -msgstr "slug" - -#: models.py:28 -msgid "description" -msgstr "opis" - -#: models.py:29 -msgid "target" -msgstr "kwota docelowa" - -#: models.py:30 -msgid "start" -msgstr "poczÄ tek" - -#: models.py:31 -msgid "end" -msgstr "koniec" - -#: models.py:32 -msgid "redakcja URL" -msgstr "URL na Redakcji" - -#: models.py:34 -msgid "Published book." -msgstr "Opublikowana ksiÄ Å¼ka." - -#: models.py:35 -msgid "Cover" -msgstr "OkÅadka" - -#: models.py:36 -msgid "Poll" -msgstr "Ankieta" - -#: models.py:38 -msgid "Near-end notifications sent" -msgstr "WysÅano powiadomienia przed koÅcem" - -#: models.py:39 -msgid "End notifications sent" -msgstr "WysÅano powiadomienia o zakoÅczeniu" - -#: models.py:43 -msgid "Cover preview" -msgstr "PodglÄ d okÅadki" - -#: models.py:47 models.py:208 models.py:229 -msgid "offer" -msgstr "zbiórka" - -#: models.py:48 -msgid "offers" -msgstr "zbiórki" - -#: models.py:163 -msgid "The fundraiser has ended!" -msgstr "Zbiórka dobiegÅa koÅca!" - -#: models.py:179 -msgid "The fundraiser will end soon!" -msgstr "Zbiórka niedÅugo siÄ zakoÅczy!" - -#: models.py:193 -msgid "The book you helped fund has been published." -msgstr "KsiÄ Å¼ka, którÄ pomogÅeÅ/-aÅ ufundowaÄ, zostaÅa opublikowana." - -#: models.py:209 -msgid "price" -msgstr "cena" - -#: models.py:210 models.py:230 -msgid "name" -msgstr "nazwa" - -#: models.py:211 -msgid "long name" -msgstr "dÅuga nazwa" - -#: models.py:212 -msgid "end date" -msgstr "data koÅcowa" - -#: models.py:215 -msgid "perk" -msgstr "prezent" - -#: models.py:231 -msgid "email" -msgstr "e-mail" - -#: models.py:232 models.py:314 -msgid "amount" -msgstr "kwota" - -#: models.py:233 -msgid "payed at" -msgstr "data wpÅaty" - -#: models.py:236 -msgid "notifications" -msgstr "powiadomienia" - -#: models.py:240 -msgid "funding" -msgstr "wpÅata" - -#: models.py:241 templates/admin/funding/offer/change_form.html:22 -msgid "fundings" -msgstr "wpÅaty" - -#: models.py:315 -msgid "when" -msgstr "kiedy" - -#: models.py:318 -msgid "money spent on a book" -msgstr "pieniÄ dze wydane na ksiÄ Å¼kÄ" - -#: models.py:319 -msgid "money spent on books" -msgstr "pieniÄ dze wydane na ksiÄ Å¼ki" - -#: models.py:345 templates/funding/thanks.html:6 -#: templates/funding/thanks.html.py:15 -msgid "Thank you for your support!" -msgstr "DziÄkujemy za Twoje wsparcie!" - -#: templates/funding/disable_notifications.html:5 -#: templates/funding/no_thanks.html:5 templates/funding/no_thanks.html.py:9 -msgid "Payment failed" -msgstr "PÅatnoÅÄ nie doszÅa do skutku" - -#: templates/funding/disable_notifications.html:9 -#: templates/funding/disable_notifications.html:16 -msgid "Disable notifications" -msgstr "WyÅÄ cz powiadomienia" - -#: templates/funding/disable_notifications.html:14 -#, python-format -msgid "Are you sure you want to disable notifications for address %(e)s?" -msgstr "Czy na pewno chcesz wyÅÄ czyÄ powiadomienia dla adresu %(e)s?" - -#: templates/funding/disable_notifications.html:21 -#, python-format -msgid "Notifications for address %(e)s have been successfully disabled." -msgstr "Powiadomienia dla adresu %(e)s zostaÅy wyÅÄ czone." - -#: templates/funding/disable_notifications.html:27 -#, python-format -msgid "Return to the <a href=\"%(current)s\">current fundraiser</a>." -msgstr "WrÃ³Ä do <a href=\"%(current)s\">aktualnej zbiórki</a>." - -#: templates/funding/email/base.txt:1 -msgid "Hi" -msgstr "CzeÅÄ" - -#: templates/funding/email/base.txt:4 -msgid "" -"Cheers,\n" -"Wolne Lektury team" -msgstr "" -"Pozdrawiamy\n" -"zespóŠWolnych Lektur" - -#: templates/funding/email/base.txt:8 -msgid "If you don't want to receive any more updates, please visit this page:" -msgstr "JeÅli nie chcesz otrzymywaÄ kolejnych powiadomieÅ, odwiedź tÄ stronÄ:" - -#: templates/funding/email/end.txt:6 -msgid "" -"we succesfully collected the full amount needed\n" -"for the book you contributed to:" -msgstr "udaÅo nam siÄ zebraÄ peÅnÄ kwotÄ na ksiÄ Å¼kÄ, którÄ wsparÅeÅ/-aÅ:" - -#: templates/funding/email/end.txt:12 -msgid "" -"We will now digitize it, develop and publish it in the library,\n" -"in various formats, free for everyone." -msgstr "" -"Teraz jÄ zdigitalizujemy, opracujemy i bezpÅatnie udostÄpnimy w bibliotece w " -"wielu formatach." - -#: templates/funding/email/end.txt:15 -msgid "" -"Your name will be included on the list of contributors, irrespectively\n" -"of the amount of your contribution." -msgstr "" -"Zostaniesz umieszczony/-a na liÅcie darczyÅców, niezależnie od wysokoÅci " -"wpÅaty." - -#: templates/funding/email/end.txt:18 -msgid "" -"We will contact you again about details needed\n" -"to deliver your perks." -msgstr "Skontaktujemy siÄ z TobÄ w sprawie prezentów, które wybraÅeÅ/-aÅ." - -#: templates/funding/email/end.txt:21 -#, python-format -msgid "" -"All of the money remaining after this fundraiser (%(r)s PLN)\n" -"will be spent on liberating other books still waiting for publication." -msgstr "" -"Wszystkie dodatkowe pieniÄ dze pozostaÅe z tej zbiórki (%(r)s PLN)\n" -"zostanÄ przeznaczone na uwolnienie innych ksiÄ Å¼ek czekajÄ cych na publikacjÄ." - -#: templates/funding/email/end.txt:23 templates/funding/email/end.txt.py:34 -msgid "You can see how we're spending these funds on this page:" -msgstr "Możesz zobaczyÄ, jak wydajemy te Årodki, na tej stronie:" - -#: templates/funding/email/end.txt:26 -msgid "" -"unfortunately, we were unable to collect the full amount needed\n" -"for the book you contributed to:" -msgstr "" -"niestety, nie udaÅo nam siÄ zebraÄ peÅnej kwoty na ksiÄ Å¼kÄ, którÄ wsparÅeÅ/-" -"aÅ:" - -#: templates/funding/email/end.txt:32 -#, python-format -msgid "" -"All of the money we collected in this fundraiser (%(x)s PLN)\n" -"will be spent on liberating other books still waiting for publication." -msgstr "" -"Wszystkie pieniÄ dze z tej zbiórki (%(x)s PLN)\n" -"zostanÄ przeznaczone na uwolnienie innych ksiÄ Å¼ek czekajÄ cych na publikacjÄ." - -#: templates/funding/email/end.txt:37 templates/funding/email/published.txt:12 -msgid "" -"If you'd like to help liberate another book, or invite your friends\n" -"to do so, we're currently raising money for:" -msgstr "" -"JeÅli chcesz pomóc uwolniÄ kolejnÄ ksiÄ Å¼kÄ, albo zachÄciÄ do tego\n" -"swoich znajomych, to aktualnie zbieramy na:" - -#: templates/funding/email/near.txt:5 -#, python-format -msgid "there's only %(d)s day left until the end of the fundraiser for:\n" -msgid_plural "" -"There're only %(d)s days left until the end of the fundraiser for:\n" -msgstr[0] "zostaÅ jeden dzieÅ do koÅca zbiórki na:\n" -msgstr[1] "zostaÅy %(d)s dni do koÅca zbiórki na:\n" -msgstr[2] "zostaÅo %(d)s dni do koÅca zbiórki na:\n" - -#: templates/funding/email/near.txt:10 -#, python-format -msgid "We managed to collect %(x)s PLN so far." -msgstr "DotÄ d udaÅo nam siÄ zebraÄ %(x)s PLN." - -#: templates/funding/email/near.txt:12 -msgid "" -"The fundraiser is a success already, but the more money\n" -"we collect, the more other books we'll publish." -msgstr "" -"Zbiórka już osiÄ gnÄÅa sukces, ale im wiÄcej pieniÄdzy\n" -"zbierzemy, tym wiÄcej opublikujemy ksiÄ Å¼ek." - -#: templates/funding/email/near.txt:14 -#, python-format -msgid "We still need %(x)s PLN more." -msgstr "Nadal potrzebujemy %(x)s PLN." - -#: templates/funding/email/near.txt:16 -msgid "There's still time to let your friends know about the fundraiser!" -msgstr "Jest jeszcze czas, by poinformowaÄ o zbiórce Twoich znajomych!" - -#: templates/funding/email/published.txt:4 -msgid "we have just published the book you contributed to:" -msgstr "wÅaÅnie opublikowaliÅmy ksiÄ Å¼kÄ, którÄ wsparÅeÅ/-aÅ:" - -#: templates/funding/email/published.txt:9 -msgid "" -"Thanks to you, it is now available for free,\n" -"in various formats, to everyone." -msgstr "" -"DziÄki Tobie jest teraz dostÄpna bezpÅatnie\n" -"dla wszystkich w wielu formatach." - -#: templates/funding/email/thanks.txt:6 -msgid "" -"Thank you for your support - thanks to you we will set another book free." -msgstr "DziÄkujemy za wsparcie - dziÄki Tobie uwolnimy kolejnÄ ksiÄ Å¼kÄ." - -#: templates/funding/email/thanks.txt:8 -msgid "The book will be supplemented with your name as a donor." -msgstr "" -"Twoje imiÄ i nazwisko lub pseudonim zostanÄ dodane do listy darczyÅców przy " -"opublikowanej ksiÄ Å¼ce." - -#: templates/funding/email/thanks.txt:10 -msgid "We will contact you about details needed for your perks." -msgstr "Skontaktujemy siÄ z TobÄ w sprawie prezentów, które wybraÅeÅ/-aÅ." - -#: templates/funding/email/thanks.txt:12 -msgid "" -"We will keep you informed about status changes to this fundraiser\n" -"and the upcoming ones that we plan to launch." -msgstr "" -"BÄdziemy CiÄ informowaÄ o zmianach statusu tej zbiórki\n" -"i o kolejnych, które planujemy rozpoczÄ Ä." - -#: templates/funding/includes/funding.html:13 -msgid "Support!" -msgstr "Wesprzyj!" - -#: templates/funding/includes/funding.html:15 -#: templates/funding/offer_detail.html:40 templates/funding/thanks.html:35 -#: templates/funding/wlfund.html:17 -msgid "Learn more" -msgstr "Dowiedz siÄ wiÄcej" - -#: templates/funding/includes/funding.html:22 -#: templates/funding/includes/funding.html:48 -#: templates/funding/offer_detail.html:35 templates/funding/offer_list.html:31 -msgid "Help free the book!" -msgstr "Pomóż uwolniÄ ksiÄ Å¼kÄ!" - -#: templates/funding/includes/funding.html:30 -msgid "collected" -msgstr "zebrane" - -#: templates/funding/includes/funding.html:33 -msgid "needed" -msgstr "potrzebujemy" - -#: templates/funding/includes/funding.html:36 -msgid "until fundraiser end" -msgstr "do koÅca zbiórki" - -#: templates/funding/includes/fundings.html:15 -msgid "Anonymous" -msgstr "Anonim" - -#: templates/funding/includes/offer_status.html:6 -#, python-format -msgid "" -"The fundraiser\n" -" ends on %(end)s. The full amount has been successfully\n" -" raised, but you can still contribute and help liberate\n" -" more books." -msgstr "" -"Zbiórka koÅczy siÄ %(end)s. PeÅna kwota zostaÅa już zebrana,\n" -" ale ciÄ gle możesz doÅożyÄ siÄ i pomóc uwolniÄ wiÄcej ksiÄ Å¼ek." - -#: templates/funding/includes/offer_status.html:13 -#, python-format -#| msgid "" -#| "W need %(target)s zÅ to digitize it,\n" -#| " compile it and publish for free in multiple formats." -msgid "" -"We need %(target)s zÅ to digitize it,\n" -" compile it and publish for free in multiple formats." -msgstr "" -"Potrzebujemy %(target)s zÅ, by jÄ zdigitalizowaÄ, opracowaÄ i bezpÅatnie " -"udostÄpniÄ w serwisie w wielu formatach." - -#: templates/funding/includes/offer_status.html:17 -#, python-format -#| msgid "" -#| "If we raise enought money before %(end)s we will\n" -#| " publish it and make it available for everyone." -msgid "" -"If we raise enough money before %(end)s we will\n" -" publish it and make it available for everyone." -msgstr "" -"JeÅli do %(end)s uda siÄ zebraÄ peÅnÄ kwotÄ, opublikujemy jÄ i bÄdzie " -"dostÄpna dla wszystkich." - -#: templates/funding/includes/offer_status.html:24 -#: templates/funding/thanks.html:19 -msgid "Full amount was successfully raised!" -msgstr "UdaÅo siÄ zebraÄ peÅnÄ kwotÄ!" - -#: templates/funding/includes/offer_status.html:28 -msgid "The amount needed was not raised." -msgstr "Nie udaÅo siÄ zebraÄ peÅnej kwoty." - -#: templates/funding/includes/offer_status_more.html:8 -msgid "Fundraiser span" -msgstr "Termin zbiórki" - -#: templates/funding/includes/offer_status_more.html:12 -#, python-format -msgid "" -"The book\n" -" <a href=\"%(bu)s\">%(bt)s</a> has been already published." -msgstr "" -"KsiÄ Å¼ka\n" -" <a href=\"%(bu)s\">%(bt)s</a> zostaÅa opublikowana." - -#: templates/funding/includes/offer_status_more.html:16 -#, python-format -msgid "" -"You can follow\n" -" the work on the <a href=\"%(r)s\">Editorial Platform</a>." -msgstr "Możesz ÅledziÄ prace na <a href=\"%(r)s\">Platformie Redakcyjnej</a>." - -#: templates/funding/no_thanks.html:12 -msgid "You're support has not been processed successfully." -msgstr "Twoje wsparcie nie zostaÅo zaksiÄgowane." - -#: templates/funding/no_thanks.html:16 -#, python-format -msgid "" -"Return to the <a href=\"%(current)s\">current fundraiser</a> and try again " -"or try to use a different payment method." -msgstr "" -"WrÃ³Ä do <a href=\"%(current)s\">aktualnej zbiórki</a> i spróbuj ponownie lub " -"użyj innej metody pÅatnoÅci." - -#: templates/funding/offer_detail.html:48 -msgid "Support the publication" -msgstr "Wesprzyj publikacjÄ" - -#: templates/funding/offer_detail.html:54 -msgid "Donate!" -msgstr "WpÅaÄ!" - -#: templates/funding/offer_detail.html:62 templates/funding/thanks.html:41 -msgid "Tell your friends!" -msgstr "Powiedz swoim znajomym!" - -#: templates/funding/offer_detail.html:63 -msgid "Support Wolne Lektury!" -msgstr "Wesprzyj Wolne Lektury!" - -#: templates/funding/offer_detail.html:66 -msgid "See all fundraisers." -msgstr "Zobacz wszystkie zbiórki." - -#: templates/funding/offer_detail.html:71 -msgid "Supporters" -msgstr "WpÅaty" - -#: templates/funding/offer_list.html:7 templates/funding/offer_list.html:12 -msgid "All fundraisers" -msgstr "Wszystkie zbiórki" - -#: templates/funding/offer_list.html:17 -msgid "Current fundraiser:" -msgstr "Aktualna zbiórka:" - -#: templates/funding/offer_list.html:23 -msgid "No fundraiser is currently running." -msgstr "Obecnie nie jest aktywna żadna zbiórka." - -#: templates/funding/offer_list.html:24 templates/funding/offer_list.html:40 -msgid "Previous fundraisers:" -msgstr "Poprzednie zbiórki:" - -#: templates/funding/snippets/any_remaining.html:4 -#, python-format -msgid "" -"Any <a href=\"%(wlfund)s\">remaining funds</a> will be spent\n" -"on other books waiting to be published." -msgstr "" -"Wszelkie <a href=\"%(wlfund)s\">pozostaÅe Årodki</a> przeznaczymy na inne " -"ksiÄ Å¼ki czekajÄ ce na publikacjÄ." - -#: templates/funding/snippets/any_remaining.html:7 -msgid "" -"We will supplement every book with your name as a donor, no matter how\n" -"big your support will be." -msgstr "" -"Zostaniesz umieszczony/-a na liÅcie darczyÅców, niezależnie od wysokoÅci " -"wpÅaty." - -#: templates/funding/thanks.html:10 -msgid "Thank you!" -msgstr "DziÄkujemy!" - -#: templates/funding/thanks.html:16 -msgid "We will contact you if you qualify for perks." -msgstr "Skontaktujemy siÄ z TobÄ w sprawie prezentów, które wybraÅeÅ/-aÅ." - -#: templates/funding/thanks.html:21 -#, python-format -msgid "" -"Your donation will be spent on digitizing, compiling and\n" -" publishing the book %(b)s in multiple formats." -msgstr "" -"WpÅacone przez Ciebie pieniÄ dze przeznaczymy na digitalizacjÄ, opracowanie i " -"udostÄpnienie ksiÄ Å¼ki %(b)s w bibliotece w wielu formatach." - -#: templates/funding/thanks.html:26 -#, python-format -msgid "" -"If the full amount needed is raised,\n" -" your donation will be spent on digitizing, compiling and\n" -" publishing the book %(b)s in multiple formats." -msgstr "" -"JeÅli uda siÄ zebraÄ peÅnÄ kwotÄ, wpÅacone przez Ciebie pieniÄ dze " -"przeznaczymy na digitalizacjÄ, opracowanie i udostÄpnienie ksiÄ Å¼ki %(b)s w " -"bibliotece w wielu formatach." - -#: templates/funding/thanks.html:38 -msgid "Go back to the current fundraiser." -msgstr "WrÃ³Ä do aktualnej zbiórki." - -#: templates/funding/thanks.html:42 -msgid "I support Wolne Lektury." -msgstr "Wspieram Wolne Lektury" - -#: templates/funding/thanks.html:45 -msgid "Vote for a book for the next fundraiser" -msgstr "Pomóż wybraÄ nastÄpnÄ ksiÄ Å¼kÄ, na którÄ bÄdziemy zbieraÄ pieniÄ dze" - -#: templates/funding/widgets/amount.html:13 -msgid "Other amount" -msgstr "Inna kwota" - -#: templates/funding/wlfund.html:4 templates/funding/wlfund.html.py:8 -msgid "Remaining funds" -msgstr "PozostaÅe Årodki" - -#: templates/funding/wlfund.html:11 -#, python-format -msgid "" -"If\n" -"the full amount needed for publishing a book is not raised in time,\n" -"the funds are spent on <a href=\"%(r)s\">other books waiting for\n" -"publication</a>. The same thing happens with any money remaining\n" -"from successful fundraisers." -msgstr "" -"JeÅli nie udaÅo siÄ zebraÄ peÅnej kwoty potrzebnej do opublikowania ksiÄ Å¼ki, " -"Årodki przekazujemy na redakcjÄ <a href=\"%(r)s\">innych utworów " -"oczekujÄ cych na publikacjÄ w serwisie</a>. Na ten cel przekazujemy również " -"nadmiarowe Årodki ze zbiórek ukoÅczonych sukcesem." - -#: templates/funding/wlfund.html:19 -msgid "Spending these remaining funds is recorded in this table." -msgstr "W poniższej tabeli rejestrujemy wydatkowanie tych Årodków." - -#: templates/funding/wlfund.html:25 -msgid "Date" -msgstr "Data" - -#: templates/funding/wlfund.html:26 -msgid "Operation" -msgstr "Rozdysponowanie Årodków" - -#: templates/funding/wlfund.html:28 -msgid "Balance" -msgstr "Bilans" - -#: templates/funding/wlfund.html:35 -msgid "Money spent on publishing the book" -msgstr "PieniÄ dze przeznaczone na opublikowanie ksiÄ Å¼ki" - -#: templates/funding/wlfund.html:44 -msgid "Money remaining from the fundraiser for" -msgstr "PieniÄ dze pozostaÅe ze zbiórki na" - -#: templates/funding/wlfund.html:53 -msgid "There are no previous fundraisers to show yet." -msgstr "Nie ma jeszcze żadnych zakoÅczonych zbiórek." - -#~ msgid "due" -#~ msgstr "data publikacji" - -#~ msgid "When will it be published if the money is raised." -#~ msgstr "" -#~ "Kiedy ksiÄ Å¼ka zostanie opublikowana, jeÅli uda siÄ zebraÄ pieniÄ dze." - -#~ msgid "" -#~ "The fundraiser\n" -#~ " ends on %(end)s. The book will be published by %(due)s." -#~ msgstr "" -#~ "Zbiórka koÅczy siÄ %(end)s. KsiÄ Å¼ka zostanie opublikowana do %(due)s." - -#~ msgid "" -#~ "The book\n" -#~ " will be published by %(due)s." -#~ msgstr "KsiÄ Å¼ka zostanie opublikowana do %(due)s." diff --git a/apps/funding/management/__init__.py b/apps/funding/management/__init__.py deleted file mode 100755 index e69de29bb..000000000 diff --git a/apps/funding/management/commands/__init__.py b/apps/funding/management/commands/__init__.py deleted file mode 100755 index e69de29bb..000000000 diff --git a/apps/funding/management/commands/funding_notify.py b/apps/funding/management/commands/funding_notify.py deleted file mode 100755 index 1a30ffc90..000000000 --- a/apps/funding/management/commands/funding_notify.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from optparse import make_option -from django.core.management.base import BaseCommand - - -class Command(BaseCommand): - option_list = BaseCommand.option_list + ( - make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, - help='Suppress output'), - ) - help = 'Sends relevant funding notifications.' - - def handle(self, **options): - - from datetime import date, timedelta - from funding.models import Offer - from funding import app_settings - from django.core.cache import caches - from django.conf import settings - - verbose = options['verbose'] - - for offer in Offer.past().filter(notified_end=None): - if verbose: - print 'Notify end:', offer - # The 'WL fund' list needs to be updated. - caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() - offer.flush_includes() - offer.notify_end() - - current = Offer.current() - if (current is not None and - current.end <= date.today() + timedelta(app_settings.DAYS_NEAR - 1) and - not current.notified_near): - if verbose: - print 'Notify near:', current - current.notify_near() diff --git a/apps/funding/migrations/0001_initial.py b/apps/funding/migrations/0001_initial.py deleted file mode 100644 index cebe8d287..000000000 --- a/apps/funding/migrations/0001_initial.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('polls', '0001_initial'), - ('catalogue', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Funding', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=127, verbose_name='name', blank=True)), - ('email', models.EmailField(db_index=True, max_length=75, verbose_name='email', blank=True)), - ('amount', models.DecimalField(verbose_name='amount', max_digits=10, decimal_places=2)), - ('payed_at', models.DateTimeField(db_index=True, null=True, verbose_name='payed at', blank=True)), - ('language_code', models.CharField(max_length=2, null=True, blank=True)), - ('notifications', models.BooleanField(default=True, db_index=True, verbose_name='notifications')), - ('notify_key', models.CharField(max_length=32)), - ], - options={ - 'ordering': ['-payed_at'], - 'verbose_name': 'funding', - 'verbose_name_plural': 'fundings', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Offer', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('author', models.CharField(max_length=255, verbose_name='author')), - ('title', models.CharField(max_length=255, verbose_name='Title')), - ('slug', models.SlugField(verbose_name='Slug')), - ('description', models.TextField(verbose_name='Description', blank=True)), - ('target', models.DecimalField(verbose_name='target', max_digits=10, decimal_places=2)), - ('start', models.DateField(verbose_name='start', db_index=True)), - ('end', models.DateField(verbose_name='end', db_index=True)), - ('redakcja_url', models.URLField(verbose_name='redakcja URL', blank=True)), - ('cover', models.ImageField(upload_to=b'funding/covers', verbose_name='Cover')), - ('notified_near', models.DateTimeField(null=True, verbose_name='Near-end notifications sent', blank=True)), - ('notified_end', models.DateTimeField(null=True, verbose_name='End notifications sent', blank=True)), - ('book', models.ForeignKey(blank=True, to='catalogue.Book', help_text='Published book.', null=True)), - ('poll', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='polls.Poll', help_text='Poll', null=True)), - ], - options={ - 'ordering': ['-end'], - 'verbose_name': 'offer', - 'verbose_name_plural': 'offers', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Perk', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('price', models.DecimalField(verbose_name='price', max_digits=10, decimal_places=2)), - ('name', models.CharField(max_length=255, verbose_name='name')), - ('long_name', models.CharField(max_length=255, verbose_name='long name')), - ('end_date', models.DateField(null=True, verbose_name='end date', blank=True)), - ('offer', models.ForeignKey(verbose_name='offer', blank=True, to='funding.Offer', null=True)), - ], - options={ - 'ordering': ['-price'], - 'verbose_name': 'perk', - 'verbose_name_plural': 'perks', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Spent', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('amount', models.DecimalField(verbose_name='amount', max_digits=10, decimal_places=2)), - ('timestamp', models.DateField(verbose_name='when')), - ('book', models.ForeignKey(to='catalogue.Book')), - ], - options={ - 'ordering': ['-timestamp'], - 'verbose_name': 'money spent on a book', - 'verbose_name_plural': 'money spent on books', - }, - bases=(models.Model,), - ), - migrations.AddField( - model_name='funding', - name='offer', - field=models.ForeignKey(verbose_name='offer', to='funding.Offer'), - preserve_default=True, - ), - migrations.AddField( - model_name='funding', - name='perks', - field=models.ManyToManyField(to='funding.Perk', verbose_name='perks', blank=True), - preserve_default=True, - ), - ] diff --git a/apps/funding/migrations/0002_auto_20151221_1225.py b/apps/funding/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index 3224eb006..000000000 --- a/apps/funding/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('funding', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='funding', - name='email', - field=models.EmailField(db_index=True, max_length=254, verbose_name='email', blank=True), - ), - migrations.AlterField( - model_name='offer', - name='description', - field=models.TextField(verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='offer', - name='slug', - field=models.SlugField(verbose_name='slug'), - ), - migrations.AlterField( - model_name='offer', - name='title', - field=models.CharField(max_length=255, verbose_name='title'), - ), - ] diff --git a/apps/funding/migrations/__init__.py b/apps/funding/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/funding/models.py b/apps/funding/models.py deleted file mode 100644 index e36b73255..000000000 --- a/apps/funding/models.py +++ /dev/null @@ -1,348 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from datetime import date, datetime -from urllib import urlencode -from django.conf import settings -from django.contrib.sites.models import Site -from django.core.urlresolvers import reverse -from django.core.mail import send_mail -from django.db import models -from django.template.loader import render_to_string -from django.utils.timezone import utc -from django.utils.translation import ugettext_lazy as _, override -import getpaid -from ssify import flush_ssi_includes -from catalogue.models import Book -from catalogue.utils import get_random_hash -from polls.models import Poll -from . import app_settings - - -class Offer(models.Model): - """ A fundraiser for a particular book. """ - author = models.CharField(_('author'), max_length=255) - title = models.CharField(_('title'), max_length=255) - slug = models.SlugField(_('slug')) - description = models.TextField(_('description'), blank=True) - target = models.DecimalField(_('target'), decimal_places=2, max_digits=10) - start = models.DateField(_('start'), db_index=True) - end = models.DateField(_('end'), db_index=True) - redakcja_url = models.URLField(_('redakcja URL'), blank=True) - book = models.ForeignKey(Book, null=True, blank=True, - help_text=_('Published book.')) - cover = models.ImageField(_('Cover'), upload_to='funding/covers') - poll = models.ForeignKey(Poll, help_text=_('Poll'), null=True, blank=True, on_delete=models.SET_NULL) - - notified_near = models.DateTimeField(_('Near-end notifications sent'), blank=True, null=True) - notified_end = models.DateTimeField(_('End notifications sent'), blank=True, null=True) - - def cover_img_tag(self): - return u'<img src="%s" />' % self.cover.url - cover_img_tag.short_description = _('Cover preview') - cover_img_tag.allow_tags = True - - class Meta: - verbose_name = _('offer') - verbose_name_plural = _('offers') - ordering = ['-end'] - - def __unicode__(self): - return u"%s - %s" % (self.author, self.title) - - def get_absolute_url(self): - return reverse('funding_offer', args=[self.slug]) - - def save(self, *args, **kw): - published_now = (self.book_id is not None and - self.pk is not None and - type(self).objects.values('book').get(pk=self.pk)['book'] != self.book_id) - retval = super(Offer, self).save(*args, **kw) - self.flush_includes() - if published_now: - self.notify_published() - return retval - - def flush_includes(self): - flush_ssi_includes([ - template % (self.pk, lang) - for template in [ - '/wesprzyj/o/%d/top-bar.%s.html', - '/wesprzyj/o/%d/detail-bar.%s.html', - '/wesprzyj/o/%d/list-bar.%s.html', - '/wesprzyj/o/%d/status.%s.html', - '/wesprzyj/o/%d/status-more.%s.html', - ] + [ - '/wesprzyj/o/%%d/fundings/%d.%%s.html' % page - for page in range(1, len(self.funding_payed()) // 10 + 2) - ] - for lang in [lc for (lc, _ln) in settings.LANGUAGES] - ]) - - def is_current(self): - return self.start <= date.today() <= self.end and self == self.current() - - def is_win(self): - return self.sum() >= self.target - - def remaining(self): - if self.is_current(): - return None - if self.is_win(): - return self.sum() - self.target - else: - return self.sum() - - @classmethod - def current(cls): - """ Returns current fundraiser or None. - - Current fundraiser is the one that: - - has already started, - - hasn't yet ended, - - if there's more than one of those, it's the one that ends last. - - """ - today = date.today() - objects = cls.objects.filter(start__lte=today, end__gte=today).order_by('-end') - try: - return objects[0] - except IndexError: - return None - - @classmethod - def past(cls): - """ QuerySet for all past fundraisers. """ - objects = cls.public() - current = cls.current() - if current is not None: - objects = objects.exclude(pk=current.pk) - return objects - - @classmethod - def public(cls): - """ QuerySet for all current and past fundraisers. """ - today = date.today() - return cls.objects.filter(start__lte=today) - - def get_perks(self, amount=None): - """ Finds all the perks for the offer. - - If amount is provided, returns the perks you get for it. - - """ - perks = Perk.objects.filter( - models.Q(offer=self) | models.Q(offer=None) - ).exclude(end_date__lt=date.today()) - if amount is not None: - perks = perks.filter(price__lte=amount) - return perks - - def funding_payed(self): - """ QuerySet for all completed payments for the offer. """ - return Funding.payed().filter(offer=self) - - def funders(self): - return self.funding_payed().order_by('-amount', 'payed_at') - - def sum(self): - """ The money gathered. """ - return self.funding_payed().aggregate(s=models.Sum('amount'))['s'] or 0 - - def notify_all(self, subject, template_name, extra_context=None): - Funding.notify_funders( - subject, template_name, extra_context, - query_filter=models.Q(offer=self) - ) - - def notify_end(self, force=False): - if not force and self.notified_end: return - assert not self.is_current() - self.notify_all( - _('The fundraiser has ended!'), - 'funding/email/end.txt', { - 'offer': self, - 'is_win': self.is_win(), - 'remaining': self.remaining(), - 'current': self.current(), - }) - self.notified_end = datetime.utcnow().replace(tzinfo=utc) - self.save() - - def notify_near(self, force=False): - if not force and self.notified_near: return - assert self.is_current() - sum_ = self.sum() - need = self.target - sum_ - self.notify_all( - _('The fundraiser will end soon!'), - 'funding/email/near.txt', { - 'days': (self.end - date.today()).days + 1, - 'offer': self, - 'is_win': self.is_win(), - 'sum': sum_, - 'need': need, - }) - self.notified_near = datetime.utcnow().replace(tzinfo=utc) - self.save() - - def notify_published(self): - assert self.book is not None - self.notify_all( - _('The book you helped fund has been published.'), - 'funding/email/published.txt', { - 'offer': self, - 'book': self.book, - 'author': self.book.pretty_title(), - 'current': self.current(), - }) - - -class Perk(models.Model): - """ A perk offer. - - If no attached to a particular Offer, applies to all. - - """ - offer = models.ForeignKey(Offer, verbose_name=_('offer'), null=True, blank=True) - price = models.DecimalField(_('price'), decimal_places=2, max_digits=10) - name = models.CharField(_('name'), max_length=255) - long_name = models.CharField(_('long name'), max_length=255) - end_date = models.DateField(_('end date'), null=True, blank=True) - - class Meta: - verbose_name = _('perk') - verbose_name_plural = _('perks') - ordering = ['-price'] - - def __unicode__(self): - return "%s (%s%s)" % (self.name, self.price, u" for %s" % self.offer if self.offer else "") - - -class Funding(models.Model): - """ A person paying in a fundraiser. - - The payment was completed if and only if payed_at is set. - - """ - offer = models.ForeignKey(Offer, verbose_name=_('offer')) - name = models.CharField(_('name'), max_length=127, blank=True) - email = models.EmailField(_('email'), blank=True, db_index=True) - amount = models.DecimalField(_('amount'), decimal_places=2, max_digits=10) - payed_at = models.DateTimeField(_('payed at'), null=True, blank=True, db_index=True) - perks = models.ManyToManyField(Perk, verbose_name=_('perks'), blank=True) - language_code = models.CharField(max_length=2, null=True, blank=True) - notifications = models.BooleanField(_('notifications'), default=True, db_index=True) - notify_key = models.CharField(max_length=32) - - class Meta: - verbose_name = _('funding') - verbose_name_plural = _('fundings') - ordering = ['-payed_at'] - - @classmethod - def payed(cls): - """ QuerySet for all completed payments. """ - return cls.objects.exclude(payed_at=None) - - def __unicode__(self): - return unicode(self.offer) - - def get_absolute_url(self): - return reverse('funding_funding', args=[self.pk]) - - def perk_names(self): - return ", ".join(perk.name for perk in self.perks.all()) - - def get_disable_notifications_url(self): - return "%s?%s" % (reverse("funding_disable_notifications"), - urlencode({ - 'email': self.email, - 'key': self.notify_key, - })) - - def save(self, *args, **kwargs): - if self.email and not self.notify_key: - self.notify_key = get_random_hash(self.email) - ret = super(Funding, self).save(*args, **kwargs) - self.offer.flush_includes() - return ret - - @classmethod - def notify_funders(cls, subject, template_name, extra_context=None, - query_filter=None, payed_only=True): - funders = cls.objects.exclude(email="").filter(notifications=True) - if payed_only: - funders = funders.exclude(payed_at=None) - if query_filter is not None: - funders = funders.filter(query_filter) - emails = set() - for funder in funders: - if funder.email in emails: - continue - emails.add(funder.email) - funder.notify(subject, template_name, extra_context) - - def notify(self, subject, template_name, extra_context=None): - context = { - 'funding': self, - 'site': Site.objects.get_current(), - } - if extra_context: - context.update(extra_context) - with override(self.language_code or app_settings.DEFAULT_LANGUAGE): - send_mail(subject, - render_to_string(template_name, context), - settings.CONTACT_EMAIL, - [self.email], - fail_silently=False - ) - - def disable_notifications(self): - """Disables all notifications for this e-mail address.""" - type(self).objects.filter(email=self.email).update(notifications=False) - - -# Register the Funding model with django-getpaid for payments. -getpaid.register_to_payment(Funding, unique=False, related_name='payment') - - -class Spent(models.Model): - """ Some of the remaining money spent on a book. """ - book = models.ForeignKey(Book) - amount = models.DecimalField(_('amount'), decimal_places=2, max_digits=10) - timestamp = models.DateField(_('when')) - - class Meta: - verbose_name = _('money spent on a book') - verbose_name_plural = _('money spent on books') - ordering = ['-timestamp'] - - def __unicode__(self): - return u"Spent: %s" % unicode(self.book) - - -def new_payment_query_listener(sender, order=None, payment=None, **kwargs): - """ Set payment details for getpaid. """ - payment.amount = order.amount - payment.currency = 'PLN' -getpaid.signals.new_payment_query.connect(new_payment_query_listener) - - -def user_data_query_listener(sender, order, user_data, **kwargs): - """ Set user data for payment. """ - user_data['email'] = order.email -getpaid.signals.user_data_query.connect(user_data_query_listener) - -def payment_status_changed_listener(sender, instance, old_status, new_status, **kwargs): - """ React to status changes from getpaid. """ - if old_status != 'paid' and new_status == 'paid': - instance.order.payed_at = datetime.utcnow().replace(tzinfo=utc) - instance.order.save() - if instance.order.email: - instance.order.notify( - _('Thank you for your support!'), - 'funding/email/thanks.txt' - ) -getpaid.signals.payment_status_changed.connect(payment_status_changed_listener) diff --git a/apps/funding/static/funding/funding.js b/apps/funding/static/funding/funding.js deleted file mode 100644 index 765bddcad..000000000 --- a/apps/funding/static/funding/funding.js +++ /dev/null @@ -1,18 +0,0 @@ -$(function() { - $('.funding .close').click(function(e) { - e.preventDefault(); - var fundNode = $(e.target).parent(); - fundNode.slideUp(function(){fundingHandle.show()}); - if(Modernizr.localstorage) - localStorage['hide-offer-id'] = fundNode.attr('data-offer-id'); - }); - - var fundingTopHeader = $('#funding-closeable'); - var fundingHandle = $('#funding-handle'); - fundingHandle.click(function(e) { - fundingTopHeader.slideDown(); - $(e.target).hide(); - if(Modernizr.localstorage) - localStorage.removeItem('hide-offer-id'); - }); -}); \ No newline at end of file diff --git a/apps/funding/templates/admin/funding/offer/change_form.html b/apps/funding/templates/admin/funding/offer/change_form.html deleted file mode 100755 index 292d0dfeb..000000000 --- a/apps/funding/templates/admin/funding/offer/change_form.html +++ /dev/null @@ -1,31 +0,0 @@ -{% extends "admin/change_form.html" %} -{% load i18n %} - -{% block extrahead %} -{{ block.super }} -<script type="text/javascript"> -(function($) { - $(document).ready(function($) { - $("#generated-switch").click(function() { - $('#generated').toggle() - }); - }); -})(django.jQuery); -</script> -{% endblock %} - - - -{% block pretitle %} - - -<a id="generated-switch">â {% trans "fundings" %} â</a> -<div id="generated" style="display:none; padding:1em; border: 1px solid #aaa;">{% spaceless %} - {% for funding in original.funders %} - {% if funding.name %} - <dc:contributor.funding xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">{{ funding.name }}</dc:contributor.funding><br/> - {% endif %} - {% endfor %} -{% endspaceless %}</div> -{{ block.super }} -{% endblock %} diff --git a/apps/funding/templates/funding/disable_notifications.html b/apps/funding/templates/funding/disable_notifications.html deleted file mode 100644 index 9123310d9..000000000 --- a/apps/funding/templates/funding/disable_notifications.html +++ /dev/null @@ -1,34 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load fnp_share %} - -{% block titleextra %}{% trans "Payment failed" %}{% endblock %} - -{% block body %} - -<h1>{% trans "Disable notifications" %}</h1> -<div class="white-box normal-text"> - -{% if view.object.notifications %} - -<p>{% blocktrans with e=view.object.email %}Are you sure you want to disable notifications for address {{e}}?{% endblocktrans %}</p> -<form method="post" action=""> - <button>{% trans "Disable notifications" %}</button> -</form> - -{% else %} - -<p>{% blocktrans with e=view.object.email %}Notifications for address {{e}} have been successfully disabled.{% endblocktrans %}</p> - -{% endif %} - -{% url 'funding_current' as current %} -<p> -{% blocktrans with current=current %}Return to the <a href="{{current}}">current fundraiser</a>.{% endblocktrans %} -</p> - - -</div> - - -{% endblock %} diff --git a/apps/funding/templates/funding/email/base.txt b/apps/funding/templates/funding/email/base.txt deleted file mode 100755 index 1129549ce..000000000 --- a/apps/funding/templates/funding/email/base.txt +++ /dev/null @@ -1,10 +0,0 @@ -{% autoescape off %}{% load i18n %}{% trans 'Hi' %}{% if funding.name %} {{ funding.name }}{% endif %}, -{% block body %} -{% endblock %} -{% blocktrans %}Cheers, -Wolne Lektury team{% endblocktrans %} - --- -{% blocktrans %}If you don't want to receive any more updates, please visit this page:{% endblocktrans %} -http://{{site.domain}}{{ funding.get_disable_notifications_url }} -{% endautoescape %} diff --git a/apps/funding/templates/funding/email/end.txt b/apps/funding/templates/funding/email/end.txt deleted file mode 100755 index 023d34427..000000000 --- a/apps/funding/templates/funding/email/end.txt +++ /dev/null @@ -1,42 +0,0 @@ -{% extends "funding/email/base.txt" %} -{% load i18n %} - - -{% block body %}{% if is_win %} -{% blocktrans %}we succesfully collected the full amount needed -for the book you contributed to:{% endblocktrans %} - - {{ offer.author }} â {{ offer.title }} - http://{{ site.domain }}{{ offer.get_absolute_url }} - -{% blocktrans %}We will now digitize it, develop and publish it in the library, -in various formats, free for everyone.{% endblocktrans %} -{% if funding.name %} -{% blocktrans %}Your name will be included on the list of contributors, irrespectively -of the amount of your contribution.{% endblocktrans %} -{% endif %}{# funding.name #}{% if funding.perks.exists %} -{% blocktrans %}We will contact you again about details needed -to deliver your perks.{% endblocktrans %} -{% endif %}{# funding.perks.exists #}{% if remaining %} -{% blocktrans with r=remaining %}All of the money remaining after this fundraiser ({{ r }} PLN) -will be spent on liberating other books still waiting for publication.{% endblocktrans %} -{% blocktrans %}You can see how we're spending these funds on this page:{% endblocktrans %} -http://{{ site.domain }}{% url 'funding_wlfund' %} -{% endif %}{# remaining #}{% else %}{# !is_win #} -{% blocktrans %}unfortunately, we were unable to collect the full amount needed -for the book you contributed to:{% endblocktrans %} - - {{ offer.author }} â {{ offer.title }} - http://{{ site.domain }}{{ offer.get_absolute_url }} -{% if remaining %} -{% blocktrans with x=remaining %}All of the money we collected in this fundraiser ({{ x }} PLN) -will be spent on liberating other books still waiting for publication.{% endblocktrans %} -{% blocktrans %}You can see how we're spending these funds on this page:{% endblocktrans %} -http://{{ site.domain }}{% url 'funding_wlfund' %} -{% endif %}{# remaining #}{% endif %}{# is_win #}{% if current %} -{% blocktrans %}If you'd like to help liberate another book, or invite your friends -to do so, we're currently raising money for:{% endblocktrans %} - - {{ current.author }} â {{ current.title }} - http://{{ site.domain }}{% url 'funding_current' %} -{% endif %}{% endblock %} diff --git a/apps/funding/templates/funding/email/near.txt b/apps/funding/templates/funding/email/near.txt deleted file mode 100755 index 47537c129..000000000 --- a/apps/funding/templates/funding/email/near.txt +++ /dev/null @@ -1,18 +0,0 @@ -{% extends "funding/email/base.txt" %} -{% load i18n %} - -{% block body %} -{% blocktrans count days as d %}there's only {{ d }} day left until the end of the fundraiser for: -{% plural %}There're only {{ d }} days left until the end of the fundraiser for: -{% endblocktrans %} - {{ offer.author }} â {{ offer.title }} - -{% blocktrans with x=sum %}We managed to collect {{x}} PLN so far.{% endblocktrans %} -{% if is_win %} -{% blocktrans %}The fundraiser is a success already, but the more money -we collect, the more other books we'll publish.{% endblocktrans %} -{% else %}{% blocktrans with x=need %}We still need {{ x }} PLN more.{% endblocktrans %} -{% endif %} -{% trans "There's still time to let your friends know about the fundraiser!" %} -http://{{ site.domain }}{% url 'funding_current' %} -{% endblock %} diff --git a/apps/funding/templates/funding/email/published.txt b/apps/funding/templates/funding/email/published.txt deleted file mode 100755 index 672efa2ae..000000000 --- a/apps/funding/templates/funding/email/published.txt +++ /dev/null @@ -1,17 +0,0 @@ -{% extends "funding/email/base.txt" %} -{% load i18n %} -{% block body %} -{% blocktrans %}we have just published the book you contributed to:{% endblocktrans %} - - {{ author }} â {{ offer.book.title }} - http://{{ site.domain }}{{ offer.book.get_absolute_url }} - -{% blocktrans %}Thanks to you, it is now available for free, -in various formats, to everyone.{% endblocktrans %} -{% if current %} -{% blocktrans %}If you'd like to help liberate another book, or invite your friends -to do so, we're currently raising money for:{% endblocktrans %} - - {{ current.author }} â {{ current.title }} - http://{{ site.domain }}{% url 'funding_current' %} -{% endif %}{% endblock %} diff --git a/apps/funding/templates/funding/email/thanks.txt b/apps/funding/templates/funding/email/thanks.txt deleted file mode 100644 index 2ded0bd9d..000000000 --- a/apps/funding/templates/funding/email/thanks.txt +++ /dev/null @@ -1,14 +0,0 @@ -{% extends "funding/email/base.txt" %} -{% load i18n %} - - -{% block body %} -{% trans 'Thank you for your support - thanks to you we will set another book free.' %}{% if funding.name %} - -{% trans 'The book will be supplemented with your name as a donor.' %}{% endif %} -{% if funding.perks.exists %} -{% blocktrans %}We will contact you about details needed for your perks.{% endblocktrans %} -{% endif %}{# funding.perks.exists #} -{% blocktrans %}We will keep you informed about status changes to this fundraiser -and the upcoming ones that we plan to launch.{% endblocktrans %} -{% endblock %} diff --git a/apps/funding/templates/funding/includes/funding.html b/apps/funding/templates/funding/includes/funding.html deleted file mode 100644 index c8f62d275..000000000 --- a/apps/funding/templates/funding/includes/funding.html +++ /dev/null @@ -1,72 +0,0 @@ -{% spaceless %} - -{% load i18n %} -{% load time_tags %} - -{% if offer %} - -<div {% if closeable %}id="funding-closeable" {% endif %}class="funding {{ add_class }}" data-offer-id="{{offer.id}}" style=""> - {% if closeable %}<a href="#" class="close">X</a>{% endif %} - {% if link and is_current %} - <div class="call-area"> - <a class="call honking" href="{% url 'funding_current' offer.slug %}"> - {% trans "Support!" %}</a> - <div class="learn-more"> - <a href="{% url 'infopage' 'wesprzyj' %}">{% trans "Learn more" %}</a> - </div> - </div> - {% endif %} - <div class="description {% if link and is_current %}with-button{% endif %}"> - {% if link %}<a href="{% if is_current %}{% url 'funding_current' offer.slug %}{% else %}{{ offer.get_absolute_url }}{% endif %}">{% endif %} - {% if show_title %} - {% if is_current and show_title_calling %}<strong style="margin-right: .6em;">{% trans "Help free the book!" %}</strong>{% endif %} - <span class="funding-title{% if not is_current %}-strong{% endif %}">{{ offer }}</span> - {% endif %} - - <div class="progress" - style="text-align: center; background-size: {{ percentage|stringformat:'.2f' }}% 1px;" - > - {% if sum %} - <span class="piece progress-collected">{% trans "collected" %}: {{ sum }} zÅ</span> - {% endif %} - {% if not is_win %} - <span class="piece progress-target"><span class="{% if sum %}progress-extralabel{% endif %}">{% trans "needed" %}: </span>{{ offer.target }} zÅ</span> - {% endif %} - {% if is_current %} - <span class="piece progress-until"><span class="progress-extralabel">{% trans "until fundraiser end" %}:</span> - <span class="countdown inline" data-until='{{ offer.end|date_to_utc:True|utc_for_js }}'></span> - </span> - {% else %} - <div style="clear: both"></div> - {% endif %} - </div> - {% if link %}</a>{% endif %} - </div> - <div style="clear: both"></div> -</div> -{% if closeable %} - <div id="funding-handle">{% trans "Help free the book!" %}</div> - -<script type="text/javascript">(function() { -var storage = true; -try { - localStorage.setItem('test', 'test'); - localStorage.removeItem('test'); -} catch (exception) { - storage = false; -} -if (storage) { - var closeable = document.getElementById('funding-closeable'); - if (localStorage['hide-offer-id'] !== closeable.getAttribute('data-offer-id')) { - closeable.style.display = 'block'; - document.getElementById('funding-handle').style.display = 'none'; - } -} -})();</script> - -{% endif %} - - -{% endif %} - -{% endspaceless %} diff --git a/apps/funding/templates/funding/includes/fundings.html b/apps/funding/templates/funding/includes/fundings.html deleted file mode 100644 index e13e1ec18..000000000 --- a/apps/funding/templates/funding/includes/fundings.html +++ /dev/null @@ -1,28 +0,0 @@ -{% spaceless %} - -{% load i18n %} -{% load pagination_tags %} - -<table class="wlfund"> - -{% for funding in fundings %} - <tr class="funding-plus"> - <td class="oneline">{{ funding.payed_at.date }}</td> - <td> - {% if funding.name %} - {{ funding.name }} - {% else %} - <em>{% trans "Anonymous" %}</em> - {% endif %} - </td> - <td>{{ funding.amount }} zÅ</td> - <td> - {% for perk in funding.perks.all %} - {{ perk.name }}{% if not forloop.last %},{% endif %} - {% endfor %} - </td> -{% endfor %} -</table> - -{% endspaceless %}{% paginate %} - diff --git a/apps/funding/templates/funding/includes/offer_status.html b/apps/funding/templates/funding/includes/offer_status.html deleted file mode 100644 index 4d5ae05ea..000000000 --- a/apps/funding/templates/funding/includes/offer_status.html +++ /dev/null @@ -1,31 +0,0 @@ -{% load i18n %} - -{% if offer.is_current %} - {% if offer.is_win %} - <p> - {% blocktrans with end=offer.end %}The fundraiser - ends on {{ end }}. The full amount has been successfully - raised, but you can still contribute and help liberate - more books.{% endblocktrans %} - </p> - {% else %} - <p> - <strong>{% blocktrans with target=offer.target|floatformat:-2 %}We need {{target}} zÅ to digitize it, - compile it and publish for free in multiple formats.{% endblocktrans %}</strong> - </p> - <p> - {% blocktrans with end=offer.end %}If we raise enough money before {{end}} we will - publish it and make it available for everyone.{% endblocktrans %} - </p> - {% endif %} -{% else %} - {% if offer.is_win %} - <p> - {% trans "Full amount was successfully raised!" %} - </p> - {% else %} - <p> - {% trans "The amount needed was not raised." %} - </p> - {% endif %} -{% endif %} diff --git a/apps/funding/templates/funding/includes/offer_status_more.html b/apps/funding/templates/funding/includes/offer_status_more.html deleted file mode 100644 index c94c9a801..000000000 --- a/apps/funding/templates/funding/includes/offer_status_more.html +++ /dev/null @@ -1,26 +0,0 @@ -{% load i18n %} - -{% if offer.is_current %} - <p> - {% include "funding/snippets/any_remaining.html" %} - </p> -{% else %} - <p class="date">{% trans "Fundraiser span" %}: {{ offer.start }} â {{ offer.end }}</p> - {% if offer.is_win %} - <p> - {% if offer.book %} - {% blocktrans with bu=offer.book.get_absolute_url bt=offer.book %}The book - <a href="{{ bu }}">{{ bt }}</a> has been already published.{% endblocktrans %} - {% else %} - {% if offer.redakcja_url %} - {% blocktrans with r=offer.redakcja_url %}You can follow - the work on the <a href="{{ r }}">Editorial Platform</a>.{% endblocktrans %} - {% endif %} - {% endif %} - </p> - {% endif %} - - {% if offer.remaining %} - <p>{% include "funding/snippets/any_remaining.html" %}</p> - {% endif %} -{% endif %} diff --git a/apps/funding/templates/funding/no_thanks.html b/apps/funding/templates/funding/no_thanks.html deleted file mode 100644 index 3c8db166e..000000000 --- a/apps/funding/templates/funding/no_thanks.html +++ /dev/null @@ -1,23 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load fnp_share %} - -{% block titleextra %}{% trans "Payment failed" %}{% endblock %} - -{% block body %} - -<h1>{% trans "Payment failed" %}</h1> -<div class="white-box normal-text"> - -<p>{% trans "You're support has not been processed successfully." %}</p> - -{% url 'funding_current' as current %} -<p> -{% blocktrans with current=current %}Return to the <a href="{{current}}">current fundraiser</a> and try again or try to use a different payment method.{% endblocktrans %} -</p> - - -</div> - - -{% endblock %} diff --git a/apps/funding/templates/funding/offer_detail.html b/apps/funding/templates/funding/offer_detail.html deleted file mode 100644 index 70930c400..000000000 --- a/apps/funding/templates/funding/offer_detail.html +++ /dev/null @@ -1,77 +0,0 @@ -{% extends "base.html" %} -{% load url from future %} -{% load i18n static %} -{% load pagination_tags %} -{% load fnp_share %} -{% load thumbnail %} -{% load build_absolute_uri from fnp_common %} -{% load ssi_include from ssify %} - - -{% block titleextra %}{{ object }}{% endblock %} - -{% block ogimage %}{{ object.cover.url|build_absolute_uri:request }}{% endblock %} - -{% block metadescription %}Wesprzyj kolejnÄ publikacjÄ Wolnych Lektur!{% endblock %} - - -{% block body %} - -<h1>{{ object }}</h1> - -{% ssi_include 'funding_detail_bar' pk=object.pk %} -<div class="white-box"> - <div class="funding-details-intro"> - {% if object.cover %} - <img src=" - {% thumbnail object.cover "139x193" as thumb %} - {{ thumb.url }} - {% empty %} - {{ object.cover.url }} - {% endthumbnail %} - " alt="Cover" class="funding-cover" /> - {% endif %} - <div class="normal-text"> - <h3>{% trans "Help free the book!" %}</h3> - {{ object.description|safe }} - {% ssi_include 'funding_status' pk=object.pk %} - <a href='//nowoczesnapolska.org.pl/pomoz-nam/wesprzyj-nas/' target="_blank" style='float:right;border:1px solid #ddd;padding: 1em;margin:0 0 1em 1em;background:#eee;'><img src='//nowoczesnapolska.org.pl/wp-content/themes/koed/annoy/procent.png' alt='1%' style='float:left;margin-right: 1em;margin-top:.2em;'>Możesz też przekazaÄ<br/>1% podatku na rozwój biblioteki. →</a> - {% ssi_include 'funding_status_more' pk=object.pk %} - <p><a href="{% url 'infopage' 'wesprzyj' %}">{% trans "Learn more" %}</a>.</p> - </div> - - <div style="clear:both;"></div> - </div> - - {% if object.is_current %} - <div class="normal-text"> - <h3>{% trans "Support the publication" %}</h3> - <form action="" method="post"> - <table> - {{ form.as_table }} - <tr><td></td><td> - <button type="submit" style="border: none; background: none; cursor: pointer"> - <img alt="{% trans 'Donate!' %}" src="{% static 'img/payu.png' %}" /> - </button> - </td></tr> - </table> - </form> - </div> - - {% url 'funding_current' object.slug as current %} - <p class="normal-text">{% trans "Tell your friends!" %}</p> - <p class="share">{% share current _("Support Wolne Lektury!") "big" %}</p> - {% endif %} - - <p class="normal-text"><a href="{% url 'funding' %}">{% trans "See all fundraisers." %}</a></p> - -</div> - - -<h2>{% trans "Supporters" %}:</h2> - -<div class="white-box normal-text"> - {% ssi_include 'funding_fundings' pk=object.pk page=page %} -</div> - -{% endblock %} diff --git a/apps/funding/templates/funding/offer_list.html b/apps/funding/templates/funding/offer_list.html deleted file mode 100644 index e8088bfa8..000000000 --- a/apps/funding/templates/funding/offer_list.html +++ /dev/null @@ -1,47 +0,0 @@ -{% extends "base.html" %} -{% load url from future %} -{% load i18n %} -{% load ssi_include from ssify %} -{% load pagination_tags %} - -{% block titleextra %}{% trans "All fundraisers" %}{% endblock %} - -{% block bodyid %}funding-offer-list{% endblock %} - -{% block body %} -<h1>{% trans "All fundraisers" %}</h1> - - -{% autopaginate object_list 10 %} -{% if page_obj.number == 1 %} - <h2>{% trans "Current fundraiser:" %}</h2> -{% endif %} - -{% for offer in object_list %} -{% with is_win=offer.is_win is_current=offer.is_current %} - {% if not is_current and forloop.first and page_obj.number == 1 %} - <p class="normal-text">{% trans "No fundraiser is currently running." %}</p> - <h2>{% trans "Previous fundraisers:" %}</h2> - {% endif %} - - {% ssi_include 'funding_list_bar' pk=offer.pk %} - - <div class="white-box normal-text"> - {% if is_current %} - <h3>{% trans "Help free the book!" %}</h3> - {{ offer.description|safe }} - {% endif %} - {% ssi_include 'funding_status' pk=offer.pk %} - {% ssi_include 'funding_status_more' pk=offer.pk %} - - </div> - - {% if is_current and not forloop.last %} - <h2>{% trans "Previous fundraisers:" %}</h2> - {% endif %} - -{% endwith %} -{% endfor %} -{% paginate %} - -{% endblock %} diff --git a/apps/funding/templates/funding/snippets/any_remaining.html b/apps/funding/templates/funding/snippets/any_remaining.html deleted file mode 100644 index d8a5bd675..000000000 --- a/apps/funding/templates/funding/snippets/any_remaining.html +++ /dev/null @@ -1,10 +0,0 @@ - -{% load i18n %} -{% url 'funding_wlfund' as wlfund %} -{% blocktrans %}Any <a href="{{wlfund}}">remaining funds</a> will be spent -on other books waiting to be published.{% endblocktrans %} -<br/><br/> -{% blocktrans %}We will supplement every book with your name as a donor, no matter how -big your support will be.{% endblocktrans %} - - diff --git a/apps/funding/templates/funding/thanks.html b/apps/funding/templates/funding/thanks.html deleted file mode 100644 index 676ea487b..000000000 --- a/apps/funding/templates/funding/thanks.html +++ /dev/null @@ -1,51 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load fnp_share %} -{% load polls_tags %} - -{% block titleextra %}{% trans "Thank you for your support!" %}{% endblock %} - -{% block body %} - -<h1>{% trans "Thank you!" %}</h1> -<div class="white-box normal-text"> - -<a href='//nowoczesnapolska.org.pl/pomoz-nam/wesprzyj-nas/' target="_blank" style='float:right;border:1px solid #ddd;padding: 1em;margin:0 0 1em 1em;background:#eee;'><img src='//nowoczesnapolska.org.pl/wp-content/themes/koed/annoy/procent.png' alt='1%' style='float:left;margin-right: 1em;margin-top:.2em;'>Możesz też przekazaÄ<br/>1% podatku na rozwój biblioteki. →</a> - -<p>{% trans "Thank you for your support!" %}</p> -<p>{% blocktrans %}We will contact you if you qualify for perks.{% endblocktrans %}</p> - -{% if offer.is_win %} - <p>{% trans "Full amount was successfully raised!" %}</p> - - <p>{% blocktrans with b=offer.title %}Your donation will be spent on digitizing, compiling and - publishing the book {{ b }} in multiple formats.{% endblocktrans %}</p> - -{% else %} - - <p>{% blocktrans with b=offer.title %}If the full amount needed is raised, - your donation will be spent on digitizing, compiling and - publishing the book {{ b }} in multiple formats.{% endblocktrans %}</p> - -{% endif %} - - -<p>{% include "funding/snippets/any_remaining.html" %} - -<a href="{% url 'infopage' 'wesprzyj' %}">{% trans "Learn more" %}</a>.</p> - -{% url 'funding_current' offer.slug as current %} -<p><a href="{{ current }}">{% trans "Go back to the current fundraiser." %}</a></p> - - -<h3>{% trans "Tell your friends!" %}</h3> -<p class="share">{% share current _("I support Wolne Lektury.") "big" %}</p> - -{% if offer.poll %} - <h3>{% trans "Vote for a book for the next fundraiser" %}</h3> - {% poll offer.poll %} -{% endif %} -</div> - - -{% endblock %} diff --git a/apps/funding/templates/funding/widgets/amount.html b/apps/funding/templates/funding/widgets/amount.html deleted file mode 100644 index 01db675a0..000000000 --- a/apps/funding/templates/funding/widgets/amount.html +++ /dev/null @@ -1,19 +0,0 @@ -{% load i18n %} -<div style="line-height:2em;"> -{% if perks %} - {% for perk in perks %} - <label> - <input type="radio" name="{{ perks_input_name }}" value="{{ perk.price }}" - {% if perk.chosen %}checked="checked"{% endif %} /> - <span style="font-size: 1.5em; ">{{ perk.price }} zÅ</span> ({{ perk.long_name }}) - </label><br/> - {% endfor %} - <label> - <input type="radio" name="{{ perks_input_name }}" value="" - {% if not perk_chosen %}checked="checked"{% endif %} /> {% trans "Other amount" %}: - </label> - <input size="5" name="{{ name }}" value="{% if not perk_chosen %}{{ value|default_if_none:'' }}{% endif %}" /> zÅ -{% else %} - <input name="{{ name }}" value="{{ value|default_if_none:'' }}" {% if value != None %}{% endif %} /> -{% endif %} -</div> diff --git a/apps/funding/templates/funding/wlfund.html b/apps/funding/templates/funding/wlfund.html deleted file mode 100644 index bb8a2bea2..000000000 --- a/apps/funding/templates/funding/wlfund.html +++ /dev/null @@ -1,59 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block titleextra %}{% trans "Remaining funds" %}{% endblock %} - -{% block body %} - -<h1>{% trans "Remaining funds" %}</h1> - -<div class="left-column normal-text"> -<p>{% blocktrans with r="http://redakcja.wolnelektury.pl/" %}If -the full amount needed for publishing a book is not raised in time, -the funds are spent on <a href="{{r}}">other books waiting for -publication</a>. The same thing happens with any money remaining -from successful fundraisers.{% endblocktrans %} - -<a href="{% url 'infopage' 'wesprzyj' %}">{% trans "Learn more" %}</a>.</p> - -<p>{% trans "Spending these remaining funds is recorded in this table." %}</p> -</div> - -<table class="normal-text wlfund"> - - <tr> - <td>{% trans "Date" %}:</td> - <td>{% trans "Operation" %}:</td> - <td>{% trans "Amount" %}:</td> - <td>{% trans "Balance" %}:</td> - </tr> - - {% for tag, entry in log %} - {% if tag == 'spent' %} - <tr class="funding-minus"> - <td class="oneline">{{ entry.timestamp }}</td> - <td>{% trans "Money spent on publishing the book" %}: - <a href="{{ entry.book.get_absolute_url }}"> - {{ entry.book }}</a></td> - <td>-{{ entry.amount }} zÅ</td> - <td>{{ entry.total }} zÅ</td> - </tr> - {% else %} - <tr class="funding-plus"> - <td class="oneline">{{ entry.end }}</td> - <td>{% trans "Money remaining from the fundraiser for" %}: - <a href="{{ entry.get_absolute_url }}"> - {{ entry }}</a></td> - <td>+{{ entry.wlfund }} zÅ</td> - <td>{{ entry.total }} zÅ</td> - </tr> - {% endif %} - {% empty %} - <tr><td colspan="4" style="text-align:center; color: #888;"> - <em>{% trans "There are no previous fundraisers to show yet." %}</em> - </td></tr> - {% endfor %} -</table> - - -{% endblock %} diff --git a/apps/funding/templatetags/__init__.py b/apps/funding/templatetags/__init__.py deleted file mode 100755 index e69de29bb..000000000 diff --git a/apps/funding/templatetags/funding_tags.py b/apps/funding/templatetags/funding_tags.py deleted file mode 100755 index 5dbeec6eb..000000000 --- a/apps/funding/templatetags/funding_tags.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import template -from ssify import ssi_variable -from ssify.utils import ssi_cache_control -from ..models import Offer -from ..utils import sanitize_payment_title - -register = template.Library() - - -@ssi_variable(register, patch_response=[ssi_cache_control(must_revalidate=True, max_age=0)]) -def current_offer(request): - offer = Offer.current() - return offer.pk if offer is not None else None - - -register.filter(sanitize_payment_title) diff --git a/apps/funding/tests.py b/apps/funding/tests.py deleted file mode 100644 index 6dbfbb457..000000000 --- a/apps/funding/tests.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from datetime import date, timedelta -from django.test import TestCase -from .models import Offer, Perk - - -class PerksTest(TestCase): - def setUp(self): - self.today = date.today() - self.offer1 = Offer.objects.create( - author='author1', title='title1', slug='slug1', - target=100, start=self.today, end=self.today) - - def test_perks(self): - perk = Perk.objects.create(price=20, name='Perk 20') - perk1 = Perk.objects.create(offer=self.offer1, price=50, name='Perk 50') - offer2 = Offer.objects.create( - author='author2', title='title2', slug='slug2', - target=100, start=self.today-timedelta(1), end=self.today-timedelta(1)) - perk2 = Perk.objects.create(offer=offer2, price=1, name='Perk 1') - - self.assertEqual( - set(self.offer1.get_perks(10)), - set()) - self.assertEqual( - set(self.offer1.get_perks(70)), - set([perk, perk1])) - - -class FundingTest(TestCase): - def setUp(self): - self.today = date.today() - self.offer_past = Offer.objects.create( - author='an-author', title='past', slug='past', - target=100, start=self.today-timedelta(1), end=self.today-timedelta(1)) - self.offer_current = Offer.objects.create( - author='an-author', title='current', slug='current', - target=100, start=self.today, end=self.today) - self.offer_future = Offer.objects.create( - author='an-author', title='future', slug='future', - target=100, start=self.today+timedelta(1), end=self.today+timedelta(1)) - - def test_current(self): - self.assertTrue(self.offer_current.is_current()) - self.assertFalse(self.offer_past.is_current()) - self.assertEqual(Offer.current(), self.offer_current) - self.assertEqual( - set(Offer.past()), - set([self.offer_past]) - ) - self.assertEqual( - set(Offer.public()), - set([self.offer_past, self.offer_current]) - ) - - def test_interrupt(self): - # A new offer starts, ending the previously current one. - offer_interrupt = Offer.objects.create( - author='an-author', title='interrupt', slug='interrupt', - target=100, start=self.today-timedelta(1), end=self.today+timedelta(1)) - - self.assertTrue(offer_interrupt.is_current()) - self.assertFalse(self.offer_current.is_current()) - self.assertEqual(Offer.current(), offer_interrupt) - self.assertEqual( - set(Offer.past()), - set([self.offer_past, self.offer_current]) - ) - self.assertEqual( - set(Offer.public()), - set([self.offer_past, self.offer_current, offer_interrupt]) - ) - diff --git a/apps/funding/urls.py b/apps/funding/urls.py deleted file mode 100644 index 4d806e84b..000000000 --- a/apps/funding/urls.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url, include - -from .views import (WLFundView, OfferDetailView, OfferListView, - ThanksView, NoThanksView, CurrentView, DisableNotifications) - - -urlpatterns = patterns('funding.views', - - url(r'^$', CurrentView.as_view(), name='funding_current'), - url(r'^teraz/$', CurrentView.as_view()), - url(r'^teraz/(?P<slug>[^/]+)/$', CurrentView.as_view(), name='funding_current'), - url(r'^lektura/$', OfferListView.as_view(), name='funding'), - url(r'^lektura/(?P<slug>[^/]+)/$', OfferDetailView.as_view(), name='funding_offer'), - url(r'^pozostale/$', WLFundView.as_view(), name='funding_wlfund'), - - url(r'^dziekujemy/$', ThanksView.as_view(), name='funding_thanks'), - url(r'^niepowodzenie/$', NoThanksView.as_view(), name='funding_nothanks'), - - url(r'^wylacz_email/$', DisableNotifications.as_view(), name='funding_disable_notifications'), - - url(r'^getpaid/', include('getpaid.urls')), - - # Includes - url(r'^o/(?P<pk>\d+)/top-bar\.(?P<lang>.+)\.html$', 'top_bar', name='funding_top_bar'), - url(r'^o/(?P<pk>\d+)/detail-bar\.(?P<lang>.+)\.html$', 'detail_bar', name='funding_detail_bar'), - url(r'^o/(?P<pk>\d+)/list-bar\.(?P<lang>.+)\.html$', 'list_bar', name='funding_list_bar'), - url(r'^o/(?P<pk>\d+)/status\.(?P<lang>.+)\.html$', 'offer_status', name='funding_status'), - url(r'^o/(?P<pk>\d+)/status-more\.(?P<lang>.+)\.html$', 'offer_status_more', name='funding_status_more'), - url(r'^o/(?P<pk>\d+)/fundings/(?P<page>\d+)\.(?P<lang>.+)\.html$', 'offer_fundings', name='funding_fundings'), -) diff --git a/apps/funding/utils.py b/apps/funding/utils.py deleted file mode 100644 index c16c9d93d..000000000 --- a/apps/funding/utils.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import re -import string -from fnpdjango.utils.text.slughifi import char_map - -# PayU chokes on non-Polish diacritics. -# Punctuation is handled correctly and escaped as needed, -# with the notable exception of backslash. -sane_in_payu_title = re.escape( - string.uppercase + - string.lowercase + - u'Ä ÄÄÅÅóÅźżÄÄÄÅÅÃÅŹŻ' + - string.digits + - ' ' + - "".join(set(string.punctuation) - set('\\')) -) - -def replace_char(m): - char = m.group() - return char_map.get(char, '') - -def sanitize_payment_title(value): - return re.sub('[^%s]{1}' % sane_in_payu_title, replace_char, unicode(value)) diff --git a/apps/funding/views.py b/apps/funding/views.py deleted file mode 100644 index 7c9adef46..000000000 --- a/apps/funding/views.py +++ /dev/null @@ -1,228 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.core.paginator import Paginator, InvalidPage -from django.core.urlresolvers import reverse -from django.http import Http404 -from django.shortcuts import get_object_or_404, redirect, render -from django.views.decorators.csrf import csrf_exempt -from django.views.generic import TemplateView, FormView, ListView -from getpaid.models import Payment -from ssify import ssi_included -from ssify.utils import ssi_cache_control -from . import app_settings -from .forms import FundingForm -from .models import Offer, Spent, Funding - - -def mix(*streams): - substreams = [] - for stream, read_date, tag in streams: - iterstream = iter(stream) - try: - item = next(iterstream) - except StopIteration: - pass - else: - substreams.append([read_date(item), item, iterstream, read_date, tag]) - while substreams: - i, substream = max(enumerate(substreams), key=lambda x: x[1][0]) - yield substream[4], substream[1] - try: - item = next(substream[2]) - except StopIteration: - del substreams[i] - else: - substream[0:2] = [substream[3](item), item] - - -class WLFundView(TemplateView): - template_name = "funding/wlfund.html" - - def get_context_data(self): - def add_total(total, it): - for tag, e in it: - e.total = total - if tag == 'spent': - total += e.amount - else: - total -= e.wlfund - yield tag, e - - ctx = super(WLFundView, self).get_context_data() - offers = [] - - for o in Offer.past(): - if o.is_win(): - o.wlfund = o.sum() - o.target - if o.wlfund > 0: - offers.append(o) - else: - o.wlfund = o.sum() - if o.wlfund > 0: - offers.append(o) - amount = sum(o.wlfund for o in offers) - sum(o.amount for o in Spent.objects.all()) - - ctx['amount'] = amount - ctx['log'] = add_total(amount, mix( - (offers, lambda x: x.end, 'offer'), - (Spent.objects.all().select_related(), lambda x: x.timestamp, 'spent'), - )) - return ctx - - -class OfferDetailView(FormView): - form_class = FundingForm - template_name = "funding/offer_detail.html" - backend = 'getpaid.backends.payu' - - @csrf_exempt - def dispatch(self, request, slug=None): - if getattr(self, 'object', None) is None: - if slug: - self.object = get_object_or_404(Offer.public(), slug=slug) - else: - self.object = Offer.current() - if self.object is None: - raise Http404 - return super(OfferDetailView, self).dispatch(request, slug) - - def get_form(self, form_class): - if self.request.method == 'POST': - return form_class(self.object, self.request.POST) - else: - return form_class(self.object, initial={'amount': app_settings.DEFAULT_AMOUNT}) - - def get_context_data(self, *args, **kwargs): - ctx = super(OfferDetailView, self).get_context_data(*args, **kwargs) - ctx['object'] = self.object - ctx['page'] = self.request.GET.get('page', 1) - if self.object.is_current(): - ctx['funding_no_show_current'] = True - return ctx - - def form_valid(self, form): - funding = form.save() - # Skip getpaid.forms.PaymentMethodForm, go directly to the broker. - payment = Payment.create(funding, self.backend) - gateway_url_tuple = payment.get_processor()(payment).get_gateway_url(self.request) - payment.change_status('in_progress') - return redirect(gateway_url_tuple[0]) - - -class CurrentView(OfferDetailView): - @csrf_exempt - def dispatch(self, request, slug=None): - self.object = Offer.current() - if self.object is None: - return redirect(reverse('funding')) - elif slug != self.object.slug: - return redirect(reverse('funding_current', args=[self.object.slug])) - return super(CurrentView, self).dispatch(request, slug) - - -class OfferListView(ListView): - queryset = Offer.public() - - def get_context_data(self, *args, **kwargs): - ctx = super(OfferListView, self).get_context_data(*args, **kwargs) - ctx['funding_no_show_current'] = True - return ctx - - -class ThanksView(TemplateView): - template_name = "funding/thanks.html" - - def get_context_data(self, *args, **kwargs): - ctx = super(ThanksView, self).get_context_data(*args, **kwargs) - ctx['offer'] = Offer.current() - ctx['funding_no_show_current'] = True - return ctx - - -class NoThanksView(TemplateView): - template_name = "funding/no_thanks.html" - - -class DisableNotifications(TemplateView): - template_name = "funding/disable_notifications.html" - - @csrf_exempt - def dispatch(self, request): - self.object = get_object_or_404(Funding, - email=request.GET.get('email'), notify_key=request.GET.get('key')) - return super(DisableNotifications, self).dispatch(request) - - def post(self, *args, **kwargs): - self.object.disable_notifications() - return redirect(self.request.get_full_path()) - - -def offer_bar(request, pk, link=False, closeable=False, show_title=True, show_title_calling=True, add_class=""): - offer = get_object_or_404(Offer, pk=pk) - offer_sum = offer.sum() - - return render(request, "funding/includes/funding.html", { - 'offer': offer, - 'sum': offer_sum, - 'is_current': offer.is_current(), - 'is_win': offer_sum >= offer.target, - 'missing': offer.target - offer_sum, - 'percentage': 100 * offer_sum / offer.target, - 'link': link, - 'closeable': closeable, - 'show_title': show_title, - 'show_title_calling': show_title_calling, - 'add_class': add_class, - }) - - -@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) -def top_bar(request, pk): - return offer_bar(request, pk, - link=True, closeable=True, add_class="funding-top-header") - - -@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) -def list_bar(request, pk): - return offer_bar(request, pk, - link=True, show_title_calling=False) - - -@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) -def detail_bar(request, pk): - return offer_bar(request, pk, - show_title=False) - - -@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) -def offer_status(request, pk): - offer = get_object_or_404(Offer, pk=pk) - return render(request, "funding/includes/offer_status.html", { - 'offer': offer, - }) - - -@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) -def offer_status_more(request, pk): - offer = get_object_or_404(Offer, pk=pk) - return render(request, "funding/includes/offer_status_more.html", { - 'offer': offer, - }) - - -@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) -def offer_fundings(request, pk, page): - offer = get_object_or_404(Offer, pk=pk) - fundings = offer.funding_payed() - paginator = Paginator(fundings, 10, 2) - try: - page_obj = paginator.page(int(page)) - except InvalidPage: - raise Http404 - return render(request, "funding/includes/fundings.html", { - "paginator": paginator, - "page_obj": page_obj, - "fundings": page_obj.object_list, - }) diff --git a/apps/funding/widgets.py b/apps/funding/widgets.py deleted file mode 100644 index 8dc9742ce..000000000 --- a/apps/funding/widgets.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from decimal import Decimal -from django import forms -from django.template.loader import render_to_string - - -class PerksAmountWidget(forms.Textarea): - def perks_input_name(self, name): - return "_%s_perk" % name - - def render(self, name, value, attrs=None): - try: - value = Decimal(value) - except: - pass - perks = list(self.form_instance.offer.get_perks()) - perk_chosen = False - for perk in perks: - if perk.price == value: - perk.chosen = True - perk_chosen = True - break - - return render_to_string("funding/widgets/amount.html", { - "perks": perks, - "name": name, - "perks_input_name": self.perks_input_name(name), - "perk_chosen": perk_chosen, - "value": value, - "attrs": attrs, - }) - - def value_from_datadict(self, data, files, name): - num_str = data.get(self.perks_input_name(name)) or data[name] - return num_str.replace(',', '.') diff --git a/apps/infopages/__init__.py b/apps/infopages/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/infopages/admin.py b/apps/infopages/admin.py deleted file mode 100644 index 14a06afa9..000000000 --- a/apps/infopages/admin.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib import admin - -from modeltranslation.admin import TranslationAdmin -from infopages.models import InfoPage - -class InfoPageAdmin(TranslationAdmin): - list_display = ('title', 'slug', 'main_page') - -admin.site.register(InfoPage, InfoPageAdmin) diff --git a/apps/infopages/fixtures/infopages.json b/apps/infopages/fixtures/infopages.json deleted file mode 100644 index 4608715b9..000000000 --- a/apps/infopages/fixtures/infopages.json +++ /dev/null @@ -1,268 +0,0 @@ -[ - { - "pk": 2, - "model": "infopages.infopage", - "fields": { - "title_de": "\ufeffDu kannst uns helfen", - "left_column_uk": "<h2>\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e</h2>\r\n\r\n<p>\u041c\u0438 \u043d\u0430\u043c\u0430\u0433\u0430\u0454\u043c\u043e\u0441\u044f \u044f\u043a\u043e\u043c\u043e\u0433\u0430 \u043a\u0440\u0430\u0449\u0435 \u043f\u0456\u0434\u0433\u043e\u0442\u0443\u0432\u0430\u0442\u0438 \u0442\u0432\u043e\u0440\u0438, \u044f\u043a\u0456 \u043f\u043e\u0441\u0442\u0443\u043f\u043e\u0432\u043e \u0434\u043e\u0434\u0430\u044e\u0442\u044c\u0441\u044f \u0434\u043e \u043d\u0430\u0448\u043e\u0457 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438. \u0426\u0435 \u043c\u043e\u0436\u043b\u0438\u0432\u043e \u0442\u0456\u043b\u044c\u043a\u0438 \u0437\u0430\u0432\u0434\u044f\u043a\u0438 \u043d\u0430\u0448\u0438\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c.</p>\r\n\r\n<p>\u0417\u0430\u043f\u0440\u043e\u0448\u0443\u0454\u043c\u043e \u0443\u0441\u0456\u0445, \u0445\u0442\u043e \u0445\u043e\u0447\u0435 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0443 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0448\u043a\u0456\u043b\u044c\u043d\u043e\u0457 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438 Wolne Lektury.</p>\r\n\r\n<p>\u0412\u0441\u0456\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c \u043c\u0438 \u043f\u0440\u043e\u043f\u043e\u043d\u0443\u0454\u043c\u043e \u0442\u0440\u0435\u043d\u0456\u043d\u0433\u0438 \u0456 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u0438\u0439 \u0434\u043e\u0441\u0432\u0456\u0434 \u043e\u0431\u0440\u043e\u0431\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0443: \u0437\u043c\u0456\u0441\u0442\u043e\u0432\u043d\u0435 \u0442\u0430 \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f. \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438 \u043c\u043e\u0436\u0443\u0442\u044c \u043e\u0437\u043d\u0430\u0439\u043e\u043c\u0438\u0442\u0438\u0441\u044f \u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438 \u0442\u0430 \u043c\u043e\u0436\u043b\u0438\u0432\u043e\u0441\u0442\u044f\u043c\u0438, \u043f\u043e\u0432\u2019\u044f\u0437\u0430\u043d\u0438\u043c\u0438 \u0437 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u044f\u043c\u0438.\r\n\r\n\u0421\u043f\u0456\u043b\u044c\u043d\u043e \u0437 \u043d\u0430\u043c\u0438 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438 \u043e\u0440\u0433\u0430\u043d\u0456\u0437\u0443\u044e\u0442\u044c \u0442\u0440\u0435\u043d\u0456\u043d\u0433\u0438 \u0442\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0456\u0457, \u0434\u043e\u043f\u043e\u043c\u0430\u0433\u0430\u044e\u0442\u044c \u0432 \u043f\u0456\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u0456 \u0442\u0435\u043a\u0441\u0442\u0456\u0432 \u0434\u043b\u044f \u0441\u043b\u0443\u0445\u0430\u043d\u043d\u044f (\u0442\u0430\u043a \u0437\u0432\u0430\u043d\u0438\u0445 \u0430\u0443\u0434\u0456\u043e-\u043a\u043d\u0438\u0433). \u041c\u0438 \u043f\u0456\u0434\u043f\u0438\u0441\u0443\u0454\u043c\u043e \u0437 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c\u0438 \u0443\u0433\u043e\u0434\u0438 \u0442\u0430 \u043d\u0430\u0434\u0430\u0454\u043c\u043e \u0457\u043c \u043f\u043e\u0441\u0432\u0456\u0434\u0447\u0435\u043d\u043d\u044f \u043f\u0440\u043e \u0446\u0435 \u043a\u043e\u043b\u0438 \u0456 \u044f\u043a\u0456 \u043f\u0440\u0430\u0446\u0456 \u0432\u0438\u043a\u043e\u043d\u0443\u0432\u0430\u0432 \u0434\u043b\u044f \u043d\u0430\u0448\u043e\u0433\u043e \u0444\u043e\u043d\u0434\u0443 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440. \u0422\u0440\u0435\u043d\u0456\u043d\u0433\u0438, \u0434\u043e\u0441\u0432\u0456\u0434 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u0438, \u044f\u043a\u0456 \u0446\u0435 \u0437\u0430\u0441\u0432\u0456\u0434\u0447\u0443\u044e\u0442\u044c, \u043c\u043e\u0436\u0443\u0442\u044c \u0431\u0443\u0442\u0438 \u0446\u0456\u043d\u043d\u0438\u043c\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0456 \u043f\u0456\u0434\u0432\u0438\u0449\u0435\u043d\u043d\u044f \u043a\u0432\u0430\u043b\u0456\u0444\u0456\u043a\u0430\u0446\u0456\u0439 \u0456 \u043f\u0440\u043e\u0444\u0435\u0441\u0456\u0439\u043d\u0456\u0439 \u043a\u0430\u0440'\u0454\u0440\u0456.</p>\r\n\r\n<h2>\u0429\u043e \u043c\u043e\u0436\u043d\u0430 \u0440\u043e\u0431\u0438\u0442\u0438?</h2>\r\n\r\n<p>\u041d\u0430\u0439\u0431\u0456\u043b\u044c\u0448\u0435 \u0440\u043e\u0431\u043e\u0442\u0438 \u043f\u0440\u0438\u0441\u0432\u044f\u0447\u0443\u0454\u0442\u044c\u0441\u044f \u043f\u0456\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044e \u0442\u0435\u043a\u0441\u0442\u0443 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u0457. \u0412 \u0442\u0435\u043a\u0441\u0442\u0456, \u044f\u043a\u0438\u0439 \u043c\u0438 \u043e\u0442\u0440\u0438\u043c\u0443\u0454\u043c\u043e \u0432\u0456\u0434 \u041d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438 \u0442\u0440\u0435\u0431\u0430 \u0432\u0438\u043f\u0440\u0430\u0432\u0438\u0442\u0438 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0456\u0447\u043d\u0456 \u0442\u0430 \u0456\u043d\u0448\u0456 \u043c\u0435\u0445\u0430\u043d\u0456\u0447\u043d\u0456 \u043f\u043e\u043c\u0438\u043b\u043a\u0438, \u0430 \u043f\u043e\u0442\u0456\u043c \u0434\u043e\u0434\u0430\u0442\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u0456 \u043f\u0440\u0438\u043c\u0456\u0442\u043a\u0438, \u043f\u0430\u043c\u2019\u044f\u0442\u0430\u044e\u0447\u0438 \u043f\u0440\u043e \u0446\u0435, \u0449\u043e \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u043f\u043e\u0437\u0438\u0446\u0456\u044f \u0441\u043a\u0435\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u0435\u0440\u0448 \u0437\u0430 \u0432\u0441\u0435 \u0434\u043e \u0443\u0447\u043d\u0456\u0432, \u0434\u043b\u044f \u044f\u043a\u0438\u0445 \u0431\u0430\u0433\u0430\u0442\u043e \u0441\u043b\u0456\u0432 \u0442\u0430 \u0444\u0440\u0430\u0437 \u0437\u0432\u0443\u0447\u0430\u0442\u0438\u043c\u0435 \u0430\u043d\u0430\u0445\u0440\u043e\u043d\u0456\u0447\u043d\u043e. \u0414\u0430\u0432\u043d\u0456\u0448\u0456 \u043f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u0457 (\u0432\u0441\u0435 \u0437\u0430\u043b\u0435\u0436\u0438\u0442\u044c \u0442\u0443\u0442 \u0432\u0456\u0434 \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0430) \u043f\u0456\u0434\u0434\u0430\u044e\u0442\u044c\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u043e\u043c\u0443 \u043c\u043e\u0432\u043d\u043e\u043c\u0443 \u043e\u0441\u0443\u0447\u0430\u0441\u043d\u0435\u043d\u043d\u044e, \u043d\u0430 \u043f\u0440\u0438\u043a\u043b\u0430\u0434 \u0449\u043e\u0434\u043e \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0443 \u0447\u0438 \u0444\u043b\u0435\u043a\u0441\u0456\u0457, \u043f\u0440\u0438 \u0447\u043e\u043c\u0443 \u043c\u0438 \u0434\u0431\u0430\u0454\u043c\u043e \u043f\u0440\u043e \u0446\u0435 \u0449\u043e\u0431 \u043d\u0435 \u043f\u043e\u0440\u0443\u0448\u0443\u0432\u0430\u0442\u0438 \u0430\u0440\u0442\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0443 \u0442\u0435\u043a\u0441\u0442\u0443. \u041e\u0441\u0442\u0430\u043d\u043d\u0456\u043c \u0435\u0442\u0430\u043f\u043e\u043c \u0454 \u043f\u043e\u0448\u0443\u043a \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432 \u0442\u0430 \u0442\u0435\u043c, \u044f\u043a\u0456 \u043c\u0430\u044e\u0442\u044c \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0432 \u0433\u043b\u0438\u0431\u0438\u043d\u043d\u043e\u043c\u0443 \u043f\u0456\u0437\u043d\u0430\u043d\u043d\u0456 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0438. \u0412 \u0443\u0441\u0456\u0445 \u0446\u0438\u0445 \u043f\u0440\u0430\u0446\u044f\u0445 \u043d\u0430\u0441 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0443\u044e\u0442\u044c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438 - \u0432\u0447\u0438\u0442\u0435\u043b\u0456 \u0442\u0430 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0438 - \u044f\u043a\u0456 \u0447\u0430\u0441\u0442\u043e \u0434\u043e\u043f\u043e\u043c\u0430\u0433\u0430\u044e\u0442\u044c \u0442\u0430\u043a\u043e\u0436 \u043f\u043e\u0440\u0430\u0434\u043e\u044e \u0442\u0430 \u0437\u0430\u0443\u0432\u0430\u0436\u0435\u043d\u043d\u044f\u043c\u0438 \u043f\u0440\u0438 \u043f\u0440\u0438\u0439\u043d\u044f\u0442\u0442\u0456 \u0432\u0430\u0436\u043b\u0438\u0432\u0438\u0445 \u0440\u0456\u0448\u0435\u043d\u044c.</p>\r\n\r\n<h2>\u042f\u043a \u0434\u043e \u043d\u0430\u0441 \u0437\u0433\u043e\u043b\u043e\u0441\u0438\u0442\u0438\u0441\u044f?</h2>\r\n\r\n<p>\u0423\u0441\u0456\u0445 \u0437\u0430\u0446\u0456\u043a\u0430\u0432\u043b\u0435\u043d\u0438\u0445 \u043f\u0440\u043e\u0441\u0438\u043c\u043e \u0432\u0438\u0441\u043b\u0430\u0442\u0438 \u043b\u0438\u0441\u0442\u0430 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0443 <a href=\"mail:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</p>\r\n\r\n<p>\u0417\u0430\u043f\u0440\u043e\u0448\u0443\u0454\u043c\u043e \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 <a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\">\u0441\u0430\u0439\u0442 \u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0457 Wolne Lektury</a>, \u0434\u0435 \u043c\u043e\u0436\u043d\u0430 \u0437\u043d\u0430\u0439\u0442\u0438 \u0443\u0441\u044e \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e \u043f\u0440\u043e \u0446\u0435, \u044f\u043a \u0437\u0430\u043b\u0443\u0447\u0438\u0442\u0438\u0441\u044c \u0443 \u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0439\u043d\u0443 \u0440\u043e\u0431\u043e\u0442\u0443.</p>", - "main_page": null, - "right_column_pl": "<h2>Kogo szukamy?</h2>\r\n\r\n<h3>Redaktor\u00f3w technicznych (sk\u0142ad tekstu) </h3>\r\n <p>Sk\u0142ad jest pierwszym etapem pracy nad tekstem. Za pomoc\u0105 znacznik\u00f3w j\u0119zyka WL-XML nadajemy tekstowi po\u017c\u0105dan\u0105 form\u0119 i umo\u017cliwiamy wy\u015bwietlenie go na stronie internetowej. Redakcje techniczna dokonywana jest na <a href=\"http://redakcja.wolnelektury.pl\">Platformie Redakcyjnej</a>, kt\u00f3ra pozwala na zautomatyzowanie du\u017cej cz\u0119\u015bci pracy. </p>\r\n\r\n <p><b>Kto mo\u017ce zosta\u0107 redaktorem technicznym?</b> </p>\r\n<ul>\r\n<li>Ka\u017cdy \u2013 po kr\u00f3tkim szkoleniu.</li>\r\n</ul>\r\n\r\n <p>Wi\u0119cej informacji o redakcji technicznej znajdziecie na <a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\">stronie redakcji Wolnych Lektur</a> </p>\r\n\r\n<hr/>\r\n\r\n<h3>Redaktor\u00f3w literackich (merytorycznych) </h3>\r\n <p>Redakcja literacka obejmuje korekt\u0119, uwsp\u00f3\u0142cze\u015bnienia oraz dodawanie przypis\u00f3w i motyw\u00f3w literackich. To unikalna mo\u017cliwo\u015b\u0107 zdobycia do\u015bwiadczenia w cyfrowej edycji tekst\u00f3w. </p>\r\n\r\n <p><b>Kto mo\u017ce zosta\u0107 redaktorem literackim? </b> </p>\r\n<ul>\r\n<li>Osoby, kt\u00f3re maj\u0105 do\u015bwiadczenie w redakcji tekst\u00f3w literackich,</li>\r\n<li>Studenci i absolwenci studi\u00f3w humanistycznych, kt\u00f3rzy chc\u0105 takie do\u015bwiadczenie zdoby\u0107. </li>\r\n</ul>\r\n<p>Wi\u0119cej informacji o redakcji merytorycznej znajdziecie na <a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\">stronie redakcji Wolnych Lektur</a> </p>\r\n\r\n<hr/>\r\n\r\n<h3>T\u0142umaczy</h3>\r\n <p>Strona WolneLektury.pl jest dost\u0119pna w siedmiu j\u0119zykach obcych \u2013 angielskim, francuskim, niemieckim, hiszpa\u0144skim, litewskim, rosyjskim oraz ukrai\u0144skim. U\u017cytkownikami biblioteki jest ponad 200 tysi\u0119cy os\u00f3b z zagranicy, a ju\u017c nied\u0142ugo nasze zbiory obejm\u0105 r\u00f3wnie\u017c dzie\u0142a w j\u0119zykach obcych. Dlatego potrzebujemy na bie\u017c\u0105co t\u0142umaczy\u0107 nowe informacje pojawiaj\u0105ce si\u0119 na stronie. </p>\r\n <p><b>Kto mo\u017ce pom\u00f3c w t\u0142umaczeniach? </b> </p>\r\n<ul>\r\n<li>Ka\u017cdy, kto dobrze zna co najmniej jeden z powy\u017cszych j\u0119zyk\u00f3w. </li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h3>Programist\u00f3w</h3>\r\n <p>Poza sam\u0105 stron\u0105 Wolnych Lektur tworzymy r\u00f3wnie\u017c: </p>\r\n<ul>\r\n<li>narz\u0119dzia redakcyjne,</li>\r\n<li>konwertery do r\u00f3\u017cnych format\u00f3w e-book\u00f3w, </li>\r\n<li>aplikacje mobile u\u0142atwiaj\u0105ce dost\u0119p do naszych zasob\u00f3w.</li>\r\n</ul>\r\n\r\n <p>U\u017cywamy takich technologii jak: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nTworzone przez nas oprogramowanie udost\u0119pniamy na <a href=\"https://github.com/fnp/\">wolnej licencji</a>. </p>\r\n <p><b>Kto mo\u017ce pom\u00f3c w pracach programistycznych?</b> </p>\r\n<ul>\r\n<li>Ka\u017cdy, kto umie i chcia\u0142by zdoby\u0107 punkty do karmy za udzia\u0142 w otwartym projekcie programistycznym. ;)</li>\r\n</ul>\r\n", - "right_column_lt": "<h2>Labiausiai nusipeln\u0119 savanoriai</h2>\r\n\r\n\t<h3>Agatapaszkowska (bendradarbiauja su mumis nuo 2008 m. kovo 15 d.)</h3>\r\n\r\n <p>tarp kitko pareng\u0117 \u201eW pustyni i w puszczy\u201d Sienkiewicza ; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n\r\n\r\n\t<h3>AgnieszkaKappa (bendradarbiauja su mumis nuo 2008 m. kovo 16 d.)</h3>\r\n\r\n <p>tarp kitko pad\u0117jo paruo\u0161ti literat\u016bros tem\u0173 ir motyv\u0173 s\u0105ra\u0161\u0105; parsiuo\u0161\u0117 teksto apra\u0161ymus: Sienkiewicz (Latarnik, Janko Muzykant, Quo vadis); aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>\r\n\r\n\r\n <h3>Anerys (bendradarbiauja su mumis nuo 2007 m. liepos 5 d.)</h3>\r\n\r\n <p>tarp kitko pad\u0117jo paruo\u0161ti literat\u016bros tem\u0173 ir motyv\u0173 s\u0105ra\u0161\u0105, diskusija apie literat\u016brin\u0119s r\u016b\u0161is, parsiuo\u0161\u0117 \u0161iu tekstu apra\u0161ymus; BogurodzicA, \u201eFraszki\u201d ir \u201eTrenyTreny\u201d Kochanowskiego; eil\u0117ra\u0161\u010diai: S\u0142owacki (Gr\u00f3b Agamemnona), \u201e\u015awi\u0119toszek\u201d Molier, ar poezija\u00a0\u00a0 Kasprowicz (himnas\u00a0\u00a0 \u201eDies Irae\u201d);aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d:\r\n <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n\r\n\r\n\t<h3>EmiliaZdankiewicz (bendradarbiauja su mumis nuo 2008 m. kovo 17 d.</h3>\r\n\r\n <p>tarp kitko literat\u016brinai motyvai, diskusijos, apra\u0161ymai: S\u0142owacki, Kordian; Konopnicka, Nasza szkapa; Mickiewicz, Dziady cz. III; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz</a></p>\r\n\r\n\r\n\t<h3>Ewa_Serafin (bendradarbiauja su mumis nuo 2008 m. kovo 15 d.)</h3>\r\n\r\n <p>tarp kitko pad\u0117jo paruo\u0161ti literat\u016bros tem\u0173 ir motyv\u0173 s\u0105ra\u0161\u0105, parsiuo\u0161\u0117 \u0161iu poeti\u0161ku tekstu apra\u0161ymus: Kasprowicz (\u201eZ wichr\u00f3w i hal\u201d, \u201eNad przepa\u015bciami\u201d, \u201eW ciemno\u015bci schodzi moja dusza\u201d oraz \u201eNad Niemnem\u201d Orzeszkowej; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi</a>n</p>\r\n\r\n\r\n \t<h3>Hanna_Golab (bendradarbiauja su mumis nuo 2008 m. kovo 15 d.)</h3>\r\n\r\n <p>apra\u0161\u0117:\u201eKr\u00f3la Edypa\u201d Sofoklesa ir \u201eDusio\u0142k\u201d Le\u015bmian; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></p>\r\n\r\n\r\n\t<h3>Ingene (bendradarbiauja su mumis nuo 2008 m. liepos 16 d.)</h3>\r\n\r\n <p>tarp kitko apra\u0161\u0117: \u201eSi\u0142aczka\u201d \u017beromski, \u201eQuo vadis\u201d Sienkiewicz ir \u201eTreny\u201d Kochanowski; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene</a></p>\r\n \r\n\t<h3>Jmyszkowska (bendradarbiauja su mumis nuo 2008 m. kovo 26 d.)</h3>\r\n\r\n <p>tarp kitko apra\u0161\u0117 \u201eGiaura\u201d Byron ir \u201eQuo vadis\u201d Sienkiewicz; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></p>\r\n\r\n\r\n <h3>Marysiabailey (bendradarbiauja su mumis nuo 2007 m. spalio 1 d.)</h3>\r\n\r\n <p>tarp kitko pad\u0117jo paruo\u0161ti literat\u016bros tem\u0173 ir motyv\u0173 s\u0105ra\u0161\u0105; apra\u0161\u0117 \u201eCh\u0142opi\u201d Reymont, \u201eLalka\u201d Prus, \u201eNie-Bosk\u0105 komedia\u201d Krasi\u0144skie, \u201eBajki\u201d ir \u201eSatyry\u201d Krasicki, \u201eAntygona\u201d Sofokles ir k\u016brinius: Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman, Kasprowicz; zob. ;aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey</a>; parose ir ved\u0117 apmokymus savanoriams 2008 m. kovo 15 d.; u\u017esiimin\u0117jo proofreading, o dabartiniu metu vadovauja darbams susijusiems su audio knyg\u0173 ruo\u0161imu.</p>\r\n\r\n\r\n <h3>Olga_Wojtczak (bendradarbiauja su mumis nuo 2008 m. spalio 21 d.)</h3>\r\n\r\n <p>tarp kitko apra\u0161e roman\u0105 Sienkiewicz (Trilogija), Reymont, \u017beromski, dramos Shakespear; ;aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak</a></p>\r\n\r\n\r\n <h3>Renataml (bendradarbiauja su mumis nuo 2007 m. bir\u017eelio 30 d.)</h3>\r\n\r\n <p>pad\u0117jo parsiuo\u0161ti diskusij\u0105 apie motyv\u0173 s\u0105ra\u0161\u0105, patar\u0117 mums, nes tai patyrusi mokytoja, \u201eLalk\u0119\u201d Prusa, \u201eBalladyn\u0119\u201d S\u0142owackiego, \u201eSi\u0142aczk\u0119\u201d \u017beromskiego.\r\n\r\n <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</a></p>\r\n", - "left_column_lt": "<h2>Savanori\u0161ka veikla</h2>\r\n\r\n <p>D\u0117ka savanori\u0173 k\u016brini\u0173 apra\u0161ymai, kurie yra \u012fjungiami \u012f m\u016bs\u0173 bibliotek\u0105 yra kiekvien\u0105 kart\u0105 kruop\u0161\u010diai paruo\u0161iami.</p>\r\n \r\n \r\n <p>Kvie\u010diame visus, kurie nori kartu su mumis kurti mokykline internetine bibliotek\u0105 Laisvoji Literat\u016bra.</p>\r\n \r\n <p>Visiem savanoriams teikiame apmokym\u0105 ir praktik\u0105 suri\u0161ta su teksto editavimu: techninis ir esminis teksto redagavimas. \r\n Savanoriai gali susipa\u017einti su problemom suri\u0161tomis su teksto platinimu internete, bet ir su galimybe juos i\u0161ri\u0161ti.\r\n Savanoriai padeda mums organizuoti apmokymus ir konferencijas, taip pat padeda paruo\u0161ti knyg\u0173 garso \u012fra\u0161us (taip vadinamos: audio knygos). \r\n Kiekvienam savanoriui kuris nori parvirtimo bei paliudijimo, kad dirbo (ir k\u0105 veik\u0117) m\u016bs\u0173 fonde, suteikiame tokia galimyb\u0119.\r\n Apmokymai, praktika ir paliudijimas gali prisid\u0117ti prie darbo kvalifikacij\u0173 pak\u0117limo.</p>\r\n\r\n <h2>K\u0105 dar galima padaryti?</h2>\r\n \r\n <p>Daug darbo yra ruo\u0161iant mokyklin\u0119 literat\u016br\u0105 leidimui. Perdirbti reikia tekst\u0105, kuri gauname i\u0161 Lenkijos Nacionalines\r\n Bibliotekos reikia pa\u0161alinti korekt\u016bros ir kitas klaidas, o veliau sukurti i\u0161na\u0161as, vis\u0105 laik\u0105 reikia tur\u0117ti omeny kad \r\n m\u016bs\u0173 svetain\u0119 aplanko da\u017eniausiai jaunimas ir visu pirma jiems tekstas turi b\u016bti \u012fdomus. \r\n Ankstesnieji knyg\u0173 ledinei turi pereiti kalbos modernizacij\u0105 (tai diktuoja autori\u0173 teis\u0117s) pvz.: ra\u0161ybos ar kaitybos kartu \r\n reikia stengtis kad nepa\u017eeisti menini\u0173 teksto savybi\u0173. Paskutinis etapas tai ie\u0161kojimas literat\u016brini\u0173 motyv\u0173 ir tem\u0173\r\n kurie per\u017ei\u016br\u0117s k\u016briny perd\u0117m. Visuose \u0161iuose darbuose mare mus savanoriai - mokytojai ir studentai - da\u017enai pataria atkreipia d\u0117mesy, padeda nuspr\u0119sti.</p>\r\n \r\n <h2>Kaip prie m\u016bs\u0173 prisijungti?</h2>\r\n \r\n <p>Susidom\u0117jusius kvie\u010diame ra\u0161yti: e-pa\u0161tas <a href=\"mail:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</p>\r\n\r\n <p>Kvie\u010diame tai pat aplankyti <a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\">redakcijos Laisvoji Literat\u016bra tinklap\u012f</a>, \r\n kur galim surasti visas reikalingas \u017einias apie tai kaip prisijungi \u012f redakcini darb\u0105.</p>", - "title_fr": "Vous pouvez nous aider", - "right_column_ru": "<h2>\u0421\u0430\u043c\u044b\u0435 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u0435 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b</h2>\r\n\r\n\t<h3>Agatapaszkowska (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 15 \u043c\u0430\u0440\u0442\u0430 2008)</h3>\r\n\r\n <p>\u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u201e\u0412 \u043f\u0443\u0441\u0442\u044b\u043d\u0435 \u0438 \u043f\u0443\u0449\u0435\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 ; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n\r\n\r\n\t<h3>AgnieszkaKappa (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 16 \u043c\u0430\u0440\u0442\u0430 2008)</h3>\r\n\r\n <p> \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c; \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 (\"\u041c\u0430\u044f\u0447\u043d\u0438\u043a\", \"\u042f\u043d\u043a\u043e-\u043c\u0443\u0437\u044b\u043a\u0430\u043d\u0442\", \"\u041a\u0430\u043c\u043e \u0433\u0440\u044f\u0434\u0435\u0448\u0438\"); \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>\r\n\r\n\r\n <h3>Anerys (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 5 \u0438\u044e\u043b\u044f 2007)</h3>\r\n\r\n <p> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u0436\u0430\u043d\u0440\u043e\u0432, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u0411\u043e\u0433\u043e\u0440\u043e\u0434\u0438\u0446\u0443, \u201e\u042d\u043f\u0438\u0433\u0440\u0430\u043c\u043c\u044b\u201d \u0438 \u201e\u0422\u0440\u0435\u043d\u044b\u201d \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u043a\u043e\u0433\u043e; \u0441\u0442\u0438\u0445\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u044f \u0421\u043b\u043e\u0432\u0430\u0446\u043a\u043e\u0433\u043e (Gr\u00f3b Agamemnona), \u201e\u041e\u0431\u043c\u0430\u043d\u0449\u0438\u043a\u0430\u201d \u041c\u043e\u043b\u044c\u0435\u0440\u0430, \u043f\u043e\u044d\u0437\u0438\u044e \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0438\u0447\u0430 (\u0432 \u0442.\u0447. \u0433\u0438\u043c\u043d \u201eDies Irae\u201d) \u0438 \u0434\u0440.; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n\r\n\r\n\t<h3>EmiliaZdankiewicz (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 17 \u043c\u0430\u0440\u0442\u0430 2008)</h3>\r\n\r\n <p> \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0435 \u043c\u043e\u0442\u0438\u0432\u044b: \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u044f \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435, \u0421\u043b\u043e\u0432\u0430\u0446\u043a\u0438\u0439 \"\u041a\u043e\u0440\u0434\u0438\u0430\u043d\"; \u041a\u043e\u043d\u043e\u043f\u043d\u0438\u0446\u043a\u0430\u044f \"Nasza szkapa\"; \u041c\u0438\u0446\u0435\u043a\u0432\u0438\u0447 \"\u0414\u0437\u044f\u0434\u044b \u0447. III\" \u0438 \u0434\u0440.; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz</a></p>\r\n\r\n\r\n\t<h3>Ewa_Serafin (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 15 \u043c\u0430\u0440\u0442\u0430 2008)</h3>\r\n\r\n <p> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u043f\u043e\u044d\u0437\u0438\u044e \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0438\u0447\u0430 (\u201eZ wichr\u00f3w i hal\u201d, \u201eNad przepa\u015bciami\u201d, \u201eW ciemno\u015bci schodzi moja dusza\u201d), \u0430 \u0442\u0430\u043a\u0436\u0435 \u201eNad Niemnem\u201d \u041e\u0436\u0435\u0448\u043a\u043e; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi</a>n</p>\r\n\r\n\r\n \t<h3>Hanna_Golab (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 15 \u043c\u0430\u0440\u0442\u0430 2008)</h3>\r\n\r\n <p>\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u201e\u0426\u0430\u0440\u044f \u042d\u0434\u0438\u043f\u0430\u201d \u0421\u043e\u0444\u043e\u043a\u043b\u0430, \u0432 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u201eDusio\u0142ek\u201d \u041b\u0435\u0441\u044c\u043c\u044f\u043d\u0430; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></p>\r\n\r\n\r\n\t<h3>Ingene (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 16 \u0438\u044e\u043b\u044f 2008)</h3>\r\n\r\n <p> \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u201eSi\u0142aczka\u201d \u0416\u0435\u0440\u043e\u043c\u0441\u043a\u043e\u0433\u043e, \u201e\u041a\u0430\u043c\u043e \u0433\u0440\u044f\u0434\u0435\u0448\u0438\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430, \u201e\u0422\u0440\u0435\u043d\u044b\u201d \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u0438 \u0434\u0440.; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene</a></p>\r\n \r\n\t<h3>Jmyszkowska (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 26 \u043c\u0430\u0440\u0442\u0430 2008)</h3>\r\n\r\n <p>\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u201e\u0413\u044f\u0443\u0440\u0430\u201d \u0411\u0430\u0439\u0440\u043e\u043d\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u201e\u041a\u0430\u043c\u043e \u0433\u0440\u044f\u0434\u0435\u0448\u0438\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></p>\r\n\r\n\r\n <h3>Marysiabailey (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 1 \u043e\u043a\u0442\u0430\u0431\u0440\u044f 2007)</h3>\r\n\r\n <p>\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0438\u0445 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f; \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0430 \u201e\u041c\u0443\u0436\u0438\u043a\u043e\u0432\u201d \u0420\u0435\u0439\u043c\u043e\u043d\u0442\u0430, \u201e\u041a\u0443\u043a\u043b\u0443\u201d \u041f\u0440\u0443\u0441\u0430, \u201e\u041d\u0435\u0431\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043a\u043e\u043c\u0435\u0434\u0438\u044e\u201d \u041a\u0440\u0430\u0441\u0438\u043d\u044c\u0441\u043a\u043e\u0433\u043e, \u201eBajki\u201d \u0438 \u201eSatyry\u201d \u041a\u0440\u0430\u0441\u0438\u0446\u043a\u043e\u0433\u043e, \u201e\u0410\u043d\u0442\u0438\u0433\u043e\u043d\u0443\u201d \u0421\u043e\u0444\u043e\u043a\u043b\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u043a\u043e\u0433\u043e, \u041c\u043e\u0440\u0448\u0442\u0438\u043d\u0430, \u041c\u0438\u0446\u043a\u0435\u0432\u0438\u0447\u0430, \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0438\u0447\u0430, \u0413\u0435\u0442\u0435, \u041e\u043f\u043f\u043c\u0430\u043d\u0430; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey</a>; \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0430 \u0438 \u0432\u0435\u043b\u0430 \u0443\u0447\u0435\u0431\u0443 \u0434\u043b\u044f \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u043e\u0432 15 \u043c\u0430\u0440\u0442\u0430 2008; \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0430\u0441\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0443\u0440\u043e\u0439, \u0441\u0435\u0439\u0447\u0430\u0441 \u0436\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u043d\u0430\u0434 \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433\u0430\u043c\u0438.</p>\r\n\r\n\r\n <h3>Olga_Wojtczak (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 21 \u043e\u043a\u0442\u0430\u0431\u0440\u044f 2008)</h3>\r\n\r\n <p>\u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0430 \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u043e\u043c\u0430\u043d\u044b \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 (\"\u0422\u0440\u0438\u043b\u043e\u0433\u0438\u044f\"), \u0420\u0435\u0439\u043c\u043e\u043d\u0442\u0430, \u0416\u0435\u0440\u043e\u043c\u0441\u043a\u043e\u0433\u043e, \u0434\u0440\u0430\u043c\u044b \u0428\u0435\u043a\u0441\u043f\u0438\u0440\u0430; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak</a></p>\r\n\r\n\r\n <h3>Renataml (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 30 \u0438\u044e\u043d\u044f 2007)</h3>\r\n\r\n <p>\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438 \u043d\u0430\u0441\u0447\u0435\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 \u043c\u043e\u0442\u0438\u0432\u043e\u0432; \u043a\u0430\u043a \u043e\u043f\u044b\u0442\u043d\u044b\u0439 \u0443\u0447\u0438\u0442\u0435\u043b\u044c, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0430 \u043d\u0430\u0441 \u0441\u043e\u0432\u0435\u0442\u0430\u043c\u0438, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u201e\u041a\u0443\u043a\u043b\u0443\u201d \u041f\u0440\u0443\u0441\u0430, \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u201eBalladyn\u0430\u201d \u0421\u043b\u043e\u0432\u0430\u0446\u043a\u043e\u0433\u043e, \u201eSi\u0142aczk\u0119\u201d \u0416\u0435\u0440\u043e\u043c\u0441\u043a\u043e\u0433\u043e.\r\n\r\n <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</a></p>", - "left_column_fr": "<h2>B\u00e9n\u00e9volat</h2>\r\n\r\n <p>Nous essayons de r\u00e9diger les oeuvres ajout\u00e9es successivement \u00e0 notre biblioth\u00e8que le mieux possible. Ce n'est possible que gr\u00e2ce \u00e0 nos b\u00e9n\u00e9voles.</p>\r\n\r\n \r\n <p>Nous invitons tous ceux qui veulent contribuer \u00e0 la cr\u00e9ation de la biblioth\u00e8que en ligne Lectures libres \u00e0 coop\u00e9rer avec nous.</p>\r\n \r\n <p>Tous les b\u00e9n\u00e9voles peuvent profiter de l'apprentissage et gagner de la pratique en \u00e9dition du texte: r\u00e9daction technique et du contenu. Les b\u00e9n\u00e9voles ont la possibilit\u00e9 de d\u00e9couvrir les probl\u00e8mes, mais aussi les possibilit\u00e9s li\u00e9es avec les publications en ligne. Ils co-organisent des entra\u00eenements et des conf\u00e9rences, aident \u00e0 pr\u00e9parer des versions des textes \u00e0 \u00e9couter (livres audio). Les b\u00e9n\u00e9voles obtiennent un contrat et un certificat pr\u00e9cisant quand et en quelle qualit\u00e9 ils ont aid\u00e9 notre fondation. Des entra\u00eenements, la pratique de l'\u00e9dition et les c\u00e9rtificats qui les confirment peuvent vous aider \u00e0 d\u00e9montrer vos comp\u00e9tences et peuvent \u00eatre tr\u00e8s precieux pour votre d\u00e9veloppement professionnel.</p>\r\n\r\n \r\n <h2>Qu'est-ce qu'il y a \u00e0 faire?</h2>\r\n \r\n <p>Le plus de travail est consacr\u00e9 \u00e0 pr\u00e9parer le texte pour la publication. Dans le texte qu'on re\u00e7oit de la Biblioth\u00e8que nationale il faut corriger les fautes de frappe ou autres erreurs m\u00e9caniques, et puis ajouter des annotations tout en sachant que norte offre est cibl\u00e9e aux \u00e9l\u00e8ves, pour lesquels beaucoup des mots sembleront anachroniques. Dans les \u00e9ditions plus anciennes (tout en vue du droit d'auteur) on introduit des modernisations de la langue par exemple en ce qui concerne l'orthographe ou flexion, tout en prenant soin \u00e0 ne pas d\u00e9former la sp\u00e9cificit\u00e9 artistique du texte. Derni\u00e8re \u00e9tape c'est la recherche des motifs et th\u00e8mes litt\u00e9raires, pour aider \u00e0 conna\u00eetre la litt\u00e9rature d'une fa\u00e7on r\u00e9element profonde. Dans tous ces travaux nous sommes aid\u00e9s par les b\u00e9n\u00e9voles - professeurs et \u00e9tudiants - dont les conseils et commentaires nous aident fr\u00e9quemment \u00e0 prendre des d\u00e9cisions importantes.</p>\r\n \r\n <h2>Comment nous contacter?</h2>\r\n \r\n <p>Toutes les personnes int\u00e9ress\u00e9es sont invit\u00e9es \u00e0 envoyer un message \u00e0 l'adresse <a href=\"mail:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</p>\r\n\r\n <p>Vous pouvez aussi visiter <a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\">le site de la r\u00e9daction Lectures Libres</a>, o\u00f9 on peut trouver toutes les informations n\u00e9cessaires, expliquant comment se joindre \u00e0 nos travaux de r\u00e9daction.</p>", - "title": "You can help us", - "title_lt": "Gali mums padeti", - "right_column": "<h2>The most noteworthy volunteers</h2>\r\n\r\n\t\r\n\r\n<h3>AgataPaszkowska (contributes to the website since March 15, 2008)</h3>\r\n\r\n <p>Among the others, she worked on Henryk Sienkiewicz's \"In Desert nad Wilderness\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n\r\n\r\n\t\r\n\r\n\r\n\r\n<h3>AgnieszkaKappa (contributes to the website since March 16, 2008)</h3>\r\n\r\n <p>Among the others, she participated in creating the booklist and descritpion of the usage of the motifs and themes; worked on Henryk Sienkiewicz's works (\"The Lighthouse Keeper\", \"Janko Muzykant\", \"Quo vadis\"); cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>\r\n\r\n\r\n \r\n\r\n\r\n\r\n<h3>Anerys (contributes to the website since July 5, 2007)</h3>\r\n\r\n <p>Among the others, she took part in creating the list of literary motifs and themes, and dicussion on the literary genres, she worked on Bogurodzica, Jan Kochanowski's \"Fraszki\" and \"Laments\"; Juliusz S\u0142owacki's poems (\"Gr\u00f3b Agamemnona\"), Moliere's \"Tartuffe\" and Jan Kasprowicz's poems (together with \"Dies Irae\" hymn); cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<h3>EmiliaZdankiewicz (contributes to the website since March 17, 2008)</h3>\r\n\r\n <p>Among the others: literary motifs, discussion and descriptions; Juliusz S\u0142owacki's \"Kordian\"; Maria Konopnicka's \"Nasza Szkapa\"; Adam Mickiewicz's \"Dziady, part III); cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz</a></p>\r\n\r\n\r\n\r\n<h3>Ewa_Serafin (contributes to the website since March 15, 2008)</h3>\r\n\r\n <p>Among the others, she participated in creating list and usage description of literary motifsand themes; she worked on Jan Kasprowicz poems (\"Z wichr\u00f3w i hal\", \"Nad przepa\u015bciami\", \"W ciemno\u015bci schodzi moja dusza\") and Eliza Orzeszkowa's \"On the Niemen\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi</a>n</p>\r\n\r\n\r\n \r\n\r\n\r\n\r\n<h3>Hanna_Golab (contributes to the website since March 15, 2008)</h3>\r\n\r\n <p>She worked on Sophocles' \"Oedipus the King\" and Boles\u0142aw Le\u015bmian's \"Dusio\u0142ek\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></p>\r\n\r\n\r\n\r\n<h3>Ingene (contributes to the website since July 16, 2008) </h3>\r\n\r\n <p>Among the others, she worked on Stefan \u017beromski's \"Si\u0142aczka\", Henryk Sienkiewicz's \"Quo vadis\" and Jan Kochanowski's \"Laments\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene</a></p>\r\n \r\n\r\n\r\n\r\n<h3>Jmyszkowska (contributes to the website since March 26, 2008) <p>Among the others, she worked on Byron's \"Giaour\" and Henryk Sienkiewicz's \"Quo vadis\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></p>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<h3>Marysiabailey (contributes to the website since October 1, 2007)</h3>\r\n\r\n <p>Among the others, she took part in creating the list of literary themes and motifs and description of usage of those bra\u0142a udzia\u0142; worked on W\u0142adys\u0142aw Reymont's \"Ch\u0142opi\", Boles\u0142aw Prus' \"The Doll\", Zygmunt Krasi\u0144ski's \"Nie-boska komedia\", Ignacy Krasicki's \"Fables\" and \"Satires\", Sophocles' \"Antigone\" and poems of Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Geothe and Oppman; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey</a>; Furthermore, she prepared and carried on the training for volunteers and took care of proofreading. Currently she's managing the works on audiobooks.</p>\r\n\r\n\r\n \r\n\r\n\r\n\r\n<h3>Olga_Wojtczak (contributes to the website since October 21, 2008)</h3>\r\n\r\n <p>Among the others, she worked on Henryk Sienkiewicz's novels (The Trilogy), the works of W\u0142adys\u0142aw Reymont and Stefan \u017beromski, as well as Shakespeare's dramas;cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak</a></p>\r\n\r\n\r\n \r\n\r\n\r\n\r\n<h3>Renataml (contributes to the website since June 30, 2007)</h3>\r\n\r\n <p>She took part in the discussion on list of motifs, as a experienced teacher she supported us with pieces of advice; edited Boles\u0142aw Prus' \"The Doll\", Juliusz S\u0142owacki's \"Balladyna\", Stefan \u017beromski's \"Si\u0142aczka\". <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</a></p>", - "right_column_es": "<h2> Los voluntarios a los que merecemos mucho </h2>\r\n\r\n\r\n\r\n\t<h3>Agatapaszkowska (trabaja con nosotros desde el 15 de marzo 2008)</h3>\r\n\r\n\r\n\r\n <p> edit\u00f3, entre otros, \u201cW pustynii i w puszczy\u201d de Sienkiewicz ; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n\r\n\r\n\r\n\r\n\r\n\t<h3>AgnieszkaKappa (trabaja con nosotros desde el 16 de marzo 2008) </h3>\r\n\r\n\r\n\r\n <p>particip\u00f3 en la creaci\u00f3n de la lista y la descripci\u00f3n del uso de los motivos y temas literarios, edit\u00f3 los textos de Sienkiewicz (\u201cFarero\u201d, \u201cJanko Muzykant\u201d, \u201cQuo vadis\u201d); ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>\r\n\r\n\r\n\r\n\r\n\r\n <h3>Anerys (trabaja con nosotros desde el 5 de julio 2007)</h3>\r\n\r\n\r\n\r\n <p> particip\u00f3 en la creaci\u00f3nn de la lista de los motivos y temas literarios y la debate sobre los g\u00e9neros literarios, edit\u00f3 Bogurodzica, \u201cFraszki\u201d y \u201cTreny\u201d de Kochanowski, poemas de S\u0142owacki (\u201cLa tumba de Agamemnon\u201d), \u201cTartufo\u201d de Moliere y los poemas de Kasprowicz (el himno \u201cDies Irae\u201d); ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n\r\n\r\n\r\n\r\n\r\n\t<h3>EmiliaZdankiewicz (trabaja con nosotros desde el 17 de marzo 2008)</h3>\r\n\r\n\r\n\r\n <p>edit\u00f3 y discut\u00f3 sobre los motivos literarios, \u201cKordian\u201d de S\u0142owacki, \u201cNasza Szkapa\u201d de Konopnicka,\u201dDziady\u201d parte III de Mickiewicz; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz</a></p>\r\n\r\n\r\n\r\n\r\n\r\n\t<h3>Ewa_Serafin (trabaja con nosotros desde el 15 de marzo 2008)</h3>\r\n\r\n\r\n\r\n <p> particip\u00f3 en la creaci\u00f3n de la lista y la descripci\u00f3n del uso de los motivos y temas literarios, edit\u00f3 los poemas de Kasprowicz (\u201cZ wichr\u00f3w i hal\u201d, \u201cNad przepa\u015bciami\u201d, \u201cW ciemno\u015bci schodzi moja dusza\u201d) y \u201cNad Niemnem\u201d de Orzeszkowa; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi</a>n</p>\r\n\r\n\r\n\r\n\r\n\r\n \t<h3>Hanna_Golab (trabaja con nosotros desde el 15 de marzo 2008)</h3>\r\n\r\n\r\n\r\n <p> edit\u00f3 \u201cEdipo Rey\u201d de S\u00f3focles y \u201cDusio\u0142ek\u201d de Le\u015bmian; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></p>\r\n\r\n\r\n\r\n\r\n\r\n\t<h3>Ingene (trabaja con nosotros desde el 16 de julio 2008)</h3>\r\n\r\n\r\n\r\n <p>edit\u00f3 \u201eSi\u0142aczka\u201dde \u017beromski, \u201eQuo vadis\u201d de Sienkiewicz y \u201eTreny\u201d de Kochanowski; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene</a></p>\r\n\r\n \r\n\r\n\t<h3>Jmyszkowska (trabaja con nosotros desde el 26 de marzo 2008)</h3>\r\n\r\n\r\n\r\n <p> edit\u00f3 \u201cGiaur\u201d de Byron y \u201cQuo vadis\u201d de Sienkiewicz; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></p>\r\n\r\n\r\n\r\n\r\n\r\n <h3>Marysiabailey (trabaja con nosotros desde el 1 de octubre 2007)</h3>\r\n\r\n\r\n\r\n <p> partici\u00f3 en la creaci\u00f3n de la lista de motivos y temas literarios y la descripci\u00f3n de su uso, edit\u00f3 \u201cLos campesinos\u201d de Reymont, \u201cLa mu\u00f1eca\u201d de Prus, \u201cNie-boska komedia\u201d de Krasi\u0144ski, \u201cFabulas\u201d y \u201cS\u00e1tiras\u201d de Krasicki, \u201cAnt\u00edgona\u201d de S\u00f3focles y las obras de Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey</a>; adem\u00e1s prepar\u00f3 y condujo el curso para voluntarios el 15 de marzo 2008; se ocupaba de proofreading y actualmente coordina los trabajos sobre los audiolibros.</p>\r\n\r\n\r\n\r\n\r\n\r\n <h3>Olga_Wojtczak (trabaja con nosotros desde el 21 de octubre 2008)</h3>\r\n\r\n\r\n\r\n <p> edit\u00f3 las novelas de Sienkiewicz (\u201cLa Trilogia\u201d), Reymont, \u017beromski, las dramas de Shakespeare; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak</a></p>\r\n\r\n\r\n\r\n\r\n\r\n <h3>Renataml (trabaja con nosotros desde el 30 de junio 2007)</h3>\r\n\r\n\r\n\r\n <p>particip\u00f3 en la debate sobre la lista de motivos literarios, nos ayud\u00f3 con sus consejos de profesora con experiencia, edit\u00f3 \u201cLa mu\u00f1eca\u201d de Prus, \u201cBalladyna\u201d de S\u0142owacki, \u201cSi\u0142aczka\u201d de \u017beromski. <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</a></p>", - "right_column_en": "<h2>The most noteworthy volunteers</h2>\r\n\r\n\t\r\n\r\n<h3>AgataPaszkowska (contributes to the website since March 15, 2008)</h3>\r\n\r\n <p>Among the others, she worked on Henryk Sienkiewicz's \"In Desert nad Wilderness\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n\r\n\r\n\t\r\n\r\n\r\n\r\n<h3>AgnieszkaKappa (contributes to the website since March 16, 2008)</h3>\r\n\r\n <p>Among the others, she participated in creating the booklist and descritpion of the usage of the motifs and themes; worked on Henryk Sienkiewicz's works (\"The Lighthouse Keeper\", \"Janko Muzykant\", \"Quo vadis\"); cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>\r\n\r\n\r\n \r\n\r\n\r\n\r\n<h3>Anerys (contributes to the website since July 5, 2007)</h3>\r\n\r\n <p>Among the others, she took part in creating the list of literary motifs and themes, and dicussion on the literary genres, she worked on Bogurodzica, Jan Kochanowski's \"Fraszki\" and \"Laments\"; Juliusz S\u0142owacki's poems (\"Gr\u00f3b Agamemnona\"), Moliere's \"Tartuffe\" and Jan Kasprowicz's poems (together with \"Dies Irae\" hymn); cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<h3>EmiliaZdankiewicz (contributes to the website since March 17, 2008)</h3>\r\n\r\n <p>Among the others: literary motifs, discussion and descriptions; Juliusz S\u0142owacki's \"Kordian\"; Maria Konopnicka's \"Nasza Szkapa\"; Adam Mickiewicz's \"Dziady, part III); cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz</a></p>\r\n\r\n\r\n\r\n<h3>Ewa_Serafin (contributes to the website since March 15, 2008)</h3>\r\n\r\n <p>Among the others, she participated in creating list and usage description of literary motifsand themes; she worked on Jan Kasprowicz poems (\"Z wichr\u00f3w i hal\", \"Nad przepa\u015bciami\", \"W ciemno\u015bci schodzi moja dusza\") and Eliza Orzeszkowa's \"On the Niemen\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi</a>n</p>\r\n\r\n\r\n \r\n\r\n\r\n\r\n<h3>Hanna_Golab (contributes to the website since March 15, 2008)</h3>\r\n\r\n <p>She worked on Sophocles' \"Oedipus the King\" and Boles\u0142aw Le\u015bmian's \"Dusio\u0142ek\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></p>\r\n\r\n\r\n\r\n<h3>Ingene (contributes to the website since July 16, 2008) </h3>\r\n\r\n <p>Among the others, she worked on Stefan \u017beromski's \"Si\u0142aczka\", Henryk Sienkiewicz's \"Quo vadis\" and Jan Kochanowski's \"Laments\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene</a></p>\r\n \r\n\r\n\r\n\r\n<h3>Jmyszkowska (contributes to the website since March 26, 2008) <p>Among the others, she worked on Byron's \"Giaour\" and Henryk Sienkiewicz's \"Quo vadis\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></p>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<h3>Marysiabailey (contributes to the website since October 1, 2007)</h3>\r\n\r\n <p>Among the others, she took part in creating the list of literary themes and motifs and description of usage of those bra\u0142a udzia\u0142; worked on W\u0142adys\u0142aw Reymont's \"Ch\u0142opi\", Boles\u0142aw Prus' \"The Doll\", Zygmunt Krasi\u0144ski's \"Nie-boska komedia\", Ignacy Krasicki's \"Fables\" and \"Satires\", Sophocles' \"Antigone\" and poems of Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Geothe and Oppman; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey</a>; Furthermore, she prepared and carried on the training for volunteers and took care of proofreading. Currently she's managing the works on audiobooks.</p>\r\n\r\n\r\n \r\n\r\n\r\n\r\n<h3>Olga_Wojtczak (contributes to the website since October 21, 2008)</h3>\r\n\r\n <p>Among the others, she worked on Henryk Sienkiewicz's novels (The Trilogy), the works of W\u0142adys\u0142aw Reymont and Stefan \u017beromski, as well as Shakespeare's dramas;cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak</a></p>\r\n\r\n\r\n \r\n\r\n\r\n\r\n<h3>Renataml (contributes to the website since June 30, 2007)</h3>\r\n\r\n <p>She took part in the discussion on list of motifs, as a experienced teacher she supported us with pieces of advice; edited Boles\u0142aw Prus' \"The Doll\", Juliusz S\u0142owacki's \"Balladyna\", Stefan \u017beromski's \"Si\u0142aczka\". <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</a></p>", - "left_column_de": "<h2>Volontariat</h2>\r\n\r\n <p>Wir sind stets bem\u00fcht, unseren Bibliothekbestand st\u00e4ndig um neue Werke zu erweitern. Dies ist nur \r\n dank der Hilfe unserer Volont\u00e4re m\u00f6glich.</p>\r\n\r\n <p>Wir laden herzlich alle Menschen ein, die sich an der Mitgestaltung unserer Internet-Schulbibliothek beteiligen wollen.</p>\r\n \r\n \r\n \r\n <p>Allen Volont\u00e4ren bieten wir Schulungen und Praktikum im Bereich der Textverarbeitung an: \r\n technische und sachliche Redaktion. Volont\u00e4re k\u00f6nnen mehr \u00fcber Probleme und M\u00f6glichkeiten erfahren, \r\n die mit der Ver\u00f6ffentlichung von Internetpublikationen verbunden sind. Unsere Volont\u00e4re beteiligen \r\n sich zudem an der Organisation von Schulungen und Konferenzen, helfen bei der Vorbereitung \r\n von H\u00f6rtexten (sog. Audiobooks). Wir stellen Vertr\u00e4ge und Bescheinigungen unseren Volont\u00e4ren \r\n bez\u00fcglich der Art der T\u00e4tigkeit und deren Zeitrahmen aus. Schulungen, Verlagspraktikum sowie \r\n w\u00e4hrend des Volontariats erworbene Erfahrungen und Kompetenzen k\u00f6nnen ganz gewiss zum beruflichen Aufstieg verhelfen.</p> \r\n \r\n \r\n <h2>Was zu tun ist?</h2>\r\n \r\n <p>Der Gro\u00dfteil der Arbeit liegt in der Vorbereitung der Lekt\u00fcren zur Ver\u00f6ffentlichung. Die Texte, die wir \r\n von der Nationalbibliothek bekommen, m\u00fcssen auf Tipp- und andere mechanische Fehler \u00fcberpr\u00fcft werden. \r\n Die Anmerkungen m\u00fcssen in den Text eingef\u00fcgt werden. Es sei zu bedenken, dass unsere Zielgruppe Sch\u00fcler sind, \r\n so m\u00fcssen dementsprechend die W\u00f6rter und Wendungen an diese Altersgruppe angepasst werden. \u00c4ltere Ausgaben \r\n (hier gilt das strenge Uhrheberrecht) werden stets in Hinblick auf Rechtsschreibung und Flexion an die \r\n Gegenwartssprache angepasst und zwar unter gleichzeitiger Beachtung der Einheit von Form und literarischen Stilen. \r\n Das Aussuchen von literarischen Motiven und Themen, die uns helfen sollen, Literaturinhalte tiefgreifend zu verstehen, \r\n schlie\u00dfen unsere Projektarbeiten ab. Bei allen diesen Unternehmungen helfen uns Volont\u00e4re - Lehrer sowie Sch\u00fcller - \r\n die uns mit eigenen Ratschl\u00e4gen und Bemerkungen bei der Entscheidungsfindung unterst\u00fctzen.</p>\r\n \r\n \r\n <h2>Wie Sie uns erreichen?</h2>\r\n \r\n <p>Personen, die an der Zusammenarbeit interessiert sind, bitten wir um eine E-Mail an folgende Adresse zu richten: <a href=\"mail:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</p>\r\n\r\n <p>Wir laden Sie auch ein unter <a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\">Redaktonseite der Freien Lekt\u00fcren</a>, auf unserer Hompage finden Sie n\u00fctzliche Informationen rund um das Thema Redaktionsarbeit.</p>", - "title_uk": "\u041c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043c \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438", - "right_column_it": null, - "title_pl": "Mo\u017cesz nam pom\u00f3c", - "left_column": "<h2>Volunteering</h2>\r\n\r\n <p>We try our best to elaborate works appended to our library. It is possible only thanks to the support of our volunteers.</p>\r\n\r\n \r\n <p>We invite every person who wants to take part in developing the web school library Wolne Lektury.</p>\r\n <p>We offer trainings and traineeships in proofreading and copy-editing for every and each volunteer. Our volunteers can learn not only about the problems, but also the opportunities concerning web publishing. They organize the trainings and conferences together with us, as well as they help in preparing the audio versions ob books (so called audiobooks). We are also able to issue voluneering contracts and certificates regarding sort and duration of volunteer's work for our foundation. The traineeships, proofreading and copywriting practice as well as the certificates confirming those may be found vital in acquiring professional qualifications and promotion. .</p>\r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n<h2>What else is there to be done?</h2>\r\n \r\n <p>Preparing the reading for publishing demands the most effort. One has to correct the typos nad other errors of this kind in the texts we receive from the National Library. Next, one needs to provide the book with the annotations, at the same time bearing in mind that our offering is addressed to the pupils, for whom many words and collocations may sound out of date. The older editions (the rule is determined by copyrights) are subject to essential lingustic modernisations, i.e. in spelling or inflection but we pay attention to not to violate the artistic specifity of the literary works. The last stage of the preparation is searching for literary motfis and themes, so the text is examined thoroughly. In each and every phase we are supported by the volunteers - teachers and students - who often advise us point out crucial matters as we take important decisions. </p>\r\n \r\n\r\n\r\n\r\n\r\n\r\n<h2>How to contact us?</h2>\r\n \r\n <p>We ask every interested person to send us an e-mail<a href=\"mail:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</p>\r\n\r\n <p>Please, visit also the editorial website of Wolne Lektury<a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\"></a>. There you will find essential information on how to involve yourself in editorial works.</p>\r\n\r\n", - "right_column_uk": "<h2>\u041d\u0430\u0439\u0431\u0456\u043b\u044c\u0448 \u0437\u0430\u0441\u043b\u0443\u0436\u0435\u043d\u0456 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438</h2>\r\n\r\n\t<h3>Agatapaszkowska (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 15 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)</h3>\r\n\r\n <p>\u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u00ab\u0412 \u043f\u0443\u0441\u0442\u0435\u043b\u0456 \u0456 \u0432 \u0434\u0436\u0443\u043d\u0433\u043b\u044f\u0445\u00bb \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n\r\n\r\n\t<h3>AgnieszkaKappa (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 16 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)</h3>\r\n\r\n <p>\u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0432 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u0442\u0430 \u043e\u043f\u0438\u0441\u0443 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432 \u0442\u0430 \u0442\u0435\u043c; \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0442\u0435\u043a\u0441\u0442\u0438 \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 (Latarnik, \u042f\u043d\u043a\u043e \u041c\u0443\u0437\u0438\u043a\u0430\u043d\u0442, Quo vadis); \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>\r\n\r\n\r\n <h3>Anerys (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 5 \u043b\u0438\u043f\u043d\u044f 2007)</h3>\r\n\r\n <p> \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0432 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432 \u0442\u0430 \u0442\u0435\u043c, \u0434\u0438\u0441\u043a\u0443\u0441\u0456\u0457 \u043d\u0430 \u0442\u0435\u043c\u0443 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0436\u0430\u043d\u0440\u0456\u0432, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0433\u0456\u043c\u043d \u0411\u043e\u0433\u043e\u0440\u043e\u0434\u0438\u0446\u044f, \u00ab\u0424\u0440\u0430\u0448\u043a\u0438\u00bb \u0442\u0430 \u00ab\u0422\u0440\u0435\u043d\u0438\u00bb \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u044c\u043a\u043e\u0433\u043e; \u0432\u0456\u0440\u0448\u0456 \u0421\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u043e\u0433\u043e (Gr\u00f3b Agamemnona), \u00ab\u0422\u0430\u0440\u0442\u044e\u0444\u0430\u00bb \u041c\u043e\u043b\u044c\u0454\u0440\u0430, \u0442\u0430 \u043f\u043e\u0435\u0437\u0456\u0457 \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0456\u0447\u0430 (\u0432 \u0446\u044c\u043e\u043c\u0443 \u0447\u0438\u0441\u043b\u0456 \u0433\u0456\u043c\u043d \u201eDies Irae\u201d); \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n\r\n\r\n\t<h3>EmiliaZdankiewicz (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 17 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)</h3>\r\n\r\n <p>\u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0456 \u043c\u043e\u0442\u0438\u0432\u0438 \u2014 \u0434\u0438\u0441\u043a\u0443\u0441\u0456\u044f \u0442\u0430 \u043e\u043f\u0438\u0441, \u0421\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u0438\u0439, \u041a\u043e\u0440\u0434\u0456\u0430\u043d; \u041a\u043e\u043d\u043e\u043f\u043d\u0456\u0446\u044c\u043a\u0430, Nasza szkapa; \u041c\u0456\u0446\u043a\u0435\u0432\u0438\u0447, \u0414\u0437\u044f\u0434\u0438 \u0447. III; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz</a></p>\r\n\r\n\r\n\t<h3>Ewa_Serafin (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 15 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)</h3>\r\n\r\n <p>\u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0432 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u0442\u0430 \u043e\u043f\u0438\u0441\u0443 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432 \u0442\u0430 \u0442\u0435\u043c, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u043f\u043e\u0435\u0437\u0456\u0457 \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0456\u0447\u0430 (\u201cZ wichr\u00f3w i hal\u201d, \u201cNad przepa\u015bciami\u201d, \u201cW ciemno\u015bci schodzi moja dusza\u201d), \u0430 \u0442\u0430\u043a\u043e\u0436 \u201cNad Niemnem\u201d \u0415\u043b\u0456\u0437\u0438 \u041e\u0436\u0435\u0448\u043a\u043e; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi</a>n</p>\r\n\r\n\r\n \t<h3>Hanna_Golab (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 15 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)</h3>\r\n\r\n <p>\u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u201c\u0426\u0430\u0440\u044f \u0415\u0434\u0456\u043f\u0430\u201d \u0421\u043e\u0444\u043e\u043a\u043b\u0430 \u0442\u0430 \u0432\u0456\u0440\u0448 \u201cDusio\u0142ek\u201d \u041b\u0435\u0441\u044c\u043c\u044f\u043d\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></p>\r\n\r\n\r\n\t<h3>Ingene (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 16 \u043b\u0438\u043f\u043d\u044f 2008)</h3>\r\n\r\n <p> \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u043e\u043f\u043e\u0432\u0456\u0434\u0430\u043d\u043d\u044f \u201cSi\u0142aczka\u201d \u0416\u0435\u0440\u043e\u043c\u0441\u044c\u043a\u043e\u0433\u043e, \u201cQuo vadis\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 \u0442\u0430 \u201c\u0422\u0440\u0435\u043d\u0438\u201d \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u044c\u043a\u043e\u0433\u043e; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene</a></p>\r\n \r\n\t<h3>Jmyszkowska (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 26 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)</h3>\r\n\r\n <p>\u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u201c\u0413\u044f\u0443\u0440\u0430\u201d \u0411\u0430\u0439\u0440\u043e\u043d\u0430 \u0442\u0430 \u201cQuo vadis\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></p>\r\n\r\n\r\n <h3>Marysiabailey (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 1 \u0436\u043e\u0432\u0442\u043d\u044f 2007)</h3>\r\n\r\n <p>\u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0442\u0435\u043c \u0442\u0430 \u043e\u043f\u0438\u0441\u0456 \u0457\u0445 \u0437\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u043d\u043d\u044f; \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0442\u0432\u043e\u0440\u0438: \u201c\u0421\u0435\u043b\u044f\u043d\u0438\u201d \u0420\u0435\u0439\u043c\u043e\u043d\u0442\u0430 , \u201cLalka\u201d \u041f\u0440\u0443\u0441\u0430, \u201cNie-Boska komedia\u201d \u041a\u0440\u0430\u0441\u0456\u043d\u0441\u044c\u043a\u043e\u0433\u043e, \u201eBajki\u201d \u0442\u0430 \u201eSatyry\u201d \u041a\u0440\u0430\u0441\u0456\u0446\u044c\u043a\u043e\u0433\u043e, \u201c\u0410\u043d\u0442\u0438\u0433\u043e\u043d\u0430\u201d \u0421\u043e\u0444\u043e\u043a\u043b\u0430, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0442\u0432\u043e\u0440\u0438 \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u044c\u043a\u043e\u0433\u043e, \u041c\u043e\u0440\u0448\u0442\u0438\u043d\u0430, \u041c\u0456\u0446\u043a\u0435\u0432\u0438\u0447\u0430, \u0490\u0435\u0442\u0435, \u041e\u043f\u043f\u043c\u0430\u043d\u0430, \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0456\u0447\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey</a>; \u043a\u0440\u0456\u043c \u0442\u043e\u0433\u043e, \u043f\u0456\u0434\u0433\u043e\u0442\u0443\u0432\u0430\u043b\u0430 \u0456 \u043f\u0440\u043e\u0432\u0435\u043b\u0430 \u0442\u0440\u0435\u043d\u0456\u043d\u0433 \u0434\u043b\u044f \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0456\u0432 15 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008; \u0437\u0430\u044f\u043c\u0430\u043b\u0430\u0441\u044f \u0442\u0430\u043a\u043e\u0434 \u043a\u043e\u0440\u0435\u043a\u0442\u043e\u044e, \u0430 \u043d\u0430 \u0434\u0430\u043d\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u0430\u0446\u044e\u0454 \u043d\u0430\u0434 \u0430\u0443\u0434\u0456\u043e-\u043a\u043d\u0438\u0433\u0430\u043c\u0438.</p>\r\n\r\n\r\n <h3>Olga_Wojtczak (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 21 \u0436\u043e\u0432\u0442\u043d\u044f 2008)</h3>\r\n\r\n <p> \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0440\u043e\u043c\u0430\u043d\u0438 \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 (\u0422\u0440\u0438\u043b\u043e\u0433\u0456\u044f), \u0420\u0435\u0439\u043c\u043e\u043d\u0442\u0430, \u0416\u0435\u0440\u043e\u043c\u0441\u044c\u043a\u043e\u0433\u043e, \u0434\u0440\u0430\u043c\u0438 \u0428\u0435\u043a\u0441\u043f\u0456\u0440\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak</a></p>\r\n\r\n\r\n <h3>Renataml (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 30 \u0447\u0435\u0440\u0432\u043d\u044f 2007)</h3>\r\n\r\n <p>\u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0432 \u0434\u0438\u0441\u043a\u0443\u0441\u0456\u0457 \u043d\u0430 \u0442\u0435\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u043c\u043e\u0442\u0438\u0432\u0456\u0432; \u044f\u043a \u0434\u043e\u0441\u0432\u0456\u0434\u0447\u0435\u043d\u0430 \u0432\u0447\u0438\u0442\u0435\u043b\u044c\u043a\u0430, \u043d\u0430\u0434\u0430\u0432\u0430\u043b\u0430 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0443 \u0442\u0430 \u043f\u043e\u0440\u0430\u0434\u0438, \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043b\u0430 \u0440\u043e\u043c\u0430\u043d \u00abLalka\u00bb \u041f\u0440\u0443\u0441\u0430, \u0434\u0440\u0430\u043c\u0443 \u00ab\u0411\u0430\u043b\u043b\u0430\u0434\u0438\u043d\u0430\u00bb \u0421\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u043e\u0433\u043e, \u043e\u043f\u043e\u0432\u0456\u0434\u0430\u043d\u043d\u044f \u00abSi\u0142aczka\u00bb \u0416\u0435\u0440\u043e\u043c\u0441\u044c\u043a\u043e\u0433\u043e.\r\n\r\n <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</a></p>", - "title_en": "You can help us", - "left_column_pl": "<h2>Wolontariat w Wolnych Lekturach</h2>\r\n<ul>\r\n<li>Zosta\u0144 naszym redaktorem, programist\u0105 lub t\u0142umaczem \u2013 wolontariuszem.</li>\r\n<li>Zdob\u0105d\u017a nowe umiej\u0119tno\u015bci i do\u015bwiadczenie. </li>\r\n<li>We\u017a udzia\u0142 w otwartym projekcie i tw\u00f3rz innowacyjn\u0105 bibliotek\u0119 internetow\u0105. </li>\r\n</ul>\r\n<p>Dzi\u0119ki pracy naszych wolontariuszy opublikowali\u015bmy ju\u017c ponad <b>1500 lektur</b>, z kt\u00f3rych skorzysta\u0142y ponad <b>3 miliony</b> czytelnik\u00f3w z ca\u0142ego \u015bwiata. </p>\r\n<p>Zapraszamy wszystkie osoby, kt\u00f3re chc\u0105 wsp\u00f3\u0142tworzy\u0107 nasz projekt. Wsp\u00f3\u0142pracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi literatur\u0105, redagowaniem tekst\u00f3w i projektami informatycznymi. Oferujemy profesjonalne szkolenia i sta\u0142\u0105 pomoc merytoryczn\u0105. Wolontariusze mog\u0105 pracowa\u0107 zdalnie lub w siedzibie Fundacji.</p>\r\n<p>Organizujemy r\u00f3wnie\u017c praktyki studenckie \u2013 nawi\u0105zali\u015bmy wsp\u00f3\u0142prac\u0119 z Instytutem Informacji Naukowej i Studi\u00f3w Bibliologicznych UW, Biurem Karier UKSW oraz Wydzia\u0142em Fizyki UW. </p>\r\n\r\n<h2>Jak si\u0119 do nas zg\u0142osi\u0107?</h2>\r\n<p>Wszystkie zainteresowane osoby prosimy o przys\u0142anie maila na adres <a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n", - "left_column_it": null, - "title_es": "\ufeffPuedes ayudarnos", - "left_column_ru": "<h2>\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e</h2>\r\n\r\n <p>\u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0435 \u043d\u0430\u0448\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c. \u042d\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\r\n \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043d\u0430\u0448\u0438\u043c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c-\u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c.</p>\r\n\r\n \r\n <p>\u041c\u044b \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0432\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u0441\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0448\u043a\u043e\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Wolne Lektury \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u043c\u0438.</p>\r\n \r\n <p>\u041c\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0435\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443 \u043f\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0442\u0435\u043a\u0441\u0442\u043e\u0432: \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u0438\r\n \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443. \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438, \u0442\u0430\u043a \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438.\r\n \u041e\u043d\u0438, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u043c\u0438, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u044e\u0442 \u0443\u0447\u0435\u0431\u0443 \u0438 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u0430\u0433\u0430\u044e\u0442 \u0432 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043b\u0443\u0448\u0430\u043d\u0438\u044f (\u0442.\u043d.\r\n \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433). \u041c\u044b \u0432\u044b\u0434\u0430\u0435\u043c \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u044b \u0438 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u0430\u0441\u0447\u0435\u0442 \u0442\u043e\u0433\u043e, \u043a\u043e\u0433\u0434\u0430 \r\n \u0438 \u043a\u0430\u043a\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u043e\u043c \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \r\n \u0444\u043e\u043d\u0434\u0430. \u0423\u0447\u0435\u0431\u0430, \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0449\u0438\u0435 \u0438\u0445 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435\r\n \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0441\u043b\u0443\u0436\u0431\u0435.</p>\r\n\r\n \r\n <h2>\u0427\u0442\u043e \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c?</h2>\r\n \r\n <p>\u0421\u0430\u043c\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u0412 \u0442\u0435\u043a\u0441\u0442\u0430\u0445 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u043c\u0438 \u0438\u0437 \u041d\u0430\u0440\u043e\u0434\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \r\n \u0417\u0430\u0442\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u043e\u0441\u043a\u0438, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u043e \u043a \u0443\u0447\u0435\u043d\u0438\u043a\u0430\u043c, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432 \u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0437\u0432\u0443\u0447\u0438\u0442 \u0430\u043d\u0430\u0445\u0440\u043e\u043d\u0438\u0447\u043d\u043e.\r\n \u041f\u0440\u0435\u0436\u043d\u0438\u0435 \u0438\u0437\u0434\u0430\u043d\u0438\u044f (\u0440\u0435\u0436\u0438\u043c \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0430) \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440. \u043f\u043e \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u0438\u043b\u0438 \u0444\u043b\u0435\u043a\u0441\u0438\u0438. \u041f\u0440\u0438\u0447\u0435\u043c, \u043c\u044b \u0437\u0430\u0431\u043e\u0442\u0438\u043c\u0441\u044f \u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438\r\n \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043c\u043e\u0447\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \"\u043d\u0430\u0441\u043a\u0432\u043e\u0437\u044c\".\r\n \u0412\u043e \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0445 \u0441\u0432\u043e\u044e \u043f\u043e\u043c\u043e\u0449\u044c \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b - \u0443\u0447\u0438\u0442\u0435\u043b\u044f \u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b, \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0441\u0432\u043e\u0438 \u0441\u043e\u0432\u0435\u0442\u044b \u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f\r\n \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439.</p>\r\n \r\n <h2>\u041a\u0430\u043a \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0432 \u043d\u0430\u0448 \u0444\u043e\u043d\u0434?</h2>\r\n \r\n <p>\u0412\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0441\u0438\u043c \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0438-\u043c\u0435\u0439\u043b \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <a href=\"mail:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</p>\r\n\r\n <p>\u041c\u044b \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 <a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\">\u0441\u0430\u0439\u0442 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Wolne Lektury</a>, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u043c.</p>", - "slug": "help_us", - "right_column_de": "<h2>Wohlverdiente Volont\u00e4re</h2>\r\n\r\n\t<h3>Agatapaszkowska (Mitarbeit seit 15. M\u00e4rz 2008)</h3>\r\n\r\n <p>bearbeitete u.a. \"Durch W\u00fcste und Wildnis\" von Sienkiewicz; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n\r\n\r\n\t<h3>AgnieszkaKappa (Mitarbeit seit 16. M\u00e4rz 2008)</h3>\r\n\r\n <p>arbeitete u.a. an der Erstellung der Liste und Beschreibung der literarischen Themen und Motive;bearbeitete Texten von Sienkiewicz ( Der Leuchtturmw\u00e4rter, Janko der Musikant, Quo vadis);s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>\r\n\r\n\r\n \r\n \r\n\r\n <h3>Anerys (Mitarbeit seit 5. Juli 2007)</h3>\r\n\r\n <p>arbeitete u.a. an der Erstellung der Liste und Beschreibung der literarischen Themen und Motive;nahm an der Diskussion \u00fcber Literaturgattungen teil, bearbeitete folgende Werke: Bogurodzica, \"Spruchgedichte\" und \"Klagelieder\" von Kochanowski; Gedichte von Slowacki ( Agamemnons Grab), \"Tartuffe oder der Betr\u00fcger\" von Moliere, ob Poesien von Kasprowicz (u.a. eine Hymne \"Dies Irae\"); s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n \r\n\r\n\t<h3>EmiliaZdankiewicz (Mitarbeit seit 17. M\u00e4rz 2008)</h3>\r\n\r\n <p>nahm u.a. an der Diskussion und Beschreibung literarischer Motive teil, S\u0142owacki, Kordian; Konopnicka, Unsere M\u00e4hre; Mickiewicz, Totenfeier Teil III; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz</a></p>\r\n\r\n \r\n\t\r\n\t<h3>Ewa_Serafin (Mitarbeit seit 15. M\u00e4rz 2008)</h3>\r\n\r\n <p>arbeitete u.a. an der Erstellung der Liste und Beschreibung der literarischen Themen und Motive, bearbeitete Kasprowicz Gedichte (\u201eZ wichr\u00f3w i hal\u201d, \u201eNad przepa\u015bciami\u201d, \u201eW ciemno\u015bci schodzi moja dusza\u201d oraz \u201eNad Niemnem\u201d Orzeszkowej; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi</a>n</p>\r\n\r\n\r\n \t<h3>Hanna_Golab (Mitarbeit seit 15. M\u00e4rz 2008)</h3>\r\n\r\n <p>bearbeitete \" K\u00f6nig \u00d6dipus\" von Sophokles sowie \"Dusio\u0142ek\" von Lesmian; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></p>\r\n\r\n\r\n\t<h3>Ingene (Mitarbeit seit 16. Juli 2008)</h3>\r\n\r\n <p>bearbeitete u.a. \u201eSi\u0142aczka\u201d von \u017beromski, \u201eQuo vadis\u201d von Sienkiewicz sowie \u201eKlagelieder\u201d von Kochanowski; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene</a></p>\r\n \r\n\t<h3>Jmyszkowska (Mitarbeit seit 26. M\u00e4rz 2008)</h3>\r\n\r\n <p>bearbeitete u.a. \u201eGiaur\u201d von Byron sowie \u201eQuo vadis\u201d von Sienkiewicz; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></p>\r\n\r\n\r\n <h3>Marysiabailey (Mitarbeit seit 1. Oktober 2007)</h3>\r\n\r\n <p>arbeitete u.a. an der Erstellung der Liste und Beschreibung der literarischen Themen und Motive sowie deren Benutzung; bearbeitete folgende Werke: \"Die Bauern\" von Reymont, \"Die Puppe\" von Prus, \"Un-g\u00f6ttliche Kom\u00f6die\" von Krasinski, \"M\u00e4rchens\" und \"Satire\" von Krasickiego, \"Antigone\" von Sophokles sowie Werke von Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman, Kasprowicz; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\u201c: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey</a zus\u00e4tzlich beteiligte sie sich am 15. M\u00e4rz 2008 an der Organisation von Volont\u00e4r-Schulungen, besch\u00e4ftigte sich mit proofreading, gegenw\u00e4rtig arbeitet sie an H\u00f6rb\u00fcchern.</p>\r\n\r\n\r\n <h3>Olga_Wojtczak (Mitarbeit seit 21. Oktober 2008)</h3>\r\n\r\n <p>bearbeitete u.a. Romane von Sienkiewicz ( Die Trilogie), Reymont, \u017beromski und Dramen von Shakespeare; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak</a></p>\r\n\r\n <h3>Renataml (Mitarbeit seit 30. Juni 2007)</h3>\r\n\r\n <p>nahm an der Diskussion \u00fcber Motivlisten teil, als erfahrene Lehrerin unterst\u00fctzte sie uns mit vielen Ratschl\u00e4gen, bearbeitete folgende Werke: \"Die Puppe\" von Prus, \"Balladyna\" von Slowacki, \"Si\u0142aczka\" \u017beromski.\r\n\r\n <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</a></p>\r\n", - "left_column_es": "<h2>Voluntariado</h2>\r\n\r\n\r\n\r\n <p> Hacemos todo lo posible para elaborar las obras de nuestra biblioteca con la mayor perfecci\u00f3n. Esto es posible s\u00f3lo gracias al apoyo de nuestros voluntarios. </p>\r\n\r\n\r\n\r\n \r\n\r\n <p> Invitamos a todos quienes quieren formar parte en el desarrollo de la biblioteca virtual de Wolne Lektury. </p>\r\n\r\n \r\n\r\n <p> A todos los voluntarios les ofrecemos cursos y pr\u00e1cticas en cuanto a la redacci\u00f3n t\u00e9cnica y pr\u00e1ctica. Los voluntarios tienen la posibilidad de conocer tanto los problemas como las oportunidades relacionadas con las publicaciones virtuales. Nos ayudan en la organizaci\u00f3n de conferencias y cursos de formaci\u00f3n, asimismo asisten en la edici\u00f3n de los textos en forma auditiva (audiolibros). Los proporcionamos contratos y certificados con los detalles del trabajo y tipo de tareas realizadas para nuestra fundaci\u00f3n. Los cursos, las pr\u00e1cticas realizadas y los certificados correspondientes podr\u00e1n resultar \u00fatiles en el proceso del desarrollo profesional y para el futuro trabajo profesional. </p>\r\n\r\n \r\n\r\n <h2> >\u00bfEn qu\u00e9 nos puedes ayudar? </h2>\r\n\r\n La Biblioteca\r\n\r\n Nacional proporciona textos, pero hay que eliminar las faltas de ortograf\u00eda y otros errores mec\u00e1nicos y, a continuaci\u00f3n, a\u00f1adir glosas.\r\n\r\n <p>La mayor\u00eda de trabajo la tenemos con la preparaci\u00f3n de los libros para la publicaci\u00f3n. La Biblioteca Nacional proporciona textos pero hay que corregir las erratas y otros errores, despu\u00e9s a\u00f1adir las anotaciones a pie de p\u00e1gina teniendo en cuenta que nuestra oferta es dirigida especialmente a estudiantes para quienes muchas palabras o expresiones pueden ser anacr\u00f3nicas. Tratamos de modernizar las ediciones antiguas (respetando el derecho de autor) respecto a la ortograf\u00eda o la inflexi\u00f3n pero cuidamos para no violar el valor art\u00edstico del texto. La \u00faltima etapa es buscar todos los motivos y temas literarios que ayudar\u00e1n en conocer la lectura totalmente. En todos los trabajos nos ayudan los voluntarios, profesores y estudiantes, a menudo ayudando tambi\u00e9n en la toma de decisiones importantes. </p>\r\n\r\n \r\n\r\n <h2> \u00bfC\u00f3mo inscribirse?</h2>\r\n\r\n \r\n\r\n <p>Todos que est\u00e9n interesados enviad un mail a <a href=\"mail:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</p>\r\n\r\n\r\n\r\n <p> Os invitamos tambi\u00e9n a visitar <a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\"> la p\u00e1gina de la redacci\u00f3n de Wolne Lektury </a> donde hay todas las informaciones necesarias para empezar el trabajo editorial. </p>\r\n\r\n", - "left_column_en": "<h2>Volunteering</h2>\r\n\r\n <p>We try our best to elaborate works appended to our library. It is possible only thanks to the support of our volunteers.</p>\r\n\r\n \r\n <p>We invite every person who wants to take part in developing the web school library Wolne Lektury.</p>\r\n <p>We offer trainings and traineeships in proofreading and copy-editing for every and each volunteer. Our volunteers can learn not only about the problems, but also the opportunities concerning web publishing. They organize the trainings and conferences together with us, as well as they help in preparing the audio versions ob books (so called audiobooks). We are also able to issue voluneering contracts and certificates regarding sort and duration of volunteer's work for our foundation. The traineeships, proofreading and copywriting practice as well as the certificates confirming those may be found vital in acquiring professional qualifications and promotion. .</p>\r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n<h2>What else is there to be done?</h2>\r\n \r\n <p>Preparing the reading for publishing demands the most effort. One has to correct the typos nad other errors of this kind in the texts we receive from the National Library. Next, one needs to provide the book with the annotations, at the same time bearing in mind that our offering is addressed to the pupils, for whom many words and collocations may sound out of date. The older editions (the rule is determined by copyrights) are subject to essential lingustic modernisations, i.e. in spelling or inflection but we pay attention to not to violate the artistic specifity of the literary works. The last stage of the preparation is searching for literary motfis and themes, so the text is examined thoroughly. In each and every phase we are supported by the volunteers - teachers and students - who often advise us point out crucial matters as we take important decisions. </p>\r\n \r\n\r\n\r\n\r\n\r\n\r\n<h2>How to contact us?</h2>\r\n \r\n <p>We ask every interested person to send us an e-mail<a href=\"mail:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</p>\r\n\r\n <p>Please, visit also the editorial website of Wolne Lektury<a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\"></a>. There you will find essential information on how to involve yourself in editorial works.</p>\r\n\r\n", - "right_column_fr": "<h2>Nos b\u00e9n\u00e9voles les plus m\u00e9ritants</h2>\r\n\r\n\t<h3>Agatapaszkowska (coop\u00e8re avec nous depuis le 15 mars 2008)</h3>\r\n\r\n <p>entre autres, elle a r\u00e9dig\u00e9 \"W pustyni i w puszczy\u201d de Henryk Sienkiewicz; voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n\r\n\r\n\t<h3>AgnieszkaKappa (coop\u00e8re avec nous depuis le 16 mars 2008)</h3>\r\n\r\n <p>entre autres, elle a particip\u00e9 \u00e0 la pr\u00e9paration de la liste des motifs et th\u00e8mes litt\u00e9raires et leurs descriptions, a r\u00e9dig\u00e9 les textes de Sienkiewicz (\"Latarnik\", \"Janko Muzykant\", \"Quo vadis\"); voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>\r\n\r\n\r\n <h3>Anerys (coop\u00e8re avec nous depuis le 5 juillet 2007)</h3>\r\n\r\n <p>entre autres, elle a particip\u00e9 \u00e0 la pr\u00e9paration de la liste des motifs et th\u00e8mes litt\u00e9raires, dans la discussion sur les genres litt\u00e9raires, elle \u00e0 r\u00e9dig\u00e9 \"Bogurodzica\", \"Fraszki\u201d et \"Treny\u201d de Kochanowski; les po\u00e8mes de S\u0142owacki (\"Gr\u00f3b Agamemnona\"), \"Tartuffe, ou l'Imposteur\" de Moli\u00e8re, les po\u00e8mes de Kasprowicz (entre autres le hymne \"Dies Irae\u201d); voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n\r\n\r\n\t<h3>EmiliaZdankiewicz (coop\u00e8re avec nous depuis le 17 mars 2008)</h3>\r\n\r\n <p>entre autres, les motifs litt\u00e9raires - discussion et description, \"Kordian\" de S\u0142owacki; \"Nasza szkapa\" de Konopnicka; \"A\u00efeux p.III\" de Mickiewicz; voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz</a></p>\r\n\r\n\r\n\t<h3>Ewa_Serafin (coop\u00e8re avec nous depuis le 15 mars 2008)</h3>\r\n\r\n <p>entre autres a particip\u00e9 \u00e0 la cr\u00e9ation de la liste et de la description de l'utilisation des motifs et th\u00e8mes litt\u00e9raires, a r\u00e9dig\u00e9 les po\u00e8mes de Kasprowicz (\"Z wichr\u00f3w i hal\u201d, \"Nad przepa\u015bciami\u201d, \"W ciemno\u015bci schodzi moja dusza\u201d ainsi que \u201eNad Niemnem\u201d d'Orzeszkowa; voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi</a>n</p>\r\n\r\n\r\n \t<h3>Hanna_Golab (coop\u00e8re avec nous depuis le 15 juillet 2008)</h3>\r\n\r\n elle a r\u00e9dig\u00e9 \"Oedipe roi\u201d de Sophocle et \"Dusio\u0142ek\u201d de Le\u015bmian; voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></p>\r\n\r\n\r\n\t<h3>Ingene (coop\u00e8re avec nous depuis le 16 juillet 2008)</h3>\r\n\r\n <p>elle a r\u00e9dig\u00e9 \"Si\u0142aczka\u201d de \u017beromski, \"Quo vadis\u201d de Sienkiewicz ainsi que \"Treny\u201d de Kochanowski; voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene</a></p>\r\n \r\n\t<h3>Jmyszkowska (coop\u00e8re avec nous depuis le 26 mars 2008)</h3>\r\n\r\n <p>entre autres, elle a r\u00e9dig\u00e9 \"Giaour\u201d de Byron et \"Quo vadis\u201d de Sienkiewicz; voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/S pecjalna:Wk%C5%82ad/Jmyszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></p>\r\n\r\n\r\n <h3>Marysiabailey (coop\u00e8re avec nous depuis le 1 octobre 2007)</h3>\r\n\r\n <p>elle a particip\u00e9 \u00e0 la pr\u00e9paration de la liste des motifs et th\u00e8mes litt\u00e9raires et de la description de leur utilisation; elle a r\u00e9dig\u00e9 \"Les Paysans\u201d de Reymont, \"La poup\u00e9e\u201d de Prus, \"Nie-Boska komedia\u201d de Krasi\u0144ski, \"Bajki\u201d et \"Satyry\u201d de Krasicki, \"Antigone\u201d de Sophocle et les oeuvres de Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman, Kasprowicz; voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey</a>; elle a en plus pr\u00e9par\u00e9 et conduit l'entra\u00eenement pour les b\u00e9n\u00e9voles le 15 mars 2008; elle a fait la correcte des textes et est coordinatrice du travail sur les livres audio.</p>\r\n\r\n\r\n <h3>Olga_Wojtczak (coop\u00e8re avec nous depuis le 21 octobre 2008)</h3>\r\n\r\n <p>entre autres, elle a r\u00e9dig\u00e9 les romans de Sienkiewicz (la Trilogie), de Reymont, \u017beromski, les oeuvres de Shakespeare; voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak</a></p>\r\n\r\n\r\n <h3>Renataml (coop\u00e8re avec nous depuis le 30 juin 2007)</h3>\r\n\r\n <p>a particip\u00e9 \u00e0 la discussion sur la liste des motifs, en tant qu'enseignante experiment\u00e9e, elle nous a donn\u00e9 des conseils pr\u00e9cieux, a \u00e9dit\u00e9 \"La poup\u00e9e\u201d de Prus, \"Balladyna\u201d de S\u0142owacki, \"Si\u0142aczka\u201d de \u017beromski.\r\n\r\n <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</a></p>\r\n", - "title_ru": "\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0447\u044c", - "title_it": null - } - }, - { - "pk": 1, - "model": "infopages.infopage", - "fields": { - "title_de": "Volontariat f\u00fcr Wissen", - "left_column_uk": "<h2>\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e</h2>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <p>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0411\u0456\u043e\u0433\u0440\u0430\u043c\u0438 \u043f\u0438\u0441\u044c\u043c\u0435\u043d\u043d\u0438\u043a\u0456\u0432 \u0442\u0430 \u0434\u0435\u0444\u0456\u043d\u0456\u0446\u0456\u0457 \u0435\u043f\u043e\u0445 \u0442\u0430 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0436\u0430\u043d\u0440\u0456\u0432 \u0432 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0456 \u0443\u0447\u043d\u044f\u043c\u0438 \u0447\u043e\u0442\u0438\u0440\u044c\u043e\u0445 \u0448\u043a\u0456\u043b \u043f\u0456\u0434\u0447\u0430\u0441 \u043c\u0430\u0439\u0441\u0442\u0435\u0440-\u043a\u043b\u0430\u0441\u0456\u0432 \u201c\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0432 \u043e\u0441\u0432\u0456\u0442\u0456\u201d.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </p>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <p>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0423\u0447\u043d\u0456 \u0441\u043f\u0456\u043b\u044c\u043d\u043e \u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0438 \u0432\u0456\u0434 \u0434\u043e\u0433\u043b\u044f\u0434\u043e\u043c \u0432\u0447\u0438\u0442\u0435\u043b\u0456\u0432 \u0442\u0430 \u0441\u043f\u0435\u0446\u0456\u0430\u043b\u0456\u0441\u0442\u0456\u0432 \u2014 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043e\u0437\u043d\u0430\u0432\u0446\u0456\u0432 \u043d\u0430 <a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043e\u0432\u0456\u0439 \u0432\u0456\u043a\u0456-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0456</a>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0456\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u044e\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <a href=\"http://2ia.pl/\">2ia</a>. \u0420\u043e\u0431\u043e\u0442\u0430 \u043d\u0430\u0434 \u0446\u0438\u043c\u0438 \u0442\u0435\u043a\u0441\u0442\u0430\u043c\u0438 \u0431\u0443\u043b\u0430 \u0432\u043e\u0434\u043d\u043e\u0447\u0430\u0441 \u043d\u0430\u0443\u043a\u043e\u044e \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0442\u0438\u0441\u044f \u043a\u043e\u043c\u043f\u2019\u044e\u0442\u0435\u0440\u043e\u043c \u0442\u0430 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u0448\u0443\u043a\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457, \u0430 \u0442\u0430\u043a\u043e\u0436 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0438 \u0457\u0457 \u0432\u0456\u0440\u043e\u0433\u0456\u0434\u043d\u043e\u0441\u0442\u0456.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </p>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <p>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u041f\u0440\u043e\u0435\u043a\u0442 \"\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0432 \u043e\u0441\u0432\u0456\u0442\u0456\" \u0437\u0434\u0456\u0439\u0441\u043d\u0435\u043d\u043e \u0437\u0430\u0432\u0434\u044f\u043a\u0438 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0446\u0456 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <a href=\"http://www.menis.gov.pl/\">\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u043e\u0441\u0432\u0456\u0442\u0438</a>. \u041f\u0440\u0438\u0437\u0438 \u0434\u043b\u044f \u0443\u0447\u043d\u0456\u0432 \u043f\u0440\u0438\u0433\u043e\u0442\u0443\u0432\u0430\u043b\u0438\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0412\u0438\u0434\u0430\u0432\u043d\u0438\u0446\u0442\u0432\u043e Nasza Ksi\u0119garnia</a>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0442\u0430\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <a href=\"http://helion.pl/\">\u0412\u0438\u0434\u0430\u0432\u043d\u0438\u0446\u0442\u0432\u043e Helion</a>. \u0422\u0435\u043a\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043d\u043e \u0432 \u0440\u0435\u0441\u0443\u0440\u0441\u0456 <a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Plagiat.pl</a>.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </p>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <p>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <a href=\"/static/wolontariat.pdf\">\u0417\u0432\u0456\u0442 \u0437 \u0440\u0435\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u0457 \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \"\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0432 \u043e\u0441\u0432\u0456\u0442\u0456\"</a>.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </p>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <p>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n\u00a0\u00a0\u00a0 <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />\r\n\u00a0\u00a0\u00a0 <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </p> ", - "main_page": null, - "right_column_pl": "\t<h2>Autorzy</h2>\r\n\r\n\t<ol>\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tGimnazjum nr 40 z Oddzia\u0142ami Integracyjnymi w Zespole\r\n\t\t\t\tSzk\u00f3\u0142 nr 69 im. Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; klasa druga pod opiek\u0105\r\n\t\t\t\tAnny Budziarek-Friedrich:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Burdon Filip;</li>\r\n\r\n\t\t\t\t<li>D\u0119bski Bartek;</li>\r\n\t\t\t\t<li>Jackowicz Kamil;</li>\r\n\t\t\t\t<li>Kurek Pawe\u0142;</li>\r\n\t\t\t\t<li>Makles Bartosz;</li>\r\n\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n\t\t\t\t<li>Migda\u0142 Katarzyna;</li>\r\n\r\n\t\t\t\t<li>Mioduszewski Micha\u0142;</li>\r\n\t\t\t\t<li>Pfeiffer Ida;</li>\r\n\t\t\t\t<li>P\u0142askowicka Karolina;</li>\r\n\t\t\t\t<li>Sailer Ewa.</li>\r\n\t\t\t</ul>\r\n\t\t</li>\r\n\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tXXXIII Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Miko\u0142aja Kopernika,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; klasa pierwsza o profilu\r\n\t\t\t\tbiologiczno-chemicznym pod opiek\u0105 El\u017cbiety Konkowskiej:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Chwil Bart\u0142omiej;</li>\r\n\t\t\t\t<li>Czarnecka Natalia;</li>\r\n\t\t\t\t<li>Gawro\u0144ska Iga;</li>\r\n\r\n\t\t\t\t<li>Grabarczyk Marta;</li>\r\n\t\t\t\t<li>Jastrz\u0105b Katarzyna;</li>\r\n\t\t\t\t<li>Krawczak Olga;</li>\r\n\t\t\t\t<li>Krawczyk Marianna;</li>\r\n\t\t\t\t<li>Kur Natalia;</li>\r\n\t\t\t\t<li>Kwiatek Marta;</li>\r\n\r\n\t\t\t\t<li>La\u015bkiewicz Joanna;</li>\r\n\t\t\t\t<li>Machczy\u0144ska Daria;</li>\r\n\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n\t\t\t\t<li>Moczulska Karolina;</li>\r\n\t\t\t\t<li>Mo\u015bcicka Aneta;</li>\r\n\t\t\t\t<li>Narloch Sabina;</li>\r\n\r\n\t\t\t\t<li>Przybysz Pawe\u0142;</li>\r\n\t\t\t\t<li>Puchta Marek;</li>\r\n\t\t\t\t<li>Ryska Cezary;</li>\r\n\t\t\t\t<li>Sandomierski Bart\u0142omiej;</li>\r\n\t\t\t\t<li>S\u0142awi\u0144ski Tomasz;</li>\r\n\t\t\t\t<li>S\u0142owik Olga;</li>\r\n\r\n\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n\t\t\t\t<li>Strzelczak Karolina;</li>\r\n\t\t\t\t<li>Szafran Danuta;</li>\r\n\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n\t\t\t\t<li>Szulkowska Alicja;</li>\r\n\t\t\t\t<li>\u015alusarczyk Anna;</li>\r\n\r\n\t\t\t\t<li>Tytkowska Anna.</li>\r\n\t\t\t</ul>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tAutorskie Niepubliczne Liceum Og\u00f3lnokszta\u0142c\u0105ce nr\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; klasa pierwsza\r\n\t\t\t\t\to profilu og\u00f3lnym pod opiek\u0105 Micha\u0142a Friedricha:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n\r\n\t\t\t\t\t<li>Go\u0142aszewska Ewa;</li>\r\n\t\t\t\t\t<li>Kwiatkowski Micha\u0142;</li>\r\n\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n\t\t\t\t\t<li>Przespolewski Przemys\u0142aw;</li>\r\n\t\t\t\t\t<li>Rosi\u0144ska Zuzanna;</li>\r\n\r\n\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tLXIV Liceum Og\u00f3lnokszta\u0142c\u0105ce im. St. I. Witkiewicza,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; klasa pierwsza o\r\n\t\t\t\t\tprofilu og\u00f3lnym pod opiek\u0105 Daniela Zycha:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\r\n\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n\t\t\t\t\t<li>Dr\u0105gowska Katarzyna;</li>\r\n\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n\t\t\t\t\t<li>G\u0142owacki Jan;</li>\r\n\t\t\t\t\t<li>Grad Pawe\u0142;</li>\r\n\r\n\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n\t\t\t\t\t<li>K\u0142os Aneta;</li>\r\n\t\t\t\t\t<li>Kozie\u0142 Barbara;</li>\r\n\t\t\t\t\t<li>Koz\u0142owska Anna;</li>\r\n\t\t\t\t\t<li>Krug Pamela;</li>\r\n\r\n\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n\t\t\t\t\t<li>Luba\u015b Micha\u0142;</li>\r\n\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n\t\t\t\t\t<li>Modelska Marta;</li>\r\n\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n\r\n\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n\t\t\t\t\t<li>Pielat Zofia;</li>\r\n\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n\t\t\t\t\t<li>Rosa Karolina;</li>\r\n\r\n\t\t\t\t\t<li>Smyczy\u0144ska Kamila;</li>\r\n\t\t\t\t\t<li>Stoli\u0144ska Barbara;</li>\r\n\t\t\t\t\t<li>Szyma\u0144ska Katarzyna;</li>\r\n\t\t\t\t\t<li>\u015acibior Ewa;</li>\r\n\t\t\t\t\t<li>Witczak Magda;</li>\r\n\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n\r\n\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n\t\t\t\t\t<li>Zi\u00f3\u0142kowska Adrianna.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t </li>\r\n\t </ol>\r\n", - "right_column_lt": "\t<h2>Autoriai</h2>\r\n\r\n\t<ol>\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tGimnazija nr 40 Lenkijos Armijos Kovojan\u010dios Grup\u0117s \u201eKRYBAR\u201d vardo Mokykl\u0173 Kompleksas nr 69,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; antra klas\u0117 globojama mokytojos\r\n\t\t\t\tAnny Budziarek-Friedrich:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Burdon Filip;</li>\r\n\r\n\t\t\t\t<li>D\u0119bski Bartek;</li>\r\n\t\t\t\t<li>Jackowicz Kamil;</li>\r\n\t\t\t\t<li>Kurek Pawe\u0142;</li>\r\n\t\t\t\t<li>Makles Bartosz;</li>\r\n\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n\t\t\t\t<li>Migda\u0142 Katarzyna;</li>\r\n\r\n\t\t\t\t<li>Mioduszewski Micha\u0142;</li>\r\n\t\t\t\t<li>Pfeiffer Ida;</li>\r\n\t\t\t\t<li>P\u0142askowicka Karolina;</li>\r\n\t\t\t\t<li>Sailer Ewa.</li>\r\n\t\t\t</ul>\r\n\t\t</li>\r\n\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tXXXIII Miko\u0142ojaus Koperniko Bendrojo Lavinimo Licejus\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; pirma klas\u0117 biologijos chemijos profiliuos,\r\n\t\t\t\tglobojama mokytojos El\u017cbiety Konkowskiej:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Chwil Bart\u0142omiej;</li>\r\n\t\t\t\t<li>Czarnecka Natalia;</li>\r\n\t\t\t\t<li>Gawro\u0144ska Iga;</li>\r\n\r\n\t\t\t\t<li>Grabarczyk Marta;</li>\r\n\t\t\t\t<li>Jastrz\u0105b Katarzyna;</li>\r\n\t\t\t\t<li>Krawczak Olga;</li>\r\n\t\t\t\t<li>Krawczyk Marianna;</li>\r\n\t\t\t\t<li>Kur Natalia;</li>\r\n\t\t\t\t<li>Kwiatek Marta;</li>\r\n\r\n\t\t\t\t<li>La\u015bkiewicz Joanna;</li>\r\n\t\t\t\t<li>Machczy\u0144ska Daria;</li>\r\n\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n\t\t\t\t<li>Moczulska Karolina;</li>\r\n\t\t\t\t<li>Mo\u015bcicka Aneta;</li>\r\n\t\t\t\t<li>Narloch Sabina;</li>\r\n\r\n\t\t\t\t<li>Przybysz Pawe\u0142;</li>\r\n\t\t\t\t<li>Puchta Marek;</li>\r\n\t\t\t\t<li>Ryska Cezary;</li>\r\n\t\t\t\t<li>Sandomierski Bart\u0142omiej;</li>\r\n\t\t\t\t<li>S\u0142awi\u0144ski Tomasz;</li>\r\n\t\t\t\t<li>S\u0142owik Olga;</li>\r\n\r\n\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n\t\t\t\t<li>Strzelczak Karolina;</li>\r\n\t\t\t\t<li>Szafran Danuta;</li>\r\n\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n\t\t\t\t<li>Szulkowska Alicja;</li>\r\n\t\t\t\t<li>\u015alusarczyk Anna;</li>\r\n\r\n\t\t\t\t<li>Tytkowska Anna.</li>\r\n\t\t\t</ul>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t \tPrivatus Bendrojo Lavinimo Lic\u0117jus nr\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; \r\n\t\t\t\t\tpirma klas\u0117 bendra s profilius,\r\n\t\t\t \tglobojama mokytojaus Micha\u0142 Friedrich\r\n\t\t\t\t\t\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n\r\n\t\t\t\t\t<li>Go\u0142aszewska Ewa;</li>\r\n\t\t\t\t\t<li>Kwiatkowski Micha\u0142;</li>\r\n\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n\t\t\t\t\t<li>Przespolewski Przemys\u0142aw;</li>\r\n\t\t\t\t\t<li>Rosi\u0144ska Zuzanna;</li>\r\n\r\n\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tLXIV St. I. Witkiewicz Bendrojo Lavinimo Licejus\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; pirma klas\u0117 bendras profilius,\r\n\t\t\t \tglobojama mokytojaus Daniel Zych:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\r\n\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n\t\t\t\t\t<li>Dr\u0105gowska Katarzyna;</li>\r\n\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n\t\t\t\t\t<li>G\u0142owacki Jan;</li>\r\n\t\t\t\t\t<li>Grad Pawe\u0142;</li>\r\n\r\n\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n\t\t\t\t\t<li>K\u0142os Aneta;</li>\r\n\t\t\t\t\t<li>Kozie\u0142 Barbara;</li>\r\n\t\t\t\t\t<li>Koz\u0142owska Anna;</li>\r\n\t\t\t\t\t<li>Krug Pamela;</li>\r\n\r\n\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n\t\t\t\t\t<li>Luba\u015b Micha\u0142;</li>\r\n\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n\t\t\t\t\t<li>Modelska Marta;</li>\r\n\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n\r\n\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n\t\t\t\t\t<li>Pielat Zofia;</li>\r\n\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n\t\t\t\t\t<li>Rosa Karolina;</li>\r\n\r\n\t\t\t\t\t<li>Smyczy\u0144ska Kamila;</li>\r\n\t\t\t\t\t<li>Stoli\u0144ska Barbara;</li>\r\n\t\t\t\t\t<li>Szyma\u0144ska Katarzyna;</li>\r\n\t\t\t\t\t<li>\u015acibior Ewa;</li>\r\n\t\t\t\t\t<li>Witczak Magda;</li>\r\n\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n\r\n\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n\t\t\t\t\t<li>Zi\u00f3\u0142kowska Adrianna.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t </li>\r\n\t </ol>", - "left_column_lt": "<h2>Savanoriai</h2>\r\n\t<p>\r\n\t\tAutori\u0173 biografijos ir literat\u016brinis r\u016b\u0161i\u0173 apra\u0161ymus \r\n\t\tinternetin\u0117je bibliotekoje Laisvoji Literat\u016bra paruo\u0161\u0117 mokiniai\r\n\t\ti\u0161 keturi\u0173 mokykl\u0173 seminarijos \u201eLik savanoriu kad su\u017einoti daugiau\u201d.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\tMokiniai dirbo visi kartu globojami mokytoj\u0173 ir literat\u016bros \u017einov\u0173.\r\n\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n\r\n\t\t\tinternetine platforma viki</a>\r\n\t\tparuo\u0161ta grup\u0117s\r\n\t\t<a href=\"http://2ia.pl/\">2ia</a>. Kuriant apra\u0161ymus naudojo kompiuterius, internet\u0105 tam kad\r\n\t\t surasti informacij\u0105 ir patikrinti jos tik\u0117tinum\u0105.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\tProjektas \"Lik savanoriu kad su\u017einoti daugiau\" buvo \u012fvykdytas\r\n\t\t d\u0117ka\r\n\t\t<a href=\"http://www.menis.gov.pl/\">\r\n\t\t\tMinisterstwa Edukacji Narodowej</a>. Dovanas mokiniams \u012fsteig\u0117\r\n\t\t<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n\r\n\t\t\tLeidykla M\u016bs\u016b Knygynas</a>\r\n\t\ti\r\n\t\t<a href=\"http://helion.pl/\">Wydawnictwo Helion</a>. Patikrinta servise.\r\n\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n\t\t\tPlagiat.pl</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\t<a href=\"/static/wolontariat.pdf\">Raportas suristas su \u012fgyvendinimu projekto \u201eLik savanoriu kad su\u017einoti daugiau\"</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />\r\n\t</p>", - "title_fr": "B\u00e9n\u00e9volat pour le savoir", - "right_column_ru": "\t<h2>\u0410\u0432\u0442\u043e\u0440\u044b</h2>\r\n\r\n\t<ol>\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\t\u0413\u0438\u043c\u043d\u0430\u0437\u0438\u0439 \u043d\u043e\u043c\u0435\u0440 40 \u0441 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0435\r\n\t\t\t\t\u0448\u043a\u043e\u043b \u043d\u043e\u043c\u0435\u0440 69 \u0438\u043c. \u0410\u0440\u0438\u043c\u0438\u0438 \u043a\u0440\u0430\u0439\u043e\u0432\u043e\u0439 \u0431\u043e\u0435\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; \u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c\r\n\t\t\t\tAnny Budziarek-Friedrich:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Burdon Filip;</li>\r\n\r\n\t\t\t\t<li>D\u0119bski Bartek;</li>\r\n\t\t\t\t<li>Jackowicz Kamil;</li>\r\n\t\t\t\t<li>Kurek Pawe\u0142;</li>\r\n\t\t\t\t<li>Makles Bartosz;</li>\r\n\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n\t\t\t\t<li>Migda\u0142 Katarzyna;</li>\r\n\r\n\t\t\t\t<li>Mioduszewski Micha\u0142;</li>\r\n\t\t\t\t<li>Pfeiffer Ida;</li>\r\n\t\t\t\t<li>P\u0142askowicka Karolina;</li>\r\n\t\t\t\t<li>Sailer Ewa.</li>\r\n\t\t\t</ul>\r\n\t\t</li>\r\n\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tXXXIII \u041e\u0431\u0449\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u0446\u0435\u0439 \u0438\u043c. \u041d\u0438\u043a\u043e\u043b\u0430\u044f \u041a\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0431\u0438\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e-\u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e\r\n\t\t\t\t\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c El\u017cbiety Konkowskiej:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Chwil Bart\u0142omiej;</li>\r\n\t\t\t\t<li>Czarnecka Natalia;</li>\r\n\t\t\t\t<li>Gawro\u0144ska Iga;</li>\r\n\r\n\t\t\t\t<li>Grabarczyk Marta;</li>\r\n\t\t\t\t<li>Jastrz\u0105b Katarzyna;</li>\r\n\t\t\t\t<li>Krawczak Olga;</li>\r\n\t\t\t\t<li>Krawczyk Marianna;</li>\r\n\t\t\t\t<li>Kur Natalia;</li>\r\n\t\t\t\t<li>Kwiatek Marta;</li>\r\n\r\n\t\t\t\t<li>La\u015bkiewicz Joanna;</li>\r\n\t\t\t\t<li>Machczy\u0144ska Daria;</li>\r\n\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n\t\t\t\t<li>Moczulska Karolina;</li>\r\n\t\t\t\t<li>Mo\u015bcicka Aneta;</li>\r\n\t\t\t\t<li>Narloch Sabina;</li>\r\n\r\n\t\t\t\t<li>Przybysz Pawe\u0142;</li>\r\n\t\t\t\t<li>Puchta Marek;</li>\r\n\t\t\t\t<li>Ryska Cezary;</li>\r\n\t\t\t\t<li>Sandomierski Bart\u0142omiej;</li>\r\n\t\t\t\t<li>S\u0142awi\u0144ski Tomasz;</li>\r\n\t\t\t\t<li>S\u0142owik Olga;</li>\r\n\r\n\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n\t\t\t\t<li>Strzelczak Karolina;</li>\r\n\t\t\t\t<li>Szafran Danuta;</li>\r\n\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n\t\t\t\t<li>Szulkowska Alicja;</li>\r\n\t\t\t\t<li>\u015alusarczyk Anna;</li>\r\n\r\n\t\t\t\t<li>Tytkowska Anna.</li>\r\n\t\t\t</ul>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\t\u0410\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0439 \u043d\u0435\u043f\u0443\u0431\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0431\u0449\u0435\u043e\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u0446\u0435\u0439 \u043d\u043e\u043c\u0435\u0440\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa;\u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\r\n\t\t\t\t\t\u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c Micha\u0142a Friedricha:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n\r\n\t\t\t\t\t<li>Go\u0142aszewska Ewa;</li>\r\n\t\t\t\t\t<li>Kwiatkowski Micha\u0142;</li>\r\n\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n\t\t\t\t\t<li>Przespolewski Przemys\u0142aw;</li>\r\n\t\t\t\t\t<li>Rosi\u0144ska Zuzanna;</li>\r\n\r\n\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tLXIV \u041e\u0431\u0449\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u0446\u0435\u0439 \u0438\u043c. \u0421. \u0418. \u0412\u0438\u0442\u043a\u0435\u0432\u0438\u0447\u0430,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\r\n\t\t\t\t\t\u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c Daniela Zycha:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\r\n\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n\t\t\t\t\t<li>Dr\u0105gowska Katarzyna;</li>\r\n\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n\t\t\t\t\t<li>G\u0142owacki Jan;</li>\r\n\t\t\t\t\t<li>Grad Pawe\u0142;</li>\r\n\r\n\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n\t\t\t\t\t<li>K\u0142os Aneta;</li>\r\n\t\t\t\t\t<li>Kozie\u0142 Barbara;</li>\r\n\t\t\t\t\t<li>Koz\u0142owska Anna;</li>\r\n\t\t\t\t\t<li>Krug Pamela;</li>\r\n\r\n\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n\t\t\t\t\t<li>Luba\u015b Micha\u0142;</li>\r\n\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n\t\t\t\t\t<li>Modelska Marta;</li>\r\n\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n\r\n\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n\t\t\t\t\t<li>Pielat Zofia;</li>\r\n\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n\t\t\t\t\t<li>Rosa Karolina;</li>\r\n\r\n\t\t\t\t\t<li>Smyczy\u0144ska Kamila;</li>\r\n\t\t\t\t\t<li>Stoli\u0144ska Barbara;</li>\r\n\t\t\t\t\t<li>Szyma\u0144ska Katarzyna;</li>\r\n\t\t\t\t\t<li>\u015acibior Ewa;</li>\r\n\t\t\t\t\t<li>Witczak Magda;</li>\r\n\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n\r\n\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n\t\t\t\t\t<li>Zi\u00f3\u0142kowska Adrianna.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t </li>\r\n\t </ol>", - "left_column_fr": "<h2>B\u00e9n\u00e9volat</h2>\r\n\t<p>\r\n\t\tLes histoires de vie des auteurs ainsi que les d\u00e9finitions des \u00e9poques et genres litt\u00e9raires dans la biblioth\u00e8que en ligne Lectures libres ont \u00e9t\u00e9 \u00e9crites par les \u00e9l\u00e8ves des quatre \u00e9coles pendant les ateliers \"B\u00e9n\u00e9volat pour le savoir\"\r\n\t</p>\r\n\r\n\t<p>\r\n\t\tLes \u00e9l\u00e8ves ont travaill\u00e9 ensemble sous la supervision des professeurs et sp\u00e9cialistes \u2013 hommes des lettres sur\r\n\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n\r\n\t\tune platforme en ligne wiki</a>\r\n\t\tmise en place par l'\u00e9quipe\r\n\t\t<a href=\"http://2ia.pl/\">2ia</a>. Le travail sur les fiches comprenait aussi la ma\u00eetrise de l'ordinateur et de l'internet pour chercher des informations, ainsi que pour v\u00e9rifier leur fiabilit\u00e9.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\tLe projet \"B\u00e9n\u00e9volat pour le savoir\" a \u00e9t\u00e9 r\u00e9alis\u00e9 gr\u00e2ce \u00e0 l'appui \t<a href=\"http://www.menis.gov.pl/\">\r\n\t\tdu Minist\u00e8re de l'Education nationale\t</a>. Des r\u00e9compenses pour les \u00e9l\u00e8ves ont \u00e9t\u00e9 fond\u00e9es par <a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n\r\n\t\t\tla Maison d'\u00e9dition Nasza Ksi\u0119garnia</a>\r\n\t\tet\r\n\t\t<a href=\"http://helion.pl/\">la Maison d'\u00e9dition Helion</a>. Les fiches ont \u00e9t\u00e9 v\u00e9rifi\u00e9es sur le site\r\n\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n\t\t\tPlagiat.pl</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\t<a href=\"/static/wolontariat.pdf\"> Le rapport sur la r\u00e9alisation du projet \"B\u00e9n\u00e9volat pour le savoir\"\r\n</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />\r\n\t</p>", - "title": "Volunteering for knowledge", - "title_lt": "Lik savanoriu kad su\u009einoti daugiau", - "right_column": "<h2>Authors</h2>\r\n\r\n\t<ol>\r\n\t\t<li>\r\n\t\t\tGimnazjum nr 40 z Oddzia\u0142ami Integracyjnymi w Zespole\r\n\t\t\t\tSzk\u00f3\u0142 nr 69 im. Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; second form attented by\t\t\t\tAnna Budziarek-Friedrich:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Burdon Filip;</li>\r\n\r\n\t\t\t\t<li>D\u0119bski Bartek;</li>\r\n\t\t\t\t<li>Jackowicz Kamil;</li>\r\n\t\t\t\t<li>Kurek Pawe\u0142;</li>\r\n\t\t\t\t<li>Makles Bartosz;</li>\r\n\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n\t\t\t\t<li>Migda\u0142 Katarzyna;</li>\r\n\r\n\t\t\t\t<li>Mioduszewski Micha\u0142;</li>\r\n\t\t\t\t<li>Pfeiffer Ida;</li>\r\n\t\t\t\t<li>P\u0142askowicka Karolina;</li>\r\n\t\t\t\t<li>Sailer Ewa.</li>\r\n\t\t\t</ul>\r\n\t\t</li>\r\n\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tXXXIII Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Miko\u0142aja Kopernika,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; first year, biologyoriented class attented by El\u017cbieta Konkowskiej:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Chwil Bart\u0142omiej;</li>\r\n\t\t\t\t<li>Czarnecka Natalia;</li>\r\n\t\t\t\t<li>Gawro\u0144ska Iga;</li>\r\n\r\n\t\t\t\t<li>Grabarczyk Marta;</li>\r\n\t\t\t\t<li>Jastrz\u0105b Katarzyna;</li>\r\n\t\t\t\t<li>Krawczak Olga;</li>\r\n\t\t\t\t<li>Krawczyk Marianna;</li>\r\n\t\t\t\t<li>Kur Natalia;</li>\r\n\t\t\t\t<li>Kwiatek Marta;</li>\r\n\r\n\t\t\t\t<li>La\u015bkiewicz Joanna;</li>\r\n\t\t\t\t<li>Machczy\u0144ska Daria;</li>\r\n\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n\t\t\t\t<li>Moczulska Karolina;</li>\r\n\t\t\t\t<li>Mo\u015bcicka Aneta;</li>\r\n\t\t\t\t<li>Narloch Sabina;</li>\r\n\r\n\t\t\t\t<li>Przybysz Pawe\u0142;</li>\r\n\t\t\t\t<li>Puchta Marek;</li>\r\n\t\t\t\t<li>Ryska Cezary;</li>\r\n\t\t\t\t<li>Sandomierski Bart\u0142omiej;</li>\r\n\t\t\t\t<li>S\u0142awi\u0144ski Tomasz;</li>\r\n\t\t\t\t<li>S\u0142owik Olga;</li>\r\n\r\n\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n\t\t\t\t<li>Strzelczak Karolina;</li>\r\n\t\t\t\t<li>Szafran Danuta;</li>\r\n\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n\t\t\t\t<li>Szulkowska Alicja;</li>\r\n\t\t\t\t<li>\u015alusarczyk Anna;</li>\r\n\r\n\t\t\t\t<li>Tytkowska Anna.</li>\r\n\t\t\t</ul>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tAutorskie Niepubliczne Liceum Og\u00f3lnokszta\u0142c\u0105ce nr\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; first year, general education class attented by Micha\u0142 Friedrich:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n\r\n\t\t\t\t\t<li>Go\u0142aszewska Ewa;</li>\r\n\t\t\t\t\t<li>Kwiatkowski Micha\u0142;</li>\r\n\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n\t\t\t\t\t<li>Przespolewski Przemys\u0142aw;</li>\r\n\t\t\t\t\t<li>Rosi\u0144ska Zuzanna;</li>\r\n\r\n\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tLXIV Liceum Og\u00f3lnokszta\u0142c\u0105ce im. St. I. Witkiewicza,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; first year, general education class attented by Daniel Zych:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\r\n\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n\t\t\t\t\t<li>Dr\u0105gowska Katarzyna;</li>\r\n\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n\t\t\t\t\t<li>G\u0142owacki Jan;</li>\r\n\t\t\t\t\t<li>Grad Pawe\u0142;</li>\r\n\r\n\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n\t\t\t\t\t<li>K\u0142os Aneta;</li>\r\n\t\t\t\t\t<li>Kozie\u0142 Barbara;</li>\r\n\t\t\t\t\t<li>Koz\u0142owska Anna;</li>\r\n\t\t\t\t\t<li>Krug Pamela;</li>\r\n\r\n\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n\t\t\t\t\t<li>Luba\u015b Micha\u0142;</li>\r\n\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n\t\t\t\t\t<li>Modelska Marta;</li>\r\n\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n\r\n\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n\t\t\t\t\t<li>Pielat Zofia;</li>\r\n\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n\t\t\t\t\t<li>Rosa Karolina;</li>\r\n\r\n\t\t\t\t\t<li>Smyczy\u0144ska Kamila;</li>\r\n\t\t\t\t\t<li>Stoli\u0144ska Barbara;</li>\r\n\t\t\t\t\t<li>Szyma\u0144ska Katarzyna;</li>\r\n\t\t\t\t\t<li>\u015acibior Ewa;</li>\r\n\t\t\t\t\t<li>Witczak Magda;</li>\r\n\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n\r\n\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n\t\t\t\t\t<li>Zi\u00f3\u0142kowska Adrianna.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t </li>\r\n\t </ol>", - "right_column_es": "\t<h2>Autores</h2>\r\n\r\n\r\n\r\n\t<ol>\r\n\r\n\t\t<li>\r\n\r\n\t\t\t<p>\r\n\r\n\t\t\t\tGimnazjum nr 40 z Oddzia\u0142ami Integracyjnymi w Zespole\r\n\r\n\t\t\t\tSzk\u00f3\u0142 nr 69 im. Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d,\r\n\r\n\t\t\t\tC/ Drewniana 8, 00-345 Varsovia; segundo curso bajo la supervisi\u00f3n de\r\n\r\n\t\t\t\tAnna Budziarek-Friedrich:\r\n\r\n\t\t\t</p>\r\n\r\n\r\n\r\n\t\t\t<ul>\r\n\r\n\t\t\t\t<li>Burdon Filip;</li>\r\n\r\n\r\n\r\n\t\t\t\t<li>D\u0119bski Bartek;</li>\r\n\r\n\t\t\t\t<li>Jackowicz Kamil;</li>\r\n\r\n\t\t\t\t<li>Kurek Pawe\u0142;</li>\r\n\r\n\t\t\t\t<li>Makles Bartosz;</li>\r\n\r\n\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n\r\n\t\t\t\t<li>Migda\u0142 Katarzyna;</li>\r\n\r\n\r\n\r\n\t\t\t\t<li>Mioduszewski Micha\u0142;</li>\r\n\r\n\t\t\t\t<li>Pfeiffer Ida;</li>\r\n\r\n\t\t\t\t<li>P\u0142askowicka Karolina;</li>\r\n\r\n\t\t\t\t<li>Sailer Ewa.</li>\r\n\r\n\t\t\t</ul>\r\n\r\n\t\t</li>\r\n\r\n\r\n\r\n\t\t<li>\r\n\r\n\t\t\t<p>\r\n\r\n\t\t\t\tXXXIII Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Miko\u0142aja Kopernika,\r\n\r\n\t\t\t\tC/ Bema 76, 01-225 Varsovia; primer curso de perfil biol\u00f3gico-qu\u00edmico bajo la supervisi\u00f3n de El\u017cbieta Konkowska:\r\n\r\n\t\t\t</p>\r\n\r\n\r\n\r\n\t\t\t<ul>\r\n\r\n\t\t\t\t<li>Chwil Bart\u0142omiej;</li>\r\n\r\n\t\t\t\t<li>Czarnecka Natalia;</li>\r\n\r\n\t\t\t\t<li>Gawro\u0144ska Iga;</li>\r\n\r\n\r\n\r\n\t\t\t\t<li>Grabarczyk Marta;</li>\r\n\r\n\t\t\t\t<li>Jastrz\u0105b Katarzyna;</li>\r\n\r\n\t\t\t\t<li>Krawczak Olga;</li>\r\n\r\n\t\t\t\t<li>Krawczyk Marianna;</li>\r\n\r\n\t\t\t\t<li>Kur Natalia;</li>\r\n\r\n\t\t\t\t<li>Kwiatek Marta;</li>\r\n\r\n\r\n\r\n\t\t\t\t<li>La\u015bkiewicz Joanna;</li>\r\n\r\n\t\t\t\t<li>Machczy\u0144ska Daria;</li>\r\n\r\n\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n\r\n\t\t\t\t<li>Moczulska Karolina;</li>\r\n\r\n\t\t\t\t<li>Mo\u015bcicka Aneta;</li>\r\n\r\n\t\t\t\t<li>Narloch Sabina;</li>\r\n\r\n\r\n\r\n\t\t\t\t<li>Przybysz Pawe\u0142;</li>\r\n\r\n\t\t\t\t<li>Puchta Marek;</li>\r\n\r\n\t\t\t\t<li>Ryska Cezary;</li>\r\n\r\n\t\t\t\t<li>Sandomierski Bart\u0142omiej;</li>\r\n\r\n\t\t\t\t<li>S\u0142awi\u0144ski Tomasz;</li>\r\n\r\n\t\t\t\t<li>S\u0142owik Olga;</li>\r\n\r\n\r\n\r\n\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n\r\n\t\t\t\t<li>Strzelczak Karolina;</li>\r\n\r\n\t\t\t\t<li>Szafran Danuta;</li>\r\n\r\n\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n\r\n\t\t\t\t<li>Szulkowska Alicja;</li>\r\n\r\n\t\t\t\t<li>\u015alusarczyk Anna;</li>\r\n\r\n\r\n\r\n\t\t\t\t<li>Tytkowska Anna.</li>\r\n\r\n\t\t\t</ul>\r\n\r\n\t\t\t<li>\r\n\r\n\t\t\t\t<p>\r\n\r\n\t\t\t\t\tAutorskie Niepubliczne Liceum Og\u00f3lnokszta\u0142c\u0105ce nr\r\n\r\n\t\t\t\t\t42, C/ Iwicka 47 B, 00-735 Varsovia; primer curso\r\n\r\n\t\t\t\t\tbajo la supervisi\u00f3n de Micha\u0142 Friedrich:\r\n\r\n\t\t\t\t</p>\r\n\r\n\r\n\r\n\t\t\t\t<ul>\r\n\r\n\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n\r\n\r\n\r\n\t\t\t\t\t<li>Go\u0142aszewska Ewa;</li>\r\n\r\n\t\t\t\t\t<li>Kwiatkowski Micha\u0142;</li>\r\n\r\n\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n\r\n\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n\r\n\t\t\t\t\t<li>Przespolewski Przemys\u0142aw;</li>\r\n\r\n\t\t\t\t\t<li>Rosi\u0144ska Zuzanna;</li>\r\n\r\n\r\n\r\n\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n\r\n\t\t\t\t</ul>\r\n\r\n\t\t\t</li>\r\n\r\n\t\t\t<li>\r\n\r\n\t\t\t\t<p>\r\n\r\n\t\t\t\t\tLXIV Liceum Og\u00f3lnokszta\u0142c\u0105ce im. St. I. Witkiewicza,\r\n\r\n\t\t\t\t\tC/ Elbl\u0105ska 51, 01-737 Varsovia; primer curso bajo la supervisi\u00f3n de Daniel Zych:\r\n\r\n\t\t\t\t</p>\r\n\r\n\r\n\r\n\t\t\t\t<ul>\r\n\r\n\r\n\r\n\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n\r\n\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n\r\n\t\t\t\t\t<li>Dr\u0105gowska Katarzyna;</li>\r\n\r\n\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n\r\n\t\t\t\t\t<li>G\u0142owacki Jan;</li>\r\n\r\n\t\t\t\t\t<li>Grad Pawe\u0142;</li>\r\n\r\n\r\n\r\n\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n\r\n\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n\r\n\t\t\t\t\t<li>K\u0142os Aneta;</li>\r\n\r\n\t\t\t\t\t<li>Kozie\u0142 Barbara;</li>\r\n\r\n\t\t\t\t\t<li>Koz\u0142owska Anna;</li>\r\n\r\n\t\t\t\t\t<li>Krug Pamela;</li>\r\n\r\n\r\n\r\n\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n\r\n\t\t\t\t\t<li>Luba\u015b Micha\u0142;</li>\r\n\r\n\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n\r\n\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n\r\n\t\t\t\t\t<li>Modelska Marta;</li>\r\n\r\n\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n\r\n\r\n\r\n\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n\r\n\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n\r\n\t\t\t\t\t<li>Pielat Zofia;</li>\r\n\r\n\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n\r\n\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n\r\n\t\t\t\t\t<li>Rosa Karolina;</li>\r\n\r\n\r\n\r\n\t\t\t\t\t<li>Smyczy\u0144ska Kamila;</li>\r\n\r\n\t\t\t\t\t<li>Stoli\u0144ska Barbara;</li>\r\n\r\n\t\t\t\t\t<li>Szyma\u0144ska Katarzyna;</li>\r\n\r\n\t\t\t\t\t<li>\u015acibior Ewa;</li>\r\n\r\n\t\t\t\t\t<li>Witczak Magda;</li>\r\n\r\n\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n\r\n\r\n\r\n\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n\r\n\t\t\t\t\t<li>Zi\u00f3\u0142kowska Adrianna.</li>\r\n\r\n\t\t\t\t</ul>\r\n\r\n\t\t\t</li>\r\n\r\n\t </li>\r\n\r\n\t </ol>", - "right_column_en": "<h2>Authors</h2>\r\n\r\n\t<ol>\r\n\t\t<li>\r\n\t\t\tGimnazjum nr 40 z Oddzia\u0142ami Integracyjnymi w Zespole\r\n\t\t\t\tSzk\u00f3\u0142 nr 69 im. Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; second form attented by\t\t\t\tAnna Budziarek-Friedrich:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Burdon Filip;</li>\r\n\r\n\t\t\t\t<li>D\u0119bski Bartek;</li>\r\n\t\t\t\t<li>Jackowicz Kamil;</li>\r\n\t\t\t\t<li>Kurek Pawe\u0142;</li>\r\n\t\t\t\t<li>Makles Bartosz;</li>\r\n\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n\t\t\t\t<li>Migda\u0142 Katarzyna;</li>\r\n\r\n\t\t\t\t<li>Mioduszewski Micha\u0142;</li>\r\n\t\t\t\t<li>Pfeiffer Ida;</li>\r\n\t\t\t\t<li>P\u0142askowicka Karolina;</li>\r\n\t\t\t\t<li>Sailer Ewa.</li>\r\n\t\t\t</ul>\r\n\t\t</li>\r\n\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tXXXIII Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Miko\u0142aja Kopernika,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; first year, biologyoriented class attented by El\u017cbieta Konkowskiej:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Chwil Bart\u0142omiej;</li>\r\n\t\t\t\t<li>Czarnecka Natalia;</li>\r\n\t\t\t\t<li>Gawro\u0144ska Iga;</li>\r\n\r\n\t\t\t\t<li>Grabarczyk Marta;</li>\r\n\t\t\t\t<li>Jastrz\u0105b Katarzyna;</li>\r\n\t\t\t\t<li>Krawczak Olga;</li>\r\n\t\t\t\t<li>Krawczyk Marianna;</li>\r\n\t\t\t\t<li>Kur Natalia;</li>\r\n\t\t\t\t<li>Kwiatek Marta;</li>\r\n\r\n\t\t\t\t<li>La\u015bkiewicz Joanna;</li>\r\n\t\t\t\t<li>Machczy\u0144ska Daria;</li>\r\n\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n\t\t\t\t<li>Moczulska Karolina;</li>\r\n\t\t\t\t<li>Mo\u015bcicka Aneta;</li>\r\n\t\t\t\t<li>Narloch Sabina;</li>\r\n\r\n\t\t\t\t<li>Przybysz Pawe\u0142;</li>\r\n\t\t\t\t<li>Puchta Marek;</li>\r\n\t\t\t\t<li>Ryska Cezary;</li>\r\n\t\t\t\t<li>Sandomierski Bart\u0142omiej;</li>\r\n\t\t\t\t<li>S\u0142awi\u0144ski Tomasz;</li>\r\n\t\t\t\t<li>S\u0142owik Olga;</li>\r\n\r\n\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n\t\t\t\t<li>Strzelczak Karolina;</li>\r\n\t\t\t\t<li>Szafran Danuta;</li>\r\n\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n\t\t\t\t<li>Szulkowska Alicja;</li>\r\n\t\t\t\t<li>\u015alusarczyk Anna;</li>\r\n\r\n\t\t\t\t<li>Tytkowska Anna.</li>\r\n\t\t\t</ul>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tAutorskie Niepubliczne Liceum Og\u00f3lnokszta\u0142c\u0105ce nr\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; first year, general education class attented by Micha\u0142 Friedrich:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n\r\n\t\t\t\t\t<li>Go\u0142aszewska Ewa;</li>\r\n\t\t\t\t\t<li>Kwiatkowski Micha\u0142;</li>\r\n\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n\t\t\t\t\t<li>Przespolewski Przemys\u0142aw;</li>\r\n\t\t\t\t\t<li>Rosi\u0144ska Zuzanna;</li>\r\n\r\n\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tLXIV Liceum Og\u00f3lnokszta\u0142c\u0105ce im. St. I. Witkiewicza,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; first year, general education class attented by Daniel Zych:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\r\n\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n\t\t\t\t\t<li>Dr\u0105gowska Katarzyna;</li>\r\n\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n\t\t\t\t\t<li>G\u0142owacki Jan;</li>\r\n\t\t\t\t\t<li>Grad Pawe\u0142;</li>\r\n\r\n\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n\t\t\t\t\t<li>K\u0142os Aneta;</li>\r\n\t\t\t\t\t<li>Kozie\u0142 Barbara;</li>\r\n\t\t\t\t\t<li>Koz\u0142owska Anna;</li>\r\n\t\t\t\t\t<li>Krug Pamela;</li>\r\n\r\n\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n\t\t\t\t\t<li>Luba\u015b Micha\u0142;</li>\r\n\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n\t\t\t\t\t<li>Modelska Marta;</li>\r\n\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n\r\n\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n\t\t\t\t\t<li>Pielat Zofia;</li>\r\n\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n\t\t\t\t\t<li>Rosa Karolina;</li>\r\n\r\n\t\t\t\t\t<li>Smyczy\u0144ska Kamila;</li>\r\n\t\t\t\t\t<li>Stoli\u0144ska Barbara;</li>\r\n\t\t\t\t\t<li>Szyma\u0144ska Katarzyna;</li>\r\n\t\t\t\t\t<li>\u015acibior Ewa;</li>\r\n\t\t\t\t\t<li>Witczak Magda;</li>\r\n\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n\r\n\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n\t\t\t\t\t<li>Zi\u00f3\u0142kowska Adrianna.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t </li>\r\n\t </ol>", - "left_column_de": "<h2>Volontariat</h2>\r\n\t<p>\r\n\t\tSchriftsteller-Biographien und Definitionen von Epochen und Literaturgattungen\r\n in der Internetbibliothek Freie Lekt\u00fcren haben unsere Sch\u00fcler aus vier\r\n Schulen w\u00e4hrend Workshops \"Volontariat f\u00fcr Wissen\" geschrieben.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\tDie Sch\u00fcler haben gemeinsam unter Aufsicht der Lehrer\r\n\t\tund Spezialisten -Literaturwissenschaftler - gearbeitet\r\n\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n\r\n\t\t\tauf \"wiki\" Internetplattform</a>\r\n\t\tvorbereitet von unserem Team\r\n\t\t<a href=\"http://2ia.pl/\">2ia</a>. Der Einsatz von Computer und Internet wurde\r\n\t\t- w\u00e4hrend der Arbeiten an Noten - f\u00fcr die Informationssuche und Informationspr\u00fcfung genutzt\r\n\t\tund gleichzeitig als notwendiges Werkzeug in den Lernprozess einbezogen.\r\n\t</p>\r\n \r\n\t<p>\r\n\t\tDas Projekt \"Volontariat f\u00fcr Wissen\" wurde dank der Unterst\u00fctzung umgesetzt, von\r\n\t\t<a href=\"http://www.menis.gov.pl/\">\r\n\t\t\tMinisterium f\u00fcr Bildung</a>. Preise f\u00fcr Sch\u00fcler spendeten\r\n\t\t<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n\r\n\t\t\tVerlag unsere Buchhandlung</a>\r\n\t\tund\r\n\t\t<a href=\"http://helion.pl/\">Wydawnictwo Helion</a>. Noten wurden im Service verifiziert\r\n\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n\t\t\tPlagiat.pl</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\t<a href=\"/static/wolontariat.pdf\">der Bericht \u00fcber das Projekt \"Volontariat f\u00fcr Wissen\"</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />\r\n\t</p>\r\n", - "title_uk": "\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0432 \u043e\u0441\u0432\u0456\u0442\u0456", - "right_column_it": null, - "title_pl": "Wolontariat dla wiedzy", - "left_column": "<h2>Volunteers</h2>\r\n\t<p>Writers' biographical entries as well as periods' and genres'\r\ndefinitions placed on web library Wolne Lektury were written by students from four schools during \"Wolontariat dla wiedzy\" (\"Volunteering for knowledge\") workshops. </p> <p>\r\n The students worked together under the factual guidance of teachers and specialists - literary scholars<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n\r\n\ton wiki platform</a>\r\n prepared by <a href=\"http://2ia.pl/\">2ia</a> team. At the same time the students learnt how to use a computer and the Internet while searching for necessary information how to verify the credibility of the source. </p>\r\n\r\n<p>\r\n\"Wolontariat dla wiedzy\" project was realised thanks to the support of <a href=\"http://www.menis.gov.pl/\">\r\nMinisterstwo Edukacji Narodowej</a>. The rewards for the student were funded by<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n\r\nWydawnictwo Nasza Ksi\u0119garnia</a>\r\nand<a href=\"http://helion.pl/\">Wydawnictwo Helion</a>. Each entry was verified on <a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\nPlagiat.pl</a> website.\r\n</p>\r\n\r\n<p>\r\n\t\t<a href=\"/static/wolontariat.pdf\">Report on completion of \"Wolontariat dla wiedzy\" project (PL)</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />\r\n\t</p>", - "right_column_uk": "<h2>\u0410\u0432\u0442\u043e\u0440\u0438</h2>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <ol>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <p>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0413\u0456\u043c\u043d\u0430\u0437\u0456\u044f \u211640 \u0437 \u0456\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0456\u0439\u043d\u0438\u043c\u0438 \u0432\u0456\u0434\u0434\u0456\u043b\u0430\u043c\u0438 \u0432 \u041a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0456 \u0448\u043a\u0456\u043b \u2116 69 \u0456\u043c\u0435\u043d\u0456 \u0410\u0440\u043c\u0456\u0457 \u041a\u0440\u0430\u0439\u043e\u0432\u043e\u0457 \u0411\u043e\u0439\u043e\u0432\u043e\u0457 \u0413\u0440\u0443\u043f\u0438 \u201c\u041a\u0420\u0418\u0411\u0410\u0420\u201d,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0432\u0443\u043b. \u0414\u0440\u0435\u0432\u043d\u044f\u043d\u0430 8, 00-345 \u0412\u0430\u0440\u0448\u0430\u0432\u0430; \u0434\u0440\u0443\u0433\u0438\u0439 \u043a\u043b\u0430\u0441 \u043f\u0456\u0434 \u043e\u043f\u0456\u043a\u043e\u044e \u0410\u043d\u043d\u0438 \u0411\u0443\u0434\u0437\u044f\u0440\u0435\u043a-\u0424\u0440\u0456\u0434\u0440\u0456\u0445:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </p>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <ul>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0411\u0443\u0440\u0434\u043e\u043d \u0424\u0456\u043b\u0456\u043f;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0414\u0435\u043c\u0431\u0441\u044c\u043a\u0456 \u0411\u0430\u0440\u0442\u0435\u043a;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u042f\u0446\u043a\u043e\u0432\u0456\u0447 \u041a\u0430\u043c\u0456\u043b;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u0443\u0440\u0435\u043a \u041f\u0430\u0432\u0435\u043b;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u0430\u043a\u043b\u0435\u0441 \u0411\u0430\u0440\u0442\u043e\u0448;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u0430\u0440\u043a\u0435\u0432\u0456\u0447 \u0404\u0440\u0435\u043c\u044f\u0448;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u0456\u0433\u0434\u0430\u043b \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u0456\u043e\u0434\u0443\u0448\u0435\u0432\u0441\u044c\u043a\u0456 \u041c\u0456\u0445\u0430\u043b;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0424\u0430\u0439\u0444\u0435\u0440 \u0406\u0434\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u043b\u0430\u0441\u043a\u043e\u0432\u0456\u0446\u044c\u043a\u0430 \u041a\u0430\u0440\u043e\u043b\u0456\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u0430\u0439\u043b\u0435\u0440 \u0415\u0432\u0430.</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </ul>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <p>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 XXXIII \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u043e\u0441\u0432\u0456\u0442\u043d\u0438\u0439 \u043b\u0456\u0446\u0435\u0439 \u0456\u043c\u0435\u043d\u0456 \u041c\u0438\u043a\u043e\u043b\u0430\u044f \u041a\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0432\u0443\u043b. \u0411\u0435\u043c\u0430 76, 01-225 \u0412\u0430\u0440\u0448\u0430\u0432\u0430; \u043f\u0435\u0440\u0448\u0438\u0439 \u043a\u043b\u0430\u0441 \u0431\u0456\u043e\u043b\u043e\u0433\u0456\u0447\u043d\u043e-\u0445\u0456\u043c\u0456\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0456\u043b\u044e \u043f\u0456\u0434 \u043e\u043f\u0456\u043a\u043e\u044e \u0415\u043b\u044c\u0436\u0431\u0454\u0442\u0438 \u041a\u043e\u043d\u043a\u043e\u0432\u0441\u044c\u043a\u043e\u0457 :\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </p>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <ul>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0425\u0432\u0456\u043b \u0411\u0430\u0440\u0442\u043b\u043e\u043c\u0454\u0439;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0427\u0430\u0440\u043d\u0435\u0446\u044c\u043a\u0430 \u041d\u0430\u0442\u0430\u043b\u0456\u044f ;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0490\u0430\u0432\u0440\u043e\u043d\u0441\u044c\u043a\u0430 \u0406\u0491\u0430 ;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0490\u0440\u0430\u0431\u0430\u0440\u0447\u0438\u043a \u041c\u0430\u0440\u0442\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u042f\u0430\u0441\u0442\u0436\u043e\u043c\u0431 \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u0440\u0430\u0432\u0447\u0430\u043a \u041e\u043b\u044c\u0433\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u0440\u0430\u0432\u0447\u0438\u043a \u041c\u0430\u0440\u0456\u0430\u043d\u043d\u0430 ;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u0443\u0440 \u041d\u0430\u0442\u0430\u043b\u0456\u044f;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u0432\u044f\u0442\u0435\u043a \u041c\u0430\u0440\u0442\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041b\u0430\u0441\u044c\u043a\u0435\u0432\u0438\u0447 \u0419\u043e\u0430\u043d\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u0430\u0445\u0447\u0438\u043d\u0441\u044c\u043a\u0430 \u0414\u0430\u0440\u0456\u044f;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u0454\u0447\u043d\u0456\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u0406\u0437\u0430\u0431\u0435\u043b\u044f;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u043e\u0447\u0443\u043b\u0441\u044c\u043a\u0430 \u041a\u0430\u0440\u043e\u043b\u0456\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u043e\u0441\u044c\u0446\u0456\u0446\u043a\u0430 \u0410\u043d\u0435\u0442\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041d\u0430\u0440\u043b\u043e\u0445 \u0421\u0430\u0431\u0456\u043d\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u0448\u0438\u0431\u0438\u0448 \u041f\u0430\u0432\u0435\u043b;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u0443\u0445\u0442\u0430 \u041c\u0430\u0440\u0435\u043a;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0420\u0438\u0441\u043a\u0430 \u0426\u0435\u0437\u0430\u0440\u0438;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u0430\u043d\u0434\u043e\u043c\u0454\u0440\u0441\u044c\u043a\u0456 \u0411\u0430\u0440\u043b\u043e\u043c\u0454\u0439;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u043b\u0430\u0432\u0456\u043d\u0441\u044c\u043a\u0456 \u0422\u043e\u043c\u0430\u0448;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u043b\u043e\u0432\u0456\u043a \u041e\u043b\u044c\u0433\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u0442\u0430\u0436\u0438\u0446\u044c\u043a\u0430 \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u0442\u0436\u0435\u043b\u0447\u0430\u043a \u041a\u0430\u0440\u043e\u043b\u0456\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0428\u0430\u0444\u0440\u0430\u043d \u0414\u0430\u043d\u0443\u0442\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0428\u043c\u0456\u0491\u0454\u043b\u044c\u0441\u044c\u043a\u0430 \u041c\u0430\u0491\u0434\u0430\u043b\u0435\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0428\u0443\u043b\u043a\u043e\u0432\u0430\u0441\u044c\u043a\u0430 \u0410\u043b\u0456\u0446\u0456\u044f;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u044c\u043b\u0443\u0441\u0430\u0440\u0447\u0438\u043a \u0410\u043d\u043d\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0422\u0438\u0442\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u00a0\u0410\u043d\u043d\u0430.</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </ul>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <p>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0410\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u0439 \u041d\u0435\u043f\u0443\u0431\u043b\u0456\u0447\u043d\u0438\u0439 \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u043e\u0441\u0432\u0456\u0442\u043d\u0456\u0439 \u041b\u0456\u0446\u0435\u0439 \u2116 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 42, \u0432\u0443\u043b. \u0406\u0432\u0456\u0446\u044c\u043a\u0430 47 B, 00-735 \u0412\u0430\u0440\u0448\u0430\u0432\u0430; \u043f\u0435\u0440\u0448\u0438\u0439 \u043a\u043b\u0430\u0441 \u0437\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0456\u043b\u044e \u043f\u0456\u0434 \u043e\u043f\u0456\u043a\u043e\u044e \u041c\u0456\u0445\u0430\u043b\u0430 \u0424\u0440\u0456\u0434\u0440\u0456\u0445\u0430:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </p>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <ul>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0411\u0430\u0440\u0430\u043d\u0454\u0446\u044c\u043a\u0430 \u041c\u0430\u0440\u0442\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0490\u043e\u043b\u0430\u0448\u0435\u0432\u0441\u044c\u043a\u0430 \u0415\u0432\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u0432\u044f\u0442\u043a\u043e\u0432\u0441\u044c\u043a\u0456 \u041c\u0456\u0445\u0430\u043b;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u0430\u0445\u043d\u0456\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u041c\u043e\u043d\u0456\u043a\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u0454\u0442\u0436\u0430\u043a \u0411\u0430\u0440\u0442\u043e\u0448;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u0448\u0435\u0441\u043f\u043e\u043b\u0435\u0432\u0441\u044c\u043a\u0456 \u041f\u0448\u0435\u043c\u0438\u0441\u043b\u0430\u0432;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0420\u043e\u0441\u0456\u043d\u0441\u044c\u043a\u0430 \u0417\u0443\u0437\u0430\u043d\u043d\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u0456\u0431\u0456\u0491\u0430 \u041c\u0430\u0491\u0434\u0430\u043b\u0435\u043d\u0430.</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </ul>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <p>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LXIV \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u043e\u0441\u0432\u0456\u0442\u043d\u0456\u0439 \u041b\u0456\u0446\u0435\u0439 \u0456\u043c\u0435\u043d\u0456 \u0421\u0442.\u0406. \u0412\u0456\u0442\u043a\u0454\u0432\u0456\u0447\u0430,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0432\u0443\u043b. \u0415\u043b\u044c\u0431\u043b\u043e\u043d\u0437\u044c\u043a\u0430 51, 01-737 \u0412\u0430\u0440\u0448\u0430\u0432\u0430; \u043f\u0435\u0440\u0448\u0438\u0439 \u043a\u043b\u0430\u0441 \u0437\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0456\u043b\u044e \u043f\u0456\u0434 \u043e\u043f\u0456\u043a\u043e\u044e \u0414\u0430\u043d\u0454\u043b\u0430 \u0417\u0438\u0445\u0430:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </p>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <ul>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0410\u043d\u0434\u0436\u0435\u0439\u0447\u0430\u043a \u041a\u0430\u043c\u0456\u043b;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0427\u0443\u0431\u0430\u0439 \u041a\u043e\u043d\u0440\u0430\u0434;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0414\u0440\u043e\u043d\u0491\u043e\u0432\u0441\u044c\u043a\u0430 \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0490\u0430\u0454\u0432\u0441\u044c\u043a\u0430 \u041c\u0430\u0491\u0434\u0430\u043b\u0435\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0490\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u0456 \u042f\u043d;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0490\u0440\u0430\u0434 \u00a0\u041f\u0430\u0432\u0435\u043b;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0413\u043d\u0430\u0442\u043e\u0432\u0441\u044c\u043a\u0456 \u0411\u0430\u0440\u0442\u0435\u043a;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u0430\u0440\u0432\u043e\u0432\u0441\u044c\u043a\u0456 \u041c\u0430\u0440\u0446\u0456\u043d;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u043b\u043e\u0441 \u0410\u043d\u0435\u0442\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u043e\u0437\u0454\u043b \u0411\u0430\u0440\u0431\u0430\u0440\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u043e\u0437\u043b\u043e\u0432\u0441\u044c\u043a\u0430 \u0410\u043d\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u0440\u0443\u0491 \u041f\u0430\u043c\u0435\u043b\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u0436\u043e\u0441\u0435\u043a \u042f\u043a\u0443\u0431;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041b\u0443\u0431\u0430\u0441\u044c \u041c\u0456\u0445\u0430\u043b;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u0430\u0441\u0435\u0432\u0456\u0447 \u041d\u0430\u0442\u0430\u043b\u0456\u044f;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u0430\u0441\u0442\u0430\u043b\u0435\u0436 \u0410\u0491\u043d\u0454\u0448\u043a\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u043e\u0434\u0435\u043b\u044c\u0441\u044c\u043a\u0430 \u041c\u0430\u0440\u0442\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041d\u043e\u0432\u0430\u043a \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u0430\u0431\u044f\u043d \u0410\u0491\u043d\u0454\u0448\u043a\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u0430\u0448\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u0454\u043b\u0430\u0442 \u0417\u043e\u0444\u0456\u044f;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u043e\u043d\u0454\u0446\u044c\u043a\u0430 \u0410\u0491\u043d\u0454\u0448\u043a\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u0438\u0442\u043b\u0430\u043a \u0423\u0440\u0448\u0443\u043b\u044f;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0420\u043e\u0441\u0430 \u041a\u0430\u0440\u043e\u043b\u0456\u043d\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u043c\u0447\u0438\u043d\u0441\u044c\u043a\u0430 \u041a\u0430\u043c\u0456\u043b\u044f;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u0442\u043e\u043b\u0456\u043d\u0441\u044c\u043a\u0430 \u0411\u0430\u0440\u0431\u0430\u0440\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0428\u0438\u043c\u0430\u043d\u0441\u044c\u043a\u0430 \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u044c\u0446\u0456\u0431\u043e\u0440 \u0415\u0432\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0412\u0456\u0442\u0447\u0430\u043a \u041c\u0430\u0491\u0434\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0412\u0456\u0442\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u042e\u0441\u0442\u0438\u043d\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0412\u0438\u0436\u0438\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u0419\u043e\u0432\u0456\u0442\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0417\u044e\u043b\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u0410\u0434\u0440\u0456\u0430\u043d\u043d\u0430.</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </ul>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 </li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 </ol>", - "title_en": "Volunteering for knowledge", - "left_column_pl": "<h2>Wolontariat</h2>\r\n\t<p>\r\n\t\tBiogramy pisarzy oraz definicje epok i gatunk\u00f3w literackich w\r\n\t\tbibliotece internetowej Wolne Lektury napisali uczniowie\r\n\t\tczterech szk\u00f3\u0142 podczas warsztat\u00f3w \u201eWolontariat dla wiedzy\u201d.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\tUczniowie pracowali wsp\u00f3lnie pod merytorycznym nadzorem\r\n\t\tnauczycieli i specjalist\u00f3w \u2013 literaturoznawc\u00f3w na\r\n\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n\r\n\t\t\tplatformie internetowej wiki</a>\r\n\t\tprzygotowanej przez zesp\u00f3\u0142\r\n\t\t<a href=\"http://2ia.pl/\">2ia</a>. Praca nad notami by\u0142a jednocze\u015bnie nauk\u0105 wykorzystywania\r\n\t\tkomputer\u00f3w i internetu do wyszukiwania informacji, a tak\u017ce\r\n\t\tweryfikowania ich wiarygodno\u015bci.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\tProjekt \"Wolontariat dla wiedzy\" zosta\u0142 zrealizowany dzi\u0119ki\r\n\t\twsparciu\r\n\t\t<a href=\"http://www.menis.gov.pl/\">\r\n\t\t\tMinisterstwa Edukacji Narodowej</a>. Nagrody dla uczni\u00f3w ufundowali\r\n\t\t<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n\r\n\t\t\tWydawnictwo Nasza Ksi\u0119garnia</a>\r\n\t\ti\r\n\t\t<a href=\"http://helion.pl/\">Wydawnictwo Helion</a>. Noty zweryfikowano w serwisie\r\n\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n\t\t\tPlagiat.pl</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\t<a href=\"/static/wolontariat.pdf\">Raport z realizacji projektu \u201eWolontariat dla wiedzy\"</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />\r\n\t</p>\r\n", - "left_column_it": null, - "title_es": "Voluntariado para el conocimiento", - "left_column_ru": "<h2>\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e</h2>\r\n\r\n <p> \u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0435 \u043d\u0430\u0448\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u042d\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\r\n \u043b\u0438\u0448\u044c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043d\u0430\u0448\u0438\u043c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c-\u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c.</p>\r\n\r\n \r\n <p>\u041c\u044b \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0432\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0448\u043a\u043e\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Wolne Lektury \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u043c\u0438.</p>\r\n \r\n <p>\u041c\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0435\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443 \u043f\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0442\u0435\u043a\u0441\u0442\u043e\u0432: \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u0438\r\n \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443. \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438, \u0442\u0430\u043a \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438.\r\n \u041e\u043d\u0438, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u043c\u0438, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u044e\u0442 \u0443\u0447\u0435\u0431\u0443 \u0438 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0432 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043b\u0443\u0448\u0430\u043d\u0438\u044f (\u0442.\u043d.\r\n \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433). \u041c\u044b \u0432\u044b\u0434\u0430\u0435\u043c \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u044b \u0438 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u0430\u0441\u0447\u0435\u0442 \u0442\u043e\u0433\u043e, \u043a\u043e\u0433\u0434\u0430 \r\n \u0438 \u043a\u0430\u043a\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u043e\u043c \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \r\n \u0444\u043e\u043d\u0434\u0430. \u0423\u0447\u0435\u0431\u0430, \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0449\u0438\u0435 \u0438\u0445 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435\r\n \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0441\u043b\u0443\u0436\u0431\u0435.</p>\r\n\r\n \r\n <h2>\u0427\u0442\u043e \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c?</h2>\r\n \r\n <p>\u0421\u0430\u043c\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u0412 \u0442\u0435\u043a\u0441\u0442\u0430\u0445, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u043c\u0438 \u0438\u0437 \u041d\u0430\u0440\u043e\u0434\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \r\n \u0417\u0430\u0442\u0435\u043c \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u043e\u0441\u043a\u0438, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u043e \u043a \u0443\u0447\u0435\u043d\u0438\u043a\u0430\u043c, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432 \u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0437\u0432\u0443\u0447\u0438\u0442 \u0430\u043d\u0430\u0445\u0440\u043e\u043d\u0438\u0447\u043d\u043e.\r\n \u041f\u0440\u0435\u0436\u043d\u0438\u0435 \u0438\u0437\u0434\u0430\u043d\u0438\u044f (\u0440\u0435\u0436\u0438\u043c \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0430) \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440. \u043f\u043e \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u0438\u043b\u0438 \u0444\u043b\u0435\u043a\u0441\u0438\u0438. \u041f\u0440\u0438\u0447\u0435\u043c, \u043c\u044b \u0437\u0430\u0431\u043e\u0442\u0438\u043c\u0441\u044f \u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438\r\n \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043c\u043e\u0447\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \"\u043d\u0430\u0441\u043a\u0432\u043e\u0437\u044c\".\r\n \u0412\u043e \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0445 \u0441\u0432\u043e\u044e \u043f\u043e\u043c\u043e\u0449\u044c \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b - \u0443\u0447\u0438\u0442\u0435\u043b\u044f \u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b, \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0441\u0432\u043e\u0438 \u0441\u043e\u0432\u0435\u0442\u044b \u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f\r\n \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439.</p>\r\n \r\n <h2>\u041a\u0430\u043a \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0432 \u043d\u0430\u0448 \u0444\u043e\u043d\u0434?</h2>\r\n \r\n <p>\u0412\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0441\u0438\u043c \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0438-\u043c\u0435\u0439\u043b \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <a href=\"mail:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</p>\r\n\r\n <p>\u041c\u044b \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje\">\u0441\u0430\u0439\u0442 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Wolne Lektury</a>, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u043c.</p>\r\n", - "slug": "voluntary_services", - "right_column_de": "\t<h2>Autoren</h2>\r\n\r\n\t<ol>\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tGymnasium Nr. 40 mit Integrationsabteilungen \r\n\t\t\t\tSchulverbund Nr. 69 Schulname: Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d, \r\n\t\t\t\tStr. Drewniana 8, 00-345 Warszawa; 2. Klasse\r\n\t\t\t\tKlassenlehrerin: Anna Budziarek-Friedrich:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Burdon Filip;</li>\r\n\r\n\t\t\t\t<li>D\u0119bski Bartek;</li>\r\n\t\t\t\t<li>Jackowicz Kamil;</li>\r\n\t\t\t\t<li>Kurek Pawe\u0142;</li>\r\n\t\t\t\t<li>Makles Bartosz;</li>\r\n\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n\t\t\t\t<li>Migda\u0142 Katarzyna;</li>\r\n\r\n\t\t\t\t<li>Mioduszewski Micha\u0142;</li>\r\n\t\t\t\t<li>Pfeiffer Ida;</li>\r\n\t\t\t\t<li>P\u0142askowicka Karolina;</li>\r\n\t\t\t\t<li>Sailer Ewa.</li>\r\n\t\t\t</ul>\r\n\t\t</li>\r\n\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tXXXIII Kopernikus Oberschule,\r\n\t\t\t\tStr. Bema 76, 01-225 Warszawa; 1. Klasse; \r\n\t\t\t\tFachbereiche: Biologie-Chemie; Klassenlehrerin: El\u017cbieta Konkowska:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Chwil Bart\u0142omiej;</li>\r\n\t\t\t\t<li>Czarnecka Natalia;</li>\r\n\t\t\t\t<li>Gawro\u0144ska Iga;</li>\r\n\r\n\t\t\t\t<li>Grabarczyk Marta;</li>\r\n\t\t\t\t<li>Jastrz\u0105b Katarzyna;</li>\r\n\t\t\t\t<li>Krawczak Olga;</li>\r\n\t\t\t\t<li>Krawczyk Marianna;</li>\r\n\t\t\t\t<li>Kur Natalia;</li>\r\n\t\t\t\t<li>Kwiatek Marta;</li>\r\n\r\n\t\t\t\t<li>La\u015bkiewicz Joanna;</li>\r\n\t\t\t\t<li>Machczy\u0144ska Daria;</li>\r\n\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n\t\t\t\t<li>Moczulska Karolina;</li>\r\n\t\t\t\t<li>Mo\u015bcicka Aneta;</li>\r\n\t\t\t\t<li>Narloch Sabina;</li>\r\n\r\n\t\t\t\t<li>Przybysz Pawe\u0142;</li>\r\n\t\t\t\t<li>Puchta Marek;</li>\r\n\t\t\t\t<li>Ryska Cezary;</li>\r\n\t\t\t\t<li>Sandomierski Bart\u0142omiej;</li>\r\n\t\t\t\t<li>S\u0142awi\u0144ski Tomasz;</li>\r\n\t\t\t\t<li>S\u0142owik Olga;</li>\r\n\r\n\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n\t\t\t\t<li>Strzelczak Karolina;</li>\r\n\t\t\t\t<li>Szafran Danuta;</li>\r\n\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n\t\t\t\t<li>Szulkowska Alicja;</li>\r\n\t\t\t\t<li>\u015alusarczyk Anna;</li>\r\n\r\n\t\t\t\t<li>Tytkowska Anna.</li>\r\n\t\t\t</ul>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tPrivate Oberschule Nr 42,\r\n\t\t\t\t\tStr. Iwicka 47 B, 00-735 Warszawa; 1. Klasse\r\n\t\t\t\t\tFachbereich: Allgemeinbildung; Klassenlehrer: Micha\u0142 Friedrich:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n\r\n\t\t\t\t\t<li>Go\u0142aszewska Ewa;</li>\r\n\t\t\t\t\t<li>Kwiatkowski Micha\u0142;</li>\r\n\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n\t\t\t\t\t<li>Przespolewski Przemys\u0142aw;</li>\r\n\t\t\t\t\t<li>Rosi\u0144ska Zuzanna;</li>\r\n\r\n\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tLXIV Witkiewicz Oberschule,\r\n\t\t\t\t\tStr. Elbl\u0105ska 51, 01-737 Warszawa; 1. Klasse, \r\n\t\t\t\t\tFachbereich: Allgemeinbildung; Klassenlehrer: Daniel Zych:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\r\n\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n\t\t\t\t\t<li>Dr\u0105gowska Katarzyna;</li>\r\n\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n\t\t\t\t\t<li>G\u0142owacki Jan;</li>\r\n\t\t\t\t\t<li>Grad Pawe\u0142;</li>\r\n\r\n\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n\t\t\t\t\t<li>K\u0142os Aneta;</li>\r\n\t\t\t\t\t<li>Kozie\u0142 Barbara;</li>\r\n\t\t\t\t\t<li>Koz\u0142owska Anna;</li>\r\n\t\t\t\t\t<li>Krug Pamela;</li>\r\n\r\n\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n\t\t\t\t\t<li>Luba\u015b Micha\u0142;</li>\r\n\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n\t\t\t\t\t<li>Modelska Marta;</li>\r\n\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n\r\n\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n\t\t\t\t\t<li>Pielat Zofia;</li>\r\n\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n\t\t\t\t\t<li>Rosa Karolina;</li>\r\n\r\n\t\t\t\t\t<li>Smyczy\u0144ska Kamila;</li>\r\n\t\t\t\t\t<li>Stoli\u0144ska Barbara;</li>\r\n\t\t\t\t\t<li>Szyma\u0144ska Katarzyna;</li>\r\n\t\t\t\t\t<li>\u015acibior Ewa;</li>\r\n\t\t\t\t\t<li>Witczak Magda;</li>\r\n\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n\r\n\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n\t\t\t\t\t<li>Zi\u00f3\u0142kowska Adrianna.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t </li>\r\n\t </ol>\r\n", - "left_column_es": "<h2>Voluntariado</h2>\r\n\r\n\t<p>\r\n\r\n\t\tBiograf\u00edas de escritores y definiciones de las \u00e9pocas y g\u00e9neros literarios en la biblioteca virtual de Wolne Lektury fueron escritas por estudiantes de cuatro escuelas durante los talleres \u201cVoluntariado para el conocimiento\u201d. </p>\r\n\r\n\r\n\r\n\t<p>\r\n\r\n\t\tLos estudiantes trabajaron juntos bajo la supervisi\u00f3n de profesores y especialistas-fil\u00f3logos en\r\n\r\n\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n\r\n\r\n\r\n\t\t\tla plataforma virtual wiki </a>\r\n\r\n\t\tpreparada por el equipo\r\n\r\n\t\t<a href=\"http://2ia.pl/\">2ia</a>. Gracias a este trabajo los estudiantes aprendieron a usar los ordenadores e internet para encontrar informaciones y verificar si se les puede confiar.\t</p>\r\n\r\n\r\n\r\n\t<p>\r\n\r\n\t\tEl proyecto \"Voluntariado para el conocimiento\" se pudo realizar gracias al apoyo del\t\t<a href=\"http://www.menis.gov.pl/\">\r\n\r\n\t\t\tMinisterio de la Educaci\u00f3n Nacional</a>. Los premios para los estudiantes fueron fundados por\r\n\r\n\t\t<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n\r\n\r\n\r\n\t\t\tEditorial Nasza Ksi\u0119garnia</a>\r\n\r\n\t\ty\r\n\r\n\t\t<a href=\"http://helion.pl/\">Editorial Helion</a>. Las notas fueron verificadas en la p\u00e1gina\r\n\r\n\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n\r\n\t\t\tPlagiat.pl</a>.\r\n\r\n\t</p>\r\n\r\n\r\n\r\n\t<p>\r\n\r\n\t\t<a href=\"/static/wolontariat.pdf\"> El informe de la realizaci\u00f3n del proyecto \u201cVoluntariado para el conocimiento\u201d</a>.\r\n\r\n\t</p>\r\n\r\n\r\n\r\n\t<p>\r\n\r\n\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />\r\n\r\n\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n\r\n\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n\r\n <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />\r\n\r\n <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />\r\n\r\n\t</p>", - "left_column_en": "<h2>Volunteers</h2>\r\n\t<p>Writers' biographical entries as well as periods' and genres'\r\ndefinitions placed on web library Wolne Lektury were written by students from four schools during \"Wolontariat dla wiedzy\" (\"Volunteering for knowledge\") workshops. </p> <p>\r\n The students worked together under the factual guidance of teachers and specialists - literary scholars<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n\r\n\ton wiki platform</a>\r\n prepared by <a href=\"http://2ia.pl/\">2ia</a> team. At the same time the students learnt how to use a computer and the Internet while searching for necessary information how to verify the credibility of the source. </p>\r\n\r\n<p>\r\n\"Wolontariat dla wiedzy\" project was realised thanks to the support of <a href=\"http://www.menis.gov.pl/\">\r\nMinisterstwo Edukacji Narodowej</a>. The rewards for the student were funded by<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n\r\nWydawnictwo Nasza Ksi\u0119garnia</a>\r\nand<a href=\"http://helion.pl/\">Wydawnictwo Helion</a>. Each entry was verified on <a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\nPlagiat.pl</a> website.\r\n</p>\r\n\r\n<p>\r\n\t\t<a href=\"/static/wolontariat.pdf\">Report on completion of \"Wolontariat dla wiedzy\" project (PL)</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />\r\n\t</p>", - "right_column_fr": "\t<h2>Auteurs</h2>\r\n\r\n\t<ol>\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tColl\u00e8ge no. 40 avec classes d'int\u00e9gration dans l'Ensemble Scolaire no. 69 de Armia Krajowa Grupa Bojowa \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; classe seconde sous la supervision de\r\n\tAnna Budziarek-Friedrich:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Burdon Filip;</li>\r\n\r\n\t\t\t\t<li>D\u0119bski Bartek;</li>\r\n\t\t\t\t<li>Jackowicz Kamil;</li>\r\n\t\t\t\t<li>Kurek Pawe\u0142;</li>\r\n\t\t\t\t<li>Makles Bartosz;</li>\r\n\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n\t\t\t\t<li>Migda\u0142 Katarzyna;</li>\r\n\r\n\t\t\t\t<li>Mioduszewski Micha\u0142;</li>\r\n\t\t\t\t<li>Pfeiffer Ida;</li>\r\n\t\t\t\t<li>P\u0142askowicka Karolina;</li>\r\n\t\t\t\t<li>Sailer Ewa.</li>\r\n\t\t\t</ul>\r\n\t\t</li>\r\n\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tXXXIII Lyc\u00e9e g\u00e9n\u00e9ral de Miko\u0142aj Kopernik,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; classe premi\u00e8re, orientation biologie-chimique\r\n sous la supervision de El\u017cbieta Konkowska:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Chwil Bart\u0142omiej;</li>\r\n\t\t\t\t<li>Czarnecka Natalia;</li>\r\n\t\t\t\t<li>Gawro\u0144ska Iga;</li>\r\n\r\n\t\t\t\t<li>Grabarczyk Marta;</li>\r\n\t\t\t\t<li>Jastrz\u0105b Katarzyna;</li>\r\n\t\t\t\t<li>Krawczak Olga;</li>\r\n\t\t\t\t<li>Krawczyk Marianna;</li>\r\n\t\t\t\t<li>Kur Natalia;</li>\r\n\t\t\t\t<li>Kwiatek Marta;</li>\r\n\r\n\t\t\t\t<li>La\u015bkiewicz Joanna;</li>\r\n\t\t\t\t<li>Machczy\u0144ska Daria;</li>\r\n\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n\t\t\t\t<li>Moczulska Karolina;</li>\r\n\t\t\t\t<li>Mo\u015bcicka Aneta;</li>\r\n\t\t\t\t<li>Narloch Sabina;</li>\r\n\r\n\t\t\t\t<li>Przybysz Pawe\u0142;</li>\r\n\t\t\t\t<li>Puchta Marek;</li>\r\n\t\t\t\t<li>Ryska Cezary;</li>\r\n\t\t\t\t<li>Sandomierski Bart\u0142omiej;</li>\r\n\t\t\t\t<li>S\u0142awi\u0144ski Tomasz;</li>\r\n\t\t\t\t<li>S\u0142owik Olga;</li>\r\n\r\n\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n\t\t\t\t<li>Strzelczak Karolina;</li>\r\n\t\t\t\t<li>Szafran Danuta;</li>\r\n\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n\t\t\t\t<li>Szulkowska Alicja;</li>\r\n\t\t\t\t<li>\u015alusarczyk Anna;</li>\r\n\r\n\t\t\t\t<li>Tytkowska Anna.</li>\r\n\t\t\t</ul>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tLyc\u00e9e priv\u00e9 g\u00e9n\u00e9ral no. 42, ul. Iwicka 47 B, 00-735 Warszawa; classe premi\u00e8re, orientation g\u00e9n\u00e9rale, sous la supervision de Micha\u0142 Friedrich:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n\r\n\t\t\t\t\t<li>Go\u0142aszewska Ewa;</li>\r\n\t\t\t\t\t<li>Kwiatkowski Micha\u0142;</li>\r\n\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n\t\t\t\t\t<li>Przespolewski Przemys\u0142aw;</li>\r\n\t\t\t\t\t<li>Rosi\u0144ska Zuzanna;</li>\r\n\r\n\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tLXIV Lyc\u00e9e g\u00e9n\u00e9ral de St. I. Witkiewicz,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; classe premi\u00e8re, orientation g\u00e9n\u00e9rale, sous la supervision de Daniel Zych:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\r\n\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n\t\t\t\t\t<li>Dr\u0105gowska Katarzyna;</li>\r\n\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n\t\t\t\t\t<li>G\u0142owacki Jan;</li>\r\n\t\t\t\t\t<li>Grad Pawe\u0142;</li>\r\n\r\n\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n\t\t\t\t\t<li>K\u0142os Aneta;</li>\r\n\t\t\t\t\t<li>Kozie\u0142 Barbara;</li>\r\n\t\t\t\t\t<li>Koz\u0142owska Anna;</li>\r\n\t\t\t\t\t<li>Krug Pamela;</li>\r\n\r\n\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n\t\t\t\t\t<li>Luba\u015b Micha\u0142;</li>\r\n\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n\t\t\t\t\t<li>Modelska Marta;</li>\r\n\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n\r\n\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n\t\t\t\t\t<li>Pielat Zofia;</li>\r\n\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n\t\t\t\t\t<li>Rosa Karolina;</li>\r\n\r\n\t\t\t\t\t<li>Smyczy\u0144ska Kamila;</li>\r\n\t\t\t\t\t<li>Stoli\u0144ska Barbara;</li>\r\n\t\t\t\t\t<li>Szyma\u0144ska Katarzyna;</li>\r\n\t\t\t\t\t<li>\u015acibior Ewa;</li>\r\n\t\t\t\t\t<li>Witczak Magda;</li>\r\n\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n\r\n\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n\t\t\t\t\t<li>Zi\u00f3\u0142kowska Adrianna.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t </li>\r\n\t </ol>\r\n", - "title_ru": "\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0437\u043d\u0430\u043d\u0438\u0439", - "title_it": null - } - }, - { - "pk": 3, - "model": "infopages.infopage", - "fields": { - "title_de": "\u00dcber das Projekt", - "left_column_uk": "\ufeff{% load reporting_stats %}\r\n\r\n<p><strong>Wolne Lektury \u0446\u0435 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0430 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0430 24 \u0433\u043e\u0434\u0438\u043d\u0438 \u043d\u0430 \u0434\u043e\u0431\u0443, 365 \u0434\u043d\u0456\u0432 \u0432 \u0440\u043e\u0446\u0456 \u0456 \u043f\u043e\u0432\u043d\u0456\u0441\u0442\u044e \u0431\u0435\u0437\u043a\u043e\u0448\u0442\u043e\u0432\u043d\u0430</strong>. \u0412 \u0457\u0457 \u043a\u043e\u043b\u0435\u043a\u0446\u0456\u0457 \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f <strong>{% count_books %}</strong> \u0442\u0432\u043e\u0440\u0456\u0432, \u0432 \u0442\u043e\u043c\u0443 \u0447\u0438\u0441\u043b\u0456 \u0431\u0430\u0433\u0430\u0442\u043e \u0448\u043a\u0456\u043b\u044c\u043d\u043e\u0457 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0438, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043e\u0457 \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u043e\u043c \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u043e\u0441\u0432\u0456\u0442\u0438, \u044f\u043a\u0430 \u0443\u0432\u0456\u0439\u0448\u043b\u0430 \u0432\u0436\u0435 \u0434\u043e \u0441\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0434\u0431\u0430\u043d\u043d\u044f. \u0423\u0441\u0456 \u0442\u0432\u043e\u0440\u0438 \u0441\u0442\u0430\u0440\u0430\u043d\u043d\u043e \u043e\u043f\u0440\u0430\u0446\u044c\u043e\u0432\u0430\u043d\u0456 - \u0434\u043e \u043d\u0438\u0445 \u0434\u043e\u0434\u0430\u044e\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043c\u0456\u0442\u043a\u0438, \u043c\u043e\u0442\u0438\u0432\u0438 \u0456 \u043d\u0430\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u0432 \u0434\u0435\u043a\u0456\u043b\u044c\u043a\u043e\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 - <strong>HTML </strong>, <strong>TXT </strong>, <strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>. \u0423 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 \u043c\u043e\u0436\u043d\u0430 \u0442\u0430\u043a\u043e\u0436 \u0437\u043d\u0430\u0439\u0442\u0438 \u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u043e\u0442\u0435\u043d\u044c \u0430\u0443\u0434\u0456\u043e\u043a\u043d\u0438\u0433 \u0443 \u0432\u0438\u043a\u043e\u043d\u0430\u043d\u043d\u0456 \u0442\u0430\u043a\u0438\u0445 \u0430\u0432\u0442\u043e\u0440\u0456\u0432 \u044f\u043a: \u0414\u0430\u043d\u0443\u0442\u0430 \u0421\u0442\u0435\u043d\u043a\u0430, \u042f\u043d \u041f\u0435\u0448\u0435\u043a \u0447\u0438 \u0410\u043d\u0434\u0436\u0435\u0439 \u0425\u0438\u0440\u0430. \u041c\u043e\u0436\u043d\u0430 \u0457\u0445 \u0441\u043b\u0443\u0445\u0430\u0442\u0438 \u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 <strong>MP3</strong> i <strong>Ogg Vorbis</strong>. \u0410\u0443\u0434\u0456\u043e\u043a\u043d\u0438\u0433\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0456 \u0442\u0430\u043a\u043e\u0436 \u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0456 <strong>DAISY </strong>, \u044f\u043a\u0438\u0439 \u043f\u0440\u0438\u0441\u0442\u043e\u0441\u043e\u0432\u0430\u043d\u0438\u0439 \u0434\u043b\u044f \u0441\u043b\u0430\u0431\u043e\u0437\u043e\u0440\u0438\u0445 \u0442\u0430 \u0441\u043b\u0456\u043f\u0438\u0445 \u043e\u0441\u0456\u0431, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0434\u043b\u044f \u0442\u0438\u0445, \u0445\u0442\u043e \u043c\u0430\u0454 \u0442\u0440\u0443\u0434\u043d\u043e\u0449\u0456 \u0437 \u0447\u0438\u0442\u0430\u043d\u043d\u044f\u043c.</p>\r\n\r\n<p>\u0411\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0430 Wolne Lektury \u0442\u0430\u043a\u043e\u0436 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0438\u0445 \u0430\u043f\u043b\u0456\u043a\u0430\u0446\u0456\u0439 \u2013 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0456 <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\">Android</a>, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0456 iOS.</p>\r\n\r\n<p><strong>\u0423\u0441\u0456 \u0442\u0432\u043e\u0440\u0438 \u0440\u043e\u0437\u043c\u0456\u0449\u0435\u043d\u0456 \u0443 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 Wolne Lektury \u043c\u043e\u0436\u043d\u0430 \u043b\u0435\u0433\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0430\u0442\u0438, \u0441\u043b\u0443\u0445\u0430\u0442\u0438, \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0443\u0432\u0430\u0442\u0438 \u043d\u0430 \u0432\u043b\u0430\u0441\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u2019\u044e\u0442\u0435\u0440, \u043d\u0430\u0434\u0430\u0432\u0430\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u043d\u0438\u0445 \u0456\u043d\u0448\u0438\u043c \u0442\u0430 \u0446\u0438\u0442\u0443\u0432\u0430\u0442\u0438.</strong></p>\r\n", - "main_page": 1, - "right_column_pl": "<p>Wolne Lektury to projekt fundacji Nowoczesna Polska realizowany pro publico bono, we wsp\u00f3\u0142pracy z Bibliotek\u0105 Narodow\u0105, Bibliotek\u0105 \u015alask\u0105 oraz Bibliotek\u0105 Elbl\u0105sk\u0105 pod patronatem Ministerstwa Edukacji Narodowej, Ministerstwa Kultury i Dziedzictwa Narodowego oraz Stowarzyszenia Pisarzy Polskich. W Komitecie Honorowym Wolnych Lektur zasiadaj\u0105: prof. Maria Janion, prof. Gra\u017cyna Borkowska, prof. Przemys\u0142aw Czapli\u0144ski, prof. Mieczys\u0142aw D\u0105browski, prof. Ewa Kraskowska, prof. Ma\u0142gorzata Czermi\u0144ska, prof. Jerzy Jarz\u0119bski i prof. Piotr \u015aliwi\u0144ski.</p>\r\n\r\n<p>Wi\u0119kszo\u015b\u0107 utwor\u00f3w w bibliotece nie jest chroniona prawem autorskim i znajduje si\u0119 w domenie publicznej, co oznacza \u017ce mo\u017cna je swobodnie publikowa\u0107 i rozpowszechnia\u0107. Je\u015bli utw\u00f3r opatrzony jest dodatkowymi materia\u0142ami (przypisy, motywy literackie etc.), kt\u00f3re podlegaj\u0105 prawu autorskiemu, to te dodatkowe materia\u0142y udost\u0119pnione s\u0105 na licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>. Publikujemy r\u00f3wnie\u017c kilka utwor\u00f3w, kt\u00f3re autorzy lub spadkobiercy praw udost\u0119pnili na wolnej licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>.</p>\r\n\r\nKontakt: wolnelektury@nowoczesnapolska.org.pl", - "right_column_lt": "\ufeff\r\n<p>Wolne Lektury - tai fondo \u0160iuolaikin\u0117 Lenkija \u012fgyvendinamas pro publico bono projektas, bendradarbiaujant su Nacionaline biblioteka, Silezijos biblioteka bei Elbingo biblioteka ir remiamas Nacionalinio \u0161vietimo ministerijos, Kult\u016bros ir nacionalinio paveldo ministerijos bei Lenkijos ra\u0161ytoj\u0173 asociacijos. Wolne Lektury Garb\u0117s komiteto nariai: prof. Maria Janion, prof. Gra\u017cyna Borkowska, prof. Przemys\u0142aw Czapli\u0144ski, prof. Mieczys\u0142aw D\u0105browski, prof. Ewa Kraskowska, prof. Ma\u0142gorzata Czermi\u0144ska, prof. Jerzy Jarz\u0119bski ir prof. Piotr \u015aliwi\u0144ski.</p>\r\n\r\n<p>Dauguma \u0161ios bibliotekos k\u016brini\u0173 n\u0117ra autorini\u0173 teisi\u0173 saugomi ir yra vie\u0161ai prieinami, tai rei\u0161kia, kad gali b\u016bti laisvai naudojami bei platinami. Jei su k\u016briniu yra pateikiamos bet kokios papildomos autorini\u0173 teisi\u0173 saugomos med\u017eiagos (kaip pastabos, motyvai ir t.t.), tai \u0161ios med\u017eiagos yra prieinamos pagal licencj\u0105 <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Autoryst\u0117s pripa\u017einimas \u2013 pagal tas pa\u010dias s\u0105lygas 3.0</a>. Publikuojami taip pat keli k\u016briniai, autori\u0173 ir teisi\u0173 \u012fp\u0117dini\u0173 pateikti pagal laisv\u0105 licencij\u0105 <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Autoryst\u0117s pripa\u017einimas \u2013 pagal tas pa\u010dias s\u0105lygas 3.0</a>.</p>\r\n\r\nKontaktas: wolnelektury@nowoczesnapolska.org.pl\r\n\r\n", - "left_column_lt": "\ufeff{% load reporting_stats %}\r\n\t\r\n<p><strong>Wolne Lektury tai visi\u0161kai nemokama internetin\u0117 biblioteka dirbanti 24 valandas per par\u0105, 365 dienas per metus</strong>. Jos rinkinyje yra <strong>{% count_books %}</strong> k\u016brinys/iai/i\u0173, tarp j\u0173 daug privalomos literat\u016bros knyg\u0173 Lenkijos Nacionalinio \u0161vietimo ministerijos (MEN) rekomenduojam\u0173, kurios jau yra vie\u0161ai prieinamos. Visi k\u016briniai yra tinkamai apra\u0161yti (pateikiamos i\u0161na\u0161os, motyvai) ir prieinami keliais formatais - <strong>HTML </strong>, <strong>TXT </strong>, <strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>. Bibliotekoje yra keli \u0161imtai audio knyg\u0173, aktori\u0173, toki\u0173 kaip Danuta Stenka, Jan Peszek bei Andrzej Chyra, skaitom\u0173. Galima jas klausytis <strong>MP3</strong> ir <strong>Ogg Vorbis</strong> formatais. Audio knygos yra taip pat prieinamos <strong>DAISY </strong> formatu, silpno reg\u0117jimo \u017emon\u0117ms, akliesiems bei skaitymo problem\u0173 turintiems \u017emon\u0117ms pritaikomu.</p>\r\n\r\n<p> Biblioteka Wolne Lektury yra prieinama naudojant mobili\u0105sias programas skirtas operacinei sistemai <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\"> Android</a> bei sistemai iOS. </p>\r\n\r\n\r\n<p><strong>Visus internetin\u0117je bibliotekoje Wolne Lektury esan\u010dius k\u016brinius galima pagal teis\u0119 nemokamai per\u017ei\u016br\u0117ti, klausytis, atsisi\u0173sti bei bendrinti kitiems ir cituoti. </strong> </p>\r\n\r\n\t\r\n", - "title_fr": "Sur le projet", - "right_column_ru": "\ufeff<p>Wolne Lektury \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c pro publico bono \u0424\u043e\u043d\u0434\u0430 Nowoczesna Polska. \u041c\u044b \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u043c \u0441 \u041d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439, \u0421\u0438\u043b\u0435\u0437\u0441\u043a\u043e\u0439 \u0411\u0438\u0431\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0430 \u0442\u0430\u043a\u0436\u0435 \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0433\u043e\u0440\u043e\u0434\u0430 \u0415\u043b\u044c\u0431\u043b\u043e\u043d\u0433\u0430. \u041f\u043e\u0434 \u044d\u0433\u0438\u0434\u043e\u0439 \u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u044b \u0438 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u041e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u0439. \u0412 \u041f\u043e\u0447\u0435\u0442\u043d\u043e\u043c \u043a\u043e\u043c\u0438\u0442\u0435\u0442\u0435 \u0444\u043e\u043d\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f: \u043f\u0440\u043e\u0444. \u041c\u0430\u0440\u0438\u044f \u042f\u043d\u0435\u043d, \u043f\u0440\u043e\u0444. \u0413\u0440\u0430\u0436\u0438\u043d\u0430 \u0411\u043e\u0440\u043a\u043e\u0432\u0441\u043a\u0430, \u043f\u0440\u043e\u0444. \u041f\u0448\u0435\u043c\u044b\u0441\u043b\u0430\u0432 \u0427\u0430\u043f\u043b\u0438\u043d\u044c\u0441\u043a\u0438, \u043f\u0440\u043e\u0444. \u041c\u0435\u0447\u044b\u0441\u043b\u0430\u0432 \u0414\u043e\u043c\u0431\u0440\u043e\u0432\u0441\u043a\u0438, \u043f\u0440\u043e\u0444. \u0415\u0432\u0430 \u041a\u0440\u0430\u0441\u043a\u043e\u0432\u0441\u043a\u0430, \u043f\u0440\u043e\u0444. \u041c\u0430\u043b\u0433\u043e\u0436\u0430\u0442\u0430 \u0427\u0435\u0440\u043c\u0438\u043d\u044c\u0441\u043a\u0430, \u043f\u0440\u043e\u0444. \u0415\u0436\u0438 \u042f\u0436\u0435\u043c\u0431\u0441\u043a\u0438, \u043f\u0440\u043e\u0444. \u041f\u0435\u0442\u0440 \u0421\u043b\u0438\u0432\u0438\u043d\u044c\u0441\u043a\u0438.</p>\r\n\r\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043a\u043e\u043d\u043e\u043c \u043e\u0431 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432\u0430\u0445 \u0438 \u043e\u043d\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u043a \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u0434\u043e\u043c\u0435\u043d\u0443. \r\n\u0418\u0445 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043d\u0438\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b (\u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f, \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0435 \u043c\u043e\u0442\u0438\u0432\u044b, \u0438 \u0442.\u0434.), \r\n\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.ru\">\r\n \u041f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 - 3.0</a>. \r\n\u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043e\u0442 \u0441\u0430\u043c\u044b\u0445 \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u0438\u043b\u0438 \u0438\u0445 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043f\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0435\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439. <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.ru\">\u041f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 3.0</a>.</p>\r\n\r\n\u041a\u043e\u043d\u0442\u0430\u043a\u0442: : wolnelektury@nowoczesnapolska.org.pl\r\n", - "left_column_fr": "{% load reporting_stats %}\r\n\r\n<p><strong>Wolne Lektury (Lectures Libres) c'est une biblioth\u00e8que en ligne ouverte 24 heures sur 24, 365 jours par an et compl\u00e8tement gratuite</strong>. Dans la collection de la biblioth\u00e8que il y a <strong>{% count_books %}</strong> ouvrages, y compris beaucoup de lectures scolaires recommand\u00e9es par le Minist\u00e8re de l'\u00c9ducation nationale polonais et appartenant d\u00e9j\u00e0 au domaine public. Tous les ouvrages sont convenablement r\u00e9dig\u00e9s; ils sont accompagn\u00e9s de plusieurs annotations et motifs litt\u00e9raires et sont accessibles aux quelques formats: <strong>HTML </strong>, <strong>TXT </strong>, <strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>. Dans la biblioth\u00e8que il y a aussi quelques centaines de livres audio lus par les acteurs connus comme, par exemple: Danuta Stenka, Jan Peszek ou Andrzej Chyra. On peut les \u00e9couter aux formats: <strong>MP3</strong> et <strong>Ogg Vorbis</strong>. Les livres audio sont aussi accessibles au format <strong>DAISY </strong>appropri\u00e9 \u00e0 des non voyants et \u00e0 des malvoyants et \u00e0 des personnes qui ont des difficult\u00e9s \u00e0 lire.</p>\r\n\r\n<p>La biblioth\u00e8que Wolne Lektury est accessible par l'interm\u00e9diaire des applications mobiles sur le syst\u00e8me <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\"> Android</a> et sur le syst\u00e8me iOS. </p>\r\n\r\n<p><strong>Tous les ouvrages publi\u00e9s sur le site de la biblioth\u00e8que Wolne Lektury peuvent \u00eatre - conform\u00e9ment \u00e0 la loi polonaise - feuillet\u00e9s, \u00e9cout\u00e9s et t\u00e9l\u00e9charg\u00e9s sur votre ordinateur gratuitement. Il est aussi permis de les rendre accessibles \u00e0 d'autres personnes et de les citer.</strong> </p>\r\n", - "title": "About the project", - "title_lt": "\ufeffApie projekt\u0105", - "right_column": "<p>Wolne Lektury is a pro bono project developed by the Modern Poland Foundation in cooperation with Polish libraries \u2013 the National Library, the Library of Silesia and the Library of Elbl\u0105g, under the Ministry of Culture and National Heritage and the Assocciation of Polish Writers auspices. The honorary committee members are: Prof. Maria Janion, Prof. Gra\u017cyna Borkowska, Prof. Przemys\u0142aw Czapli\u0144ski, Prof. Mieczys\u0142aw D\u0105browski, Prof. Ewa Kraskowska, Prof. Ma\u0142gorzata Czermi\u0144ska, Prof. Jerzy Jarz\u0119bski and Prof. Piotr \u015aliwi\u0144ski.</p>\r\n\r\n<p>The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Creative Commons Attribution-ShareAlike</a>. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Creative Commons Attribution-ShareAlike</a>.</p>\r\n\r\nContact: wolnelektury@nowoczesnapolska.org.pl", - "right_column_es": "<p>Wolne Lektury es un proyecto creado por la Fundaci\u00f3n Polonia Moderna, realizado pro publico bono en colaboraci\u00f3n con la Biblioteca Nacional, la Biblioteca de Silesia y la Biblioteca de Elblag bajo los auspicios del Ministerio de Cultura y Patrimonio Nacional y la Adociaci\u00f3n de Escritores Polacos. El Comit\u00e9 de Honor de Wolne Lektury re\u00fane a los profesores: Maria Janion, Gra\u017cyna Borkowska, Przemys\u0142aw Czapli\u0144ski, Mieczys\u0142aw D\u0105browski, Ewa Kraskowska, Ma\u0142gorzata Czermi\u0144ska, Jerzy Jarz\u0119bski y Piotr \u015aliwi\u0144ski.</p>\r\n\r\n</p>La mayor\u00eda de los textos de la Biblioteca est\u00e1n libres de derechos de autor y son de dominio p\u00fablico, por lo tanto se pueden publicar y difundir libremente. Si un texto tiene materiales adicionales (notas a pie de p\u00e1gina, temas literarios, etc.), que no est\u00e9n libres de derechos de autor, dichos materiales est\u00e1n publicados bajo la licencia <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.es\">Reconocimiento-Compartir bajo la misma licencia 3.0</a>.Tambi\u00e9n publicamos algunos textos legados a el dominio p\u00fablico por los autores o heredores bajo la licencia <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.es\">Reconocimiento-Compartir bajo la misma licencia 3.0</a>.</p>\r\n\r\nContacto: wolnelektury@nowoczesnapolska.org.pl \r\n", - "right_column_en": "<p>Wolne Lektury is a pro bono project developed by the Modern Poland Foundation in cooperation with Polish libraries \u2013 the National Library, the Library of Silesia and the Library of Elbl\u0105g, under the Ministry of Culture and National Heritage and the Assocciation of Polish Writers auspices. The honorary committee members are: Prof. Maria Janion, Prof. Gra\u017cyna Borkowska, Prof. Przemys\u0142aw Czapli\u0144ski, Prof. Mieczys\u0142aw D\u0105browski, Prof. Ewa Kraskowska, Prof. Ma\u0142gorzata Czermi\u0144ska, Prof. Jerzy Jarz\u0119bski and Prof. Piotr \u015aliwi\u0144ski.</p>\r\n\r\n<p>The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Creative Commons Attribution-ShareAlike</a>. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Creative Commons Attribution-ShareAlike</a>.</p>\r\n\r\nContact: wolnelektury@nowoczesnapolska.org.pl", - "left_column_de": "{% load reporting_stats %}\r\n\r\n<p><strong>Wolne Lektury ist eine Internetbibliothek, die 24 Stunden zug\u00e4nglich ist, 365 Tage im Jahr, dazu v\u00f6llig kostenlos</strong>. Sie beinh\u00e4lt <strong>{% count_books %}</strong> Werke, darunter viele Schullekt\u00fcren, die durch das polnische Bildungsministerium empfohlen werden und die zur Gemeinfreiheit geh\u00f6ren. Alle Werke werden entsprechend bearbeitet - mit Fu\u00dfnoten und Motiven versehen sowie in verschiedenen Formaten zug\u00e4nglich - <strong>HTML </strong>, <strong>TXT</strong>, <strong>PDF</strong>, <strong>EPUB</strong>, <strong>MOBI</strong>. In der Bibliothek befinden sich auch einige hundert von H\u00f6rb\u00fcchern, die von bekannten polnischen Schauspielern wie Danuta Stenka, Jan Peszek oder Andrzej Chyra vorgelesen werden. Es ist m\u00f6glich sie in folgenden Formaten abzuspielen: <strong>MP3</strong> und <strong>Ogg Vorbis</strong>. H\u00f6rb\u00fccher sind auch im Format <strong>DAISY </strong> zug\u00e4nglich, die f\u00fcr Bed\u00fcrfnisse von Schwachsehenden, Blinden und Personen mit Lesenschwierigkeiten geeignet sind.</p>\r\n\r\n<p>Wolne Lektury-Bibliothek ist auch f\u00fcr Nutzer der mobilen Ger\u00e4te zug\u00e4nglich \u0096 f\u00fcr das System <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\"> Android</a> und f\u00fcr das System iOS. zug\u00e4nglich </p>\r\n\r\n<p><strong>Alle in der Wolne Lektury-Bibliothek ver\u00f6ffentlichten Werke kann man rechtsm\u00e4\u00dfig kostenlos durchsehen, h\u00f6ren, auf eigenen Computer herunterladen; \u00fcberdies ist ihre Weitervermittlung und Anf\u00fchrung erlaubt.</strong> </p>", - "title_uk": "\ufeff\u041f\u0440\u043e \u043f\u0440\u043e\u0435\u043a\u0442", - "right_column_it": "<p>Wolne Lektury \u00e8 un progetto della fondazione Polonia Moderna realizzato pro bono publico in collaborazione con la Biblioteca Nazionale, la Biblioteca Silesiana e la Biblioteca di Elbl\u0105g sotto gli auspici del Ministero dell\u2019Istruzione, Ministero della Cultura, del Patrimonio Nazionale e dell\u2019Associazione degli Scrittori Polacchi. Nel Comitato d\u2019Onore delle Letture Libere ci sono: prof. Maria Janion, prof. Gra\u017cyna Borkowska, prof. Przemys\u0142aw Czapli\u0144ski, prof. Mieczys\u0142aw D\u0105browski, prof. Ewa Kraskowska, prof. Ma\u0142gorzata Czermi\u0144ska, prof. Jerzy Jarz\u0119bski e prof. Piotr \u015aliwi\u0144ski.</p>\r\n\r\n<p>La maggior parte delle opere nella biblioteca non \u00e8 protetta dal diritto d\u2019autore ed \u00e8 di dominio pubblico, il che significa che si pu\u00f2 pubblicare e distribuire le opere liberamente. Se l\u2019opera viene apposta dai materiali aggiuntivi (dalle note, dai motivi letterari ecc) che sono protetti dal copyright, questi materiali sono disponibili sulla licenza di\r\n<ahref=\"http://creativecommons.org/licenses/by-sa/3.0/deed.it\">L'attribuzione si svolge nelle stesse condizioni 3.0</a>. Pubblichiamo anche le opere che sono rese accessibili dagli autori o eredi legittimi <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.it\">L'attribuzione si svolge alle stesse condizioni 3.0</a>.</p>\r\n\r\nContatti: wolnelektury@nowoczesnapolska.org.pl\r\n\r\n", - "title_pl": "O projekcie", - "left_column": "{% load reporting_stats %}\r\n\r\n<p><strong>Wolne Lektury is a free online library open 24 hours a day, 365 days a year</strong>. It archives books<strong>{% count_books %}</strong>, including set readings recommended by the Ministry of National Education which have already fallen in the public domain. All the texts are adequately edited - annotated with footnotes and motifs - and are available in several formats - <strong>HTML </strong>, <strong>TXT </strong>, <strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>. The library also contains a few hundred audiobooks read by famous actors like: Danuta Stenka, Jan Peszek or Andrzej Chyra. The audiobooks can be used in <strong>MP3</strong> and <strong>Ogg Vorbis</strong> formats. They are also available in <strong>DAISY </strong>format suiting the needs of people with poor vision, the blind, and those having reading difficulties.</p>\r\n\r\n<p>The Wolne Lektury library is available through digital applications - in <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\"> Android</a> and iOS systems. </p>\r\n\r\n<p><strong>You are allowed to browse, listen to, and download all the items in Wolne Lektury, as well as share and cite them, entirely free of charge.</strong> </p>", - "right_column_uk": "\ufeff<p>Wolne Lektury \u0446\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0424\u043e\u043d\u0434\u0443 \u0421\u0443\u0447\u0430\u0441\u043d\u0430 \u041f\u043e\u043b\u044c\u0449\u0430 (Fundacja Nowoczesna Polska), \u0440\u0435\u0430\u043b\u0456\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0437 \u043d\u0435\u043a\u043e\u043c\u0435\u0440\u0446\u0456\u0439\u043d\u043e\u044e \u043c\u0435\u0442\u043e\u044e, \u0443 \u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u0456 \u0437 \u041d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u044e \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u044e, \u0421\u0456\u043b\u0435\u0437\u044c\u043a\u043e\u044e \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u044e \u0442\u0430 \u0415\u043b\u044c\u0431\u043b\u043e\u043d\u0437\u044c\u043a\u043e\u044e \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u044e \u043f\u0456\u0434 \u043f\u0430\u0442\u0440\u043e\u043d\u0430\u0442\u043e\u043c \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u043e\u0441\u0432\u0456\u0442\u0438, \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0438 \u0442\u0430 \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u0441\u043f\u0430\u0434\u0449\u0438\u043d\u0438, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0421\u043f\u0456\u043b\u043a\u0438 \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u0438\u0445 \u043f\u0438\u0441\u044c\u043c\u0435\u043d\u043d\u0438\u043a\u0456\u0432. \u0412 \u041f\u043e\u0447\u0435\u0441\u043d\u043e\u043c\u0443 \u043a\u043e\u043c\u0456\u0442\u0435\u0442\u0456 \u043f\u0440\u043e\u0435\u043a\u0442\u0443 Wolne Lektury \u0437\u0430\u0441\u0456\u0434\u0430\u044e\u0442\u044c \u043f\u0440\u043e\u0444. \u041c\u0430\u0440\u0456\u044f \u042f\u043d\u0456\u043e\u043d, \u043f\u0440\u043e\u0444. \u0490\u0440\u0430\u0436\u0438\u043d\u0430 \u0411\u043e\u0440\u043a\u043e\u0432\u0441\u044c\u043a\u0430, \u043f\u0440\u043e\u0444. \u041f\u0448\u0435\u043c\u0438\u0441\u043b\u0430\u0432 \u0427\u0430\u043f\u043b\u0456\u043d\u0441\u044c\u043a\u0438\u0439, \u043f\u0440\u043e\u0444. \u041c\u0454\u0447\u0438\u0441\u043b\u0430\u0432 \u0414\u043e\u043c\u0431\u0440\u043e\u0432\u0441\u044c\u043a\u0438\u0439, \u043f\u0440\u043e\u0444. \u0415\u0432\u0430 \u041a\u0440\u0430\u0441\u043a\u043e\u0432\u0441\u044c\u043a\u0430, \u043f\u0440\u043e\u0444. \u041c\u0430\u043b\u0491\u043e\u0436\u0430\u0442\u0430 \u0427\u0435\u0440\u043c\u0456\u043d\u0441\u044c\u043a\u0430, \u043f\u0440\u043e\u0444. \u0404\u0436\u0438 \u042f\u0436\u0435\u043c\u0431\u0441\u044c\u043a\u0438\u0439 \u0442\u0430 \u043f\u0440\u043e\u0444. \u041f\u0456\u043e\u0442\u0440 \u0421\u043b\u0456\u0432\u0456\u043d\u0441\u044c\u043a\u0438\u0439.</p>\r\n\r\n<p>\u0411\u0456\u043b\u044c\u0448\u0456\u0441\u0442\u044c \u0442\u0432\u043e\u0440\u0456\u0432 \u0443 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 \u043d\u0435 \u043e\u0445\u043e\u0440\u043e\u043d\u044f\u044e\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c \u0456 \u044f\u0432\u043b\u044f\u044e\u0442\u044c\u0441\u044f \u0447\u0430\u0441\u0442\u0438\u043d\u043e\u044e \u0441\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0434\u0431\u0430\u043d\u043d\u044f, \u0442\u043e\u043c\u0443 \u0457\u0445 \u043c\u043e\u0436\u043d\u0430 \u0432\u0456\u043b\u044c\u043d\u043e \u043f\u0443\u0431\u043b\u0456\u043a\u0443\u0432\u0430\u0442\u0438 \u0442\u0430 \u0440\u043e\u0437\u043f\u043e\u0432\u0441\u044e\u0434\u0436\u0443\u0432\u0430\u0442\u0438. \u042f\u043a\u0449\u043e \u0442\u0435\u043a\u0441\u0442\u0438 \u0441\u0443\u043f\u0440\u043e\u0432\u043e\u0434\u0436\u0443\u044e\u0442\u044c\u0441\u044f \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u043c\u0438 \u043c\u0430\u0442\u0435\u0440\u0456\u0430\u043b\u0430\u043c\u0438 (\u043f\u0440\u0438\u043c\u0456\u0442\u043a\u0430\u043c\u0438, \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u043c\u0438 \u043c\u043e\u0442\u0438\u0432\u0430\u043c\u0438 \u0442\u043e\u0449\u043e), \u044f\u043a\u0456 \u043e\u0445\u043e\u0440\u043e\u043d\u044f\u044e\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c, \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0446\u0438\u0445 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0456\u0430\u043b\u0456\u0432 \u043d\u0430\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u043c\u043e\u0432\u0430\u0445 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457 <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">\u0406\u0437 \u0437\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0456\u043c\u0435\u043d\u0456 \u0430\u0432\u0442\u043e\u0440\u0430 \u2013 \u041d\u0430 \u0442\u0438\u0445 \u0436\u0435 \u0443\u043c\u043e\u0432\u0430\u0445 3.0</a>. \u0422\u0430\u043a\u043e\u0436 \u043c\u0438 \u043f\u0443\u0431\u043b\u0456\u043a\u0443\u0454\u043c\u043e \u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0442\u0432\u043e\u0440\u0456\u0432, \u0434\u043e \u044f\u043a\u0438\u0445 \u0430\u0432\u0442\u043e\u0440\u0438 \u0430\u0431\u043e \u0441\u043f\u0430\u0434\u043a\u043e\u0454\u043c\u0446\u0456 \u043f\u0440\u0430\u0432 \u043d\u0430\u0434\u0430\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 \u043f\u0456\u0434\u0441\u0442\u0430\u0432\u0456 \u0432\u0456\u043b\u044c\u043d\u043e\u0457 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457 <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">\u0406\u0437 \u0437\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0456\u043c\u0435\u043d\u0456 \u0430\u0432\u0442\u043e\u0440\u0430 \u2013 \u041d\u0430 \u0442\u0438\u0445 \u0436\u0435 \u0443\u043c\u043e\u0432\u0430\u0445 3.0</a>.</p>\r\n\r\n\u041a\u043e\u043d\u0442\u0430\u043a\u0442: wolnelektury@nowoczesnapolska.org.pl\r\n", - "title_en": "About the project", - "left_column_pl": "\ufeff{% load reporting_stats %}\r\n\r\n<p><strong>Wolne Lektury to biblioteka internetowa czynna 24 godziny na dob\u0119, 365 dni w roku i ca\u0142kowicie darmowa</strong>. W jej zbiorach znajduje si\u0119 <strong>{% count_books %}</strong> utwor\u00f3w, w tym wiele lektur szkolnych zalecanych do u\u017cytku przez Ministerstwo Edukacji Narodowej, kt\u00f3re trafi\u0142y ju\u017c do domeny publicznej. Wszystkie dzie\u0142a s\u0105 odpowiednio opracowane - opatrzone przypisami, motywami i udost\u0119pnione w kilku formatach - <strong>HTML</strong>, <strong>TXT</strong>, <strong>PDF</strong>, <strong>EPUB</strong>, <strong>MOBI</strong>. W bibliotece znajduje si\u0119 r\u00f3wnie\u017c kilkaset audiobook\u00f3w, czytanych przez takich aktor\u00f3w jak: Danuta Stenka, Jan Peszek czy Andrzej Chyra. Mo\u017cna ich s\u0142ucha\u0107 w formatach <strong>MP3</strong> i <strong>Ogg Vorbis</strong>. Audiobooki s\u0105 r\u00f3wnie\u017c dost\u0119pne w formacie <strong>DAISY</strong>dostosowanym do potrzeb os\u00f3b s\u0142abowidz\u0105cych, niewidomych oraz os\u00f3b maj\u0105cych trudno\u015bci z czytaniem.</p>\r\n\r\n<p>Biblioteka Wolne Lektury dost\u0119pna jest za po\u015brednictwem aplikacji mobilnych \u2013 na system <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\">Android</a> oraz na system iOS.</p>\r\n\r\n<p><strong>Wszystkie utwory zamieszczone w bibliotece Wolne Lektury mo\u017cna zgodnie z prawem bezp\u0142atnie przegl\u0105da\u0107, s\u0142ucha\u0107, \u015bci\u0105ga\u0107 na sw\u00f3j komputer, a tak\u017ce udost\u0119pnia\u0107 innym i cytowa\u0107.</strong></p>\r\n", - "left_column_it": "{% load reporting_stats %}\r\n\r\n<p><strong>Wolne Lektury (Le letture Libere) \u00e8 una biblioteca online aperta 24 ore al giorno, 365 giorni all'anno ed \u00e8 completamente gratuita</strong>. Nella sua collezione si trovano <strong>{% count_books %}</strong> opere, tra cui molte letture scolastiche raccomandate dal Ministero dell'Istruzione polacco facenti parte del dominio pubblico. Tutte le opere sono adeguatamente elaborate \u2013 con le note, i motivi e sono disponibili in diversi formati - <strong>HTML</strong>, <strong>TXT</strong>, <strong>PDF</strong>, <strong>EPUB</strong>, <strong>MOBI</strong>. La biblioteca dispone inoltre di centinaia di libri che vengono letti da diversi attori tra cui: Danuta Stenka, Jan Peszek o Andrzej Chyra. E' possibile ascoltarli nei formati <strong>MP3</strong> e <strong>Ogg Vorbis</strong>. Gli audiolibri sono disponibili anche in formato <strong>DAISY</strong> adattato alle esigenze delle persone ipovedenti, non vedenti e che hanno difficolta con la lettura.</p>\r\n\r\n<p>La biblioteca Wolne Lektury \u00e8 disponibile tramite le applicazioni mobili \u2013 per il sistema <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\">Android</a> e il sistema iOS.</p>\r\n\r\n<p><strong>Secondo la legge tutte le opere della biblioteca Wolne Lektury possono essere gratuitamente lette, ascoltate, scaricate sul pc, quotate e rese accessibili agli altri.</strong></p>\r\n\r\n", - "title_es": "Sobre el proyecto", - "left_column_ru": "{% load reporting_stats %}\r\n\r\n<p><strong>Wolne Lektury \u044d\u0442\u043e \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u043a\u0440\u0443\u0433\u043b\u044b\u0435 \u0441\u0443\u0442\u043a\u0438, 365 \u0434\u043d\u0435\u0439 \u0432 \u0433\u043e\u0434\u0443, \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e </strong>. \u0421\u043e\u0432\u043c\u0435\u0449\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e <strong>{% count_books %}</strong> \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043c\u043d\u043e\u0433\u043e\u0435 \u0438\u0437 \u0448\u043a\u043e\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \r\n\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u043e\u043c \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \r\n\u0412\u0441\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u0438 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u043c\u0438 \u043c\u043e\u0442\u0438\u0432\u0430\u043c\u0438. \r\n\r\n\u041e\u043d\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 - <strong>HTML </strong>, <strong>TXT </strong>, <strong>PDF</strong>,<strong> EPUB</strong>, \r\n<strong>MOBI</strong>. \r\n\u0412 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u043e\u0442\u043d\u0438 \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 <strong>MP3</strong> \u0438 <strong>Ogg Vorbis</strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0438\u0442\u0430\u044e\u0442 \u0430\u043a\u0442\u0435\u0440\u044b: \u0414\u0430\u043d\u0443\u0442\u0430 \u0421\u0442\u0435\u043d\u043a\u0430, \u042f\u043d \u041f\u0435\u0448\u0435\u043a, \u0410\u043d\u0434\u0436\u0435\u0439 \u0425\u044b\u0440\u0430. \r\n\r\n\u0410\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u0430\u043a\u0436\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <strong>DAISY </strong>, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u043c \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439 \u0441 \u043f\u043b\u043e\u0445\u0438\u043c \u0437\u0440\u0435\u043d\u0438\u0435\u043c, \u043f\u043b\u043e\u0445\u043e \u0432\u0438\u0434\u044f\u0449\u0438\u0445 \u0438 \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0447\u0442\u0435\u043d\u0438\u0435\u043c.</p> \r\n\r\n\r\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Wolne Lektury \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u2013 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\"> Android</a> \u0438 iOS. </p>\r\n\r\n\r\n<p><strong>\u0412\u0441\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438\u0437 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Wolne Lektury \u043f\u043e \u0437\u0430\u043a\u043e\u043d\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c, \u0441\u043b\u0443\u0448\u0430\u0442\u044c, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u0446\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445.</strong> </p> \r\n", - "slug": "o-projekcie", - "right_column_de": "<p>Wolne Lektury ist ein pro bono Projekt der Fundation Nowoczesna Polska (Modernes Polen), in Zusammenarbeit mit der Nationalbibliothek, der Schlesischen Bibliothek und der Elblinger Bibliothek unter dem Patronat des polnischen Bildungsministeriums und des Verbandes polnischer Schrifsteller (Stowarzyszenie Pisarzy Polskich). Im Ehrenkomitee von Wolne Lektury sind Prof. Maria Janion, Prof. Gra\u017cyna Borkowska, Prof. Przemys\u0142aw Czapli\u00f1ski, Prof. Mieczys\u0142aw D\u0105browski, Prof. Ewa Kraskowska, Prof. Ma\u0142gorzata Czermi\u00f1ska, Prof. Jerzy Jarz\u00eabski und Prof. Piotr \u015aliwi\u00f1ski t\u00e4tig.</p>\r\n\r\n<p>Die Mehrheit von Bibliothekwerken steht nicht unter dem Schutz des Urheberrechts und geh\u00f6rt zu dem Gemeinfreiheitsbereich, was bedeutet, dass man sie frei ver\u00f6ffentlichen und vermitteln darf. Sollte das Werk mit zus\u00e4tzlichen Angaben versehen werden (F\u00fc\u00dfnoten und literarischen Motiven), die dem Urheberrechtsschutz unterliegen, sind diese zus\u00e4tzlichen Angaben unter der Lizenz <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\"> Urheberschaftanerkennung unter gleichen Bedigungen 3.0</a> verf\u00fcgbar. Wir ver\u00f6ffentlichen auch Werke, die Verfasser oder Rechtsnachfolger unter der freien Lizenz <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Urheberschaftanerkennung unter gleichen Bedigungen 3.0</a>.</p> herausgegeben haben. \r\n\r\nKontakt: wolnelektury@nowoczesnapolska.org.pl", - "left_column_es": "\ufeff{% load reporting_stats %}\r\n\r\n<p><strong>Wolne Lektury es una biblioteca virtual de 24 horas, 365 d\u00edas al a\u00f1o y completamente gratuita</strong>. La colecci\u00f3n consta de <strong>{% count_books %}</strong> obras, incluso muchas de lectura obligatoria recomendadas por el Ministerio de Educaci\u00f3n Nacional y que ya forman parte del dominio p\u00fablico. Todos los textos est\u00e1n adecuadamente preparados \u2013 con notas a pie de p\u00e1gina, temas literarios, y est\u00e1n disponibles en varios formatos - <strong>HTML </strong>, <strong>TXT </strong>, <strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>.\r\nLa biblioteca contiene tambi\u00e9n centenares de audiolibros, leidos por autores como Danuta Stenka, Jan Peszek o Andrzej Chyra. Se los puede escuchar en los formatos <strong>MP3</strong> y <strong>Ogg Vorbis</strong>. Los audiolibros se pueden conseguir tambi\u00e9n en el formato <strong>DAISY </strong>, adaptado a las necesidades de las personas con baja visi\u00f3n, invidentes, incluso las que tienen dificultades para leer.</p>\r\n\r\n<p>La Biblioteca Wolne Lektury est\u00e1 disponible por medio de aplicaciones m\u00f3viles para los sistemas <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\"> Android</a> e iOS. </p>\r\n\r\n\r\n<p><strong>Todos los textos publicados en la Biblioteca Wolne Lektury est\u00e1n preparados para hojear, escuchar, descargar, para ponerlos a la disposici\u00f3n de otros y citar, todo esto de acuerdo con la ley.</strong> </p>\r\n", - "left_column_en": "{% load reporting_stats %}\r\n\r\n<p><strong>Wolne Lektury is a free online library open 24 hours a day, 365 days a year</strong>. It archives books<strong>{% count_books %}</strong>, including set readings recommended by the Ministry of National Education which have already fallen in the public domain. All the texts are adequately edited - annotated with footnotes and motifs - and are available in several formats - <strong>HTML </strong>, <strong>TXT </strong>, <strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>. The library also contains a few hundred audiobooks read by famous actors like: Danuta Stenka, Jan Peszek or Andrzej Chyra. The audiobooks can be used in <strong>MP3</strong> and <strong>Ogg Vorbis</strong> formats. They are also available in <strong>DAISY </strong>format suiting the needs of people with poor vision, the blind, and those having reading difficulties.</p>\r\n\r\n<p>The Wolne Lektury library is available through digital applications - in <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\"> Android</a> and iOS systems. </p>\r\n\r\n<p><strong>You are allowed to browse, listen to, and download all the items in Wolne Lektury, as well as share and cite them, entirely free of charge.</strong> </p>", - "right_column_fr": "<p>Wolne Lektury c'est un projet de la fondation Nowoczesna Polska (Pologne Moderne) r\u00e9alis\u00e9 pro publico bono avec la coop\u00e9ration de la Biblioth\u00e8que nationale polonaise, Biblioth\u00e8que de Sil\u00e9sie et Biblioth\u00e8que d'Elbl\u0105g, sous le patronage du Minist\u00e8re de l'\u00c9ducation nationale, Minist\u00e8re de la Culture et du Patrimoine national et de l'Association des \u00c9crivains polonais. Le Comit\u00e9 Honoraire de Wolne Lektury est compos\u00e9 de: prof. Maria Janion, prof. Gra\u017cyna Borkowska, prof. Przemys\u0142aw Czapli\u0144ski, prof. Mieczys\u0142aw D\u0105browski, prof. Ewa Kraskowska, prof. Ma\u0142gorzata Czermi\u0144ska, prof. Jerzy Jarz\u0119bski et prof. Piotr \u015aliwi\u0144ski.</p>\r\n\r\n<p>La plupart des ouvrages sur le site de la biblioth\u00e8que ne sont pas prot\u00e9g\u00e9s par le droit d'auteur et appartiennent au domaine public; c'est-\u00e0-dire qu'ils peuvent \u00eatre publi\u00e9s et divulgu\u00e9s librement. Si un ouvrage est accompagn\u00e9 des mat\u00e9riaux suppl\u00e9mentaires (annotations, motifs litt\u00e9raires, etc.) soumis au droit d'auteur, ces derniers sont donc distribu\u00e9s sous la licence: <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.fr\">Paternit\u00e9 - Partage \u00e0 l'Identique 3.0 non transpos\u00e9</a>. On publie aussi quelques ouvrages qui \u00e9taient distribu\u00e9s par leurs auteurs ou h\u00e9ritiers sous la licence libre: <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.fr\">Paternit\u00e9 - Partage \u00e0 l'Identique 3.0 non transpos\u00e9</a>.</p>\r\nContact: wolnelektury@nowoczesnapolska.org.pl\r\n", - "title_ru": "\ufeff\u041f\u0440\u043e\u0435\u043a\u0442", - "title_it": "Sul progetto" - } - }, - { - "pk": 7, - "model": "infopages.infopage", - "fields": { - "title_de": "Rechts", - "left_column_uk": "<p>\u0411\u0456\u043b\u044c\u0448\u0456\u0441\u0442\u044c \u0442\u0432\u043e\u0440\u0456\u0432 \u0443 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 \u043d\u0435 \u043e\u0445\u043e\u0440\u043e\u043d\u044f\u044e\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c \u0456 \u044f\u0432\u043b\u044f\u044e\u0442\u044c\u0441\u044f \u0447\u0430\u0441\u0442\u0438\u043d\u043e\u044e \u0441\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0434\u0431\u0430\u043d\u043d\u044f, \u0442\u043e\u043c\u0443 \u0457\u0445 \u043c\u043e\u0436\u043d\u0430 \u0432\u0456\u043b\u044c\u043d\u043e \u043f\u0443\u0431\u043b\u0456\u043a\u0443\u0432\u0430\u0442\u0438 \u0442\u0430 \u0440\u043e\u0437\u043f\u043e\u0432\u0441\u044e\u0434\u0436\u0443\u0432\u0430\u0442\u0438. \u042f\u043a\u0449\u043e \u0442\u0435\u043a\u0441\u0442\u0438 \u0441\u0443\u043f\u0440\u043e\u0432\u043e\u0434\u0436\u0443\u044e\u0442\u044c\u0441\u044f \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u043c\u0438 \u043c\u0430\u0442\u0435\u0440\u0456\u0430\u043b\u0430\u043c\u0438 (\u043f\u0440\u0438\u043c\u0456\u0442\u043a\u0430\u043c\u0438, \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u043c\u0438 \u043c\u043e\u0442\u0438\u0432\u0430\u043c\u0438 \u0442\u043e\u0449\u043e), \u044f\u043a\u0456 \u043e\u0445\u043e\u0440\u043e\u043d\u044f\u044e\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c, \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0446\u0438\u0445 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0456\u0430\u043b\u0456\u0432 \u043d\u0430\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u043c\u043e\u0432\u0430\u0445 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457 <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">\u0406\u0437 \u0437\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0456\u043c\u0435\u043d\u0456 \u0430\u0432\u0442\u043e\u0440\u0430 \u2013 \u041d\u0430 \u0442\u0438\u0445 \u0436\u0435 \u0443\u043c\u043e\u0432\u0430\u0445 3.0</a>. \u0422\u0430\u043a\u043e\u0436 \u043c\u0438 \u043f\u0443\u0431\u043b\u0456\u043a\u0443\u0454\u043c\u043e \u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0442\u0432\u043e\u0440\u0456\u0432, \u0434\u043e \u044f\u043a\u0438\u0445 \u0430\u0432\u0442\u043e\u0440\u0438 \u0430\u0431\u043e \u0441\u043f\u0430\u0434\u043a\u043e\u0454\u043c\u0446\u0456 \u043f\u0440\u0430\u0432 \u043d\u0430\u0434\u0430\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 \u043f\u0456\u0434\u0441\u0442\u0430\u0432\u0456 \u0432\u0456\u043b\u044c\u043d\u043e\u0457 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457 <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">\u0406\u0437 \u0437\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0456\u043c\u0435\u043d\u0456 \u0430\u0432\u0442\u043e\u0440\u0430 \u2013 \u041d\u0430 \u0442\u0438\u0445 \u0436\u0435 \u0443\u043c\u043e\u0432\u0430\u0445 3.0</a>.</p>", - "main_page": 2, - "right_column_pl": "", - "right_column_lt": "", - "left_column_lt": "<p>Dauguma \u0161ios bibliotekos k\u016brini\u0173 n\u0117ra autorini\u0173 teisi\u0173 saugomi ir yra vie\u0161ai prieinami, tai rei\u0161kia, kad gali b\u016bti laisvai naudojami bei platinami. Jei su k\u016briniu yra pateikiamos bet kokios papildomos autorini\u0173 teisi\u0173 saugomos med\u017eiagos (kaip pastabos, motyvai ir t.t.), tai \u0161ios med\u017eiagos yra prieinamos pagal licencj\u0105 <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Autoryst\u0117s pripa\u017einimas \u2013 pagal tas pa\u010dias s\u0105lygas 3.0</a>. Publikuojami taip pat keli k\u016briniai, autori\u0173 ir teisi\u0173 \u012fp\u0117dini\u0173 pateikti pagal laisv\u0105 licencij\u0105 <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Autoryst\u0117s pripa\u017einimas \u2013 pagal tas pa\u010dias s\u0105lygas 3.0</a>.</p>", - "title_fr": "", - "right_column_ru": "", - "left_column_fr": "<p>La plupart des ouvrages sur le site de la biblioth\u00e8que ne sont pas prot\u00e9g\u00e9s par le droit d'auteur et appartiennent au domaine public; c'est-\u00e0-dire qu'ils peuvent \u00eatre publi\u00e9s et divulgu\u00e9s librement. Si un ouvrage est accompagn\u00e9 des mat\u00e9riaux suppl\u00e9mentaires (annotations, motifs litt\u00e9raires, etc.) soumis au droit d'auteur, ces derniers sont donc distribu\u00e9s sous la licence: <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.fr\">Paternit\u00e9 - Partage \u00e0 l'Identique 3.0 non transpos\u00e9</a>. On publie aussi quelques ouvrages qui \u00e9taient distribu\u00e9s par leurs auteurs ou h\u00e9ritiers sous la licence libre: <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.fr\">Paternit\u00e9 - Partage \u00e0 l'Identique 3.0 non transpos\u00e9</a>.</p>", - "title": "Rights", - "title_lt": "", - "right_column": "<p>The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Creative Commons Attribution-ShareAlike</a>. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Creative Commons Attribution-ShareAlike</a>.</p>\r\n\r\nContact: wolnelektury@nowoczesnapolska.org.pl", - "right_column_es": "", - "right_column_en": "<p>The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Creative Commons Attribution-ShareAlike</a>. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Creative Commons Attribution-ShareAlike</a>.</p>\r\n\r\nContact: wolnelektury@nowoczesnapolska.org.pl", - "left_column_de": "<p>Die Mehrheit von Bibliothekwerken steht nicht unter dem Schutz des Urheberrechts und geh\u00f6rt zu dem Gemeinfreiheitsbereich, was bedeutet, dass man sie frei ver\u00f6ffentlichen und vermitteln darf. Sollte das Werk mit zus\u00e4tzlichen Angaben versehen werden (F\u00fc\u00dfnoten und literarischen Motiven), die dem Urheberrechtsschutz unterliegen, sind diese zus\u00e4tzlichen Angaben unter der Lizenz <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\"> Urheberschaftanerkennung unter gleichen Bedigungen 3.0</a> verf\u00fcgbar. Wir ver\u00f6ffentlichen auch Werke, die Verfasser oder Rechtsnachfolger unter der freien Lizenz <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Urheberschaftanerkennung unter gleichen Bedigungen 3.0</a>.</p> herausgegeben haben. ", - "title_uk": "", - "right_column_it": null, - "title_pl": "Prawa", - "left_column": "<p>The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Attribution + Noncommercial + ShareAlike</a>. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Attribution + Noncommercial + ShareAlike</a>.</p>", - "right_column_uk": "", - "title_en": "Rights", - "left_column_pl": "<p>Wi\u0119kszo\u015b\u0107 utwor\u00f3w w bibliotece nie jest chroniona prawem autorskim i znajduje si\u0119 w domenie publicznej, co oznacza, \u017ce mo\u017cna je swobodnie publikowa\u0107 i rozpowszechnia\u0107. Je\u015bli utw\u00f3r opatrzony jest dodatkowymi materia\u0142ami (przypisy, motywy literackie etc.), kt\u00f3re podlegaj\u0105 prawu autorskiemu, to te dodatkowe materia\u0142y udost\u0119pnione s\u0105 na licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>. Publikujemy r\u00f3wnie\u017c kilka utwor\u00f3w, kt\u00f3re autorzy lub spadkobiercy praw udost\u0119pnili na wolnej licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>.</p>", - "left_column_it": null, - "title_es": "Derechos", - "left_column_ru": "<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043a\u043e\u043d\u043e\u043c \u043e\u0431 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432\u0430\u0445 \u0438 \u043e\u043d\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u043a \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u0434\u043e\u043c\u0435\u043d\u0443. \r\n\u0418\u0445 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043d\u0438\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b (\u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f, \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0435 \u043c\u043e\u0442\u0438\u0432\u044b, \u0438 \u0442.\u0434.), \r\n\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.ru\">\r\n \u041f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 - 3.0</a>. \r\n\u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043e\u0442 \u0441\u0430\u043c\u044b\u0445 \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u0438\u043b\u0438 \u0438\u0445 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043f\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0435\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439. <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.ru\">\u041f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 3.0</a>.</p>", - "slug": "prawa", - "right_column_de": "", - "left_column_es": "</p>La mayor\u00eda de los textos de la Biblioteca est\u00e1n libres de derechos de autor y son de dominio p\u00fablico, por lo tanto se pueden publicar y difundir libremente. Si un texto tiene materiales adicionales (notas a pie de p\u00e1gina, temas literarios, etc.), que no est\u00e9n libres de derechos de autor, dichos materiales est\u00e1n publicados bajo la licencia <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.es\">Reconocimiento-Compartir bajo la misma licencia 3.0</a>.Tambi\u00e9n publicamos algunos textos legados a el dominio p\u00fablico por los autores o heredores bajo la licencia <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.es\">Reconocimiento-Compartir bajo la misma licencia 3.0</a>.</p>", - "left_column_en": "<p>The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Attribution + Noncommercial + ShareAlike</a>. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Attribution + Noncommercial + ShareAlike</a>.</p>", - "right_column_fr": "", - "title_ru": "", - "title_it": null - } - }, - { - "pk": 4, - "model": "infopages.infopage", - "fields": { - "title_de": "Unser Team", - "left_column_uk": "\ufeff<p><strong>\u041c\u0430\u0491\u0434\u0430\u043b\u0435\u043d\u0430 \u0411\u2019\u0454\u0440\u043d\u0430\u0442</strong> \u2013 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u0443, \u043a\u0435\u0440\u0443\u044e\u0447\u0438\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440 \u0424\u043e\u043d\u0434\u0443 \u0421\u0443\u0447\u0430\u0441\u043d\u0430 \u041f\u043e\u043b\u044c\u0449\u0430 (Fundacja Nowoczesna Polska). \u0421\u043e\u0446\u0456\u043e\u043b\u043e\u0433, \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u044f \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u0442\u0430 \u0411\u0440\u044e\u0441\u0441\u0435\u043b\u044c\u0441\u044c\u043a\u043e\u0433\u043e \u0432\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u0421\u043f\u0435\u0446\u0456\u0430\u043b\u0456\u0441\u0442 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043d\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0456\u0432. \u041a\u0435\u0440\u0443\u0432\u0430\u043b\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u00ab\u041a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0438 2009\u00bb \u0442\u0430 \u00ab\u042f \u043c\u0430\u044e \u043f\u0440\u0430\u0432\u043e \u0437\u043d\u0430\u0442\u0438\u00bb \u0443 \u0410\u0441\u043e\u0446\u0456\u0430\u0446\u0456\u0457 61. \u041f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0443 \u0431\u0430\u0433\u0430\u0442\u044c\u043e\u0445 \u0441\u043e\u0446\u0456\u0430\u043b\u044c\u043d\u0438\u0445 \u0434\u043e\u0441\u043b\u0456\u0434\u0436\u0435\u043d\u043d\u044f\u0445, \u044f\u043a\u0456 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044f \u0433\u0440\u043e\u043c\u0430\u0434\u0441\u044c\u043a\u0438\u043c\u0438 \u043e\u0440\u0433\u0430\u043d\u0456\u0437\u0430\u0446\u0456\u044f\u043c\u0438 \u0442\u0430 \u0434\u043e\u0441\u043b\u0456\u0434\u043d\u0438\u0446\u044c\u043a\u0438\u043c\u0438 \u0444\u0456\u0440\u043c\u0430\u043c\u0438. </p>\r\n\r\n<p><strong>\u0420\u0430\u0434\u043e\u0441\u043b\u0430\u0432 \u0427\u0430\u0439\u043a\u0430</strong> \u2013 \u0433\u043e\u043b\u043e\u0432\u043d\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442, \u0432\u0438\u0432\u0447\u0430\u0432 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a\u0443 \u043d\u0430 \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0456 \u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438, \u0406\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a\u0438 \u0442\u0430 \u041c\u0435\u0445\u0430\u043d\u0456\u043a\u0438 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u0412\u043e\u043b\u043e\u0434\u0456\u0454 \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u043c\u0438 \u043c\u043e\u0432\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0430 \u0442\u0435\u0433\u0456\u0432: Python, XHTML, Javascript, CSS, LaTeX, SQL. \u041c\u0430\u0454 \u0434\u043e\u0441\u0432\u0456\u0434 \u0443 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u0445 Django, Jquery, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0443 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0443\u0432\u0430\u043d\u043d\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0456\u0432 XML (XSLT), \u0443 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0438\u0445 \u043a\u043d\u0438\u0433 \u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 PDF \u0442\u0430 EPUB \u0456 \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0438\u0445 \u0430\u043f\u043b\u0456\u043a\u0430\u0446\u0456\u0439 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0438 Android \u0442\u0430 iOS.</p>\r\n\r\n<p><strong>\u041c\u0430\u0440\u0446\u0456\u043d \u041a\u043e\u0437\u0454\u0439 </strong>\u2013 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442. \u0412\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u041f\u043e\u043b\u0456\u0442\u0435\u0445\u043d\u0456\u0447\u043d\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u0442\u0430 \u0430\u0441\u043f\u0456\u0440\u0430\u043d\u0442 \u0432 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u0424\u0456\u043b\u043e\u0441\u043e\u0444\u0456\u0457 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u0414\u0456\u044f\u0447 \u041c\u043e\u043a\u043e\u0442\u043e\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u041f\u0440\u043e\u0434\u043e\u0432\u043e\u043b\u044c\u0447\u043e\u0433\u043e \u041a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u0443. \u041c\u0430\u043d\u0434\u0440\u0456\u0432\u043d\u0438\u043a, \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0438\u0441\u0442, \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c \u0443\u0441\u0456\u043b\u044f\u043a\u0438\u0445 \u0431\u0430\u043d\u043a\u0435\u0442\u0456\u0432. Homo ludens.</p>\r\n\r\n<p><strong>\u041c\u0430\u0440\u0442\u0430 \u041d\u0454\u0434\u0437\u044f\u043b\u043a\u043e\u0432\u0441\u044c\u043a\u0430</strong> \u2013 \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u044f \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u0437\u043d\u0430\u0432\u0441\u0442\u0432\u0430 \u0442\u0430 \u043d\u0430\u0443\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u0421\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 \u043c\u0430\u0433\u0456\u0441\u0442\u0440\u0430\u0442\u0443\u0440\u0438 \u043d\u0430 \u0441\u043f\u0435\u0446\u0456\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0456 Public Policy and Administration \u0443 Collegium Civitas. </p>\r\n\r\n", - "main_page": 3, - "right_column_pl": "<p><strong>Dorota A. Kowalska</strong> \u2013 redaktorka literacka, j\u0119zykoznawca, polonistka i slawistka, doktor nauk humanistycznych, adiunkt w Pracowni Polszczyzny Kresowej IJP PAN, gdzie zajmuje si\u0119 histori\u0105 i wsp\u00f3\u0142czesno\u015bci\u0105 j\u0119zyka polskiego na Ukrainie. Hobbystycznie \u015bpiewa archaiczne pie\u015bni ukrai\u0144skie i rosyjskie, cyklistka.</p>\r\n\r\n<p><strong>Aleksandra Seku\u0142a</strong> \u2013 redaktorka literacka, historyczka literatury, doktor nauk humanistycznych, absolwentka Wydzia\u0142u Polonistyki Uniwersytetu Warszawskiego i Szko\u0142y Nauk Spo\u0142ecznych przy IFiS PAN. Zawodowo i naukowo zajmuje si\u0119 polskim romantyzmem, histori\u0105 idei i teori\u0105 kultury. </p>\r\n\r\n<p><strong>Pawe\u0142 Kozio\u0142 </strong>\u2013 redaktor literacki. Ur. 1979, doktor nauk humanistycznych specjalizuj\u0105cy si\u0119 w literaturze dawnej, absolwent Wydzia\u0142u Polonistyki Uniwersytetu Warszawskiego oraz Dulwich College w Londynie. Poeta, krytyk literacki, stypendysta Ministerstwa Kultury i Dziedzictwa Narodowego (2010). </p>\r\n\r\n<p><strong>Paulina Choroma\u0144ska</strong> \u2013 redaktorka techniczna, studentka II roku studi\u00f3w magisterskich w Instytucie Informacji Naukowej i Studi\u00f3w Bibliologicznych UW. Pracuje r\u00f3wnie\u017c w Pracowni Dokumentacji Teatru w Instytucie Teatralnym im. Z. Raszewskiego w Warszawie.</p>\r\n\r\n<p><strong>Aneta Rawska</strong> - redaktorka techniczna, studentka II roku studi\u00f3w magisterskich w Instytucie Informacji Naukowej i Studi\u00f3w Bibliologicznych UW, mi\u0142o\u015bniczka wypiek\u00f3w i dobrej kuchni. Od 2009 roku prowadzi serwis ko\u0142a PZW nr 21 w Wo\u0142ominie.</p>\r\n", - "right_column_lt": "\ufeff<p><strong>Dorota A. Kowalska</strong> \u2013 literat\u016bros redaktor\u0117, lingvist\u0117, polonist\u0117, slavist\u0117, humanitarini\u0173 moksl\u0173 daktar\u0117, Lenkijos moksl\u0173 akademijos Lenk\u0173 kalbos instituto adjunkt\u0117, kur atlieka darbus, susijusius su istorija ir dabartine lenk\u0173 kalba Ukrainoje. Laisvalaikiu dainuoja archaji\u0161kas ukrainie\u010di\u0173 ir rus\u0173 dainas, dviratinink\u0117. </p>\r\n\r\n<p><strong>Aleksandra Seku\u0142a</strong> \u2013 literat\u016bros redaktor\u0117, literat\u016bros istorik\u0117, humanitarini\u0173 moksl\u0173 daktar\u0117, Var\u0161uvos universiteto Polonistikos fakulteto bei Lenkijos moksl\u0173 akademijos Filosofijos ir sociologijos instituto Socialini\u0173 moksl\u0173 mokyklos absolvent\u0117. Profesionaliai u\u017esiima lenk\u0173 romantizmu, id\u0117jos istorija ir kult\u016bros teorija. </p> \r\n\r\n<p><strong>Pawe\u0142 Kozio\u0142 </strong>\u2013 literat\u016bros redaktorius, gim\u0119s 1979 m., humanitarini\u0173 moksl\u0173 daktaras besispecializuojantis senojoje literat\u016broje, Var\u0161uvos universiteto Polonistikos fakulteto bei Dulwich College Londone absolventas. Poetas, literat\u016bros kritikas, Kult\u016bros ir nacionalinio paveldo ministerijos stipendininkas (2010). </p>\r\n\r\n<p><strong>Paulina Choroma\u0144ska</strong> \u2013 technin\u0117 redaktor\u0117, Var\u0161uvos universiteto Bibliotekininkyst\u0117s ir informatikos instituto magistrant\u016bros studij\u0173 antro kurso student\u0117. Taip pat dirba Z. Raszewski Teatro instituto Teatro dokumentacijos skyriuje Var\u0161uvoje.\r\n\r\n<p><strong>Aneta Rawska</strong> \u2013 technin\u0117 redaktor\u0117, Var\u0161uvos universiteto Bibliotekininkyst\u0117s ir informatikos instituto magistrant\u016bros studij\u0173 antro kurso student\u0117, kepini\u0173 ir skanios virtuv\u0117s gerb\u0117ja. Nuo 2009 m. pri\u017ei\u016bri PZW (Lenk\u0173 \u017evej\u0173 s\u0105junga) nr. 21 interneto svetain\u0119 Wo\u0142omin mieste.\r\n", - "left_column_lt": "\ufeff<p><strong>Magdalena Biernat</strong> \u2013 projekto koordinator\u0117, fondo \u0160iuolaikin\u0117 Lenkija valdan\u010dioji direktor\u0117. Sociolog\u0117, Var\u0161uvos universiteto ir L\u2019Universit\u00e9 libre de Bruxelles absolvent\u0117. Internetini\u0173 projekt\u0173 specialist\u0117. Koordinavo Kandydaci 2009 ir Mam Prawo Wiedzie\u0107 Asocijacijos 61 projektus. Dirbo prie socialini\u0173 tyrim\u0173, nevyriausybini\u0173 organizacij\u0173 ir tyrim\u0173 \u012fstaig\u0173 \u012fgyvendinam\u0173. </p>\r\n\r\n<p><strong>Rados\u0142aw Czajka</strong> \u2013 pagrindinis programuotojas, studijavo Informacini\u0173 technologij\u0173 specialyb\u0119 Matematikos, informatikos ir mechanikos fakultete. Python, XHTML, Javascript, CSS, LaTeX, SQL programavimo kalb\u0173 ir \u017eymi\u0173 ekspertas. Turi patirties su frameworks\u2019ais Django, Jquery, patirtis su XML (XSLT) dokument\u0173 transformavimu, PDF ir EPUB formatu e-knyg\u0173 gamyba bei su mobili\u0173j\u0173 program\u0173 skiriam\u0173 operacinei sistemai Android ir iOS k\u016brim\u0173. </p>\r\n\r\n<p><strong>Marcin Koziej </strong>\u2013 programuotojas, Var\u0161uvos technikos universiteto absolventas ir Var\u0161uvos universiteto Filosofijos instituto doktorantas. Mokotovo maisto kooperatyvo (Mokotowska Kooperatywa Spo\u017cywcza) aktyvistas. Keliautojas, dviratininkas, puotautojas. Homo ludens. </p>\r\n\r\n\t\r\n<p><strong>Marta Niedzia\u0142kowska</strong> \u2013 technin\u0117 redaktor\u0117, Var\u0161uvos universiteto Bibliotekininkyst\u0117s ir informatikos absolvent\u0117. Universiteto Collegium Civitas Public Policy and Administration magistrant\u016bros studij\u0173 student\u0117. </p>\r\n", - "title_fr": "Notre \u00e9quipe", - "right_column_ru": "\ufeff<p><strong>\u0414\u043e\u0440\u043e\u0442\u0430 A. \u041a\u043e\u0432\u0430\u043b\u044c\u0441\u043a\u0430</strong> \u2013 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u044f\u0437\u044b\u043a\u043e\u0432\u0435\u0434, \u0444\u0438\u043b\u043e\u043b\u043e\u0433 \u0438 \u0441\u043b\u0430\u0432\u0438\u0441\u0442\u043a\u0430, \u0434\u043e\u043a\u0442\u043e\u0440 \u0433\u0443\u043c\u0430\u043d\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043d\u0430\u0443\u043a, \u0430\u0434\u044a\u044e\u043d\u043a\u0442 \u0432 \u043d\u0430\u0443\u0447\u043d\u043e\u0439 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u041f\u043e\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043e\u043a\u0440\u0430\u0438\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0418\u0419\u041f \u041f\u0410\u041d, \u0433\u0434\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0441\u043a\u0438\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u0432 \u0423\u043a\u0440\u0430\u0438\u043d\u0435. \u0415\u0435 \u0445\u043e\u0431\u0431\u0438 \u044d\u0442\u043e \u0430\u0440\u0445\u0430\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0435 \u0438 \u0440\u0443\u0441\u0441\u043a\u0438\u0435 \u043d\u0430\u0440\u043e\u0434\u043d\u044b\u0435 \u043f\u0435\u0441\u043d\u0438.</p>\r\n\r\n<p><strong>\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u0421\u0435\u043a\u0443\u043b\u0430</strong> \u2013 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0438\u0441\u0442\u043e\u0440\u0438\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b, \u0434\u043e\u043a\u0442\u043e\u0440 \u0433\u0443\u043c\u0430\u043d\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043d\u0430\u0443\u043a, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u0430 \u0424\u0438\u043b\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0444\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \u0438 \u0428\u043a\u043e\u043b\u044b \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u0443\u043a \u043f\u0440\u0438 \u0418\u0444\u0438\u0421 \u041f\u0410\u041d. \u041f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0438 \u043d\u0430\u0443\u0447\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0441\u043a\u0438\u043c \u0440\u043e\u043c\u0430\u043d\u0442\u0438\u0437\u043c\u043e\u043c, \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0438\u0434\u0435\u0438 \u0438 \u0442\u0435\u043e\u0440\u0438\u0435\u0439 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u044b.</p>\r\n\r\n<p><strong>\u041f\u0430\u0432\u0435\u043b \u041a\u043e\u0437\u0435\u043b</strong>\u2013 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440. 1979 \u0433.\u0440., \u0434\u043e\u043a\u0442\u043e\u0440 \u0433\u0443\u043c\u0430\u043d\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043d\u0430\u0443\u043a, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u043f\u043e \u0434\u0440\u0435\u0432\u043d\u0435\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0435, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0424\u0438\u043b\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \u0438 Dulwich College \u0432 \u041b\u043e\u043d\u0434\u043e\u043d\u0435. \u041f\u043e\u044d\u0442, \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u043a\u0440\u0438\u0442\u0438\u043a, \u0441\u0442\u0438\u043f\u0435\u043d\u0434\u0438\u0430\u0442 \u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u044b \u0438 \u043d\u0430\u0440\u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0430 (2010).</p>\r\n\r\n<p><strong>\u041f\u0430\u0443\u043b\u0438\u043d\u0430 \u0425\u043e\u0440\u043e\u043c\u0430\u043d\u044c\u0441\u043a\u0430</strong> \u2013 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 II \u043a\u0443\u0440\u0441\u0430 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0430 \u041d\u0430\u0443\u0447\u043d\u043e\u0439 \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0412\u0423. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u0432 \u041d\u0430\u0443\u0447\u043d\u043e\u0439 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0442\u0435\u0430\u0442\u0440\u0430, \u0432 \u0422\u0435\u0430\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u043c \u0438\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0435 \u0438\u043c. \u0417. \u0420\u0430\u0448\u0435\u0432\u0441\u043ao\u0433\u043e \u0432 \u0412\u0430\u0440\u0448\u0430\u0432\u0435.</p>\r\n\r\n<p><strong>\u0410\u043d\u0435\u0442\u0430 \u0420\u0430\u0432\u0441\u043a\u0430</strong> - \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 II \u043a\u0443\u0440\u0441\u0430 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0430 \u041d\u0430\u0443\u0447\u043d\u043e\u0439 \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0412\u0423, \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u043d\u0438\u0446\u0430 \u0432\u044b\u043f\u0435\u043a\u0430\u043d\u0438\u044f \u0438 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043a\u0443\u0445\u043d\u0438. \u0421 2009 \u0433. \u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u043a\u0440\u0443\u0436\u043a\u0430 \u041f\u0417\u0412 \u043d\u043e.21 \u0432 \u0412\u043e\u043b\u043e\u043c\u0438\u043d\u0435.</p>\r\n", - "left_column_fr": "<p><strong>Magdalena Biernat</strong> \u2013 coordinatrice du projet et directrice administrative de la fondation Nowoczesna Polska, sociologue, gradu\u00e9e de l'Universit\u00e9 de Varsovie et l\u2019Universit\u00e9 libre de Bruxelles, sp\u00e9cialiste des projets Internet; elle a coordonn\u00e9 les projets Kandydaci 2009 et Mam Prawo Wiedzie\u0107 pour Stowarzyszenie 61 (l'Assocciation 61). Elle a particip\u00e9 aux travaux de recherches sociales r\u00e9alis\u00e9s par les organisations non gouvernementales et soci\u00e9t\u00e9s de recherche. </p>\r\n\r\n<p><strong>Rados\u0142aw Czajka</strong> \u2013 programmeur principal du projet, il a \u00e9tudi\u00e9 l'informatique \u00e0 MIMUW (l'Univerist\u00e9 de Varsovie, D\u00e9partement de Math\u00e9matique, Informatique et G\u00e9nie M\u00e9canique). Il est un expert dans les langages de programmation tels que Python, XHTML, Javascript, CSS, LaTeX, SQL. Il a de l'exp\u00e9rience dans les frameworks Django et Jquery, de l'exp\u00e9rience dans l'\u00e9dition de documents XML (XSLT), dans la production de livres num\u00e9riques aux formats PDF et EPUB et dans la cr\u00e9ation d'applications mobiles pour Android et iOS.</p>\r\n\r\n<p><strong>Marcin Koziej </strong> \u2013 programmeur, amateur infatigable de philosophie, informaticien, voyageur, cycliste et banqueteur. Homo ludens.</p>\r\n\r\n<p><strong>Marta Niedzia\u0142kowska</strong> \u2013 r\u00e9dactrice technique, gradu\u00e9e en Bibliothecologie et Sciences de l'Information de l'Universit\u00e9 de Varsovie. Une \u00e9tudiante d'\u00e9tudes secondaires en Public Policy and Administration au Collegium Civitas. </p>\r\n\r\n", - "title": "The team", - "title_lt": "\ufeffM\u016bs\u0173 komanda", - "right_column": "\ufeff\r\n<p><strong>Dorota A. Kowalska</strong> \u2013 literary editor, linguist, specialist in the field of Polish studies, Slavist, PhD holder. She is an assistant professor in Pracownia Polszczyzny Kresowej at the Institute of the Polish Language, Polish Academy of Sciences, where she works on the history and the present of the Polish language in Ukraine. As a hobby, she sings Ukrainian and Russian archaic songs and cycles.</p>\r\n\r\n<p><strong>Aleksandra Seku\u0142a</strong> \u2013 literary editor, literary historian, PhD holder. She is a graduate of the Faculty of Polish Studies, Warsaw University and the Graduate School for Social Research at the Institute of Philosophy and Sociology, Polish Academy of Sciences. Her research interests include Polish Romanticism, the history of ideas and the theory of culture. </p>\r\n\r\n<p><strong>Pawe\u0142 Kozio\u0142 </strong>\u2013 literary editor. B. 1979, he is a PhD holder specializing in classic literature and graduate of the Faculty of Polish Studies, Warsaw University and Dulwich College in London. A poet, literary critic, the Ministry of Culture and National Heritage scholarship holder (2010).</p>\r\n\r\n<p><strong>Paulina Choroma\u0144ska</strong> \u2013 production editor, undergraduate student of Information and Book Studies at Warsaw University. She also works in the Theatre Documentation Office of the Zbigniew Raszewski Theatrical Institute in Warsaw.</p>\r\n\r\n<p><strong>Aneta Rawska</strong> - production editor, undergraduate student of Information and Book Studies at Warsaw University, fan of pastries and good cuisine. Since 2009 she has been administering the portal of PZW (Polish Angling Association) group no. 21 in Wo\u0142omin.</p>", - "right_column_es": "<p><strong>Dorota A. Kowalska</strong> \u2013 redactora literaria, ling\u00fcista, licenciada en filolog\u00eda polaca y eslava, doctorada en humanidades, profesora adjunta en el Laboratorio de Idioma Polaco de la Zona Fronteriza, donde se ocupa de la historia y presente del idioma polaco en Ucrania. Su pasatiempo favorito es cantar canciones arcaicas ucranianas y rusas. Ciclista.</p>\r\n\r\n<p><strong>Aleksandra Seku\u0142a</strong> \u2013 redactora literaria, historiadora de literatura, doctorada en humanidades, licenciada por la Facultad de Filolog\u00eda Polaca por la Escuela de Ciencias Sociales del IFIS PAN (el Instituto de Filosof\u00eda y Sociolog\u00eda de la Academia Polaca de Ciencias). Se ocupa de el romanticismo polaco, historia de la idea y teor\u00eda de cultura.</p>\r\n\r\n<p><strong>Pawe\u0142 Kozio\u0142 </strong> \u2013 redactor literario. Naci\u00f3 en 1979, doctorado en humanidades, especializado en literatura antigua. Licenciado por la Facultad de Filolog\u00eda Polaca de la Universidad de Varsovia y por Dulwich College en Londres. Poeta y cr\u00edtico literario, becario de el Ministerio de Cultura y Patrimonio Nacional (2010).</p>\r\n\r\n<p><strong>Paulina Choroma\u0144ska</strong> \u2013 redactora t\u00e9cnica, estudiante de segundo curso de licenciatura en el Instituto de Informaci\u00f3n Cient\u00edfica y Bibliotecolog\u00eda de la Universidad de Varsovia. Aparte, trabaja en el Centro de Documentaci\u00f3n de Teatro en el Instituto de Teatro de Zbigniew Raszewski en Varsovia. </p> \r\n\r\n<p><strong>Aneta Rawska</strong> - redactora t\u00e9cnica, estudiante de segundo curso de licenciatura en el Instituto de Ciencias de la Informaci\u00f3n y Bibliotecolog\u00eda de la Universidad de Varsovia, amante de la pasteler\u00eda y la buena cocina. Desde 2009 est\u00e1 a cargo de la p\u00e1gina web de PZW (Asociaci\u00f3n Polaca de Pesca) n\u00famero 21 en Wolomin. </p>\r\n", - "right_column_en": "\ufeff\r\n<p><strong>Dorota A. Kowalska</strong> \u2013 literary editor, linguist, specialist in the field of Polish studies, Slavist, PhD holder. She is an assistant professor in Pracownia Polszczyzny Kresowej at the Institute of the Polish Language, Polish Academy of Sciences, where she works on the history and the present of the Polish language in Ukraine. As a hobby, she sings Ukrainian and Russian archaic songs and cycles.</p>\r\n\r\n<p><strong>Aleksandra Seku\u0142a</strong> \u2013 literary editor, literary historian, PhD holder. She is a graduate of the Faculty of Polish Studies, Warsaw University and the Graduate School for Social Research at the Institute of Philosophy and Sociology, Polish Academy of Sciences. Her research interests include Polish Romanticism, the history of ideas and the theory of culture. </p>\r\n\r\n<p><strong>Pawe\u0142 Kozio\u0142 </strong>\u2013 literary editor. B. 1979, he is a PhD holder specializing in classic literature and graduate of the Faculty of Polish Studies, Warsaw University and Dulwich College in London. A poet, literary critic, the Ministry of Culture and National Heritage scholarship holder (2010).</p>\r\n\r\n<p><strong>Paulina Choroma\u0144ska</strong> \u2013 production editor, undergraduate student of Information and Book Studies at Warsaw University. She also works in the Theatre Documentation Office of the Zbigniew Raszewski Theatrical Institute in Warsaw.</p>\r\n\r\n<p><strong>Aneta Rawska</strong> - production editor, undergraduate student of Information and Book Studies at Warsaw University, fan of pastries and good cuisine. Since 2009 she has been administering the portal of PZW (Polish Angling Association) group no. 21 in Wo\u0142omin.</p>", - "left_column_de": "<p><strong>Magdalena Biernat</strong> - Projektkoordinator, Verwaltungsleiterin der Stiftung Modernes Polen. Soziologin, Absolventin der Universit\u00e4t Warschau und der Universit\u00e9 libre de Bruxelles. Spezialistin f\u00fcr Internetprojekte. Sie hat die Projekte Kandydaci 2009 (Kandidaten 2009) und Mam Prawo Wiedzie\u00e6 (Ich habe Recht zu wissen) in Verein 61 (Stowarzyszenie 61) koordiniert. Sie hat an vielen Gesellschaftsstudien gearbeitet, die von Nichtregierungsorganisationen und Forschungsanstalten durchgef\u00fchrt wurden. </p>\r\n\r\n<p><strong>Rados\u0142aw Czajka</strong> - Hauptprogrammierer, studierte Informatik an der Fakult\u00e4t f\u00fcr Mathematik, Informatik und Maschinen an der Universit\u00e4t Warschau. Gewandt in Programmierersprachen und Datenbanken: Python, XHTML, Javascript, CSS, LaTeX, SQL. Er besitz Erfahrung in Frameworks: Django, Jquery, den Transformationen XML-Dateien (XSLT), der Herstellung von E-books in PDF und EPUB und Generierung von Mobilanwendungen f\u00fcr das Android- und iOS-System.</p>\r\n\r\n<p><strong>Marcin Koziej </strong> - Programmierer, Absolvent der Technischen Universit\u00e4t Warschau und Doktorand im Institut f\u00fcr Philosophie an Universit\u00e4t. T\u00e4tig im Konsumverein von Mokot\u00f3w (Mokotowska Kooperatywa Spo\u017cywcza). Reisender und Radfahrer. Homo ludens.</p>\r\n\r\n<p><strong>Marta Niedzia\u0142kowska</strong> - Textbearbeiterin, Absolventin der Wissenschaftsinformation und Bibliothekwissenschaft an der Universit\u00e4t Warschau. Masterstudium: Collegium Civitas, Fakult\u00e4t: Public Policy and Administration. </p>\r\n\r\n", - "title_uk": "\ufeff\u041a\u043e\u043c\u0430\u043d\u0434\u0430", - "right_column_it": "<p><strong>Dorota A. Kowalska</strong> \u2013 redattrice letteraria, linguista, ha studiato lingua e letteratura polacca e slava, ha conseguito il dottorato in discipline umanistiche, inoltre \u00e8 docente presso Pracownia Polszczyzny Kresowej IJP PAN, dove \u00e8 esperta di storia e contemporaneit\u00e0 della lingua polacca in Ucraina. Nel tempo libero canta canzoni arcaiche ucraine e russe, ed \u00e8 una ciclista.</p>\r\n\r\n<p><strong>Aleksandra Seku\u0142a</strong> \u2013 redattrice letteraria, storica della letteratura, ha conseguito il dottorato in discipline umanistiche, laureata in lingua e letteratura polacca presso l\u2019Universit\u00e0 di Varsavia e di Szko\u0142a Nauk Spo\u0142ecznych (Scuola delle Scienze Sociali) presso IFiS PAN.In ambito professionale si occupa del romanticismo polacco, della storia dell'idea e della teoria della cultura</p>\r\n\r\n<p><strong>Pawe\u0142 Kozio\u0142</strong> \u2013 redattore letterario. Nato nel 1979, dottore di ricerca in discipline umanistiche specializzato in letteratura antica, laureato in lingua e letteratura polacca presso l\u2019Universit\u00e0 di Varsavia e del Dulwich College di Londra.E' poeta, critico letterario e borsista del Ministero della Cultura e del Patrimonio Nazionale (2010).</p>\r\n\r\n<p><strong>Paulina Choroma\u0144ska</strong> \u2013 redattrice tecnica, studentessa del secondo anno dell\u2019Istituto di Informazione Scientifica e Biblioteconomia dell\u2019Universit\u00e0 di Varsavia. Lavora anche nel Laboratorio di Documentazione del Teatro presso l\u2019Istituto Teatrale im. Z. Raszewskiego a Varsavia.</p>\r\n\r\n<p><strong>Aneta Rawska</strong> \u2013 redattrice tecnica, studentessa del secondo anno dell\u2019Istituto di Informazione Scientifica e Biblioteconomia dell\u2019Universit\u00e0 di Varsavia, appassionata di cucina e dolci. Dal 2009 gestisce il circolo PZW nr 21 a Wo\u0142omin.</p>\r\n\r\n", - "title_pl": "Zesp\u00f3\u0142", - "left_column": "<p><strong>Magdalena Biernat</strong> - Project Coordinator, Managing Director of the Modern Poland Foundation. She is a sociologist, graduate of Warsaw University and L'Universit\u00e9 libre de Bruxelles, and a web-based project specialist. She coordinated projects \"Kandydaci 2009\" and \"Mam Prawo Wiedzie\u0107\" in Stowarzyszenie 61. She has been working on social research carried out by non-governmental organizations and research companies.</p>\r\n\r\n<p><strong>Rados\u0142aw Czajka</strong> - chief programmer, he studied informatics at the Faculty of Mathematics, Informatics and Mechanics, Warsaw University. Proficient in programming languages, Python, XHTML, Javascript, CSS, LaTeX, SQL markup. He has experience in working with Django framework, Jquery, converting XML (XSLT) documents, creating e-books in PDF and EPUB formats and creating mobile applications for Android and iOS systems.</p>\r\n\r\n<p><strong>Marcin Koziej </strong> - programmer. He is an indefatigable enthusiast of philosophy, IT specialist, traveller, cyclist and reveller. Homo Ludens.</p>\r\n\r\n<p><strong>Marta Niedzia\u0142kowska</strong> - production editor, graduate of the Information and Book Studies at Warsaw University. She is an undergraduate student of Public Policy and Administration at Collegium Civitas in Warsaw.</p>", - "right_column_uk": "\ufeff<p><strong>\u0414\u043e\u0440\u043e\u0442\u0430 \u0410. \u041a\u043e\u0432\u0430\u043b\u044c\u0441\u044c\u043a\u0430</strong> \u2013 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u043c\u043e\u0432\u043e\u0437\u043d\u0430\u0432\u0435\u0446\u044c, \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u0444\u0456\u043b\u043e\u043b\u043e\u0433 \u0442\u0430 \u0441\u043b\u0430\u0432\u0456\u0441\u0442, \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u0433\u0443\u043c\u0430\u043d\u0456\u0442\u0430\u0440\u043d\u0438\u0445 \u043d\u0430\u0443\u043a, \u0430\u0434'\u044e\u043d\u043a\u0442 \u0443 \u0412\u0456\u0434\u0434\u0456\u043b\u0456 \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u043c\u043e\u0432\u0438 \u041a\u0440\u0435\u0441\u0456\u0432 \u0432 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u043c\u043e\u0432\u0438 \u0432 \u041f\u043e\u043b\u044c\u0441\u044c\u043a\u0456\u0439 \u0410\u043a\u0430\u0434\u0435\u043c\u0456\u0457 \u041d\u0430\u0443\u043a, \u0434\u0435 \u0437\u0430\u0439\u043c\u0430\u0454\u0442\u044c\u0441\u044f \u0456\u0441\u0442\u043e\u0440\u0456\u0454\u044e \u0442\u0430 \u0441\u0443\u0447\u0430\u0441\u043d\u0456\u0441\u0442\u044e \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u043c\u043e\u0432\u0438 \u0432 \u0423\u043a\u0440\u0430\u0457\u043d\u0456. \u0407\u0457 \u0445\u043e\u0431\u0456 - \u0441\u043f\u0456\u0432\u0430\u0442\u0438 \u0430\u0440\u0445\u0430\u0457\u0447\u043d\u0456 \u0443\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0456 \u0442\u0430 \u0440\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u0456 \u043f\u0456\u0441\u043d\u0456; \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0438\u0441\u0442\u043a\u0430.</p>\r\n\r\n<p><strong>\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u0421\u0435\u043a\u0443\u043b\u0430</strong> \u2013 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0456\u0441\u0442\u043e\u0440\u0438\u043a \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0438, \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u0433\u0443\u043c\u0430\u043d\u0456\u0442\u0430\u0440\u043d\u0438\u0445 \u043d\u0430\u0443\u043a, \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u044f \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0443 \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u0444\u0456\u043b\u043e\u043b\u043e\u0433\u0456\u0457 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u0442\u0430 \u0428\u043a\u043e\u043b\u0438 \u0421\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u0438\u0445 \u041d\u0430\u0443\u043a \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0443 \u0444\u0456\u043b\u043e\u0441\u043e\u0444\u0456\u0457 \u0442\u0430 \u0441\u043e\u0446\u0456\u043e\u043b\u043e\u0433\u0456\u0457 \u041f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u0430\u043a\u0430\u0434\u0435\u043c\u0456\u0457 \u043d\u0430\u0443\u043a. \u041f\u0440\u043e\u0444\u0435\u0441\u0456\u0439\u043d\u043e \u0442\u0430 \u043d\u0430\u0443\u043a\u043e\u0432\u043e \u0437\u0430\u0439\u043c\u0430\u0454\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u0438\u043c \u0440\u043e\u043c\u0430\u043d\u0442\u0438\u0437\u043c\u043e\u043c, \u0456\u0441\u0442\u043e\u0440\u0456\u0454\u044e \u0456\u0434\u0435\u0457 \u0442\u0430 \u0442\u0435\u043e\u0440\u0456\u0454\u044e \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0438. </p>\r\n\r\n<p><strong>\u041f\u0430\u0432\u0435\u043b \u041a\u043e\u0437\u0456\u043e\u043b </strong>\u2013 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u043d\u0430\u0440\u043e\u0434\u0436\u0435\u043d\u0438\u0439 \u0443 1979, \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u0433\u0443\u043c\u0430\u043d\u0456\u0442\u0430\u0440\u043d\u0438\u0445 \u043d\u0430\u0443\u043a, \u044f\u043a\u0438\u0439 \u0441\u043f\u0435\u0446\u0456\u0430\u043b\u0456\u0437\u0443\u0454\u0442\u044c\u0441\u044f \u0443 \u0434\u0430\u0432\u043d\u0456\u0439 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0456, \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0443 \u041f\u043e\u043b\u043e\u043d\u0456\u0441\u0442\u0438\u043a\u0438 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u0442\u0430 \u0414\u0430\u043b\u0456\u0434\u0436-\u041a\u043e\u043b\u0435\u0434\u0436\u0443 \u0443 \u041b\u043e\u043d\u0434\u043e\u043d\u0456. \u041f\u043e\u0435\u0442, \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0439 \u043a\u0440\u0438\u0442\u0438\u043a, \u0441\u0442\u0438\u043f\u0435\u043d\u0434\u0438\u0441\u0442 \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0438 \u0442\u0430 \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u0441\u043f\u0430\u0434\u0449\u0438\u043d\u0438 (2010). </p>\r\n\r\n<p><strong>\u041f\u0430\u0443\u043b\u0456\u043d\u0430 \u0425\u043e\u0440\u043e\u043c\u0430\u043d\u0441\u044c\u043a\u0430</strong> \u2013 \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 \u0406\u0406 \u043a\u0443\u0440\u0441\u0443 \u043c\u0430\u0433\u0456\u0441\u0442\u0440\u0430\u0442\u0443\u0440\u0438 \u0432 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u043d\u0430\u0443\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0442\u0430 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u0437\u043d\u0430\u0432\u0441\u0442\u0432\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u041f\u0440\u0430\u0446\u044e\u0454 \u0442\u0430\u043a\u043e\u0436 \u0443 \u0412\u0456\u0434\u0434\u0456\u043b\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0456\u0457 \u0442\u0435\u0430\u0442\u0440\u0443 \u0432 \u0422\u0435\u0430\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u0456\u043c. \u0417. \u0420\u0430\u0448\u0435\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443 \u0412\u0430\u0440\u0448\u0430\u0432\u0456.</p>\r\n\r\n<p><strong>\u0410\u043d\u0435\u0442\u0430 \u0420\u0430\u0432\u0441\u044c\u043a\u0430</strong> - \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 \u0406\u0406 \u043a\u0443\u0440\u0441\u0443 \u043c\u0430\u0433\u0456\u0441\u0442\u0440\u0430\u0442\u0443\u0440\u0438 \u0432 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u043d\u0430\u0443\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0442\u0430 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u0437\u043d\u0430\u0432\u0441\u0442\u0432\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443, \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u043a\u0430 \u0432\u0438\u043f\u0456\u0447\u043a\u0438 \u0442\u0430 \u0434\u043e\u0431\u0440\u043e\u0457 \u043a\u0443\u0445\u043d\u0456. \u0417 2009 \u0440\u043e\u043a\u0443 \u0437\u0430\u0439\u043c\u0430\u0454\u0442\u044c\u0441\u044f \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043d\u043e\u044e \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u043e\u044e \u0433\u0443\u0440\u0442\u043a\u0430 \u041f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u0441\u043f\u0456\u043b\u043a\u0438 \u0440\u0438\u0431\u0430\u043b\u043e\u043a \u2116 21 \u0443 \u0412\u043e\u043b\u043e\u043c\u0456\u043d\u0456.</p>\r\n", - "title_en": "The team", - "left_column_pl": "<p><strong>Magdalena Biernat</strong> \u2013 koordynatorka projektu, dyrektor zarz\u0105dzaj\u0105ca fundacji Nowoczesna Polska. Socjolo\u017cka, absolwentka Uniwersytetu Warszawskiego i L\u2019Universit\u00e9 libre de Bruxelles. Specjalistka od projekt\u00f3w internetowych. Koordynowa\u0142a projekty Kandydaci 2009 i Mam Prawo Wiedzie\u0107 w Stowarzyszeniu 61. Pracowa\u0142a przy wielu badaniach spo\u0142ecznych realizowanych przez organizacje pozarz\u0105dowe i firmy badawcze. </p>\r\n\r\n<p><strong>Rados\u0142aw Czajka</strong> \u2013 g\u0142\u00f3wny programista, studiowa\u0142 informatyk\u0119 na MIMUW. Bieg\u0142y w j\u0119zykach programowania, znacznik\u00f3w: Python, XHTML, Javascript, CSS, LaTeX, SQL. Posiada do\u015bwiadczenie z frameworkami Django, Jquery, do\u015bwiadczenie w przekszta\u0142ceniach dokument\u00f3w XML (XSLT), w produkcji ebook\u00f3w w formatach PDF i EPUB oraz w tworzeniu aplikacji mobilnych na system Android i iOS.</p>\r\n\r\n<p><strong>Marcin Koziej </strong>\u2013 programista. Absolwent Politechniki Warszawskiej i doktorant w Instytucie Filozofii Uniwersytetu Warszawskiego. Dzia\u0142acz Mokotowskiej Kooperatywy Spo\u017cywczej. Podr\u00f3\u017cnik, rowerzysta i biesiadnik. Homo ludens.</p>\r\n\r\n<p><strong>Marta Niedzia\u0142kowska</strong> \u2013 redaktorka techniczna, absolwentka bibliotekoznawstwa i informacji naukowej UW. Studentka studi\u00f3w magisterskich Public Policy and Administration na Collegium Civitas. </p>\r\n\r\n", - "left_column_it": "<p><strong>Magdalena Biernat</strong> \u2013 coordinatrice del progetto, direttrice della fondazione Polonia Moderna. Si \u00e8 laureata in sociologia presso l\u2019Universit\u00e0 di Varsavia e L\u2019Universit\u00e9 libre de Bruxelles.Esperto di web design, ha coordinato i progetti Candidati 2009 e Ho Diritto di Sapere in Associazione 61. Ha lavorato su molte ricerche sociali svolte dalle organizzazioni non governative e di ricerca.</p>\r\n\r\n<p><strong>Rados\u0142aw Czajka</strong> \u2013 programmatore principale, ha studiato informatica al MIMUW (Dipartimento di Matematica, Informatica e Meccanica dell\u2019Universit\u00e0 di Varsavia). Conosce bene i linguaggi di programmazione, tag: Python, XHTML, Javascript, CSS, LaTeX, SQL. Ha esperienza con framework Django, Jquery, nella trasformazione di documenti XML (XSLT), nella produzione di e-books in formato PDF e EPUB e nella creazione di applicazioni mobili per il sistema Android e iOS.</p>\r\n\r\n<p><strong>Marcin Koziej</strong> \u2013 programmatore. Laureato presso Politechnika Warszawska (Universit\u00e0 della Tecnologia di Varsavia), ha conseguito il dottorato di ricerca presso l\u2019Istituto di Filosofia dell\u2019Universit\u00e0 di Varsavia. Attivista di Mokotowska Kooperatywa Spo\u017cywcza.E' inoltre viaggiatore, ciclista e homo ludens.</p>\r\n\r\n<p><strong>Marta Niedzia\u0142kowska</strong> \u2013 redattrice tecnica, laureata all\u2019Istituto di Informazione Scientifica e Biblioteconomia dell\u2019Universit\u00e0 di Varsavia. Studentessa di Public Policy and Administration in Collegium Civitas.</p>\r\n\r\n\r\n", - "title_es": "El equipo", - "left_column_ru": "\ufeff<p><strong>\u041c\u0430\u0433\u0434\u0430\u043b\u0435\u043d\u0430 \u0411\u0435\u0440\u043d\u0430\u0442</strong> \u2013 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440 \u0424\u043e\u043d\u0434\u0430 Nowoczesna Polska. \u0421\u043e\u0446\u0438\u043e\u043b\u043e\u0433, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \u0438 L\u2019Universit\u00e9 libre de Bruxelles. \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. \u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u00ab\u041a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u044b 2009\u00bb \u0438 \u00ab\u0423 \u043c\u0435\u043d\u044f \u043f\u0440\u0430\u0432\u043e \u0437\u043d\u0430\u0442\u044c\u00bb \u0432 \u041e\u0431\u0449\u0435\u0441\u0442\u0432\u0435 61. \u0420\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043d\u0430\u0434 \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u0438 \u043e\u043f\u0440\u043e\u0441\u043d\u044b\u043c\u0438 \u0444\u0438\u0440\u043c\u0430\u043c\u0438. </p>\r\n\r\n<p><strong>\u0420\u0430\u0434\u043e\u0441\u043b\u0430\u0432 \u0427\u0430\u0439\u043a\u0430</strong> \u2013 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a\u0438 \u0432 \u041c\u0418\u041c\u0412\u0423. \u0411\u0435\u0433\u043b\u043e \u0437\u043d\u0430\u0435\u0442 \u044f\u0437\u044b\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: Python, XHTML, Javascript, CSS, LaTeX, SQL. \u0418\u043c\u0435\u0435\u0442 \u043e\u043f\u044b\u0442 \u0441 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c\u0438 \u0442\u0438\u043f\u0430: Django, Jquery; \u043e\u043f\u044b\u0442 \u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 XML (XSLT), \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 PDF \u0438 EPUB, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 Android \u0438 Ios.</p>\r\n\r\n<p><strong>\u041c\u0430\u0440\u0447\u0438\u043d \u041a\u043e\u0437\u0435\u0439 </strong>\u2013 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442. \u0412\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u041f\u043e\u043b\u0438\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0430 \u0438 \u0434\u043e\u043a\u0442\u043e\u0440\u0430\u043d\u0442 \u0432 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0435 \u0424\u0438\u043b\u043e\u0441\u043e\u0444\u0438\u0438 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430. \u0414\u0435\u044f\u0442\u0435\u043b\u044c \u041c\u043e\u043a\u043e\u0442\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u0430. \u041f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a, \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0438\u0441\u0442 \u0438 \u043f\u0438\u0440\u0443\u044e\u0449\u0438\u0439. Homo ludens.</p>\r\n\r\n<p><strong>\u041c\u0430\u0440\u0442\u0430 \u041d\u0435\u0434\u044f\u043b\u043a\u043e\u0432\u0441\u043a\u0430 </strong> \u2013 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u0430 \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u0443\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0412\u0423. \u0421\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 Public Policy and Administration \u0432 Collegium Civitas. </p>\r\n\r\n", - "slug": "zespol", - "right_column_de": "<p><strong>Dorota A. Kowalska</strong> - Bearbeiterin im Literaturbereich, Sprachwissenschaftlerin, Polonistin und Slavistin, Doktortitel in Geisteswissenschaften, Mitarbeiterin in Pracownia Polszczyzny Kresowej IJP PAN, wo sie sich mit der Geschichte und dem heutigen Stand der polnischen Sprache in der Ukraine besch\u00e4ftigt. Sein Steckenpferd ist das Singen von alten russischen und ukrainischen Liedern. Radfahrerin.</p>\r\n\r\n<p><strong>Aleksandra Seku\u0142a</strong> - Bearbeiterin im Literaturbereich, Literaturgeschichtsforscherin, Doktortitel in Geisteswissenschaften, Absolventin der Polonistik an der Universit\u00e4t Warschau und der Gesellschaftswissenschaftsschule bei IFiS PAN. Beruflich und wissenschaftlich befasst sie sich mit der polnischen Romantik, Ideengeschichte und Kulturtheorie. </p>\r\n \r\n<p><strong>Pawe\u0142 Kozio\u0142 </strong> - Bearbeiter im Literaturbereich. 1979 geboren, Doktortitel in Geisteswissenschaften, Spezialisierung f\u00fcr die alte Literatur, Absolvent der Polonistik an der Universit\u00e4t Warschau und des Dulwich Colleges in London. Dichter, Literaturkritiker, Stipendiat des Ministeriums f\u00fcr Kultur und Nationale Erbe (2010). </p>\r\n\r\n<p><strong>Paulina Choroma\u0144ska</strong> - Textbearbeiterin, Studentin im 4. Semester des Masterstudiums im Insitut f\u00fcr Wissenschaftsinformation und Bibliothekwissenschaft an der Universit\u00e4t Warschau. Sie arbeitet auch in der Forschungsst\u00e4tte f\u00fcr Theaterdokumentation im Zbigniew-Raszewski-Theaterinsitut in Warschau.</p>\r\n\r\n<p><strong>Aneta Rawska</strong> - Textbearbeiterin, Studentin im 4. Semester des Masterstudiums im Insitut f\u00fcr Wissenschaftsinformation und Bibliothekwissenschaft. Sie mag gute K\u00fcche und ist Backenliebhaberin. Ab 2009 f\u00fchrt sie den Service des Polnischen Anglervereins Nr. 21 in Wo\u0142omin.</p>\r\n", - "left_column_es": "<p><strong>Magdalena Biernat</strong> \u2013 la coordinadora del proyecto, directora ejecutiva de la Fundaci\u00f3n Polonia Moderna. Soci\u00f3loga, licenciada por la Universidad de Varsovia y de L\u2019Universit\u00e9 libre de Bruxelles. Especializada en proyectos de Internet. Coordin\u00f3 los proyectos \u2018Candidatos 2009\u2019 y \u2018Tengo el Derecho de Saber\u2019 en la Asociaci\u00f3n 61. Ha trabajado en varias investigaciones sociales realizadas por organizaciones no gubernamentales y empresas investigadoras.</p>\r\n\r\n<p><strong>Rados\u0142aw Czajka</strong> \u2013 programador principal. Estudi\u00f3 inform\u00e1tica en MIM UW (La Facultad de Matem\u00e1ticas, Inform\u00e1tica y Mec\u00e1nica de la Universidad de Varsovia). Conoce los lenguajes de programaci\u00f3n y los marcados: Python, XHTML, Javascript, CSS, LaTex, SQL. Tiene experiencia en los frameworks Django, Jquery; en la transformaci\u00f3n de los archivos XML (XSLT), en la producci\u00f3n de libros electr\u00f3nicos en los formatos PDF y EPUB, incluso tambi\u00e9n en la creaci\u00f3n de aplicaciones m\u00f3viles para los sistema Android e iOS.</p>\r\n\r\n<p><strong>Marcin Koziej </strong> \u2013 programador. El incansable amateur de filosof\u00eda, inform\u00e1tico, viajero, ciclista y juerguista. Homo ludens.</p>\r\n\r\n<p><strong>Marta Niedzia\u0142kowska</strong> \u2013 redactora t\u00e9cnica, licenciada en Ciencias de la Informaci\u00f3n y Bibliotecolog\u00eda de la Universidad de Varsovia. Estudiante de segundo curso de licenciatura de Public Policy and Administration en el Collegium Civitas. </p>\r\n", - "left_column_en": "<p><strong>Magdalena Biernat</strong> - Project Coordinator, Managing Director of the Modern Poland Foundation. She is a sociologist, graduate of Warsaw University and L'Universit\u00e9 libre de Bruxelles, and a web-based project specialist. She coordinated projects \"Kandydaci 2009\" and \"Mam Prawo Wiedzie\u0107\" in Stowarzyszenie 61. She has been working on social research carried out by non-governmental organizations and research companies.</p>\r\n\r\n<p><strong>Rados\u0142aw Czajka</strong> - chief programmer, he studied informatics at the Faculty of Mathematics, Informatics and Mechanics, Warsaw University. Proficient in programming languages, Python, XHTML, Javascript, CSS, LaTeX, SQL markup. He has experience in working with Django framework, Jquery, converting XML (XSLT) documents, creating e-books in PDF and EPUB formats and creating mobile applications for Android and iOS systems.</p>\r\n\r\n<p><strong>Marcin Koziej </strong> - programmer. He is an indefatigable enthusiast of philosophy, IT specialist, traveller, cyclist and reveller. Homo Ludens.</p>\r\n\r\n<p><strong>Marta Niedzia\u0142kowska</strong> - production editor, graduate of the Information and Book Studies at Warsaw University. She is an undergraduate student of Public Policy and Administration at Collegium Civitas in Warsaw.</p>", - "right_column_fr": "<p><strong>Dorota A. Kowalska</strong> \u2013 r\u00e9dactrice litt\u00e9raire, linguiste, poloniste et slaviste, docteure en Lettres, conf\u00e9renci\u00e8re dans le Laboratoire de la Langue polonaise des Confins de l'INP PAN (l'Institut de la Langue polonaise de l'Acad\u00e9mie polonaise des Sciences) o\u00f9 elle s'occupe de l'histoire et contemporan\u00e9it\u00e9 de la langue polonaise en Ukraine. Pour son plaisir, elle chante des chansons archa\u00efque ukrainiennes et russes. Elle est aussi cycliste.</p>\r\n\r\n<p><strong>Aleksandra Seku\u0142a</strong> \u2013 r\u00e9dactrice litt\u00e9raire, historienne de la litt\u00e9rature, docteur \u00e8s lettres, gradu\u00e9e en D\u00e9partement de Langue polonaise de l'Universit\u00e9 de Varsovie et en \u00c9cole des Sciences Sociales de IFiS PAN (l'Institut de Philosophie et Sociologie de l'Acad\u00e9mie polonaise des Sciences). Professionnellement, elle s'occupe du romantisme polonais, histoire des id\u00e9es et th\u00e9orie de la culture.</p>\r\n\r\n<p><strong>Pawe\u0142 Kozio\u0142 </strong> \u2013 r\u00e9dacteur litt\u00e9raire, n\u00e9 en 1979, docteur en Lettres qui se sp\u00e9cialise en litt\u00e9rature ancienne, gradu\u00e9 en D\u00e9partement de Langue polonaise de l'Universit\u00e9 de Varsovie et en Dulwich College \u00e0 Londres. Il est aussi po\u00e8te, critique litt\u00e9raire, boursier du Minist\u00e8re de la Culture et du Patrimoine national (2010). </p>\r\n\r\n<p><strong>Paulina Choroma\u0144ska</strong> \u2013 r\u00e9dactrice technique, \u00e9tudiante de la deuxi\u00e8me ann\u00e9e d'\u00e9tudes secondaires Bibliothecologie et Sciences de l'Information de l'Universit\u00e9 de Varsovie. Elle travaille aussi dans le Centre de Documentation de Th\u00e9\u00e2tre de l'Institut th\u00e9\u00e2tral de Z. Raszewski \u00e0 Varsovie.</p>\r\n\r\n<p><strong>Aneta Rawska</strong> - r\u00e9dactrice technique, \u00e9tudiante de la deuxi\u00e8me ann\u00e9e d'\u00e9tudes secondaires en Bibliothecologie et Sciences de l'Information de l'Universit\u00e9 de Varsovie, amateure des fourn\u00e9es et bonne cuisine. Depuis 2009 elle administre le site du cercle 21 de l'Association polonaise de P\u00eache \u00e0 Wo\u0142omin.</p>\r\n", - "title_ru": "\ufeff\u041a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430", - "title_it": "Il nostro staff" - } - }, - { - "pk": 6, - "model": "infopages.infopage", - "fields": { - "title_de": "Arbeite zusammen", - "left_column_uk": "\ufeff<ul>\r\n<li>\u0421\u0442\u0430\u043d\u044c \u043d\u0430\u0448\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442\u043e\u043c \u0430\u0431\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u0430\u0447\u0435\u043c</li>\r\n<li>\u0417\u0434\u043e\u0431\u0443\u0434\u044c \u043d\u043e\u0432\u0456 \u0443\u043c\u0456\u043d\u043d\u044f \u0442\u0430 \u0434\u043e\u0441\u0432\u0456\u0434 </li>\r\n<li>\u0412\u0456\u0437\u044c\u043c\u0438 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0456 \u0442\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0436\u0438 \u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u0456\u043d\u043d\u043e\u0432\u0430\u0446\u0456\u0439\u043d\u0443 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0443 </li>\r\n</ul>\r\n\r\n<p>\u0417\u0430\u043f\u0440\u043e\u0448\u0443\u0454\u043c\u043e \u0443\u0441\u0456\u0445, \u0445\u0442\u043e \u0445\u043e\u0447\u0435 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0443 \u043d\u0430\u0448\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0456. \u0421\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454\u043c\u043e \u0437\u0456 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c\u0438, \u0432\u0447\u0438\u0442\u0435\u043b\u044f\u043c\u0438 \u0442\u0430 \u0443\u0441\u0456\u043c\u0430, \u0445\u0442\u043e \u0446\u0456\u043a\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043e\u044e, \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f\u043c \u0442\u0435\u043a\u0441\u0442\u0456\u0432 \u0442\u0430 \u043a\u043e\u043c\u043f\u2019\u044e\u0442\u0435\u0440\u043d\u0438\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438. \u041c\u0438 \u043f\u0440\u043e\u043f\u043e\u043d\u0443\u0454\u043c\u043e \u043f\u0440\u043e\u0444\u0435\u0441\u0456\u0439\u043d\u0456 \u0442\u0440\u0435\u043d\u0456\u043d\u0433\u0438 \u0442\u0430 \u043f\u043e\u0441\u0442\u0456\u0439\u043d\u0443 \u0437\u043c\u0456\u0441\u0442\u043e\u0432\u043d\u0443 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0443. \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438 \u043c\u043e\u0436\u0443\u0442\u044c \u043f\u0440\u0430\u0446\u044e\u0432\u0430\u0442\u0438 \u0432 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u043c\u0443 \u0440\u0435\u0436\u0438\u043c\u0456 \u0430\u0431\u043e \u0432 \u043e\u0444\u0456\u0441\u0456 \u0424\u043e\u043d\u0434\u0443.</p>\r\n<p>\u0422\u0430\u043a\u043e\u0436 \u043c\u0438 \u043e\u0440\u0433\u0430\u043d\u0456\u0437\u0443\u0454\u043c\u043e \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0441\u044c\u043a\u0456 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 - \u0440\u043e\u0437\u043f\u043e\u0447\u0430\u043b\u0438 \u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e \u0437 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u043e\u043c \u043d\u0430\u0443\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0442\u0430 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u0437\u043d\u0430\u0432\u0447\u0438\u0445 \u0434\u043e\u0441\u043b\u0456\u0434\u0436\u0435\u043d\u044c \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443, \u0421\u0442\u0443\u0434\u0435\u043d\u0442\u0441\u044c\u043a\u0438\u043c \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0437\u0430\u0439\u043d\u044f\u0442\u043e\u0441\u0442\u0456 \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u041a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u0430 \u0421\u0442\u0435\u0444\u0430\u043d\u0430 \u0412\u0438\u0448\u0438\u043d\u0441\u044c\u043a\u043e\u0433\u043e \u0442\u0430 \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u043e\u043c \u0424\u0456\u0437\u0438\u043a\u0438 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. </p>\r\n\r\n<h3>\u042f\u043a \u0434\u043e \u043d\u0430\u0441 \u043f\u0440\u0438\u0454\u0434\u043d\u0430\u0442\u0438\u0441\u044f?</h3>\r\n<p>\u0423\u0441\u0456\u0445 \u0437\u0430\u0446\u0456\u043a\u0430\u0432\u043b\u0435\u043d\u0438\u0445 \u043f\u0440\u043e\u0441\u0438\u043c\u043e \u0432\u0438\u0441\u043b\u0430\u0442\u0438 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0443 <a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n\r\n\r\n\r\n", - "main_page": 4, - "right_column_pl": "<h3>Kogo szukamy?</h3>\r\n\r\n<h3>Redaktor\u00f3w technicznych (sk\u0142ad tekstu)</h3>\r\n<p>Sk\u0142ad jest pierwszym etapem pracy nad tekstem. Za pomoc\u0105 znacznik\u00f3w j\u0119zyka WL-XML nadajemy tekstowi po\u017c\u0105dan\u0105 form\u0119 i umo\u017cliwiamy wy\u015bwietlenie go na stronie internetowej. Redakcje techniczna dokonywana jest na <a href=\"http://redakcja.wolnelektury.pl\">Platformie Redakcyjnej</a>, kt\u00f3ra pozwala na zautomatyzowanie du\u017cej cz\u0119\u015bci pracy.</p>\r\n\r\n<p><b>Kto mo\u017ce zosta\u0107 redaktorem technicznym?</b></p>\r\n<ul>\r\n<li>Ka\u017cdy \u2013 po kr\u00f3tkim szkoleniu.</li>\r\n</ul>\r\n\r\n<p>Wi\u0119cej informacji o redakcji technicznej znajdziecie na <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\">stronie redakcji Wolnych Lektur</a></p>\r\n\r\n<hr/>\r\n\r\n<h3>Redaktor\u00f3w literackich (merytorycznych)</h3>\r\n<p>Redakcja literacka obejmuje korekt\u0119, uwsp\u00f3\u0142cze\u015bnienia oraz dodawanie przypis\u00f3w i motyw\u00f3w literackich. To unikalna mo\u017cliwo\u015b\u0107 zdobycia do\u015bwiadczenia w cyfrowej edycji tekst\u00f3w.</p>\r\n\r\n<p><b>Kto mo\u017ce zosta\u0107 redaktorem literackim?</b></p>\r\n<ul>\r\n<li>Osoby, kt\u00f3re maj\u0105 do\u015bwiadczenie w redakcji tekst\u00f3w literackich,</li>\r\n<li>Studenci i absolwenci studi\u00f3w humanistycznych, kt\u00f3rzy chc\u0105 takie do\u015bwiadczenie zdoby\u0107.</li>\r\n</ul>\r\n<p>Wi\u0119cej informacji o redakcji merytorycznej znajdziecie na <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\">stronie redakcji Wolnych Lektur</a></p>\r\n<hr/>\r\n\r\n<h3>T\u0142umaczy</h3>\r\n<p>Strona WolneLektury.pl jest dost\u0119pna w siedmiu j\u0119zykach obcych \u2013 angielskim, francuskim, niemieckim, hiszpa\u0144skim, litewskim, rosyjskim oraz ukrai\u0144skim. U\u017cytkownikami biblioteki jest ponad 200 tysi\u0119cy os\u00f3b z zagranicy, a ju\u017c nied\u0142ugo nasze zbiory obejm\u0105 r\u00f3wnie\u017c dzie\u0142a w j\u0119zykach obcych. Dlatego potrzebujemy na bie\u017c\u0105co t\u0142umaczy\u0107 nowe informacje pojawiaj\u0105ce si\u0119 na stronie.</p>\r\n<p><b>Kto mo\u017ce pom\u00f3c w t\u0142umaczeniach?</b></p>\r\n<ul>\r\n<li>Ka\u017cdy, kto dobrze zna co najmniej jeden z powy\u017cszych j\u0119zyk\u00f3w.</li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h3>Programist\u00f3w</h3>\r\n<p>Poza sam\u0105 stron\u0105 Wolnych Lektur tworzymy r\u00f3wnie\u017c:</p>\r\n<ul>\r\n<li>narz\u0119dzia redakcyjne,</li>\r\n<li>konwertery do r\u00f3\u017cnych format\u00f3w e-book\u00f3w,</li>\r\n<li>aplikacje mobile u\u0142atwiaj\u0105ce dost\u0119p do naszych zasob\u00f3w.</li>\r\n</ul>\r\n\r\n<p>U\u017cywamy takich technologii jak: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nTworzone przez nas oprogramowanie udost\u0119pniamy na <a href=\"https://github.com/fnp/\">wolnej licencji</a>.</p>\r\n<p><b>Kto mo\u017ce pom\u00f3c w pracach programistycznych?</b> </p>\r\n<ul>\r\n<li>Ka\u017cdy, kto umie i chcia\u0142by zdoby\u0107 punkty do karmy za udzia\u0142 w otwartym projekcie programistycznym. ;)</li>\r\n</ul>\r\n", - "right_column_lt": "\ufeff<h3>Koki\u0173 \u017emoni\u0173 ie\u0161kome? </h3>\r\n<h3>Technini\u0173 redaktori\u0173 (teksto sudarymas) </h3>\r\n<p>Teksto sudarymas tai pirmas etapas dirbant su tekstu. Naudojant kalbos WL-XML \u017eymes, galima sukurti pageidaujam\u0105 teksto form\u0105 ir parodyti j\u012f interneto svetain\u0117je. Techninis redagavimas yra atliekamas <a href=\"http://redakcja.wolnelektury.pl\"> Redakcin\u0117je Platformoje </a>, leid\u017eiant automatin\u012f darbo atlikim\u0105. </p>\r\n<p><b>Kas gali tapti techniniu redaktoriumi?</b> </p>\r\n<ul>\r\n<li>Kiekvienas, baig\u0119s trump\u0105 mokym\u0105. </li>\r\n</ul>\r\n<p>Papildomos informacijos apie technin\u012f redagavim\u0105\r\n<a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">interneto svetain\u0117s Wolne Lektury redakcijos tinklalapyje. </a> </p>\r\n<hr/>\r\n\r\n<h3>Literat\u016bros redaktori\u0173 (esmini\u0173) </h3>\r\n<p>Literat\u016bros redagavimas apima teksto taisym\u0105, i\u0161na\u0161\u0173 ir motyv\u0173 prid\u0117jim\u0105. Tai unikali galimyb\u0117 \u012fgyti patirties teksto skaitmeninioje leidyboje. </p>\r\n\r\n<p><b>Kas gali tapti literat\u016bros redaktoriumi? </b> </p>\r\n<ul>\r\n<li>Asmenys turintys patirties literat\u016bros tekst\u0173 redagavimo srityje, </li>\r\n<li>Studentai bei absolventai humanitarini\u0173 moksl\u0173 studij\u0173 norinys igyti tokios patirties. </li>\r\n</ul>\r\n<p>Papildomos informacijos apie esmin\u012f redagavim\u0105\r\n<a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">interneto svetain\u0117s Wolne Lektury redakcijos tinklalapyje.</a> </p>\r\n<hr/>\r\n\r\n<h3>Vert\u0117j\u0173</h3>\r\n<p>Interneto svetain\u0117 WolneLektury.pl yra prieinama septyniomis u\u017esienio kalbomis \u2013 angl\u0173, pranc\u016bz\u0173, vokie\u010di\u0173, ispan\u0173, lietuvi\u0173, rus\u0173 bei ukrainie\u010di\u0173. \u0160ios bibliotekos u\u017esienio vartotoj\u0173 kiekis tai 200 t\u016bks., be to m\u016bs\u0173 i\u0161tekliai netrukus apims u\u017esienio kalb\u0173 k\u016brinius. D\u0117l to yra reikalingas \u0161ios interneto svetain\u0117s nauj\u0173 informacij\u0173 nuolatinis vertimas. </p>\r\n<p><b>Kas gali pad\u0117ti versti? </b> </p>\r\n<ul>\r\n<li>Kiekvienas gerai mokantys bent vien\u0105 i\u0161 anks\u010diau i\u0161vardyt\u0173 kalb\u0173. </li>\r\n</ul>\r\n<hr/>\r\n\r\n<h3>Programuotoj\u0173</h3>\r\n<p>I\u0161skyrus interneto svetain\u0119 Wolne Lektury, taip pat kuriame: </p>\r\n<ul>\r\n<li>redagavimo \u012frankius,</li>\r\n<li>\u012fvairi\u0173 format\u0173 e-knyg\u0173 konverterius, </li>\r\n\r\n<li> mobili\u0105sias programas lengvinan\u010dias prieig\u0105 prie m\u016bs\u0173 i\u0161tekli\u0173.</li>\r\n</ul>\r\n<p>Naudojame tokias technologijas kaip: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nM\u016bs\u0173 kuriama programin\u0117 \u012franga yra prieinama pagal <a href=\"https://github.com/fnp/\">laisv\u0105 licencij\u0105</a>. </p>\r\n<p><b>Kas gali pad\u0117ti programavimo darbuose?</b> </p>\r\n<ul>\r\n\r\n<li>Kiekvienas galintis ir norintis \u012fgauti patirties dalyvaudamas programavimo atvirame projekte. ;)</li>\r\n</ul>", - "left_column_lt": "\ufeff<ul>\r\n<li>Tapkite m\u016bs\u0173 redaktoriumi, programuotoju, arba vert\u0117ju</li>\r\n<li>\u012egykite \u012fg\u016bd\u017ei\u0173 ir patirties</li>\r\n<li>Dalyvaukite atvirame projekte ir kurkite naujovi\u0161k\u0105 internetin\u0119 bibliotek\u0105</li>\r\n</ul>\r\n\r\n<p>Kvie\u010diame visus norin\u010dius prisid\u0117ti prie m\u016bs\u0173 projekto. Bendradarbiaujame su studentais, mokytojais ir su visais susidom\u0117jusiais literat\u016bra, teksto redagavimu ir informaciniais projektais. Si\u016blome profesional\u0173 mokym\u0105 ir nuolatin\u0119 esmin\u0119 pagalb\u0105.\r\nSavanoriai gali dirbti nuotoliniu b\u016bdu arba fondo b\u016bstin\u0117je. </p>\r\n<p>Taip pat organizuojame student\u0173 praktikas \u2013 bendradarbiaujame su Var\u0161uvos universiteto Mokslin\u0117s informacijos bei bibliologijos studij\u0173 institutu, Kardinolo Stefano Vi\u0161inskio universiteto Karjer\u0173 skyriumi bei su Var\u0161uvos universiteto Fizikos fakultetu. </p>\r\n\r\n\r\n<h3>Kaip galite prane\u0161ti apie save?</h3>\r\n</h3>Visus susidom\u0117jusius pra\u0161ome ra\u0161yti adresu<a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n", - "title_fr": "Engagez-vous dans le travail", - "right_column_ru": "\ufeff<h3>\u041a\u043e\u0433\u043e \u043c\u044b \u0438\u0449\u0435\u043c?</h3>\r\n\r\n<h3>\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u0432 (\u043d\u0430\u0431\u043e\u0440 \u0442\u0435\u043a\u0441\u0442\u043e\u0432). </h3>\r\n <p>\u041d\u0430\u0431\u043e\u0440 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0434 \u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e WL-XML \u044f\u0437\u044b\u043a\u0430 \u0442\u0435\u043a\u0441\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435. \r\n\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 <a href=\"http://redakcja.wolnelektury.pl\">\u0420\u0435\u0434\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435</a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043d\u0430\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b. </p>\r\n\r\n <p><b>\u041a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c?</b> </p>\r\n<ul>\r\n<li>\u041b\u044e\u0431\u043e\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u2013 \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f.</li>\r\n</ul>\r\n\r\n <p>\u0411\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\"> \u0441\u0430\u0439\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Wolnych Lektur</a> </p>\r\n\r\n<hr/>\r\n\r\n<h3>\u041b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 (\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0430\u043d\u0442) </h3>\r\n <p>\u041b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0430\u044f \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0443\u0440\u0443, \u043e\u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0439 \u0438 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432. \r\n\u042d\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u043e\u043f\u044b\u0442 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432.</p>\r\n\r\n <p><b>\u041a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c? </b> </p>\r\n<ul>\r\n<li>\u041b\u0438\u0446\u0430, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u044b\u0442 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439.</li>\r\n<li>\u0421\u0442\u0443\u0434\u0435\u043d\u0442\u044b \u0438 \u0430\u0431\u0438\u0442\u0443\u0440\u0438\u0435\u043d\u0442\u044b \u0433\u0443\u043c\u0430\u043d\u0438\u0442\u0430\u0440\u043d\u044b\u0445 \u0443\u0447\u0435\u0431\u043d\u044b\u0445 \u0437\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u044f\u0442 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u0442\u0430\u043a\u043e\u0439 \u043e\u043f\u044b\u0442. </li>\r\n</ul>\r\n<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u0441\u0447\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">\u0441\u0430\u0439\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Wolnych Lektur</a> </p>\r\n<hr/>\r\n\r\n<h3>\u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u043e\u0432</h3>\r\n <p>\u0421\u0430\u0439\u0442 WolneLektury.pl \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043d\u0430 7 \u0438\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u2013 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c, \u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u043e\u043c, \u043d\u0435\u043c\u0435\u0446\u043a\u043e\u043c, \u0438\u0441\u043f\u0430\u043d\u0441\u043a\u043e\u043c, \u043b\u0438\u0442\u043e\u0432\u0441\u043a\u043e\u043c, \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u0438 \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u043e\u043c. \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 200 \u0442\u044b\u0441\u044f\u0447 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0438\u0437 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b. \u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043a\u043d\u0438\u0436\u043d\u044b\u0439 \u0444\u043e\u043d\u0434 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u0442 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u0430 \u0438\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445. \r\n\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0449\u0435\u0439\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. </p>\r\n <p><b>\u041a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044b?</b> </p>\r\n<ul>\r\n<li>\u041a\u0430\u0436\u0434\u044b\u0439, \u043a\u0442\u043e \u0437\u043d\u0430\u0435\u0442 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u044b\u0448\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432. </li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h3>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b.</h3>\r\n <p>\u041a\u0440\u043e\u043c\u0435 \u0441\u0430\u0439\u0442\u0430 Woln\u0435Lektur\u0443 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0430\u043a\u0436\u0435: </p>\r\n<ul>\r\n<li>narz\u0119dzia redakcyjne,</li>\r\n<li>\u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433</li>\r\n<li>\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0449\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0444\u043e\u043d\u0434\u0443.</li>\r\n</ul>\r\n\r\n <p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e: : Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\n\u0421\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0435 \u043d\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043f\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 <a href=\"https://github.com/fnp/\">\u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438</a>. </p>\r\n <p><b>\u041a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c?</b> </p>\r\n<ul>\r\n<li>\u041a\u0430\u0436\u0434\u044b\u0439, \u043a\u0442\u043e \u0437\u043d\u0430\u0435\u0442 \u043a\u0430\u043a, \u0438 \u043a\u0442\u043e \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u00ab\u043d\u0430\u0431\u0440\u0430\u0442\u044c \u043e\u0447\u043a\u043e\u0432\u00bb \u0432 \u0441\u0432\u043e\u044e \u00ab\u043a\u0430\u0440\u043c\u0443\u00bb \u0434\u043b\u044f \u0432\u0430\u0441 \u043e\u0442\u043a\u0440\u044b\u0442 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442. ;)</li>\r\n</ul>\r\n", - "left_column_fr": "<ul>\r\n<li>Devenez notre r\u00e9dacteur, programmeur ou traducteur!</li>\r\n<li>Acqu\u00e9rez de nouvelles comp\u00e9tences et exp\u00e9rience!</li>\r\n<li>Prenez part \u00e0 un projet ouvert et cr\u00e9ez une biblioth\u00e8que en ligne innovative!</li>\r\n</ul>\r\n\r\n<p>Nous invitons toutes les personnes qui sont int\u00e9ress\u00e9es par la participation \u00e0 notre projet. Nous coop\u00e9rons avec les \u00e9tudiants, professeurs et tous ceux qui s'int\u00e9ressent \u00e0 la litt\u00e9rature, \u00e0 la r\u00e9daction de textes ou aux projets informatiques. Nous offrons des instructions professionnelles et une aide substantielle constante. Les b\u00e9n\u00e9voles peuvent travailler chez eux ou bien dans le si\u00e8ge de la fondation.</p>\r\n<p>Nous organisons aussi des stages \u00e9tudiants - nous coop\u00e9rons avec l'Institut d'Information Scientifique et d'\u00c9tudes Bibliologiques de l'Universit\u00e9 de Varsovie, le Bureau des Carri\u00e8res de l'Universit\u00e9 Cardinal Stefan Wyszy\u0144ski \u00e0 Varsovie et la Facult\u00e9 de Physique de l'Universit\u00e9 de Varsovie. </p>\r\n\r\n<h3>Comment nous contacter?</h3>\r\n<p>Si vous \u00eates int\u00e9ress\u00e9s par notre projet, veuillez nous envoyer un courriel \u00e0 l'adresse suivante: <a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n", - "title": "Join in the work", - "title_lt": "Dalyvaukite projekte", - "right_column": "<h3>Who are we looking for?</h3>\r\n\r\n<h3>Production editors (text composition) </h3>\r\n <p>Text composition is the first stage in editing. By means of WL-XML markup we create a desired text format and display it on the webpage. Production editing takes place on <a href=\"http://redakcja.wolnelektury.pl\">Editorial Platform</a>, which enables us to automate a great deal of work. </p>\r\n\r\n <p><b>Who can become a production editor?</b> </p>\r\n<ul>\r\n<li>Anyone - after a short training.</li>\r\n</ul>\r\n\r\n <p>You will find more information on production editing on <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">editorial page of Wolne Lektury</a> </p>\r\n\r\n<hr/>\r\n\r\n<h3>Literary editors </h3>\r\n <p>Literary editing includes proofreading, updating and adding literary motifs. It is a unique opportunity to gain experience in digital text editing. </p>\r\n\r\n <p><b>Who can become a literary editor? </b> </p>\r\n<ul>\r\n<li>Those who have experience in literary text editing,</li>\r\n<li>Students and graduates of the humanities, who wants to gain such experience. </li>\r\n</ul>\r\n<p>You will find more information on literary editing on <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">editorial page of Wolne Lektury</a> </p>\r\n<hr/>\r\n\r\n<h3>Translators</h3>\r\n <p>WolneLektury.pl is available in 7 languages - English, French, German, Spanish, Lithuanian, Russian, and Ukrainian. The library is used by over 200 000 readers outside of Poland, and soon our collection will also include books written in foreign (non-Polish) languages. That is why we need to translate new pieces of information systematically, as they appear on the website. </p>\r\n <p><b>Who can help us translate? </b> </p>\r\n<ul>\r\n<li>Anyone with a good command of at least one of the languages listed above. </li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h3>Programmers</h3>\r\n <p>Apart from the website Wolne Lektury we also create: </p>\r\n<ul>\r\n<li>editorial tools,</li>\r\n<li>converters for various e-book formats, </li>\r\n<li>mobile applications facilitating access to our pages.</li>\r\n</ul>\r\n\r\n <p>We use technologies like: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nOur software is made available under <a href=\"https://github.com/fnp/\">the free license</a>. </p>\r\n <p><b>Who can help us with the programming?</b> </p>\r\n<ul>\r\n<li>Those who can do it and would like to gain experience by participating in an open programming project.</li>", - "right_column_es": "\ufeff<h3>\u00bfA qui\u00e9n buscamos?</h3>\r\n\r\n\r\n<h3>Redactores t\u00e9cnicos (composici\u00f3n tipogr\u00e1fica)</h3>\r\n <p>La composici\u00f3n tipogr\u00e1fica es la primera etapa del trabajo con el texto. Por medio de los marcados del idioma WL-XML le damos la forma deseada al texto y facilitamos su visualizaci\u00f3n en la p\u00e1gina web. La redacci\u00f3n t\u00e9cnica est\u00e1 realizada en <a href=\"http://redakcja.wolnelektury.pl\">la Plataforma Editorial</a>, que permite automatizar una gran parte del trabajo.</p>\r\n\r\n<p><b>\u00bfQui\u00e9n puede ser redactor t\u00e9cnico?</b> </p>\r\n<ul>\r\n<li>Cualquiera- despu\u00e9s de una breve formaci\u00f3n.</li>\r\n</ul>\r\n\r\n <p>Encontrar\u00e9is m\u00e1s informaci\u00f3n sobre la redacci\u00f3n t\u00e9cnica en <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\">la p\u00e1gina web de Wolne Lektury</a> </p>\r\n\r\n<hr/>\r\n\r\n<h3>Redactores literarios </h3>\r\n <p>La redacci\u00f3n literaria incluye la correcci\u00f3n de pruebas, adaptaci\u00f3n e inclusi\u00f3n de las notas a pie de p\u00e1gina , as\u00ed como el tratamiento de los temas literarios. Es una oportunidad \u00fanica de ganar experiencia en la edici\u00f3n digital de textos. </p>\r\n\r\n <p><b>\u00bfQui\u00e9n puede ser redactor literario? </b> </p>\r\n<ul>\r\n<li>Las personas que tengan experiencia en la redacci\u00f3n de textos literarios,</li>\r\n<li>estudiantes y licenciados en humanidades que desean obtener esta experiencia. </li>\r\n</ul>\r\n\r\n<p>Encontrar\u00e9is m\u00e1s informaci\u00f3n sobre la redacci\u00f3n literaria en <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">la p\u00e1gina web de Wolne Lektury</a> </p>\r\n\r\n<h3>Traductores</h3>\r\n<p>La p\u00e1gina web de Wolne Lektury.pl viene en 7 idiomas: ingl\u00e9s, franc\u00e9s, alem\u00e1n, espa\u00f1ol, lituano, ruso y ucraniano. Hay m\u00e1s de 200.000 usuarios del extranjero, adem\u00e1s, dentro de poco nuestra colecci\u00f3n incluir\u00e1 obras en otros idiomas. De ah\u00ed que necesitemos traducir sistem\u00e1ticamente nuevos contenidos que aparezcan en la p\u00e1gina. </p>\r\n<p><b>\u00bfQui\u00e9n puede ayudarnos con las traducciones?</b> </p>\r\n<ul>\r\n<li>Cualquiera que conozca bien por lo menos alguno de los idiomas anteriores.</li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h3>Programadores</h3>\r\n<p>Aparte de la p\u00e1gina creamos tambi\u00e9n:</p>\r\n<ul>\r\n<li>herramientas editoriales,</li>\r\n<li>convertidores para varios formatos de libros electr\u00f3nicos,</li>\r\n<li>aplicaciones m\u00f3viles que facilitan el acceso a nuestra colecci\u00f3n</li>\r\n</ul>\r\n\r\n <p>Usamos las siguientes tecnolog\u00edas: Python, Django, XHTML, JavaScript, jQuery, LaTex, Java. \r\nEl software creado por nosotros es <a href=\"https://github.com/fnp/\">libre</a>. </p>\r\n<p><b>\u00bfQui\u00e9n puede ayudar en las tareas programadores?</b> </p>\r\n<ul>\r\n<li>Cualquiera que sepa y quiera ganar puntos para su karma por la participaci\u00f3n en un proyecto de programaci\u00f3n abierto. ;)</li>\r\n</ul>\r\n\r\n", - "right_column_en": "<h3>Who are we looking for?</h3>\r\n\r\n<h3>Production editors (text composition) </h3>\r\n <p>Text composition is the first stage in editing. By means of WL-XML markup we create a desired text format and display it on the webpage. Production editing takes place on <a href=\"http://redakcja.wolnelektury.pl\">Editorial Platform</a>, which enables us to automate a great deal of work. </p>\r\n\r\n <p><b>Who can become a production editor?</b> </p>\r\n<ul>\r\n<li>Anyone - after a short training.</li>\r\n</ul>\r\n\r\n <p>You will find more information on production editing on <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">editorial page of Wolne Lektury</a> </p>\r\n\r\n<hr/>\r\n\r\n<h3>Literary editors </h3>\r\n <p>Literary editing includes proofreading, updating and adding literary motifs. It is a unique opportunity to gain experience in digital text editing. </p>\r\n\r\n <p><b>Who can become a literary editor? </b> </p>\r\n<ul>\r\n<li>Those who have experience in literary text editing,</li>\r\n<li>Students and graduates of the humanities, who wants to gain such experience. </li>\r\n</ul>\r\n<p>You will find more information on literary editing on <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">editorial page of Wolne Lektury</a> </p>\r\n<hr/>\r\n\r\n<h3>Translators</h3>\r\n <p>WolneLektury.pl is available in 7 languages - English, French, German, Spanish, Lithuanian, Russian, and Ukrainian. The library is used by over 200 000 readers outside of Poland, and soon our collection will also include books written in foreign (non-Polish) languages. That is why we need to translate new pieces of information systematically, as they appear on the website. </p>\r\n <p><b>Who can help us translate? </b> </p>\r\n<ul>\r\n<li>Anyone with a good command of at least one of the languages listed above. </li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h3>Programmers</h3>\r\n <p>Apart from the website Wolne Lektury we also create: </p>\r\n<ul>\r\n<li>editorial tools,</li>\r\n<li>converters for various e-book formats, </li>\r\n<li>mobile applications facilitating access to our pages.</li>\r\n</ul>\r\n\r\n <p>We use technologies like: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nOur software is made available under <a href=\"https://github.com/fnp/\">the free license</a>. </p>\r\n <p><b>Who can help us with the programming?</b> </p>\r\n<ul>\r\n<li>Those who can do it and would like to gain experience by participating in an open programming project.</li>", - "left_column_de": "<ul>\r\n<li>Werde unser Bearbeiter, Programmierer oder \u00dcbersetzter</li>\r\n<li>Erwirb neue F\u00e4higkeiten und Erfahrung</li>\r\n<li>Nimm an dem offenen Projekt teil und bilde eine innovative Internetbibliothek </li>\r\n</ul>\r\n\r\n<p>Wir laden alle Personen ein, die das Projekt mitgestalten m\u00f6chten. Wir arbeiten mit Studenten, Lehrern und Allen, die sich f\u00fcr Literatur, Textbearbeitung und informatische Projekte interessieren. Wir bieten professionelle Schulungen und st\u00e4ndige Sachhilfe. Volont\u00e4re k\u00f6nnen fern oder im Stiftungssitz arbeiten.</p>\r\n<p>Wir organisieren auch das Studentenpraktikum - wir arbeiten mit dem Institut f\u00fcr Wissenschaftsinformation und Bibliothekwissenschaft an der Universit\u00e4t Warschau, demKarriereb\u00fcro der Kardinal-Stefan-Wyszy\u00f1ski-Universit\u00e4t Warschau und der Fakult\u00e4t f\u00fcr Physik zusammen. </p>\r\n\r\n<h3>Wie kann man sich bei uns melden?</h3>\r\n<p>Alle Interessierten bitten wir um eine Mail an folgende Adresse <a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n\r\n\r\n\r\n", - "title_uk": "\ufeff\u0412\u0456\u0437\u044c\u043c\u0456\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u043d\u0430\u0448\u0456\u0439 \u0434\u0456\u044f\u043b\u044c\u043d\u043e\u0441\u0442\u0456", - "right_column_it": "<h3>Chi stiamo cercando?</h3>\r\n\r\n<h3>Redattori tecnici (composizione)</h3>\r\n <p>La composizione e la prima fase di lavoro sul testo. Utilizzando i tag di lingua WL-XML il testo ottiene una forma corretta e pu\u00f2 essere visualizzato sul sito web. La supervisione tecnica viene effettuata sulla <a href=\"http://redakcja.wolnelektury.pl\">Piattaforma Editoriale</a> che consente di automatizzare gran parte del lavoro.</p>\r\n\r\n<p><b>Chi puo diventare redattore tecnico?</b></p>\r\n<ul>\r\n<li>Ognuno-dopo un breve corso di formazione.</li>\r\n</ul>\r\n\r\n<p>Per maggiori informazioni sulla redazione tecnica andate <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\">sul sito web di Wolne Lektury (Letture Libere)</a></p>\r\n\r\n<hr/>\r\n\r\n<h3>Redattori letterari</h3>\r\n <p>Tale redazione include correzione, modernizzazione e aggiunta delle note e dei motivi letterari. E' l\u2019unica occasione di acquisire esperienza nell\u2019edizione digitale dei testi.</p>\r\n\r\n<p><b>Chi pu\u00f2 diventare redattore letterario?</b></p>\r\n<ul>\r\n<li>Le persone che hanno esperienza nella redazione dei testi letterari,< li>\r\n<li>Studenti e laureati in discipline umanistiche che vogliono acqusire tale esperienza.</li>\r\n</ul>\r\n<p>Per maggiori informazioni sulla redazione letteraria andate <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\"> sul sito web di Wolne Lektury</a></p>\r\n<hr/>\r\n\r\n<h3>Traduttori</h3>\r\n<p>Pagina WolneLektury.pl \u00e8 disponibile in sette lingue - inglese, francese, tedesco, spagnolo, lituano, russo e ucraino. Ci sono piu di 200 mila utenti della biblioteca provenienti dall'estero e tra poco le nostre collezioni comprenderanno anche le opere in lingue straniere.Per questo, dobbiamo continuare a tradurre le nuove informazioni che appaiono sul sito.</p>\r\n\r\n<p><b>Chi pu\u00f2 aiutare nelle traduzioni?</b></p>\r\n<ul>\r\n<li>Ognuno che conosce bene almeno una di queste lingue.</li>\r\n</ul>\r\n\r\n<hr/>\r\n<h3>Programmatori</h3>\r\n <p>Oltre al sito web di Letture Libere stiamo creando:</p>\r\n<ul>\r\n<li>strumenti editoriali,</li>\r\n<li>convertitori per diversi formati di e-books,</li>\r\n<li>applicazioni mobili che facilitino l\u2019accesso alle nostre risorse.</li>\r\n</ul>\r\n\r\n<p>Usiamo le tecnologie: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nIl nostro software \u00e8 disponibile su <a href=\"https://github.com/fnp/\">licenza libera</a>.</p>\r\n <p><b>Chi pu\u00f2 aiutare nei lavori di software?</b></p>\r\n<ul>\r\n<li>Ognuno che sa farlo e che vorrebbe ottenere i punti per Karma grazie alla partecipazione al progetto aperto di programmazione. ;)</li>\r\n</ul>\r\n\r\n", - "title_pl": "W\u0142\u0105cz si\u0119 w prace", - "left_column": "<ul>\r\n<li>Become our editor, programmer or traslator</li>\r\n<li>Gain new skills and experience </li>\r\n<li>Take part in an open project and create an innovative online library </li>\r\n</ul>\r\n\r\n<p>We invite every person to contribute to our project. We collaborate with students, teachers and anyone interested in literature, text editing and computer projects. We offer professional training courses and constant factual help. Volunteers can work at home or in our office.</p>\r\n<p>We also organize student trainings - we have established cooperation with the Institute of Information and Book Studies, Warsaw University (UW), the Careers Service at Cardinal Stefan Wyszy\u0144ski University in Warsaw, and with the Faculty of Physics, UW. </p>\r\n\r\n<h3>How to contact us?</h3>\r\n<p>We invite all the people interested to email us at<a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>", - "right_column_uk": "\ufeff<h3>\u041a\u043e\u0433\u043e \u043c\u0438 \u0448\u0443\u043a\u0430\u0454\u043c\u043e?</h3>\r\n\r\n<h3>\u0422\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0456\u0432 (\u0432\u0435\u0440\u0441\u0442\u043a\u0430) </h3>\r\n <p>\u0412\u0435\u0440\u0441\u0442\u043a\u0430 - \u0446\u0435 \u043f\u0435\u0440\u0448\u0438\u0439 \u0435\u0442\u0430\u043f \u043f\u0440\u0430\u0446\u0456 \u043d\u0430\u0434 \u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u0417\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u0442\u0435\u0433\u0456\u0432 \u043c\u043e\u0432\u0438 WL-XML \u043d\u0430\u0434\u0430\u0454\u043c\u043e \u0442\u0435\u043a\u0441\u0442\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0439 \u0432\u0438\u0433\u043b\u044f\u0434 \u0442\u0430 \u0440\u043e\u0431\u0438\u043c\u043e \u043c\u043e\u0436\u043b\u0438\u0432\u0438\u043c \u0457\u0445 \u043f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u044e \u043d\u0430 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u0456. \u0422\u0435\u0445\u043d\u0456\u0447\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u0438\u043a\u043e\u043d\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430 <a href=\"http://redakcja.wolnelektury.pl\">\u0420\u0435\u0434\u0430\u043a\u0446\u0456\u0439\u043d\u0456\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0456</a>, \u044f\u043a\u0430 \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0454 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0443\u0432\u0430\u0442\u0438 \u0432\u0435\u043b\u0438\u043a\u0443 \u0447\u0430\u0441\u0442\u0438\u043d\u0443 \u043f\u0440\u0430\u0446\u0456. </p>\r\n\r\n <p><b>\u0425\u0442\u043e \u043c\u043e\u0436\u0435 \u0441\u0442\u0430\u0442\u0438 \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c?</b> </p>\r\n<ul>\r\n<li>\u041a\u043e\u0436\u0435\u043d - \u043f\u0456\u0441\u043b\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u0442\u0440\u0435\u043d\u0456\u043d\u0433\u0443.</li>\r\n</ul>\r\n\r\n <p>\u0411\u0456\u043b\u044c\u0448\u0435 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u043f\u0440\u043e \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u043d\u0430 <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">\u0441\u0430\u0439\u0442\u0456 \u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0457 Wolne Lektury</a> </p>\r\n\r\n<hr/>\r\n\r\n<h3>\u041b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0456\u0432 </h3>\r\n <p>\u041b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0454 \u0432 \u0441\u0435\u0431\u0435 \u043a\u043e\u0440\u0435\u043a\u0442\u0443, \u043e\u0441\u0443\u0447\u0430\u0441\u043d\u0435\u043d\u043d\u044f \u0442\u0435\u043a\u0441\u0442\u0443, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0434\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u043f\u0440\u0438\u043c\u0456\u0442\u043e\u043a \u0442\u0430 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432. \u0426\u0435 \u0443\u043d\u0456\u043a\u0430\u043b\u044c\u043d\u0430 \u043c\u043e\u0436\u043b\u0438\u0432\u0456\u0441\u0442\u044c \u0437\u0434\u043e\u0431\u0443\u0442\u0438 \u0434\u043e\u0441\u0432\u0456\u0434 \u0443 \u0446\u0438\u0444\u0440\u043e\u0432\u0456\u0439 \u043e\u0431\u0440\u043e\u0431\u0446\u0456 \u0442\u0435\u043a\u0441\u0442\u0456\u0432. </p>\r\n\r\n <p><b>\u0425\u0442\u043e \u043c\u043e\u0436\u0435 \u0441\u0442\u0430\u0442\u0438 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c? </b> </p>\r\n<ul>\r\n<li>\u0422\u043e\u0439, \u0445\u0442\u043e \u043c\u0430\u0454 \u0434\u043e\u0441\u0432\u0456\u0434 \u0443 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u0456 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0442\u0435\u043a\u0441\u0442\u0456\u0432,</li>\r\n<li>\u0421\u0442\u0443\u0434\u0435\u043d\u0442\u0438 \u0442\u0430 \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u043a\u0438 \u0433\u0443\u043c\u0430\u043d\u0456\u0442\u0430\u0440\u043d\u0438\u0445 \u0444\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0456\u0432, \u044f\u043a\u0456 \u0445\u043e\u0447\u0443\u0442\u044c \u0437\u0434\u043e\u0431\u0443\u0442\u0438 \u0442\u0430\u043a\u0438\u0439 \u0434\u043e\u0441\u0432\u0456\u0434. </li>\r\n</ul>\r\n<p>\u0411\u0456\u043b\u044c\u0448\u0435 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u043f\u0440\u043e \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u043d\u0430 <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">\u0441\u0430\u0439\u0442\u0456 \u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0457 Wolne Lektury</a> </p>\r\n<hr/>\r\n\r\n<h3>\u041f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u0430\u0447\u0456\u0432</h3>\r\n <p>\u0421\u0430\u0439\u0442 WolneLektury.pl \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u0439 \u043d\u0430 \u0441\u0435\u043c\u0438 \u0456\u043d\u043e\u0437\u0435\u043c\u043d\u0438\u0445 \u043c\u043e\u0432\u0430\u0445 \u2013 \u0430\u043d\u0433\u043b\u0456\u0439\u0441\u044c\u043a\u0456\u0439, \u0444\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0456\u0439, \u043d\u0456\u043c\u0435\u0446\u044c\u043a\u0456\u0439, \u0456\u0441\u043f\u0430\u043d\u0441\u044c\u043a\u0456\u0439, \u043b\u0438\u0442\u043e\u0432\u0441\u044c\u043a\u0456\u0439, \u0440\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u0456\u0439 \u0442\u0430 \u0443\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0456\u0439. \u0411\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u044e \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0454\u0442\u044c\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043d\u0456\u0436 200 \u0442\u0438\u0441\u044f\u0447 \u0437\u0430\u043a\u043e\u0440\u0434\u043e\u043d\u043d\u0438\u0445 \u0432\u0456\u0434\u0432\u0456\u0447\u0443\u0432\u0430\u0447\u0456\u0432, \u0430 \u043d\u0435\u0437\u0430\u0431\u0430\u0440\u043e\u043c \u0443 \u043d\u0430\u0448\u0456\u0439 \u043a\u043e\u043b\u0435\u043a\u0446\u0456\u0439 \u0437\u043d\u0430\u0439\u0434\u0443\u0442\u044c\u0441\u044f \u0442\u0430\u043a\u043e\u0436 \u0442\u0432\u043e\u0440\u0438 \u043d\u0430 \u0456\u043d\u043e\u0437\u0435\u043c\u043d\u0438\u0445 \u043c\u043e\u0432\u0430\u0445. \u0422\u043e\u043c\u0443 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u0430\u0442\u0438 \u043d\u043e\u0432\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e, \u044f\u043a\u0430 \u0437\u2019\u044f\u0432\u043b\u044f\u0454\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0456. </p>\r\n <p><b>\u0425\u0442\u043e \u043c\u043e\u0436\u0435 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0443 \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u0430\u0445? </b> </p>\r\n<ul>\r\n<li>\u041a\u043e\u0436\u043d\u0438\u0439, \u0445\u0442\u043e \u0434\u043e\u0431\u0440\u0435 \u0432\u043e\u043b\u043e\u0434\u0456\u0454 \u043f\u0440\u0438\u043d\u0430\u0439\u043c\u043d\u0456 \u043e\u0434\u043d\u0456\u0454\u044e \u0437 \u0432\u0438\u0449\u0435\u0437\u0433\u0430\u0434\u0430\u043d\u0438\u0445 \u043c\u043e\u0432. </li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h3>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442\u0456\u0432</h3>\r\n <p>\u041a\u0440\u0456\u043c \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0443 Wolne Lektury \u043c\u0438 \u0442\u0432\u043e\u0440\u0438\u043c\u043e \u0442\u0430\u043a\u043e\u0436: </p>\r\n<ul>\r\n<li>\u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0439\u043d\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438,</li>\r\n<li>\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u0438 \u0434\u043b\u044f \u0440\u0456\u0437\u043d\u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0456\u0432 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0438\u0445 \u043a\u043d\u0438\u0433, </li>\r\n<li>\u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0456 \u0430\u043f\u043b\u0456\u043a\u0430\u0446\u0456\u0457, \u044f\u043a\u0456 \u0440\u043e\u0431\u043b\u044f\u0442\u044c \u043c\u043e\u0436\u043b\u0438\u0432\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u043d\u0430\u0448\u0438\u0445 \u043a\u043e\u043b\u0435\u043a\u0446\u0456\u0439.</li>\r\n</ul>\r\n\r\n <p>\u041c\u0438 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0454\u043c\u043e\u0441\u044f \u0442\u0430\u043a\u0438\u043c\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0456\u044f\u043c\u0438, \u044f\u043a Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\n\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043d\u0435 \u0437\u0430\u0431\u0435\u0437\u043f\u0435\u0447\u0435\u043d\u043d\u044f, \u044f\u043a\u0435 \u0441\u0442\u0432\u043e\u0440\u044e\u0454\u043c\u043e, \u043d\u0430\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u043d\u0430 <a href=\"https://github.com/fnp/\">\u0432\u0456\u043b\u044c\u043d\u0456\u0439 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457</a>. </p>\r\n <p><b>\u0425\u0442\u043e \u043c\u043e\u0436\u0435 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0443\u0432\u0430\u043d\u043d\u0456?</b> </p>\r\n<ul>\r\n<li>\u041a\u043e\u0436\u0435\u043d, \u0445\u0442\u043e \u0432\u043c\u0456\u0454 \u0456 \u0445\u043e\u0447\u0435 \u0437\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442\u0438\u0447\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0456 \u0437\u0434\u043e\u0431\u0443\u0442\u0438 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0456 \u0431\u0430\u043b\u0438 \u0434\u043e \u043a\u0430\u0440\u043c\u0438. ;)</li>\r\n</ul>\r\n", - "title_en": "Join in the work", - "left_column_pl": "<ul>\r\n<li>Zosta\u0144 naszym redaktorem, programist\u0105 lub t\u0142umaczem</li>\r\n<li>Zdob\u0105d\u017a nowe umiej\u0119tno\u015bci i do\u015bwiadczenie</li>\r\n<li>We\u017a udzia\u0142 w otwartym projekcie i tw\u00f3rz innowacyjn\u0105 bibliotek\u0119 internetow\u0105</li>\r\n</ul>\r\n\r\n<p>Zapraszamy wszystkie osoby, kt\u00f3re chc\u0105 wsp\u00f3\u0142tworzy\u0107 nasz projekt. Wsp\u00f3\u0142pracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi literatur\u0105, redagowaniem tekst\u00f3w i projektami informatycznymi. Oferujemy profesjonalne szkolenia i sta\u0142\u0105 pomoc merytoryczn\u0105. Wolontariusze mog\u0105 pracowa\u0107 zdalnie lub w siedzibie Fundacji.</p>\r\n<p>Organizujemy r\u00f3wnie\u017c praktyki studenckie \u2013 nawi\u0105zali\u015bmy wsp\u00f3\u0142prac\u0119 z Instytutem Informacji Naukowej i Studi\u00f3w Bibliologicznych UW, Biurem Karier UKSW oraz Wydzia\u0142em Fizyki UW.</p>\r\n\r\n<h3>Jak si\u0119 do nas zg\u0142osi\u0107?</h3>\r\n<p>Wszystkie zainteresowane osoby prosimy o przys\u0142anie maila na adres <a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n\r\n\r\n\r\n", - "left_column_it": "<ul>\r\n<li>Diventa il nostro redattore, programmatore o traduttore</li>\r\n<li>Acquisisci nuove capacit\u00e0 ed esperienze</li>\r\n<li>Prendi parte al progetto aperto e crea una biblioteca innovativa online</li>\r\n</ul>\r\n\r\n<p>Invitiamo tutte le persone volenterose a collaborare al nostro progetto. Lavoriamo con studenti, insegnanti e tutti gli interessati alla letteratura, stesura dei testi e ai progetti IT. Offriamo i corsi di formazione professionali e il sostegno. I volontari possono lavorare a distanza oppure presso la sede della Fondazione.</p>\r\n\r\n<p>Organizziamo anche i tirocini \u2013 collaboriamo con Instytut Informacji Naukowej i Studi\u00f3w Bibliologicznych (l\u2019Istituto di Informazione Scientifica e Biblioteconomia) dell\u2019Universit\u00e0 di Varsavia, Biuro Karier UKSW (Ufficio di carriera dell\u2019Universit\u00e0 del Cardinale Stefan Wyszy\u0144ski) e con il Dipartimento di Fisica dell\u2019Universit\u00e0 di Varsavia</p>\r\n\r\n<h3>Come contattarci? ?</h3>\r\n<p>Invitiamo Tutte le persone interessate ad inviarci un'e-mail all'indirizzo <a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n", - "title_es": "Colabora", - "left_column_ru": "\ufeff<ul>\r\n<li>\u0421\u0442\u0430\u043d\u044c \u043d\u0430\u0448\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u043c \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u043e\u043c</li>\r\n<li>\u041f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0438 \u043d\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u043d\u0438\u044f \u0438 \u043e\u043f\u044b\u0442 </li>\r\n<li>\u041f\u0440\u0438\u043c\u0438 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439 \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 </li>\r\n</ul>\r\n\r\n<p>\u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0432\u0441\u0435\u0445, \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u043c \u0441\u043e \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c\u0438, \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u0438 \u0432\u0441\u0435\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442\u0441\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043e\u0439, \r\n\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0443\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443. \r\n\u0414\u043e\u0431\u0440\u043e\u0432\u043e\u043b\u044c\u0446\u044b \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0438\u043b\u0438 \u0432 \u0448\u0442\u0430\u0431-\u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0435 \u0424\u043e\u043d\u0434\u0430.</p>\r\n\r\n<p>\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u0441\u0442\u0443\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0442\u0430\u0436\u0438\u0440\u043e\u0432\u043a\u0438 - \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u043c \u0441 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u043e\u043c \u043d\u0430\u0443\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0411\u0438\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0412\u0423, \r\n\u0441 \u0411\u044e\u0440\u043e \u043a\u0430\u0440\u044c\u0435\u0440\u044b \u0423\u041a\u0421\u0412 \u0438 \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u043e\u043c \u0424\u0438\u0437\u0438\u043a\u0438 \u0412\u0423.</p>\r\n\r\n<h3>\u041a\u0430\u043a \u043a \u043d\u0430\u043c \u043f\u043e\u043f\u0430\u0441\u0442\u044c?</h3>\r\n<p>\u0412\u0441\u0435 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435-mail \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443: <a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n\r\n\r\n\r\n", - "slug": "wlacz-sie-w-prace", - "right_column_de": "<h3>Wen suchen wir?</h3>\r\n\r\n<h3>Textbearbeiter (Textbearbeitung) </h3>\r\n <p>In der ersten Phase wird der Text gesetzt. Mithilfe der WL-XML-Sprache gestalten wir den Text und erm\u00f6glichen seine Ver\u00f6ffentlichung auf der Internetseite. Textbearbeitung wird auf der <a href=\"http://redakcja.wolnelektury.pl\">Redaktionsplatrorm</a>durchgef\u00fchrt, die einen gro\u00dfen Arbeitsteil automatisieren l\u00e4sst.</p>\r\n\r\n <p><b>Wer kann Textbearbeiter werden</b> </p>\r\n<ul>\r\n<li>Jeder - nach einer kurzen Schulung.</li>\r\n</ul>\r\n\r\n <p>Mehr Infos \u00fcber Textbearbeitung<a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">auf der Impressumseite von Wolne Lektury</a> </p>\r\n\r\n<hr/>\r\n\r\n<h3>Bearbeiter im Literaturbereich (Sachbearbeiter) </h3>\r\n <p>Literarische Bearbeitung umfasst die Korrektur, Sprachmodernisierung und Erg\u00e4nzung von F\u00fc\u00dfnoten und literarischen Motiven. Das ist eine einzigartige M\u00f6glichkeit, die Kenntnis der Digitalverarbeitung von Texten zu erwerben. </p>\r\n\r\n <p><b>Wer kann Bearbeiter im Literaturbereich werden</b> </p>\r\n<ul>\r\n<li>Personen, die Erfahrung in der Bearbeitung von literarischen Texten besitzen,</li>\r\n<li>Studenten und Absolventen der Geisteswissenschaften, die solche Erfahrung gewinnen m\u00f6chten. </li>\r\n</ul>\r\n<p>Mehr Infos \u00fcber literarische Bearbeitung<a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">auf der Impressumseite von Wolne Lektury</a> </p>\r\n<hr/>\r\n\r\n<h3>\u00dcbersetzer</h3>\r\n <p>Die Internetseite WolneLektury.pl ist in sieben Spracheversionen zug\u00e4nglich - im Englischen, Franz\u00f6sichen, Deutschen, Spanischen, Lituanischen, Russischen und Ukrainischen. Bibliotheksbenutzer sind \u00fcber 200.000 Ausl\u00e4nder. Bald wird die Bibliothek mit fremdsprachigen Versionen bereichert. Deswegen brauchen wir auf dem Laufenden, die neu auf der Seite erschienen Infos zu \u00fcbersetzen. </p>\r\n <p><b>Wer kann bei \u00dcbersetzungen helfen? </b> </p>\r\n<ul>\r\n<li>Jeder, der mindestenst eine aus den oben genannten Sprachen beherrscht. </li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h3>Programmierer</h3>\r\n <p>Au\u00dfer der Internetseite von Wolne Lektury allein errichten wir: </p>\r\n<ul>\r\n<li>Bearbeitungsmittel,</li>\r\n<li>Konvertierungsprogramme zu den verschiedenen E-books-Formaten, </li>\r\n<li>Mobilanwendungen, die Zugang zu B\u00fcchern erleichtern.</li>\r\n</ul>\r\n\r\n <p>Wir machen Gebrauch von solchen Technologien wie: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nDie von uns entwickelte Software machen wird auf<a href=\"https://github.com/fnp/\">unter der freien Lizenz verf\u00fcgbar</a>. </p>\r\n <p><b>Wer kann bei der Programmierung helfen?</b> </p>\r\n<ul>\r\n<li>Jeder, der dies kann und will Karmapunkte f\u00fcr die Teilnahme an dem offenen Programmierungsprojekt gewinnen . ;)</li>\r\n</ul>\r\n", - "left_column_es": "\ufeff<ul>\r\n<li>Hazte nuestro redactor, programador o traductor</li> \r\n<li>Adquiere nuevas aptitudes y experiencia</li>\r\n<li>Participa en un proyecto abierto y crea una innovadora biblioteca virtual</li>\r\n</ul>\r\n\r\n<p>Todos los que quieran participar en nuestro proyecto ser\u00e1n bienvenidos. Colaboramos con estudiantes, maestros, profesores y todos aquellos interesados en literatura, edici\u00f3n de textos y proyectos inform\u00e1ticos. Les ofrecemos aprendizaje profesional y constante ayuda en cuanto a el contenido. Los voluntarios pueden trabajar a distancia o en la oficina principal de la Fundaci\u00f3n.</p>\r\n<p>Tambi\u00e9n organizamos practicas para los estudiantes \u2013 hemos establecido cooperaci\u00f3n con el Instituto de Informaci\u00f3n Cient\u00edfica y Bibliotecolog\u00eda de la Universidad de Varsovia, el Servicio de Orientaci\u00f3n Profesional de la Universidad de Cardenal Stefan Wyszynski y la Facultad de F\u00edsica de la Universidad de Varsovia. </p>\r\n\r\n<h3>\u00bfC\u00f3mo contactar?</h3>\r\n<p>A todos los interesados les invitamos a mandar un e-mail a <a \r\nhref=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p> \r\n", - "left_column_en": "<ul>\r\n<li>Become our editor, programmer or traslator</li>\r\n<li>Gain new skills and experience </li>\r\n<li>Take part in an open project and create an innovative online library </li>\r\n</ul>\r\n\r\n<p>We invite every person to contribute to our project. We collaborate with students, teachers and anyone interested in literature, text editing and computer projects. We offer professional training courses and constant factual help. Volunteers can work at home or in our office.</p>\r\n<p>We also organize student trainings - we have established cooperation with the Institute of Information and Book Studies, Warsaw University (UW), the Careers Service at Cardinal Stefan Wyszy\u0144ski University in Warsaw, and with the Faculty of Physics, UW. </p>\r\n\r\n<h3>How to contact us?</h3>\r\n<p>We invite all the people interested to email us at<a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>", - "right_column_fr": "<h3>Qui cherchons-nous?</h3>\r\n\r\n<h3>R\u00e9dacteurs techniques (composition de texte) </h3>\r\n <p>La composition est une premi\u00e8re \u00e9tape du travail sur un texte. \u00c0 l'aide des balises du langage WL-XML on forme un texte et l'affiche sur le site. La r\u00e9daction est ex\u00e9cut\u00e9e sur <a href=\"http://redakcja.wolnelektury.pl\">la Plateforme de R\u00e9daction</a> qui permet d'automatiser la grande majorit\u00e9 du travail. </p>\r\n\r\n <p><b>Qui peut devenir r\u00e9dacteur technique?</b> </p>\r\n<ul>\r\n<li>Chacun(e) - apr\u00e8s une courte instruction.</li>\r\n</ul>\r\n\r\n <p>Si vous voulez trouver plus d'informations sur la r\u00e9daction technique, visitez <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">le site de la r\u00e9daction de Wolne Lektury</a> </p>\r\n\r\n<hr/>\r\n\r\n<h3>R\u00e9dacteurs litt\u00e9raires </h3>\r\n <p>La r\u00e9daction litt\u00e9raire se compose de la correction des \u00e9preuves, r\u00e9actualisation et addition des annotations et motifs litt\u00e9raires. C'est une opportunit\u00e9 unique d'acqu\u00e9rir de l'exp\u00e9rience dans le domaine de l'\u00e9dition num\u00e9rique. </p>\r\n\r\n<p><b>Qui peut devenir r\u00e9dacteur litt\u00e9raire? </b> </p>\r\n<ul>\r\n<li>Personnes qui ont d\u00e9j\u00e0 une exp\u00e9rience dans la r\u00e9daction des textes litt\u00e9raires,</li>\r\n<li>\u00c9tudiants et gradu\u00e9s d'\u00e9tudes humanistes qui souhaitent acqu\u00e9rir une telle exp\u00e9rience. </li>\r\n</ul>\r\n<p>Si vous voulez trouver plus d'informations sur la r\u00e9daction litt\u00e9raire, visitez <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">le site de la r\u00e9daction de Wolne Lektury</a> </p>\r\n<hr/>\r\n\r\n<h3>Traducteurs</h3>\r\n <p>Le site WolneLektury.pl est accessible en sept langues \u00e9trang\u00e8res - anglaise, fran\u00e7aise, allemande, espagnole, lithuanienne, russe et ukrainienne. Plus de 200 mille d'\u00e9trangers utilisent notre biblioth\u00e8que et comme prochainement notre collection contiendra aussi des ouvrages en langues \u00e9trang\u00e8res, il est essentiel de traduire de nouvelles informations et de les mettre r\u00e9guli\u00e8rement sur le site. </p>\r\n <p><b>Qui peut aider \u00e0 la pr\u00e9paration des traductions? </b> </p>\r\n<ul>\r\n<li>Chacun(e) qui conna\u00eet au moins une des cettes langues.</li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h3>Programmeurs</h3>\r\n <p>\u00c0 part le site de Wolne Lektury on cr\u00e9e aussi:</p>\r\n<ul>\r\n<li>des outils de r\u00e9daction,</li>\r\n<li>des convertisseurs de formats divers des livres audio,</li>\r\n<li>des applications mobiles qui facilitent l'acc\u00e8s \u00e0 notre collection.</li>\r\n</ul>\r\n\r\n <p>On utilise les technologies telles que Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nLes logiciels que l'on cr\u00e9e sont accessibles sous <a href=\"https://github.com/fnp/\">une licence libre</a>. </p>\r\n <p><b>Qui peut aider aux travaux de programmation?</b> </p>\r\n<ul>\r\n<li>Chacun(e) qui sait programmer et voudrait accumuler les points de karma pour participer \u00e0 un projet ouvert de programmation ;)</li>\r\n</ul>\r\n\r\n \r\n", - "title_ru": "\ufeff\u0412\u043a\u043b\u044e\u0447\u0438\u0441\u044c \u0432 \u0440\u0430\u0431\u043e\u0442\u0443", - "title_it": "Prendi parte all'iniziativa" - } - }, - { - "pk": 5, - "model": "infopages.infopage", - "fields": { - "title_de": "Unterst\u00fctze uns", - "left_column_uk": "\ufeff<p><strong>\u041f\u0435\u0440\u0435\u043a\u0430\u0436\u0456\u0442\u044c 1% \u043f\u043e\u0434\u0430\u0442\u043a\u0443 \u043d\u0430 Wolne Lektury</strong></p>\r\n<p>\u0424\u043e\u043d\u0434 \u0421\u0443\u0447\u0430\u0441\u043d\u0430 \u041f\u043e\u043b\u044c\u0449\u0430 (Fundacja Nowoczesna Polska) \u043c\u0430\u0454 \u0441\u0442\u0430\u0442\u0443\u0441 \u041e\u0440\u0433\u0430\u043d\u0456\u0437\u0430\u0446\u0456\u0457 \u0441\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0457 \u043a\u043e\u0440\u0438\u0441\u0442\u0456, \u0442\u043e\u043c\u0443 \u043d\u0430 \u0440\u043e\u0437\u0432\u0438\u0442\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 Wolne Lektury \u043c\u043e\u0436\u043d\u0430 \u043f\u0435\u0440\u0435\u043a\u0430\u0437\u0430\u0442\u0438 1% \u0441\u0432\u043e\u0433\u043e \u043f\u043e\u0434\u0430\u0442\u043a\u0443. \u0414\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0437\u0430\u043f\u043e\u0432\u043d\u0438\u0442\u0438 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u043d\u0435 \u043f\u043e\u043b\u0435 \u0443 \u0440\u0456\u0447\u043d\u0456\u0439 \u043f\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0456\u0439 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0456\u0457 (PIT-36, PIT-37 \u0430\u0431\u043e PIT-28). \u0423 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0456\u0457 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0432\u043a\u0430\u0437\u0430\u0442\u0438 \u043d\u0430\u0437\u0432\u0443 \u0424\u043e\u043d\u0434\u0443:</p>\r\nFundacja Nowoczesna Polska <br/>\r\n\u0442\u0430 \u043d\u043e\u043c\u0435\u0440 \u0437 \u041d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0421\u0443\u0434\u043e\u0432\u043e\u0433\u043e \u0420\u0435\u0454\u0441\u0442\u0440\u0443 (KRS) 0000070056<br/>\r\n", - "main_page": 5, - "right_column_pl": "<p><strong>Przeka\u017c darowizn\u0119 na Wolne Lektury</strong></p>\r\n<p>Ka\u017cda wp\u0142acona kwota zostanie przeznaczona na rozw\u00f3j zasob\u00f3w naszej biblioteki. Wystarczy dokona\u0107 przelewu na konto:</p>\r\n\r\nFundacja Nowoczesna Polska<br/>\r\nul. Marsza\u0142kowska 84/92 lok. 125<br/>\r\n00-514 Warszawa<br/>\r\nNr konta: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\nTytu\u0142 przelewu: Darowizna na Wolne Lektury<br/>", - "right_column_lt": "\ufeff<p><strong>Paremkite finansi\u0161kai Wolne Lektury interneto svetain\u0119</strong></p>\r\n<p>Sumok\u0117ti pinigai bus paskirti m\u016bs\u0173 bibliotekos i\u0161tekli\u0173 raidai. \r\nU\u017etenka atlikti banko pavedim\u0105 \u012f s\u0105skait\u0105: </p>\r\n\r\nFundacja Nowoczesna Polska<br/>\r\nul. Marsza\u0142kowska 84/92 lok. 125<br/>\r\n00-514 Warszawa<br/>\r\nS\u0105skaitos numeris: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\nPavedimo pavadinimas: Darowizna na Wolne Lektury<br/>\r\n", - "left_column_lt": "\ufeff<p><strong>Skirkite 1% pajam\u0173 mokes\u010dio Wolne Lektury interneto svetainei</strong></p>\r\n<p>Fondas \u0160iuolaikin\u0117 Lenkija turi komunalini\u0173 paslaug\u0173 \u012fstaigos status\u0105, d\u0117l to galima paskirti 1% pajam\u0173 mokes\u010dio projekto Wolne Lektury raidai. \u0160iuo tikslu reikia u\u017epildyti atitinkam\u0105 langel\u012f metin\u0117je pajam\u0173 mokes\u010dio deklaracijoje (PIT-36, PIT-37 lub PIT-28) ir pateikti \u017eemiau esant\u012f pavadinim\u0105: </p>\r\nFundacja Nowoczesna Polska <br/>\r\nbei Nacionalinio teism\u0173 registro (KRS) numer\u012f 0000070056<br/>\r\n\r\n\r\n", - "title_fr": "Aidez-nous", - "right_column_ru": "\ufeff<p><strong>\u041f\u0435\u0440\u0435\u0448\u043b\u0438 \u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u043b\u044f Wolne Lektury</strong></p>\r\n<p>\u0412\u0441\u0435 \u0434\u0435\u043d\u0435\u0436\u043d\u044b\u0435 \u0432\u0437\u043d\u043e\u0441\u044b \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043a\u043d\u0438\u0436\u043d\u043e\u0433\u043e \u0444\u043e\u043d\u0434\u0430 \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0434\u0435\u043d\u044c\u0433\u0438 \u043d\u0430 \u0441\u0447\u0435\u0442:</p>\r\n\r\nFundacja Nowoczesna Polska<br/>\r\nul. Marsza\u0142kowska 84/92 lok. 125<br/>\r\n00-514 Warszawa<br/>\r\n\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0435\u0442\u0430: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\n\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f: Darowizna na Wolne Lektury<br/>\r\n", - "left_column_fr": "<p><strong>Transf\u00e9rez 1% de vos imp\u00f4ts pour Wolne Lektury</strong></p>\r\n<p>La fondation Nowoczesna Polska est une organisation d'utilit\u00e9 publique et alors 1% de vos imp\u00f4ts peut \u00eatre transf\u00e9r\u00e9 pour le d\u00e9veloppement du projet Wolne Lektury. Pour le faire il faut remplir la rubrique convenable dans la d\u00e9claration annuelle des imp\u00f4ts (PIT-36, PIT-37 ou PIT-28). Dans la d\u00e9claration il faut donner le nom:</p>\r\nFundacja Nowoczesna Polska <br/>\r\net le num\u00e9ro KRS (Registre National Juridique): 0000070056<br/>\r\n", - "title": "Support us", - "title_lt": "Paremkite mus", - "right_column": "<p><strong>Donate to Wolne Lektury</strong></p>\r\n<p>Every donation will be allocated for developing the library collection. Just transfer the money to:</p>\r\n\r\nFundacja Nowoczesna Polska<br/>\r\nul. Marsza\u0142kowska 84/92 lok. 125<br/>\r\n00-514 Warszawa<br/>\r\nBank account number: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\nTitle of payment: Darowizna na Wolne Lektury<br/>", - "right_column_es": "<p><strong>Haz un donativo a Wolne Lektury</strong></p>\r\n<p>Cada aporte ser\u00e1 destinado al incremento del fondo de nuestra biblioteca. Basta con hacer una transferencia a nuestra cuenta:</p>\r\n\r\nFundacja Nowoczesna Polska<br/>\r\nUl. Marsza\u0142kowska84/92 lok. 125<br/>\r\n00-514 Warszawa<br/>\r\nEl numero de la cuenta: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\nEl titulo de la transferencia: Darowizna na Wolne Lektury<br/>\r\n", - "right_column_en": "<p><strong>Donate to Wolne Lektury</strong></p>\r\n<p>Every donation will be allocated for developing the library collection. Just transfer the money to:</p>\r\n\r\nFundacja Nowoczesna Polska<br/>\r\nul. Marsza\u0142kowska 84/92 lok. 125<br/>\r\n00-514 Warszawa<br/>\r\nBank account number: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\nTitle of payment: Darowizna na Wolne Lektury<br/>", - "left_column_de": "<p><strong>\u00dcbergeben Sie 1 % von Ihrer Steuer an Wolne Lektury</strong></p>\r\n<p>Die Stiftung Modernes Polen besitzt den Status einer Non-Profit-Organisation. Infolgedessen kann man 1 % seiner Steuer an die Entwicklung des Projektes Wolne Lektury \u00fcberreichen. Um dies zu tun, sollte man eine bestimmte Rubrik in der Jahressteuererkl\u00e4rung (Einkommenstuer-36, Einkommensteuer-37 oder Einkommensteuer-28) erf\u00fcllen. In der Erkl\u00e4rung ist die:</p>\r\nBezeichnung Stiftung Modernes Polen <br/>\r\nsowie die Nummer aus dem Landesgerichtsregister (KRS) 0000070056<br/> einzutragen.", - "title_uk": "\ufeff\u041f\u0456\u0434\u0442\u0440\u0438\u043c\u0430\u0439\u0442\u0435 \u043d\u0430\u0441", - "right_column_it": "<p><strong> Fai una donazione a Wolne Lektury</strong></p>\r\n<p>Ogni somma versata sar\u00e0 utilizzata per lo sviluppo delle nostre risorse bibliotecarie. Basta fare un versamento sul conto:</p>\r\n\r\nFundacja Nowoczesna Polska<br/>\r\nul. Marsza\u0142kowska 84/92 lok. 125<br/>\r\n00-514 Warszawa<br/>\r\nNr konta: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\nTytu\u0142 przelewu (Titolo del versamento): Darowizna na Wolne Lektury<br/>\r\n\r\n", - "title_pl": "Wesprzyj nas", - "left_column": "<p><strong>Support Wolne Lektury with 1% of income tax </strong></p>\r\n<p>The Modern Poland Foundation has the status of a public benefit organization (Pol. organizacja po\u017cytku publicznego) thanks to which Wolne Lektury can receive 1% of income tax from individuals. To help us in this way, it is necessary to fill in the correct space in the annual tax return (PIT-36, PIT-37 or PIT-28), providing the name:</p>\r\nFundacja Nowoczesna Polska <br/>\r\nand the National Court Register number - Krajowy Rejestr S\u0105dowy (KRS) 0000070056<br/>", - "right_column_uk": "\ufeff<p><strong>\u0417\u0440\u043e\u0431\u0456\u0442\u044c \u0431\u043b\u0430\u0433\u043e\u0434\u0456\u0439\u043d\u0438\u0439 \u0432\u043d\u0435\u0441\u043e\u043a \u043d\u0430 Wolne Lektury</strong></p>\r\n<p>\u0423\u0441\u0456 \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u0456 \u043a\u043e\u0448\u0442\u0438 \u0431\u0443\u0434\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043e \u0434\u043b\u044f \u0440\u043e\u0437\u0432\u0438\u0442\u043a\u0443 \u043a\u043e\u043b\u0435\u043a\u0446\u0456\u0457 \u043d\u0430\u0448\u043e\u0457 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438. \u0404\u0434\u0438\u043d\u0435, \u0449\u043e \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0437\u0440\u043e\u0431\u0438\u0442\u0438, \u0446\u0435 \u043f\u0435\u0440\u0435\u0440\u0430\u0445\u0443\u0432\u0430\u0442\u0438 \u043a\u043e\u0448\u0442\u0438 \u043d\u0430 \u0440\u0430\u0445\u0443\u043d\u043e\u043a:</p>\r\n\r\nFundacja Nowoczesna Polska<br/>\r\nul. Marsza\u0142kowska 84/92 lok. 125<br/>\r\n00-514 Warszawa<br/>\r\n\u041d\u043e\u043c\u0435\u0440 \u0431\u0430\u043d\u043a\u0456\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0440\u0430\u0445\u0443\u043d\u043a\u0443: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\n\u041f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u043f\u043b\u0430\u0442\u0435\u0436\u0443: \u0411\u043b\u0430\u0433\u043e\u0434\u0456\u0439\u043d\u0438\u0439 \u0432\u043d\u0435\u0441\u043e\u043a \u043d\u0430 Wolne Lektury<br/>\r\n", - "title_en": "Support us", - "left_column_pl": "<p><strong>Przeka\u017c 1% podatku na Wolne Lektury</strong></p>\r\n<p>Fundacja Nowoczesna Polska posiada status Organizacji Po\u017cytku Publicznego dzi\u0119ki czemu na rozw\u00f3j projektu Wolne Lektury mo\u017cna przekaza\u0107 1% swojego podatku. W tym celu nale\u017cy wype\u0142ni\u0107 odpowiedni\u0105 rubryk\u0119 w rocznym zeznaniu podatkowym (PIT-36, PIT-37 lub PIT-28). W zeznaniu nale\u017cy poda\u0107 nazw\u0119:</p>\r\nFundacja Nowoczesna Polska<br/>\r\noraz numer z Krajowego Rejestru S\u0105dowego (KRS) 0000070056<br/>\r\n", - "left_column_it": "<p><strong>Dona l'1% delle tue tasse a Wolne Lektury</strong></p>\r\n<p>Fundacja Nowoczesna Polska (Fondazione Polonia Moderna) ha lo status dell'Organizzazione del Beneficio Pubblico grazie a cui si pu\u00f2 donare l'1% delle proprie tasse. Per fare questo bisogna compilare l\u2019apposita casella nella dichiarazione annuale dei redditi (PIT-36, PIT-37 o PIT-28). Nella dichiarazione bisogna indicare il nome:</p> Fundacja Nowoczesna Polska<br/> e il numero del Krajowy Rejestr S\u0105dowy (KRS) \u2013 (Nazionale Registro Giudiziario) 0000070056<br/>\r\n", - "title_es": "Ap\u00f3yanos", - "left_column_ru": "\ufeff<p><strong>\u041f\u0435\u0440\u0435\u0434\u0430\u0439 1% \u0441\u0432\u043e\u0435\u0433\u043e \u043d\u0430\u043b\u043e\u0433\u0430 \u0434\u043b\u044f Wolne Lektury</strong></p>\r\n\r\n\r\n<p>\u0424\u043e\u043d\u0434 Nowoczesna Polska \u0438\u043c\u0435\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0447\u0435\u043c\u0443 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Wolne Lektury \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c 1% \r\n\u043e\u0442 \u0441\u0432\u043e\u0435\u0433\u043e \u043d\u0430\u043b\u043e\u0433\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0440\u0443\u0431\u0440\u0438\u043a\u0443 \u0432 \u043b\u0438\u0447\u043d\u043e\u0439 \u0433\u043e\u0434\u043e\u0432\u043e\u0439 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0438 \u043e \u0434\u043e\u0445\u043e\u0434\u0430\u0445 (PIT-36, PIT-37 \u0438 PIT-28), \r\n\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435:</p>\r\nFundacja Nowoczesna Polska <br/>\r\n\r\n\u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u043e\u043c\u0435\u0440 \u0438\u0437 \u0413\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0421\u0443\u0434\u0435\u0431\u043d\u043e\u0433\u043e \u0420\u0435\u0435\u0441\u0442\u0440\u0430 (KRS) 0000070056<br/>\r\n", - "slug": "wesprzyj-nas", - "right_column_de": "<p><strong>\u00dcbergeben Sie eine Spende an Wolne Lektury</strong></p>\r\n<p>Jede eingezahlte Summe wird f\u00fcr die Erweiterung der B\u00fccheranzahl in der Bibiothek \u00fcbermittelt. Es reicht nur eine \u00dcberweisung aufs Konto:</p>\r\n\r\nFundacja Nowoczesna Polska (Stiftung Modernes Polen)<br/>\r\nStra\u00dfe: Marsza\u00b3kowska 84/92, Wohnungsnummer 125<br/>\r\nPostleitzahl und Stadt: 00-514 Warszawa<br/>\r\nKontonummer: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\n\u00dcberweisungstitel: \"Spende an Wolne Lektury\" oder \"Darowizna na Wolne Lektury\"<br/>", - "left_column_es": "<p><strong>Dona 1% de tu impuesto a Wolne Lektury</strong></p> \r\n<p>La Fundaci\u00f3n Polonia Modera tiene car\u00e1cter de organizaci\u00f3n no gubernamental, por lo tanto se puede donar 1% de impuesto para el desarrollo del proyecto Wolne Lektury. Para este prop\u00f3sito hay que rellenar el espacio en blanco apropriado en la declaraci\u00f3n de la renta anual (PIT-36, PIT-37 o PIT-28). Se deber\u00eda poner el nombre:</p>\r\nFundacja Nowoczesna Polska<br/>\r\ny el numero de el Registro Judicial Nacional (KRS) 0000070056<br/>\r\n\r\n", - "left_column_en": "<p><strong>Support Wolne Lektury with 1% of income tax </strong></p>\r\n<p>The Modern Poland Foundation has the status of a public benefit organization (Pol. organizacja po\u017cytku publicznego) thanks to which Wolne Lektury can receive 1% of income tax from individuals. To help us in this way, it is necessary to fill in the correct space in the annual tax return (PIT-36, PIT-37 or PIT-28), providing the name:</p>\r\nFundacja Nowoczesna Polska <br/>\r\nand the National Court Register number - Krajowy Rejestr S\u0105dowy (KRS) 0000070056<br/>", - "right_column_fr": "<p><strong>Faites une donation au projet Wolne Lektury</strong></p>\r\n<p>Chaque somme donn\u00e9e servira au d\u00e9veloppement de notre biblioth\u00e8que. Il suffit de verser l'argent sur le compte:</p>\r\n\r\nFundacja Nowoczesna Polska<br/>\r\nul. Marsza\u0142kowska 84/92 lok. 125<br/>\r\n00-514 Warszawa<br/>\r\nLe num\u00e9ro de compte: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\nLe libell\u00e9 de virement: Darowizna na Wolne Lektury<br/>\r\n", - "title_ru": "\ufeff\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438 \u043d\u0430\u0441!", - "title_it": "Sostienici" - } - } -] \ No newline at end of file diff --git a/apps/infopages/locale/de/LC_MESSAGES/django.mo b/apps/infopages/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index 80a39d9e6..000000000 Binary files a/apps/infopages/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/infopages/locale/de/LC_MESSAGES/django.po b/apps/infopages/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index 5d8ff58e9..000000000 --- a/apps/infopages/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,1217 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: \n" -"Last-Translator: Kamil <kjaklukowski@gmail.com>\n" -"Language-Team: de <yourteam@example.com>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 -msgid "main page priority" -msgstr "" - -#: models.py:12 -msgid "slug" -msgstr "" - -#: models.py:13 -msgid "title" -msgstr "" - -#: models.py:14 -msgid "left column" -msgstr "" - -#: models.py:15 -msgid "right column" -msgstr "" - -#: models.py:19 -msgid "info page" -msgstr "" - -#: models.py:20 -msgid "info pages" -msgstr "" - -#~ msgid "Wolontariat dla wiedzy" -#~ msgstr "Volontariat für Wissen" - -#~ msgid "" -#~ "<h2>Wolontariat</h2>\r\n" -#~ "\t<p>\r\n" -#~ "\t\tBiogramy pisarzy oraz definicje epok i gatunków literackich w\r\n" -#~ "\t\tbibliotece internetowej Wolne Lektury napisali uczniowie\r\n" -#~ "\t\tczterech szkóŠpodczas warsztatów âWolontariat dla wiedzyâ.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t\tUczniowie pracowali wspólnie pod merytorycznym nadzorem\r\n" -#~ "\t\tnauczycieli i specjalistów â literaturoznawców na\r\n" -#~ "\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n" -#~ "\r\n" -#~ "\t\t\tplatformie internetowej wiki</a>\r\n" -#~ "\t\tprzygotowanej przez zespóÅ\r\n" -#~ "\t\t<a href=\"http://2ia.pl/\">2ia</a>. Praca nad notami byÅa " -#~ "jednoczeÅnie naukÄ wykorzystywania\r\n" -#~ "\t\tkomputerów i internetu do wyszukiwania informacji, a także\r\n" -#~ "\t\tweryfikowania ich wiarygodnoÅci.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t\tProjekt \"Wolontariat dla wiedzy\" zostaÅ zrealizowany dziÄki\r\n" -#~ "\t\twsparciu\r\n" -#~ "\t\t<a href=\"http://www.menis.gov.pl/\">\r\n" -#~ "\t\t\tMinisterstwa Edukacji Narodowej</a>. Nagrody dla uczniów ufundowali" -#~ "\r\n" -#~ "\t\t<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n" -#~ "\r\n" -#~ "\t\t\tWydawnictwo Nasza KsiÄgarnia</a>\r\n" -#~ "\t\ti\r\n" -#~ "\t\t<a href=\"http://helion.pl/\">Wydawnictwo Helion</a>. Noty " -#~ "zweryfikowano w serwisie\r\n" -#~ "\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n" -#~ "\t\t\tPlagiat.pl</a>.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t\t<a href=\"/static/wolontariat.pdf\">Raport z realizacji projektu " -#~ "âWolontariat dla wiedzy\"</a>.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />" -#~ "\r\n" -#~ "\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n" -#~ "\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n" -#~ " <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />" -#~ "\r\n" -#~ " <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />" -#~ "\r\n" -#~ "\t</p>\r\n" -#~ msgstr "" -#~ "<h2>Volontariat</h2>\r\n" -#~ "\t<p>\r\n" -#~ "\t\tSchriftsteller-Biographien und Definitionen von Epochen und " -#~ "Literaturgattungen\r\n" -#~ " in der Internetbibliothek Freie Lektüren haben unsere Schüler aus vier" -#~ "\r\n" -#~ " Schulen während Workshops \"Volontariat für Wissen\" geschrieben.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t\tDie Schüler haben gemeinsam unter Aufsicht der Lehrer\r\n" -#~ "\t\tund Spezialisten -Literaturwissenschaftler - gearbeitet\r\n" -#~ "\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n" -#~ "\r\n" -#~ "\t\t\tauf \"wiki\" Internetplattform</a>\r\n" -#~ "\t\tvorbereitet von unserem Team\r\n" -#~ "\t\t<a href=\"http://2ia.pl/\">2ia</a>. Der Einsatz von Computer und " -#~ "Internet wurde\r\n" -#~ "\t\t- während der Arbeiten an Noten - für die Informationssuche und " -#~ "Informationsprüfung genutzt\r\n" -#~ "\t\tund gleichzeitig als notwendiges Werkzeug in den Lernprozess " -#~ "einbezogen.\r\n" -#~ "\t</p>\r\n" -#~ " \r\n" -#~ "\t<p>\r\n" -#~ "\t\tDas Projekt \"Volontariat für Wissen\" wurde dank der Unterstützung " -#~ "umgesetzt, von\r\n" -#~ "\t\t<a href=\"http://www.menis.gov.pl/\">\r\n" -#~ "\t\t\tMinisterium für Bildung</a>. Preise für Schüler spendeten\r\n" -#~ "\t\t<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n" -#~ "\r\n" -#~ "\t\t\tVerlag unsere Buchhandlung</a>\r\n" -#~ "\t\tund\r\n" -#~ "\t\t<a href=\"http://helion.pl/\">Wydawnictwo Helion</a>. Noten wurden im " -#~ "Service verifiziert\r\n" -#~ "\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n" -#~ "\t\t\tPlagiat.pl</a>.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t\t<a href=\"/static/wolontariat.pdf\">der Bericht über das Projekt " -#~ "\"Volontariat für Wissen\"</a>.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />" -#~ "\r\n" -#~ "\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n" -#~ "\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n" -#~ " <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />" -#~ "\r\n" -#~ " <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />" -#~ "\r\n" -#~ "\t</p>\r\n" - -#~ msgid "" -#~ "\t<h2>Autorzy</h2>\r\n" -#~ "\r\n" -#~ "\t<ol>\r\n" -#~ "\t\t<li>\r\n" -#~ "\t\t\t<p>\r\n" -#~ "\t\t\t\tGimnazjum nr 40 z OddziaÅami Integracyjnymi w Zespole\r\n" -#~ "\t\t\t\tSzkóŠnr 69 im. Armii Krajowej Grupy Bojowej âKRYBARâ,\r\n" -#~ "\t\t\t\tul. Drewniana 8, 00-345 Warszawa; klasa druga pod opiekÄ \r\n" -#~ "\t\t\t\tAnny Budziarek-Friedrich:\r\n" -#~ "\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t<ul>\r\n" -#~ "\t\t\t\t<li>Burdon Filip;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>DÄbski Bartek;</li>\r\n" -#~ "\t\t\t\t<li>Jackowicz Kamil;</li>\r\n" -#~ "\t\t\t\t<li>Kurek PaweÅ;</li>\r\n" -#~ "\t\t\t\t<li>Makles Bartosz;</li>\r\n" -#~ "\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n" -#~ "\t\t\t\t<li>MigdaÅ Katarzyna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Mioduszewski MichaÅ;</li>\r\n" -#~ "\t\t\t\t<li>Pfeiffer Ida;</li>\r\n" -#~ "\t\t\t\t<li>PÅaskowicka Karolina;</li>\r\n" -#~ "\t\t\t\t<li>Sailer Ewa.</li>\r\n" -#~ "\t\t\t</ul>\r\n" -#~ "\t\t</li>\r\n" -#~ "\r\n" -#~ "\t\t<li>\r\n" -#~ "\t\t\t<p>\r\n" -#~ "\t\t\t\tXXXIII Liceum OgólnoksztaÅcÄ ce im. MikoÅaja Kopernika,\r\n" -#~ "\t\t\t\tul. Bema 76, 01-225 Warszawa; klasa pierwsza o profilu\r\n" -#~ "\t\t\t\tbiologiczno-chemicznym pod opiekÄ Elżbiety Konkowskiej:\r\n" -#~ "\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t<ul>\r\n" -#~ "\t\t\t\t<li>Chwil BartÅomiej;</li>\r\n" -#~ "\t\t\t\t<li>Czarnecka Natalia;</li>\r\n" -#~ "\t\t\t\t<li>GawroÅska Iga;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Grabarczyk Marta;</li>\r\n" -#~ "\t\t\t\t<li>JastrzÄ b Katarzyna;</li>\r\n" -#~ "\t\t\t\t<li>Krawczak Olga;</li>\r\n" -#~ "\t\t\t\t<li>Krawczyk Marianna;</li>\r\n" -#~ "\t\t\t\t<li>Kur Natalia;</li>\r\n" -#~ "\t\t\t\t<li>Kwiatek Marta;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>LaÅkiewicz Joanna;</li>\r\n" -#~ "\t\t\t\t<li>MachczyÅska Daria;</li>\r\n" -#~ "\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n" -#~ "\t\t\t\t<li>Moczulska Karolina;</li>\r\n" -#~ "\t\t\t\t<li>MoÅcicka Aneta;</li>\r\n" -#~ "\t\t\t\t<li>Narloch Sabina;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Przybysz PaweÅ;</li>\r\n" -#~ "\t\t\t\t<li>Puchta Marek;</li>\r\n" -#~ "\t\t\t\t<li>Ryska Cezary;</li>\r\n" -#~ "\t\t\t\t<li>Sandomierski BartÅomiej;</li>\r\n" -#~ "\t\t\t\t<li>SÅawiÅski Tomasz;</li>\r\n" -#~ "\t\t\t\t<li>SÅowik Olga;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n" -#~ "\t\t\t\t<li>Strzelczak Karolina;</li>\r\n" -#~ "\t\t\t\t<li>Szafran Danuta;</li>\r\n" -#~ "\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n" -#~ "\t\t\t\t<li>Szulkowska Alicja;</li>\r\n" -#~ "\t\t\t\t<li>Ålusarczyk Anna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Tytkowska Anna.</li>\r\n" -#~ "\t\t\t</ul>\r\n" -#~ "\t\t\t<li>\r\n" -#~ "\t\t\t\t<p>\r\n" -#~ "\t\t\t\t\tAutorskie Niepubliczne Liceum OgólnoksztaÅcÄ ce nr\r\n" -#~ "\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; klasa pierwsza\r\n" -#~ "\t\t\t\t\to profilu ogólnym pod opiekÄ MichaÅa Friedricha:\r\n" -#~ "\t\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<ul>\r\n" -#~ "\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>GoÅaszewska Ewa;</li>\r\n" -#~ "\t\t\t\t\t<li>Kwiatkowski MichaÅ;</li>\r\n" -#~ "\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n" -#~ "\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n" -#~ "\t\t\t\t\t<li>Przespolewski PrzemysÅaw;</li>\r\n" -#~ "\t\t\t\t\t<li>RosiÅska Zuzanna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n" -#~ "\t\t\t\t</ul>\r\n" -#~ "\t\t\t</li>\r\n" -#~ "\t\t\t<li>\r\n" -#~ "\t\t\t\t<p>\r\n" -#~ "\t\t\t\t\tLXIV Liceum OgólnoksztaÅcÄ ce im. St. I. Witkiewicza,\r\n" -#~ "\t\t\t\t\tul. ElblÄ ska 51, 01-737 Warszawa; klasa pierwsza o\r\n" -#~ "\t\t\t\t\tprofilu ogólnym pod opiekÄ Daniela Zycha:\r\n" -#~ "\t\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<ul>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n" -#~ "\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n" -#~ "\t\t\t\t\t<li>DrÄ gowska Katarzyna;</li>\r\n" -#~ "\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n" -#~ "\t\t\t\t\t<li>GÅowacki Jan;</li>\r\n" -#~ "\t\t\t\t\t<li>Grad PaweÅ;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n" -#~ "\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n" -#~ "\t\t\t\t\t<li>KÅos Aneta;</li>\r\n" -#~ "\t\t\t\t\t<li>KozieÅ Barbara;</li>\r\n" -#~ "\t\t\t\t\t<li>KozÅowska Anna;</li>\r\n" -#~ "\t\t\t\t\t<li>Krug Pamela;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n" -#~ "\t\t\t\t\t<li>LubaÅ MichaÅ;</li>\r\n" -#~ "\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n" -#~ "\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n" -#~ "\t\t\t\t\t<li>Modelska Marta;</li>\r\n" -#~ "\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n" -#~ "\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n" -#~ "\t\t\t\t\t<li>Pielat Zofia;</li>\r\n" -#~ "\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n" -#~ "\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n" -#~ "\t\t\t\t\t<li>Rosa Karolina;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>SmyczyÅska Kamila;</li>\r\n" -#~ "\t\t\t\t\t<li>StoliÅska Barbara;</li>\r\n" -#~ "\t\t\t\t\t<li>SzymaÅska Katarzyna;</li>\r\n" -#~ "\t\t\t\t\t<li>Åcibior Ewa;</li>\r\n" -#~ "\t\t\t\t\t<li>Witczak Magda;</li>\r\n" -#~ "\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n" -#~ "\t\t\t\t\t<li>ZióÅkowska Adrianna.</li>\r\n" -#~ "\t\t\t\t</ul>\r\n" -#~ "\t\t\t</li>\r\n" -#~ "\t </li>\r\n" -#~ "\t </ol>\r\n" -#~ msgstr "" -#~ "\t<h2>Autoren</h2>\r\n" -#~ "\r\n" -#~ "\t<ol>\r\n" -#~ "\t\t<li>\r\n" -#~ "\t\t\t<p>\r\n" -#~ "\t\t\t\tGymnasium Nr. 40 mit Integrationsabteilungen \r\n" -#~ "\t\t\t\tSchulverbund Nr. 69 Schulname: Armii Krajowej Grupy Bojowej " -#~ "âKRYBARâ, \r\n" -#~ "\t\t\t\tStr. Drewniana 8, 00-345 Warszawa; 2. Klasse\r\n" -#~ "\t\t\t\tKlassenlehrerin: Anna Budziarek-Friedrich:\r\n" -#~ "\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t<ul>\r\n" -#~ "\t\t\t\t<li>Burdon Filip;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>DÄbski Bartek;</li>\r\n" -#~ "\t\t\t\t<li>Jackowicz Kamil;</li>\r\n" -#~ "\t\t\t\t<li>Kurek PaweÅ;</li>\r\n" -#~ "\t\t\t\t<li>Makles Bartosz;</li>\r\n" -#~ "\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n" -#~ "\t\t\t\t<li>MigdaÅ Katarzyna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Mioduszewski MichaÅ;</li>\r\n" -#~ "\t\t\t\t<li>Pfeiffer Ida;</li>\r\n" -#~ "\t\t\t\t<li>PÅaskowicka Karolina;</li>\r\n" -#~ "\t\t\t\t<li>Sailer Ewa.</li>\r\n" -#~ "\t\t\t</ul>\r\n" -#~ "\t\t</li>\r\n" -#~ "\r\n" -#~ "\t\t<li>\r\n" -#~ "\t\t\t<p>\r\n" -#~ "\t\t\t\tXXXIII Kopernikus Oberschule,\r\n" -#~ "\t\t\t\tStr. Bema 76, 01-225 Warszawa; 1. Klasse; \r\n" -#~ "\t\t\t\tFachbereiche: Biologie-Chemie; Klassenlehrerin: Elżbieta " -#~ "Konkowska:\r\n" -#~ "\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t<ul>\r\n" -#~ "\t\t\t\t<li>Chwil BartÅomiej;</li>\r\n" -#~ "\t\t\t\t<li>Czarnecka Natalia;</li>\r\n" -#~ "\t\t\t\t<li>GawroÅska Iga;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Grabarczyk Marta;</li>\r\n" -#~ "\t\t\t\t<li>JastrzÄ b Katarzyna;</li>\r\n" -#~ "\t\t\t\t<li>Krawczak Olga;</li>\r\n" -#~ "\t\t\t\t<li>Krawczyk Marianna;</li>\r\n" -#~ "\t\t\t\t<li>Kur Natalia;</li>\r\n" -#~ "\t\t\t\t<li>Kwiatek Marta;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>LaÅkiewicz Joanna;</li>\r\n" -#~ "\t\t\t\t<li>MachczyÅska Daria;</li>\r\n" -#~ "\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n" -#~ "\t\t\t\t<li>Moczulska Karolina;</li>\r\n" -#~ "\t\t\t\t<li>MoÅcicka Aneta;</li>\r\n" -#~ "\t\t\t\t<li>Narloch Sabina;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Przybysz PaweÅ;</li>\r\n" -#~ "\t\t\t\t<li>Puchta Marek;</li>\r\n" -#~ "\t\t\t\t<li>Ryska Cezary;</li>\r\n" -#~ "\t\t\t\t<li>Sandomierski BartÅomiej;</li>\r\n" -#~ "\t\t\t\t<li>SÅawiÅski Tomasz;</li>\r\n" -#~ "\t\t\t\t<li>SÅowik Olga;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n" -#~ "\t\t\t\t<li>Strzelczak Karolina;</li>\r\n" -#~ "\t\t\t\t<li>Szafran Danuta;</li>\r\n" -#~ "\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n" -#~ "\t\t\t\t<li>Szulkowska Alicja;</li>\r\n" -#~ "\t\t\t\t<li>Ålusarczyk Anna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Tytkowska Anna.</li>\r\n" -#~ "\t\t\t</ul>\r\n" -#~ "\t\t\t<li>\r\n" -#~ "\t\t\t\t<p>\r\n" -#~ "\t\t\t\t\tPrivate Oberschule Nr 42,\r\n" -#~ "\t\t\t\t\tStr. Iwicka 47 B, 00-735 Warszawa; 1. Klasse\r\n" -#~ "\t\t\t\t\tFachbereich: Allgemeinbildung; Klassenlehrer: MichaÅ Friedrich:" -#~ "\r\n" -#~ "\t\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<ul>\r\n" -#~ "\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>GoÅaszewska Ewa;</li>\r\n" -#~ "\t\t\t\t\t<li>Kwiatkowski MichaÅ;</li>\r\n" -#~ "\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n" -#~ "\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n" -#~ "\t\t\t\t\t<li>Przespolewski PrzemysÅaw;</li>\r\n" -#~ "\t\t\t\t\t<li>RosiÅska Zuzanna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n" -#~ "\t\t\t\t</ul>\r\n" -#~ "\t\t\t</li>\r\n" -#~ "\t\t\t<li>\r\n" -#~ "\t\t\t\t<p>\r\n" -#~ "\t\t\t\t\tLXIV Witkiewicz Oberschule,\r\n" -#~ "\t\t\t\t\tStr. ElblÄ ska 51, 01-737 Warszawa; 1. Klasse, \r\n" -#~ "\t\t\t\t\tFachbereich: Allgemeinbildung; Klassenlehrer: Daniel Zych:\r\n" -#~ "\t\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<ul>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n" -#~ "\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n" -#~ "\t\t\t\t\t<li>DrÄ gowska Katarzyna;</li>\r\n" -#~ "\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n" -#~ "\t\t\t\t\t<li>GÅowacki Jan;</li>\r\n" -#~ "\t\t\t\t\t<li>Grad PaweÅ;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n" -#~ "\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n" -#~ "\t\t\t\t\t<li>KÅos Aneta;</li>\r\n" -#~ "\t\t\t\t\t<li>KozieÅ Barbara;</li>\r\n" -#~ "\t\t\t\t\t<li>KozÅowska Anna;</li>\r\n" -#~ "\t\t\t\t\t<li>Krug Pamela;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n" -#~ "\t\t\t\t\t<li>LubaÅ MichaÅ;</li>\r\n" -#~ "\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n" -#~ "\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n" -#~ "\t\t\t\t\t<li>Modelska Marta;</li>\r\n" -#~ "\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n" -#~ "\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n" -#~ "\t\t\t\t\t<li>Pielat Zofia;</li>\r\n" -#~ "\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n" -#~ "\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n" -#~ "\t\t\t\t\t<li>Rosa Karolina;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>SmyczyÅska Kamila;</li>\r\n" -#~ "\t\t\t\t\t<li>StoliÅska Barbara;</li>\r\n" -#~ "\t\t\t\t\t<li>SzymaÅska Katarzyna;</li>\r\n" -#~ "\t\t\t\t\t<li>Åcibior Ewa;</li>\r\n" -#~ "\t\t\t\t\t<li>Witczak Magda;</li>\r\n" -#~ "\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n" -#~ "\t\t\t\t\t<li>ZióÅkowska Adrianna.</li>\r\n" -#~ "\t\t\t\t</ul>\r\n" -#~ "\t\t\t</li>\r\n" -#~ "\t </li>\r\n" -#~ "\t </ol>\r\n" - -#~ msgid "Możesz nam pomóc" -#~ msgstr "Du kannst uns helfen" - -#~ msgid "" -#~ "<h2>Wolontariat w Wolnych Lekturach</h2>\r\n" -#~ "<ul>\r\n" -#~ "<li>ZostaÅ naszym redaktorem, programistÄ lub tÅumaczem â wolontariuszem." -#~ "</li>\r\n" -#~ "<li>ZdobÄ dź nowe umiejÄtnoÅci i doÅwiadczenie. </li>\r\n" -#~ "<li>Weź udziaÅ w otwartym projekcie i twórz innowacyjnÄ bibliotekÄ " -#~ "internetowÄ . </li>\r\n" -#~ "</ul>\r\n" -#~ "<p>DziÄki pracy naszych wolontariuszy opublikowaliÅmy już ponad <b>1500 " -#~ "lektur</b>, z których skorzystaÅy ponad <b>3 miliony</b> czytelników z " -#~ "caÅego Åwiata. </p>\r\n" -#~ "<p>Zapraszamy wszystkie osoby, które chcÄ wspóÅtworzyÄ nasz projekt. " -#~ "WspóÅpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " -#~ "literaturÄ , redagowaniem tekstów i projektami informatycznymi. Oferujemy " -#~ "profesjonalne szkolenia i staÅÄ pomoc merytorycznÄ . Wolontariusze mogÄ " -#~ "pracowaÄ zdalnie lub w siedzibie Fundacji.</p>\r\n" -#~ "<p>Organizujemy również praktyki studenckie â nawiÄ zaliÅmy wspóÅpracÄ z " -#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " -#~ "Karier UKSW oraz WydziaÅem Fizyki UW. </p>\r\n" -#~ "\r\n" -#~ "<h2>Jak siÄ do nas zgÅosiÄ?</h2>\r\n" -#~ "<p>Wszystkie zainteresowane osoby prosimy o przysÅanie maila na adres <a " -#~ "href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n" -#~ msgstr "" -#~ "<h2>Volontariat</h2>\r\n" -#~ "\r\n" -#~ " <p>Wir sind stets bemüht, unseren Bibliothekbestand ständig um " -#~ "neue Werke zu erweitern. Dies ist nur \r\n" -#~ " dank der Hilfe unserer Volontäre möglich.</p>\r\n" -#~ "\r\n" -#~ " <p>Wir laden herzlich alle Menschen ein, die sich an der " -#~ "Mitgestaltung unserer Internet-Schulbibliothek beteiligen wollen.</p>\r\n" -#~ " \r\n" -#~ " \r\n" -#~ " \r\n" -#~ " <p>Allen Volontären bieten wir Schulungen und Praktikum im " -#~ "Bereich der Textverarbeitung an: \r\n" -#~ " technische und sachliche Redaktion. Volontäre können mehr über " -#~ "Probleme und Möglichkeiten erfahren, \r\n" -#~ " die mit der Veröffentlichung von Internetpublikationen verbunden " -#~ "sind. Unsere Volontäre beteiligen \r\n" -#~ " sich zudem an der Organisation von Schulungen und Konferenzen, " -#~ "helfen bei der Vorbereitung \r\n" -#~ " von Hörtexten (sog. Audiobooks). Wir stellen Verträge und " -#~ "Bescheinigungen unseren Volontären \r\n" -#~ " bezüglich der Art der Tätigkeit und deren Zeitrahmen aus. " -#~ "Schulungen, Verlagspraktikum sowie \r\n" -#~ " während des Volontariats erworbene Erfahrungen und Kompetenzen " -#~ "können ganz gewiss zum beruflichen Aufstieg verhelfen.</p> \r\n" -#~ " \r\n" -#~ " \r\n" -#~ " <h2>Was zu tun ist?</h2>\r\n" -#~ " \r\n" -#~ " <p>Der GroÃteil der Arbeit liegt in der Vorbereitung der Lektüren " -#~ "zur Veröffentlichung. Die Texte, die wir \r\n" -#~ " von der Nationalbibliothek bekommen, müssen auf Tipp- und andere " -#~ "mechanische Fehler überprüft werden. \r\n" -#~ " Die Anmerkungen müssen in den Text eingefügt werden. Es sei zu " -#~ "bedenken, dass unsere Zielgruppe Schüler sind, \r\n" -#~ " so müssen dementsprechend die Wörter und Wendungen an diese " -#~ "Altersgruppe angepasst werden. Ãltere Ausgaben \r\n" -#~ " (hier gilt das strenge Uhrheberrecht) werden stets in Hinblick " -#~ "auf Rechtsschreibung und Flexion an die \r\n" -#~ " Gegenwartssprache angepasst und zwar unter gleichzeitiger " -#~ "Beachtung der Einheit von Form und literarischen Stilen. \r\n" -#~ " Das Aussuchen von literarischen Motiven und Themen, die uns " -#~ "helfen sollen, Literaturinhalte tiefgreifend zu verstehen, \r\n" -#~ " schlieÃen unsere Projektarbeiten ab. Bei allen diesen " -#~ "Unternehmungen helfen uns Volontäre - Lehrer sowie Schüller - \r\n" -#~ " die uns mit eigenen Ratschlägen und Bemerkungen bei der " -#~ "Entscheidungsfindung unterstützen.</p>\r\n" -#~ " \r\n" -#~ " \r\n" -#~ " <h2>Wie Sie uns erreichen?</h2>\r\n" -#~ " \r\n" -#~ " <p>Personen, die an der Zusammenarbeit interessiert sind, bitten " -#~ "wir um eine E-Mail an folgende Adresse zu richten: <a href=\"mail:" -#~ "fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</" -#~ "p>\r\n" -#~ "\r\n" -#~ " <p>Wir laden Sie auch ein unter <a href=\"http://redakcja." -#~ "wolnelektury.pl/documents/catalogue/\">Redaktonseite der Freien Lektüren</" -#~ "a>, auf unserer Hompage finden Sie nützliche Informationen rund um das " -#~ "Thema Redaktionsarbeit.</p>\r\n" - -#~ msgid "" -#~ "<h2>Kogo szukamy?</h2>\r\n" -#~ "\r\n" -#~ "<h3>Redaktorów technicznych (skÅad tekstu) </h3>\r\n" -#~ " <p>SkÅad jest pierwszym etapem pracy nad tekstem. Za pomocÄ znaczników " -#~ "jÄzyka WL-XML nadajemy tekstowi poÅ¼Ä danÄ formÄ i umożliwiamy wyÅwietlenie " -#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na <a " -#~ "href=\"http://redakcja.wolnelektury.pl\">Platformie Redakcyjnej</a>, " -#~ "która pozwala na zautomatyzowanie dużej czÄÅci pracy. </p>\r\n" -#~ "\r\n" -#~ " <p><b>Kto może zostaÄ redaktorem technicznym?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Każdy â po krótkim szkoleniu.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>WiÄcej informacji o redakcji technicznej znajdziecie na <a href=" -#~ "\"http://redakcja.wolnelektury.pl/documents/catalogue/\">stronie redakcji " -#~ "Wolnych Lektur</a> </p>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Redaktorów literackich (merytorycznych) </h3>\r\n" -#~ " <p>Redakcja literacka obejmuje korektÄ, uwspóÅczeÅnienia oraz dodawanie " -#~ "przypisów i motywów literackich. To unikalna możliwoÅÄ zdobycia " -#~ "doÅwiadczenia w cyfrowej edycji tekstów. </p>\r\n" -#~ "\r\n" -#~ " <p><b>Kto może zostaÄ redaktorem literackim? </b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Osoby, które majÄ doÅwiadczenie w redakcji tekstów literackich,</li>" -#~ "\r\n" -#~ "<li>Studenci i absolwenci studiów humanistycznych, którzy chcÄ takie " -#~ "doÅwiadczenie zdobyÄ. </li>\r\n" -#~ "</ul>\r\n" -#~ "<p>WiÄcej informacji o redakcji merytorycznej znajdziecie na <a href=" -#~ "\"http://redakcja.wolnelektury.pl/documents/catalogue/\">stronie redakcji " -#~ "Wolnych Lektur</a> </p>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>TÅumaczy</h3>\r\n" -#~ " <p>Strona WolneLektury.pl jest dostÄpna w siedmiu jÄzykach obcych â " -#~ "angielskim, francuskim, niemieckim, hiszpaÅskim, litewskim, rosyjskim " -#~ "oraz ukraiÅskim. Użytkownikami biblioteki jest ponad 200 tysiÄcy osób z " -#~ "zagranicy, a już niedÅugo nasze zbiory obejmÄ również dzieÅa w jÄzykach " -#~ "obcych. Dlatego potrzebujemy na bieÅ¼Ä co tÅumaczyÄ nowe informacje " -#~ "pojawiajÄ ce siÄ na stronie. </p>\r\n" -#~ " <p><b>Kto może pomóc w tÅumaczeniach? </b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Każdy, kto dobrze zna co najmniej jeden z powyższych jÄzyków. </li>" -#~ "\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Programistów</h3>\r\n" -#~ " <p>Poza samÄ stronÄ Wolnych Lektur tworzymy również: </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>narzÄdzia redakcyjne,</li>\r\n" -#~ "<li>konwertery do różnych formatów e-booków, </li>\r\n" -#~ "<li>aplikacje mobile uÅatwiajÄ ce dostÄp do naszych zasobów.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " -#~ "jQuery, LaTeX, Java.\r\n" -#~ "Tworzone przez nas oprogramowanie udostÄpniamy na <a href=\"https://" -#~ "github.com/fnp/\">wolnej licencji</a>. </p>\r\n" -#~ " <p><b>Kto może pomóc w pracach programistycznych?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Każdy, kto umie i chciaÅby zdobyÄ punkty do karmy za udziaÅ w " -#~ "otwartym projekcie programistycznym. ;)</li>\r\n" -#~ "</ul>\r\n" -#~ msgstr "" -#~ "<h2>Wohlverdiente Volontäre</h2>\r\n" -#~ "\r\n" -#~ "\t<h3>Agatapaszkowska (Mitarbeit seit 15. März 2008)</h3>\r\n" -#~ "\r\n" -#~ " <p>bearbeitete u.a. \"Durch Wüste und Wildnis\" von Sienkiewicz; " -#~ "s. auf unserer Website die \"Benutzerbeiträge\": <a href=\"http://wiki." -#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki." -#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\t<h3>AgnieszkaKappa (Mitarbeit seit 16. März 2008)</h3>\r\n" -#~ "\r\n" -#~ " <p>arbeitete u.a. an der Erstellung der Liste und Beschreibung " -#~ "der literarischen Themen und Motive;bearbeitete Texten von Sienkiewicz " -#~ "( Der Leuchtturmwärter, Janko der Musikant, Quo vadis);s. auf unserer " -#~ "Website die \"Benutzerbeiträge\": <a href=\"http://wiki.wolnepodreczniki." -#~ "pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&" -#~ "target=AgnieszkaKappa\">http://wiki.wolnepodreczniki.pl/index.php?" -#~ "title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>" -#~ "\r\n" -#~ "\r\n" -#~ "\r\n" -#~ " \r\n" -#~ " \r\n" -#~ "\r\n" -#~ " <h3>Anerys (Mitarbeit seit 5. Juli 2007)</h3>\r\n" -#~ "\r\n" -#~ " <p>arbeitete u.a. an der Erstellung der Liste und Beschreibung " -#~ "der literarischen Themen und Motive;nahm an der Diskussion über " -#~ "Literaturgattungen teil, bearbeitete folgende Werke: Bogurodzica, " -#~ "\"Spruchgedichte\" und \"Klagelieder\" von Kochanowski; Gedichte von " -#~ "Slowacki ( Agamemnons Grab), \"Tartuffe oder der Betrüger\" von Moliere, " -#~ "ob Poesien von Kasprowicz (u.a. eine Hymne \"Dies Irae\"); s. auf " -#~ "unserer Website die \"Benutzerbeiträge\": <a href=\"http://wiki." -#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://wiki." -#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n" -#~ " \r\n" -#~ "\r\n" -#~ "\t<h3>EmiliaZdankiewicz (Mitarbeit seit 17. März 2008)</h3>\r\n" -#~ "\r\n" -#~ " <p>nahm u.a. an der Diskussion und Beschreibung literarischer " -#~ "Motive teil, SÅowacki, Kordian; Konopnicka, Unsere Mähre; Mickiewicz, " -#~ "Totenfeier Teil III; s. auf unserer Website die \"Benutzerbeiträge\": <a " -#~ "href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/" -#~ "EmiliaZdankiewicz\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/" -#~ "EmiliaZdankiewicz</a></p>\r\n" -#~ "\r\n" -#~ " \r\n" -#~ "\t\r\n" -#~ "\t<h3>Ewa_Serafin (Mitarbeit seit 15. März 2008)</h3>\r\n" -#~ "\r\n" -#~ " <p>arbeitete u.a. an der Erstellung der Liste und Beschreibung " -#~ "der literarischen Themen und Motive, bearbeitete Kasprowicz Gedichte (âZ " -#~ "wichrów i halâ, âNad przepaÅciamiâ, âW ciemnoÅci schodzi moja duszaâ oraz " -#~ "âNad Niemnemâ Orzeszkowej; s. auf unserer Website die \"Benutzerbeiträge" -#~ "\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/" -#~ "Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/" -#~ "Ewa_Serafi</a>n</p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ " \t<h3>Hanna_Golab (Mitarbeit seit 15. März 2008)</h3>\r\n" -#~ "\r\n" -#~ " <p>bearbeitete \" König Ãdipus\" von Sophokles sowie \"DusioÅek" -#~ "\" von Lesmian; s. auf unserer Website die \"Benutzerbeiträge\": <a href=" -#~ "\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab" -#~ "\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></" -#~ "p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\t<h3>Ingene (Mitarbeit seit 16. Juli 2008)</h3>\r\n" -#~ "\r\n" -#~ " <p>bearbeitete u.a. âSiÅaczkaâ von Å»eromski, âQuo vadisâ von " -#~ "Sienkiewicz sowie âKlageliederâ von Kochanowski; s. auf unserer Website " -#~ "die \"Benutzerbeiträge\": <a href=\"http://wiki.wolnepodreczniki.pl/" -#~ "Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk" -#~ "%C5%82ad/Ingene</a></p>\r\n" -#~ " \r\n" -#~ "\t<h3>Jmyszkowska (Mitarbeit seit 26. März 2008)</h3>\r\n" -#~ "\r\n" -#~ " <p>bearbeitete u.a. âGiaurâ von Byron sowie âQuo vadisâ von " -#~ "Sienkiewicz; s. auf unserer Website die \"Benutzerbeiträge\": <a href=" -#~ "\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska" -#~ "\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></" -#~ "p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ " <h3>Marysiabailey (Mitarbeit seit 1. Oktober 2007)</h3>\r\n" -#~ "\r\n" -#~ " <p>arbeitete u.a. an der Erstellung der Liste und Beschreibung " -#~ "der literarischen Themen und Motive sowie deren Benutzung; bearbeitete " -#~ "folgende Werke: \"Die Bauern\" von Reymont, \"Die Puppe\" von Prus, \"Un-" -#~ "göttliche Komödie\" von Krasinski, \"Märchens\" und \"Satire\" von " -#~ "Krasickiego, \"Antigone\" von Sophokles sowie Werke von Kochanowski, " -#~ "Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman, Kasprowicz; s. auf " -#~ "unserer Website die \"Benutzerbeiträgeâ: <a href=\"http://wiki." -#~ "wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&" -#~ "limit=500&target=Marysiabailey\">http://wiki.wolnepodreczniki.pl/" -#~ "index.php?title=Specjalna:Wk%C5%82ad&limit=500&" -#~ "target=Marysiabailey</a zusätzlich beteiligte sie sich am 15. März 2008 " -#~ "an der Organisation von Volontär-Schulungen, beschäftigte sich mit " -#~ "proofreading, gegenwärtig arbeitet sie an Hörbüchern.</p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ " <h3>Olga_Wojtczak (Mitarbeit seit 21. Oktober 2008)</h3>\r\n" -#~ "\r\n" -#~ " <p>bearbeitete u.a. Romane von Sienkiewicz ( Die Trilogie), " -#~ "Reymont, Å»eromski und Dramen von Shakespeare; s. auf unserer Website die " -#~ "\"Benutzerbeiträge\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:" -#~ "Wk%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk" -#~ "%C5%82ad/Olga_Wojtczak</a></p>\r\n" -#~ "\r\n" -#~ " <h3>Renataml (Mitarbeit seit 30. Juni 2007)</h3>\r\n" -#~ "\r\n" -#~ " <p>nahm an der Diskussion über Motivlisten teil, als erfahrene " -#~ "Lehrerin unterstützte sie uns mit vielen Ratschlägen, bearbeitete " -#~ "folgende Werke: \"Die Puppe\" von Prus, \"Balladyna\" von Slowacki, " -#~ "\"SiÅaczka\" Å»eromski.\r\n" -#~ "\r\n" -#~ " <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/" -#~ "Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</" -#~ "a></p>\r\n" - -#~ msgid "O projekcie" -#~ msgstr "Ãber das Projekt" - -#~ msgid "" -#~ "{% load reporting_stats %}\r\n" -#~ "\r\n" -#~ "<p><strong>Wolne Lektury to biblioteka internetowa czynna 24 godziny na " -#~ "dobÄ, 365 dni w roku i caÅkowicie darmowa</strong>. W jej zbiorach " -#~ "znajduje siÄ <strong>{% count_books %}</strong> utworów, w tym wiele " -#~ "lektur szkolnych zalecanych do użytku przez Ministerstwo Edukacji " -#~ "Narodowej, które trafiÅy już do domeny publicznej. Wszystkie dzieÅa sÄ " -#~ "odpowiednio opracowane - opatrzone przypisami, motywami i udostÄpnione w " -#~ "kilku formatach - <strong>HTML </strong>, <strong>TXT </strong>, " -#~ "<strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>. W " -#~ "bibliotece znajduje siÄ również kilkaset audiobooków, czytanych przez " -#~ "takich aktorów jak: Danuta Stenka, Jan Peszek czy Andrzej Chyra. Można " -#~ "ich sÅuchaÄ w formatach <strong>MP3</strong> i <strong>Ogg Vorbis</" -#~ "strong>. Audiobooki sÄ również dostÄpne w formacie <strong>DAISY </" -#~ "strong>dostosowanym do potrzeb osób sÅabowidzÄ cych, niewidomych oraz osób " -#~ "majÄ cych trudnoÅci z czytaniem.</p>\r\n" -#~ "\r\n" -#~ "<p>Biblioteka Wolne Lektury dostÄpna jest za poÅrednictwem aplikacji " -#~ "mobilnych â na system <a href=\"https://market.android.com/details?id=pl." -#~ "org.nowoczesnapolska.wlmobi\"> Android</a> oraz na system iOS. </p>\r\n" -#~ "\r\n" -#~ "<p><strong>Wszystkie utwory zamieszczone w bibliotece Wolne Lektury można " -#~ "zgodnie z prawem bezpÅatnie przeglÄ daÄ, sÅuchaÄ, ÅciÄ gaÄ na swój " -#~ "komputer, a także udostÄpniaÄ innym i cytowaÄ.</strong> </p>" -#~ msgstr "" -#~ "{% load reporting_stats %}\r\n" -#~ "\r\n" -#~ "<p><strong>Wolne Lektury ist eine Internetbibliothek, die 24 Stunden " -#~ "zugänglich ist, 365 Tage im Jahr, dazu völlig kostenlos</strong>. Sie " -#~ "beinhält <strong>{% count_books %}</strong> Werke, darunter viele " -#~ "Schullektüren, die durch das polnische Bildungsministerium empfohlen " -#~ "werden und die zur Gemeinfreiheit gehören. Alle Werke werden entsprechend " -#~ "bearbeitet - mit FuÃnoten und Motiven versehen sowie in verschiedenen " -#~ "Formaten zugänglich - <strong>HTML </strong>, <strong>TXT</strong>, " -#~ "<strong>PDF</strong>, <strong>EPUB</strong>, <strong>MOBI</strong>. In " -#~ "der Bibliothek befinden sich auch einige hundert von Hörbüchern, die von " -#~ "bekannten polnischen Schauspielern wie Danuta Stenka, Jan Peszek oder " -#~ "Andrzej Chyra vorgelesen werden. Es ist möglich sie in folgenden Formaten " -#~ "abzuspielen: <strong>MP3</strong> und <strong>Ogg Vorbis</strong>. " -#~ "Hörbücher sind auch im Format <strong>DAISY </strong> zugänglich, die für " -#~ "Bedürfnisse von Schwachsehenden, Blinden und Personen mit " -#~ "Lesenschwierigkeiten geeignet sind.</p>\r\n" -#~ "\r\n" -#~ "<p>Wolne Lektury-Bibliothek ist auch für Nutzer der mobilen Geräte " -#~ "zugänglich  für das System <a href=\"https://market.android.com/details?" -#~ "id=pl.org.nowoczesnapolska.wlmobi\"> Android</a> und für das System iOS. " -#~ "zugänglich </p>\r\n" -#~ "\r\n" -#~ "<p><strong>Alle in der Wolne Lektury-Bibliothek veröffentlichten Werke " -#~ "kann man rechtsmäÃig kostenlos durchsehen, hören, auf eigenen Computer " -#~ "herunterladen; überdies ist ihre Weitervermittlung und Anführung erlaubt." -#~ "</strong> </p>" - -#~ msgid "" -#~ "<p>Wolne Lektury to projekt fundacji Nowoczesna Polska realizowany pro " -#~ "publico bono, we wspóÅpracy z BibliotekÄ NarodowÄ , BibliotekÄ ÅlaskÄ oraz " -#~ "BibliotekÄ ElblÄ skÄ pod patronatem Ministerstwa Edukacji Narodowej, " -#~ "Ministerstwa Kultury i Dziedzictwa Narodowego oraz Stowarzyszenia Pisarzy " -#~ "Polskich. W Komitecie Honorowym Wolnych Lektur zasiadajÄ : prof. Maria " -#~ "Janion, prof. Grażyna Borkowska, prof. PrzemysÅaw CzapliÅski, prof. " -#~ "MieczysÅaw DÄ browski, prof. Ewa Kraskowska, prof. MaÅgorzata CzermiÅska, " -#~ "prof. Jerzy JarzÄbski i prof. Piotr ÅliwiÅski.</p>\r\n" -#~ "\r\n" -#~ "<p>WiÄkszoÅÄ utworów w bibliotece nie jest chroniona prawem autorskim i " -#~ "znajduje siÄ w domenie publicznej, co oznacza że można je swobodnie " -#~ "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 <a " -#~ "href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie " -#~ "autorstwa-Na tych samych warunkach 3.0</a>. Publikujemy również kilka " -#~ "utworów, które autorzy lub spadkobiercy praw udostÄpnili na wolnej " -#~ "licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl" -#~ "\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>.</p>\r\n" -#~ "\r\n" -#~ "Kontakt: wolnelektury@nowoczesnapolska.org.pl" -#~ msgstr "" -#~ "<p>Wolne Lektury ist ein pro bono Projekt der Stiftung Nowoczesna Polska " -#~ "(Modernes Polen), in Zusammenarbeit mit der Nationalbibliothek, der " -#~ "Schlesischen Bibliothek und der Elblinger Bibliothek unter dem Patronat " -#~ "des polnischen Bildungsministeriums und des Verbandes polnischer " -#~ "Schrifsteller (Stowarzyszenie Pisarzy Polskich). Im Ehrenkomitee von " -#~ "Wolne Lektury sind Prof. Maria Janion, Prof. Grażyna Borkowska, Prof. " -#~ "PrzemysÅaw Czapliñski, Prof. MieczysÅaw DÄ browski, Prof. Ewa Kraskowska, " -#~ "Prof. MaÅgorzata Czermiñska, Prof. Jerzy Jarzêbski und Prof. Piotr " -#~ "Åliwiñski tätig.</p>\r\n" -#~ "\r\n" -#~ "<p>Die Mehrheit von Bibliothekwerken steht nicht unter dem Schutz des " -#~ "Urheberrechts und gehört zu dem Gemeinfreiheitsbereich, was bedeutet, " -#~ "dass man sie frei veröffentlichen und vermitteln darf. Sollte das Werk " -#~ "mit zusätzlichen Angaben versehen werden (FüÃnoten und literarischen " -#~ "Motiven), die dem Urheberrechtsschutz unterliegen, sind diese " -#~ "zusätzlichen Angaben unter der Lizenz <a href=\"http://creativecommons." -#~ "org/licenses/by-sa/3.0/deed.pl\"> Urheberschaftanerkennung unter gleichen " -#~ "Bedigungen 3.0</a> verfügbar. Wir veröffentlichen auch Werke, die " -#~ "Verfasser oder Rechtsnachfolger unter der freien Lizenz <a href=\"http://" -#~ "creativecommons.org/licenses/by-sa/3.0/deed.pl\">Urheberschaftanerkennung " -#~ "unter gleichen Bedigungen 3.0</a>.</p> herausgegeben haben. \r\n" -#~ "\r\n" -#~ "Kontakt: wolnelektury@nowoczesnapolska.org.pl" - -#~ msgid "ZespóÅ" -#~ msgstr "Unser Team" - -#~ msgid "" -#~ "<p><strong>Magdalena Biernat</strong> â koordynatorka projektu, dyrektor " -#~ "zarzÄ dzajÄ ca fundacji Nowoczesna Polska. Socjolożka, absolwentka " -#~ "Uniwersytetu Warszawskiego i LâUniversité libre de Bruxelles. " -#~ "Specjalistka od projektów internetowych. KoordynowaÅa projekty Kandydaci " -#~ "2009 i Mam Prawo WiedzieÄ w Stowarzyszeniu 61. PracowaÅa przy wielu " -#~ "badaniach spoÅecznych realizowanych przez organizacje pozarzÄ dowe i firmy " -#~ "badawcze. </p>\r\n" -#~ "\r\n" -#~ "<p><strong>RadosÅaw Czajka</strong> â gÅówny programista, studiowaÅ " -#~ "informatykÄ na MIMUW. BiegÅy w jÄzykach programowania, znaczników: " -#~ "Python, XHTML, Javascript, CSS, LaTeX, SQL. Posiada doÅwiadczenie z " -#~ "frameworkami Django, Jquery, doÅwiadczenie w przeksztaÅceniach dokumentów " -#~ "XML (XSLT), w produkcji ebooków w formatach PDF i EPUB oraz w tworzeniu " -#~ "aplikacji mobilnych na system Android i iOS.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Marcin Koziej </strong>â programista. Absolwent Politechniki " -#~ "Warszawskiej i doktorant w Instytucie Filozofii Uniwersytetu " -#~ "Warszawskiego. DziaÅacz Mokotowskiej Kooperatywy Spożywczej. Podróżnik, " -#~ "rowerzysta i biesiadnik. Homo ludens.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Marta NiedziaÅkowska</strong> â redaktorka techniczna, " -#~ "absolwentka bibliotekoznawstwa i informacji naukowej UW. Studentka " -#~ "studiów magisterskich Public Policy and Administration na Collegium " -#~ "Civitas. </p>\r\n" -#~ "\r\n" -#~ msgstr "" -#~ "<p><strong>Magdalena Biernat</strong> - Projektkoordinator, " -#~ "Verwaltungsleiterin der Stiftung Modernes Polen. Soziologin, Absolventin " -#~ "der Universität Warschau und der Université libre de Bruxelles. " -#~ "Spezialistin für Internetprojekte. Sie hat die Projekte Kandydaci 2009 " -#~ "(Kandidaten 2009) und Mam Prawo Wiedzieæ (Ich habe Recht zu wissen) in " -#~ "Verein 61 (Stowarzyszenie 61) koordiniert. Sie hat an vielen " -#~ "Gesellschaftsstudien gearbeitet, die von Nichtregierungsorganisationen " -#~ "und Forschungsanstalten durchgeführt wurden. </p>\r\n" -#~ "\r\n" -#~ "<p><strong>RadosÅaw Czajka</strong> - Hauptprogrammierer, studierte " -#~ "Informatik an der Fakultät für Mathematik, Informatik und Maschinen an " -#~ "der Universität Warschau. Gewandt in Programmierersprachen und " -#~ "Datenbanken: Python, XHTML, Javascript, CSS, LaTeX, SQL. Er besitz " -#~ "Erfahrung in Frameworks: Django, Jquery, den Transformationen XML-Dateien " -#~ "(XSLT), der Herstellung von E-books in PDF und EPUB und Generierung von " -#~ "Mobilanwendungen für das Android- und iOS-System.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Marcin Koziej </strong> - Programmierer, Absolvent der " -#~ "Technischen Universität Warschau und Doktorand im Institut für " -#~ "Philosophie an Universität. Tätig im Konsumverein von Mokotów (Mokotowska " -#~ "Kooperatywa Spożywcza). Reisender und Radfahrer. Homo ludens.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Marta NiedziaÅkowska</strong> - Textbearbeiterin, Absolventin " -#~ "der Wissenschaftsinformation und Bibliothekwissenschaft an der " -#~ "Universität Warschau. Masterstudium: Collegium Civitas, Fakultät: Public " -#~ "Policy and Administration. </p>\r\n" -#~ "\r\n" - -#~ msgid "" -#~ "<p><strong>Dorota A. Kowalska</strong> â redaktorka literacka, " -#~ "jÄzykoznawca, polonistka i slawistka, doktor nauk humanistycznych, " -#~ "adiunkt w Pracowni Polszczyzny Kresowej IJP PAN, gdzie zajmuje siÄ " -#~ "historiÄ i wspóÅczesnoÅciÄ jÄzyka polskiego na Ukrainie. Hobbystycznie " -#~ "Åpiewa archaiczne pieÅni ukraiÅskie i rosyjskie, cyklistka.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Aleksandra SekuÅa</strong> â redaktorka literacka, historyczka " -#~ "literatury, doktor nauk humanistycznych, absolwentka WydziaÅu Polonistyki " -#~ "Uniwersytetu Warszawskiego i SzkoÅy Nauk SpoÅecznych przy IFiS PAN. " -#~ "Zawodowo i naukowo zajmuje siÄ polskim romantyzmem, historiÄ idei i " -#~ "teoriÄ kultury. </p>\r\n" -#~ "\r\n" -#~ "<p><strong>PaweÅ KozioÅ </strong>â redaktor literacki. Ur. 1979, doktor " -#~ "nauk humanistycznych specjalizujÄ cy siÄ w literaturze dawnej, absolwent " -#~ "WydziaÅu Polonistyki Uniwersytetu Warszawskiego oraz Dulwich College w " -#~ "Londynie. Poeta, krytyk literacki, stypendysta Ministerstwa Kultury i " -#~ "Dziedzictwa Narodowego (2010). </p>\r\n" -#~ "\r\n" -#~ "<p><strong>Paulina ChoromaÅska</strong> â redaktorka techniczna, " -#~ "studentka II roku studiów magisterskich w Instytucie Informacji Naukowej " -#~ "i Studiów Bibliologicznych UW. Pracuje również w Pracowni Dokumentacji " -#~ "Teatru w Instytucie Teatralnym im. Z. Raszewskiego w Warszawie.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Aneta Rawska</strong> - redaktorka techniczna, studentka II " -#~ "roku studiów magisterskich w Instytucie Informacji Naukowej i Studiów " -#~ "Bibliologicznych UW, miÅoÅniczka wypieków i dobrej kuchni. Od 2009 roku " -#~ "prowadzi serwis koÅa PZW nr 21 w WoÅominie.</p>\r\n" -#~ msgstr "" -#~ "<p><strong>Dorota A. Kowalska</strong> - Bearbeiterin im " -#~ "Literaturbereich, Sprachwissenschaftlerin, Polonistin und Slavistin, " -#~ "Doktortitel in Geisteswissenschaften, Mitarbeiterin in Pracownia " -#~ "Polszczyzny Kresowej IJP PAN, wo sie sich mit der Geschichte und dem " -#~ "heutigen Stand der polnischen Sprache in der Ukraine beschäftigt. Sein " -#~ "Steckenpferd ist das Singen von alten russischen und ukrainischen " -#~ "Liedern. Radfahrerin.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Aleksandra SekuÅa</strong> - Bearbeiterin im Literaturbereich, " -#~ "Literaturgeschichtsforscherin, Doktortitel in Geisteswissenschaften, " -#~ "Absolventin der Polonistik an der Universität Warschau und der " -#~ "Gesellschaftswissenschaftsschule bei IFiS PAN. Beruflich und " -#~ "wissenschaftlich befasst sie sich mit der polnischen Romantik, " -#~ "Ideengeschichte und Kulturtheorie. </p>\r\n" -#~ " \r\n" -#~ "<p><strong>PaweÅ KozioÅ </strong> - Bearbeiter im Literaturbereich. 1979 " -#~ "geboren, Doktortitel in Geisteswissenschaften, Spezialisierung für die " -#~ "alte Literatur, Absolvent der Polonistik an der Universität Warschau und " -#~ "des Dulwich Colleges in London. Dichter, Literaturkritiker, Stipendiat " -#~ "des Ministeriums für Kultur und Nationale Erbe (2010). </p>\r\n" -#~ "\r\n" -#~ "<p><strong>Paulina ChoromaÅska</strong> - Textbearbeiterin, Studentin im " -#~ "4. Semester des Masterstudiums im Insitut für Wissenschaftsinformation " -#~ "und Bibliothekwissenschaft an der Universität Warschau. Sie arbeitet auch " -#~ "in der Forschungsstätte für Theaterdokumentation im Zbigniew-Raszewski-" -#~ "Theaterinsitut in Warschau.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Aneta Rawska</strong> - Textbearbeiterin, Studentin im 4. " -#~ "Semester des Masterstudiums im Insitut für Wissenschaftsinformation und " -#~ "Bibliothekwissenschaft. Sie mag gute Küche und ist Backenliebhaberin. Ab " -#~ "2009 führt sie den Service des Polnischen Anglervereins Nr. 21 in WoÅomin." -#~ "</p>\r\n" - -#~ msgid "Wesprzyj nas" -#~ msgstr "Unterstütze uns" - -#~ msgid "" -#~ "<p><strong>Przekaż 1% podatku na Wolne Lektury</strong></p>\r\n" -#~ "<p>Fundacja Nowoczesna Polska posiada status Organizacji Pożytku " -#~ "Publicznego dziÄki czemu na rozwój projektu Wolne Lektury można przekazaÄ " -#~ "1% swojego podatku. W tym celu należy wypeÅniÄ odpowiedniÄ rubrykÄ w " -#~ "rocznym zeznaniu podatkowym (PIT-36, PIT-37 lub PIT-28). W zeznaniu " -#~ "należy podaÄ nazwÄ:</p>\r\n" -#~ "Fundacja Nowoczesna Polska <br/>\r\n" -#~ "oraz numer z Krajowego Rejestru SÄ dowego (KRS) 0000070056<br/>" -#~ msgstr "" -#~ "<p><strong>Ãbergeben Sie 1 % von Ihrer Steuer an Wolne Lektury</strong></" -#~ "p>\r\n" -#~ "<p>Die Stiftung Modernes Polen besitzt den Status einer Non-Profit-" -#~ "Organisation. Infolgedessen kann man 1 % seiner Steuer an die Entwicklung " -#~ "des Projektes Wolne Lektury überreichen. Um dies zu tun, sollte man eine " -#~ "bestimmte Rubrik in der Jahressteuererklärung (Einkommenstuer-36, " -#~ "Einkommensteuer-37 oder Einkommensteuer-28) erfüllen. In der Erklärung " -#~ "ist die:</p>\r\n" -#~ "Bezeichnung Stiftung Modernes Polen <br/>\r\n" -#~ "sowie die Nummer aus dem Landesgerichtsregister (KRS) 0000070056<br/> " -#~ "einzutragen." - -#~ msgid "" -#~ "<p><strong>Przekaż darowiznÄ na Wolne Lektury</strong></p>\r\n" -#~ "<p>Każda wpÅacona kwota zostanie przeznaczona na rozwój zasobów naszej " -#~ "biblioteki. Wystarczy dokonaÄ przelewu na konto:</p>\r\n" -#~ "\r\n" -#~ "Fundacja Nowoczesna Polska<br/>\r\n" -#~ "ul. MarszaÅkowska 84/92 lok. 125<br/>\r\n" -#~ "00-514 Warszawa<br/>\r\n" -#~ "Nr konta: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\n" -#~ "TytuÅ przelewu: Darowizna na Wolne Lektury<br/>" -#~ msgstr "" -#~ "<p><strong>Ãbergeben Sie eine Spende an Wolne Lektury</strong></p>\r\n" -#~ "<p>Jede eingezahlte Summe wird für die Erweiterung der Bücheranzahl in " -#~ "der Bibiothek übermittelt. Es reicht nur eine Ãberweisung aufs Konto:</p>" -#~ "\r\n" -#~ "\r\n" -#~ "Fundacja Nowoczesna Polska (Stiftung Modernes Polen)<br/>\r\n" -#~ "StraÃe: Marsza³kowska 84/92, Wohnungsnummer 125<br/>\r\n" -#~ "Postleitzahl und Stadt: 00-514 Warszawa<br/>\r\n" -#~ "Kontonummer: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\n" -#~ "Ãberweisungstitel: \"Spende an Wolne Lektury\" oder \"Darowizna na Wolne " -#~ "Lektury\"<br/>" - -#~ msgid "WÅÄ cz siÄ w prace" -#~ msgstr "Arbeite zusammen" - -#~ msgid "" -#~ "<ul>\r\n" -#~ "<li>ZostaÅ naszym redaktorem, programistÄ lub tÅumaczem</li>\r\n" -#~ "<li>ZdobÄ dź nowe umiejÄtnoÅci i doÅwiadczenie </li>\r\n" -#~ "<li>Weź udziaÅ w otwartym projekcie i twórz innowacyjnÄ bibliotekÄ " -#~ "internetowÄ </li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ "<p>Zapraszamy wszystkie osoby, które chcÄ wspóÅtworzyÄ nasz projekt. " -#~ "WspóÅpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " -#~ "literaturÄ , redagowaniem tekstów i projektami informatycznymi. Oferujemy " -#~ "profesjonalne szkolenia i staÅÄ pomoc merytorycznÄ . Wolontariusze mogÄ " -#~ "pracowaÄ zdalnie lub w siedzibie Fundacji.</p>\r\n" -#~ "<p>Organizujemy również praktyki studenckie â nawiÄ zaliÅmy wspóÅpracÄ z " -#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " -#~ "Karier UKSW oraz WydziaÅem Fizyki UW. </p>\r\n" -#~ "\r\n" -#~ "<h3>Jak siÄ do nas zgÅosiÄ?</h3>\r\n" -#~ "<p>Wszystkie zainteresowane osoby prosimy o przysÅanie maila na adres <a " -#~ "href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\r\n" -#~ msgstr "" -#~ "<ul>\r\n" -#~ "<li>Werde unser Bearbeiter, Programmierer oder Ãbersetzter</li>\r\n" -#~ "<li>Erwirb neue Fähigkeiten und Erfahrung</li>\r\n" -#~ "<li>Nimm an dem offenen Projekt teil und bilde eine innovative " -#~ "Internetbibliothek </li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ "<p>Wir laden alle Personen ein, die das Projekt mitgestalten möchten. Wir " -#~ "arbeiten mit Studenten, Lehrern und Allen, die sich für Literatur, " -#~ "Textbearbeitung und informatische Projekte interessieren. Wir bieten " -#~ "professionelle Schulungen und ständige Sachhilfe. Volontäre können fern " -#~ "oder im Stiftungssitz arbeiten.</p>\r\n" -#~ "<p>Wir organisieren auch das Studentenpraktikum - wir arbeiten mit dem " -#~ "Institut für Wissenschaftsinformation und Bibliothekwissenschaft an der " -#~ "Universität Warschau, demKarrierebüro der Kardinal-Stefan-Wyszyñski-" -#~ "Universität Warschau und der Fakultät für Physik zusammen. </p>\r\n" -#~ "\r\n" -#~ "<h3>Wie kann man sich bei uns melden?</h3>\r\n" -#~ "<p>Alle Interessierten bitten wir um eine Mail an folgende Adresse <a " -#~ "href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\r\n" - -#~ msgid "" -#~ "<h3>Kogo szukamy?</h3>\r\n" -#~ "\r\n" -#~ "<h3>Redaktorów technicznych (skÅad tekstu) </h3>\r\n" -#~ " <p>SkÅad jest pierwszym etapem pracy nad tekstem. Za pomocÄ znaczników " -#~ "jÄzyka WL-XML nadajemy tekstowi poÅ¼Ä danÄ formÄ i umożliwiamy wyÅwietlenie " -#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na <a " -#~ "href=\"http://redakcja.wolnelektury.pl\">Platformie Redakcyjnej</a>, " -#~ "która pozwala na zautomatyzowanie dużej czÄÅci pracy. </p>\r\n" -#~ "\r\n" -#~ " <p><b>Kto może zostaÄ redaktorem technicznym?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Każdy â po krótkim szkoleniu.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>WiÄcej informacji o redakcji technicznej znajdziecie na <a href=" -#~ "\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" -#~ "\">stronie redakcji Wolnych Lektur</a> </p>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Redaktorów literackich (merytorycznych) </h3>\r\n" -#~ " <p>Redakcja literacka obejmuje korektÄ, uwspóÅczeÅnienia oraz dodawanie " -#~ "przypisów i motywów literackich. To unikalna możliwoÅÄ zdobycia " -#~ "doÅwiadczenia w cyfrowej edycji tekstów. </p>\r\n" -#~ "\r\n" -#~ " <p><b>Kto może zostaÄ redaktorem literackim? </b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Osoby, które majÄ doÅwiadczenie w redakcji tekstów literackich,</li>" -#~ "\r\n" -#~ "<li>Studenci i absolwenci studiów humanistycznych, którzy chcÄ takie " -#~ "doÅwiadczenie zdobyÄ. </li>\r\n" -#~ "</ul>\r\n" -#~ "<p>WiÄcej informacji o redakcji merytorycznej znajdziecie na <a href=" -#~ "\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" -#~ "\">stronie redakcji Wolnych Lektur</a> </p>\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>TÅumaczy</h3>\r\n" -#~ " <p>Strona WolneLektury.pl jest dostÄpna w siedmiu jÄzykach obcych â " -#~ "angielskim, francuskim, niemieckim, hiszpaÅskim, litewskim, rosyjskim " -#~ "oraz ukraiÅskim. Użytkownikami biblioteki jest ponad 200 tysiÄcy osób z " -#~ "zagranicy, a już niedÅugo nasze zbiory obejmÄ również dzieÅa w jÄzykach " -#~ "obcych. Dlatego potrzebujemy na bieÅ¼Ä co tÅumaczyÄ nowe informacje " -#~ "pojawiajÄ ce siÄ na stronie. </p>\r\n" -#~ " <p><b>Kto może pomóc w tÅumaczeniach? </b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Każdy, kto dobrze zna co najmniej jeden z powyższych jÄzyków. </li>" -#~ "\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Programistów</h3>\r\n" -#~ " <p>Poza samÄ stronÄ Wolnych Lektur tworzymy również: </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>narzÄdzia redakcyjne,</li>\r\n" -#~ "<li>konwertery do różnych formatów e-booków, </li>\r\n" -#~ "<li>aplikacje mobile uÅatwiajÄ ce dostÄp do naszych zasobów.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " -#~ "jQuery, LaTeX, Java.\r\n" -#~ "Tworzone przez nas oprogramowanie udostÄpniamy na <a href=\"https://" -#~ "github.com/fnp/\">wolnej licencji</a>. </p>\r\n" -#~ " <p><b>Kto może pomóc w pracach programistycznych?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Każdy, kto umie i chciaÅby zdobyÄ punkty do karmy za udziaÅ w " -#~ "otwartym projekcie programistycznym. ;)</li>\r\n" -#~ "</ul>\r\n" -#~ msgstr "" -#~ "<h3>Wen suchen wir?</h3>\r\n" -#~ "\r\n" -#~ "<h3>Textbearbeiter (Textbearbeitung) </h3>\r\n" -#~ " <p>In der ersten Phase wird der Text gesetzt. Mithilfe der WL-XML-" -#~ "Sprache gestalten wir den Text und ermöglichen seine Veröffentlichung auf " -#~ "der Internetseite. Textbearbeitung wird auf der <a href=\"http://redakcja." -#~ "wolnelektury.pl\">Redaktionsplatrorm</a>durchgeführt, die einen groÃen " -#~ "Arbeitsteil automatisieren lässt.</p>\r\n" -#~ "\r\n" -#~ " <p><b>Wer kann Textbearbeiter werden</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Jeder - nach einer kurzen Schulung.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>Mehr Infos über Textbearbeitung<a href=\"http://redmine." -#~ "nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" -#~ "\">auf der Impressumseite von Wolne Lektury</a> </p>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Bearbeiter im Literaturbereich (Sachbearbeiter) </h3>\r\n" -#~ " <p>Literarische Bearbeitung umfasst die Korrektur, Sprachmodernisierung " -#~ "und Ergänzung von FüÃnoten und literarischen Motiven. Das ist eine " -#~ "einzigartige Möglichkeit, die Kenntnis der Digitalverarbeitung von Texten " -#~ "zu erwerben. </p>\r\n" -#~ "\r\n" -#~ " <p><b>Wer kann Bearbeiter im Literaturbereich werden</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Personen, die Erfahrung in der Bearbeitung von literarischen Texten " -#~ "besitzen,</li>\r\n" -#~ "<li>Studenten und Absolventen der Geisteswissenschaften, die solche " -#~ "Erfahrung gewinnen möchten. </li>\r\n" -#~ "</ul>\r\n" -#~ "<p>Mehr Infos über literarische Bearbeitung<a href=\"http://redmine." -#~ "nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" -#~ "\">auf der Impressumseite von Wolne Lektury</a> </p>\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Ãbersetzer</h3>\r\n" -#~ " <p>Die Internetseite WolneLektury.pl ist in sieben Spracheversionen " -#~ "zugänglich - im Englischen, Französichen, Deutschen, Spanischen, " -#~ "Lituanischen, Russischen und Ukrainischen. Bibliotheksbenutzer sind über " -#~ "200.000 Ausländer. Bald wird die Bibliothek mit fremdsprachigen Versionen " -#~ "bereichert. Deswegen brauchen wir auf dem Laufenden, die neu auf der " -#~ "Seite erschienen Infos zu übersetzen. </p>\r\n" -#~ " <p><b>Wer kann bei Ãbersetzungen helfen? </b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Jeder, der mindestenst eine aus den oben genannten Sprachen " -#~ "beherrscht. </li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Programmierer</h3>\r\n" -#~ " <p>AuÃer der Internetseite von Wolne Lektury allein errichten wir: </p>" -#~ "\r\n" -#~ "<ul>\r\n" -#~ "<li>Bearbeitungsmittel,</li>\r\n" -#~ "<li>Konvertierungsprogramme zu den verschiedenen E-books-Formaten, </li>" -#~ "\r\n" -#~ "<li>Mobilanwendungen, die Zugang zu Büchern erleichtern.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>Wir machen Gebrauch von solchen Technologien wie: Python, Django, " -#~ "XHTML, JavaScript, jQuery, LaTeX, Java.\r\n" -#~ "Die von uns entwickelte Software machen wird auf<a href=\"https://github." -#~ "com/fnp/\">unter der freien Lizenz verfügbar</a>. </p>\r\n" -#~ " <p><b>Wer kann bei der Programmierung helfen?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Jeder, der dies kann und will Karmapunkte für die Teilnahme an dem " -#~ "offenen Programmierungsprojekt gewinnen . ;)</li>\r\n" -#~ "</ul>\r\n" - -#~ msgid "Prawa" -#~ msgstr "Rechts" - -#~ msgid "" -#~ "<p>WiÄkszoÅÄ utworów w bibliotece nie jest chroniona prawem autorskim i " -#~ "znajduje siÄ w domenie publicznej, co oznacza, że można je swobodnie " -#~ "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 <a " -#~ "href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie " -#~ "autorstwa-Na tych samych warunkach 3.0</a>. Publikujemy również kilka " -#~ "utworów, które autorzy lub spadkobiercy praw udostÄpnili na wolnej " -#~ "licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl" -#~ "\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>.</p>" -#~ msgstr "" -#~ "<p>Die Mehrheit von Bibliothekwerken steht nicht unter dem Schutz des " -#~ "Urheberrechts und gehört zu dem Gemeinfreiheitsbereich, was bedeutet, " -#~ "dass man sie frei veröffentlichen und vermitteln darf. Sollte das Werk " -#~ "mit zusätzlichen Angaben versehen werden (FüÃnoten und literarischen " -#~ "Motiven), die dem Urheberrechtsschutz unterliegen, sind diese " -#~ "zusätzlichen Angaben unter der Lizenz <a href=\"http://creativecommons." -#~ "org/licenses/by-sa/3.0/deed.pl\"> Urheberschaftanerkennung unter gleichen " -#~ "Bedigungen 3.0</a> verfügbar. Wir veröffentlichen auch Werke, die " -#~ "Verfasser oder Rechtsnachfolger unter der freien Lizenz <a href=\"http://" -#~ "creativecommons.org/licenses/by-sa/3.0/deed.pl\">Urheberschaftanerkennung " -#~ "unter gleichen Bedigungen 3.0</a>.</p> herausgegeben haben. " diff --git a/apps/infopages/locale/es/LC_MESSAGES/django.mo b/apps/infopages/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index d87aa7da3..000000000 Binary files a/apps/infopages/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/infopages/locale/es/LC_MESSAGES/django.po b/apps/infopages/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index 09b64835c..000000000 --- a/apps/infopages/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,1126 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: \n" -"Last-Translator: KG <kamila.gawron87@gmail.com>\n" -"Language-Team: es <yourteam@example.com>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 -msgid "main page priority" -msgstr "" - -#: models.py:12 -msgid "slug" -msgstr "" - -#: models.py:13 -msgid "title" -msgstr "" - -#: models.py:14 -msgid "left column" -msgstr "" - -#: models.py:15 -msgid "right column" -msgstr "" - -#: models.py:19 -msgid "info page" -msgstr "" - -#: models.py:20 -msgid "info pages" -msgstr "" - -#~ msgid "Wolontariat dla wiedzy" -#~ msgstr "Voluntariado para el conocimiento" - -#~ msgid "" -#~ "<h2>Wolontariat</h2>\r\n" -#~ "\t<p>\r\n" -#~ "\t\tBiogramy pisarzy oraz definicje epok i gatunków literackich w\r\n" -#~ "\t\tbibliotece internetowej Wolne Lektury napisali uczniowie\r\n" -#~ "\t\tczterech szkóŠpodczas warsztatów âWolontariat dla wiedzyâ.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t\tUczniowie pracowali wspólnie pod merytorycznym nadzorem\r\n" -#~ "\t\tnauczycieli i specjalistów â literaturoznawców na\r\n" -#~ "\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n" -#~ "\r\n" -#~ "\t\t\tplatformie internetowej wiki</a>\r\n" -#~ "\t\tprzygotowanej przez zespóÅ\r\n" -#~ "\t\t<a href=\"http://2ia.pl/\">2ia</a>. Praca nad notami byÅa " -#~ "jednoczeÅnie naukÄ wykorzystywania\r\n" -#~ "\t\tkomputerów i internetu do wyszukiwania informacji, a także\r\n" -#~ "\t\tweryfikowania ich wiarygodnoÅci.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t\tProjekt \"Wolontariat dla wiedzy\" zostaÅ zrealizowany dziÄki\r\n" -#~ "\t\twsparciu\r\n" -#~ "\t\t<a href=\"http://www.menis.gov.pl/\">\r\n" -#~ "\t\t\tMinisterstwa Edukacji Narodowej</a>. Nagrody dla uczniów ufundowali" -#~ "\r\n" -#~ "\t\t<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n" -#~ "\r\n" -#~ "\t\t\tWydawnictwo Nasza KsiÄgarnia</a>\r\n" -#~ "\t\ti\r\n" -#~ "\t\t<a href=\"http://helion.pl/\">Wydawnictwo Helion</a>. Noty " -#~ "zweryfikowano w serwisie\r\n" -#~ "\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n" -#~ "\t\t\tPlagiat.pl</a>.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t\t<a href=\"/static/wolontariat.pdf\">Raport z realizacji projektu " -#~ "âWolontariat dla wiedzy\"</a>.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />" -#~ "\r\n" -#~ "\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n" -#~ "\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n" -#~ " <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />" -#~ "\r\n" -#~ " <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />" -#~ "\r\n" -#~ "\t</p>\r\n" -#~ msgstr "" -#~ "<h2>Voluntariado</h2>\r\n" -#~ "\t<p>\r\n" -#~ "\t\tLas biografÃas de los escritores y las descripciones de las épocas y " -#~ "los géneros literarios en \r\n" -#~ "\t\tla biblioteca virtual de Wolne Lektury han elaborado los alumnos\r\n" -#~ "\t\tde cuatro escuelas durante los talleres âVoluntariado para el " -#~ "conocimientoâ.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t\tLos alumnos han trabajado juntos bajo la supervisión \r\n" -#~ "\t\tde profesores y teóricos de la literatura\r\n" -#~ "\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n" -#~ "\r\n" -#~ "\t\t\tplataforma virtual wiki </a>\r\n" -#~ "\t\tpreparada por el equipo\r\n" -#~ "\t\t<a href=\"http://2ia.pl/\">2ia</a>. Al mismo tiempo los alumnos " -#~ "estaban aprendiendo a utilizar\r\n" -#~ "\t\tlos ordenadores e internet para buscar informaciones y \r\n" -#~ "\t\tverificar su credibilidad.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t\tEl proyecto \"Voluntariado para el conocimiento\" se ha realizado " -#~ "gracias al \r\n" -#~ "\t\apoyo de\r\n" -#~ "l\t\t<a href=\"http://www.menis.gov.pl/\">\r\n" -#~ "\t\t\tMinisterio de Educación Nacional</a>. Los premios para los alumnos " -#~ "han sido fundados por\r\n" -#~ "\t\t<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n" -#~ "\r\n" -#~ "\t\t\tEditorial Nasza KsiÄgarnia</a>\r\n" -#~ "\t\ty\r\n" -#~ "\t\t<a href=\"http://helion.pl/\">Editorial Helion</a>. Los textos han " -#~ "sido verificados en la página\r\n" -#~ "\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n" -#~ "\t\t\tPlagiat.pl</a>.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t\t<a href=\"/static/wolontariat.pdf\"> El informe de la realización del " -#~ "proyecto âVoluntariado para el conocimientoâ</a>.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />" -#~ "\r\n" -#~ "\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n" -#~ "\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n" -#~ " <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />" -#~ "\r\n" -#~ " <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />" -#~ "\r\n" -#~ "\t</p>\r\n" - -#~ msgid "" -#~ "\t<h2>Autorzy</h2>\r\n" -#~ "\r\n" -#~ "\t<ol>\r\n" -#~ "\t\t<li>\r\n" -#~ "\t\t\t<p>\r\n" -#~ "\t\t\t\tGimnazjum nr 40 z OddziaÅami Integracyjnymi w Zespole\r\n" -#~ "\t\t\t\tSzkóŠnr 69 im. Armii Krajowej Grupy Bojowej âKRYBARâ,\r\n" -#~ "\t\t\t\tul. Drewniana 8, 00-345 Warszawa; klasa druga pod opiekÄ \r\n" -#~ "\t\t\t\tAnny Budziarek-Friedrich:\r\n" -#~ "\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t<ul>\r\n" -#~ "\t\t\t\t<li>Burdon Filip;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>DÄbski Bartek;</li>\r\n" -#~ "\t\t\t\t<li>Jackowicz Kamil;</li>\r\n" -#~ "\t\t\t\t<li>Kurek PaweÅ;</li>\r\n" -#~ "\t\t\t\t<li>Makles Bartosz;</li>\r\n" -#~ "\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n" -#~ "\t\t\t\t<li>MigdaÅ Katarzyna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Mioduszewski MichaÅ;</li>\r\n" -#~ "\t\t\t\t<li>Pfeiffer Ida;</li>\r\n" -#~ "\t\t\t\t<li>PÅaskowicka Karolina;</li>\r\n" -#~ "\t\t\t\t<li>Sailer Ewa.</li>\r\n" -#~ "\t\t\t</ul>\r\n" -#~ "\t\t</li>\r\n" -#~ "\r\n" -#~ "\t\t<li>\r\n" -#~ "\t\t\t<p>\r\n" -#~ "\t\t\t\tXXXIII Liceum OgólnoksztaÅcÄ ce im. MikoÅaja Kopernika,\r\n" -#~ "\t\t\t\tul. Bema 76, 01-225 Warszawa; klasa pierwsza o profilu\r\n" -#~ "\t\t\t\tbiologiczno-chemicznym pod opiekÄ Elżbiety Konkowskiej:\r\n" -#~ "\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t<ul>\r\n" -#~ "\t\t\t\t<li>Chwil BartÅomiej;</li>\r\n" -#~ "\t\t\t\t<li>Czarnecka Natalia;</li>\r\n" -#~ "\t\t\t\t<li>GawroÅska Iga;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Grabarczyk Marta;</li>\r\n" -#~ "\t\t\t\t<li>JastrzÄ b Katarzyna;</li>\r\n" -#~ "\t\t\t\t<li>Krawczak Olga;</li>\r\n" -#~ "\t\t\t\t<li>Krawczyk Marianna;</li>\r\n" -#~ "\t\t\t\t<li>Kur Natalia;</li>\r\n" -#~ "\t\t\t\t<li>Kwiatek Marta;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>LaÅkiewicz Joanna;</li>\r\n" -#~ "\t\t\t\t<li>MachczyÅska Daria;</li>\r\n" -#~ "\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n" -#~ "\t\t\t\t<li>Moczulska Karolina;</li>\r\n" -#~ "\t\t\t\t<li>MoÅcicka Aneta;</li>\r\n" -#~ "\t\t\t\t<li>Narloch Sabina;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Przybysz PaweÅ;</li>\r\n" -#~ "\t\t\t\t<li>Puchta Marek;</li>\r\n" -#~ "\t\t\t\t<li>Ryska Cezary;</li>\r\n" -#~ "\t\t\t\t<li>Sandomierski BartÅomiej;</li>\r\n" -#~ "\t\t\t\t<li>SÅawiÅski Tomasz;</li>\r\n" -#~ "\t\t\t\t<li>SÅowik Olga;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n" -#~ "\t\t\t\t<li>Strzelczak Karolina;</li>\r\n" -#~ "\t\t\t\t<li>Szafran Danuta;</li>\r\n" -#~ "\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n" -#~ "\t\t\t\t<li>Szulkowska Alicja;</li>\r\n" -#~ "\t\t\t\t<li>Ålusarczyk Anna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Tytkowska Anna.</li>\r\n" -#~ "\t\t\t</ul>\r\n" -#~ "\t\t\t<li>\r\n" -#~ "\t\t\t\t<p>\r\n" -#~ "\t\t\t\t\tAutorskie Niepubliczne Liceum OgólnoksztaÅcÄ ce nr\r\n" -#~ "\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; klasa pierwsza\r\n" -#~ "\t\t\t\t\to profilu ogólnym pod opiekÄ MichaÅa Friedricha:\r\n" -#~ "\t\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<ul>\r\n" -#~ "\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>GoÅaszewska Ewa;</li>\r\n" -#~ "\t\t\t\t\t<li>Kwiatkowski MichaÅ;</li>\r\n" -#~ "\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n" -#~ "\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n" -#~ "\t\t\t\t\t<li>Przespolewski PrzemysÅaw;</li>\r\n" -#~ "\t\t\t\t\t<li>RosiÅska Zuzanna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n" -#~ "\t\t\t\t</ul>\r\n" -#~ "\t\t\t</li>\r\n" -#~ "\t\t\t<li>\r\n" -#~ "\t\t\t\t<p>\r\n" -#~ "\t\t\t\t\tLXIV Liceum OgólnoksztaÅcÄ ce im. St. I. Witkiewicza,\r\n" -#~ "\t\t\t\t\tul. ElblÄ ska 51, 01-737 Warszawa; klasa pierwsza o\r\n" -#~ "\t\t\t\t\tprofilu ogólnym pod opiekÄ Daniela Zycha:\r\n" -#~ "\t\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<ul>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n" -#~ "\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n" -#~ "\t\t\t\t\t<li>DrÄ gowska Katarzyna;</li>\r\n" -#~ "\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n" -#~ "\t\t\t\t\t<li>GÅowacki Jan;</li>\r\n" -#~ "\t\t\t\t\t<li>Grad PaweÅ;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n" -#~ "\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n" -#~ "\t\t\t\t\t<li>KÅos Aneta;</li>\r\n" -#~ "\t\t\t\t\t<li>KozieÅ Barbara;</li>\r\n" -#~ "\t\t\t\t\t<li>KozÅowska Anna;</li>\r\n" -#~ "\t\t\t\t\t<li>Krug Pamela;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n" -#~ "\t\t\t\t\t<li>LubaÅ MichaÅ;</li>\r\n" -#~ "\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n" -#~ "\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n" -#~ "\t\t\t\t\t<li>Modelska Marta;</li>\r\n" -#~ "\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n" -#~ "\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n" -#~ "\t\t\t\t\t<li>Pielat Zofia;</li>\r\n" -#~ "\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n" -#~ "\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n" -#~ "\t\t\t\t\t<li>Rosa Karolina;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>SmyczyÅska Kamila;</li>\r\n" -#~ "\t\t\t\t\t<li>StoliÅska Barbara;</li>\r\n" -#~ "\t\t\t\t\t<li>SzymaÅska Katarzyna;</li>\r\n" -#~ "\t\t\t\t\t<li>Åcibior Ewa;</li>\r\n" -#~ "\t\t\t\t\t<li>Witczak Magda;</li>\r\n" -#~ "\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n" -#~ "\t\t\t\t\t<li>ZióÅkowska Adrianna.</li>\r\n" -#~ "\t\t\t\t</ul>\r\n" -#~ "\t\t\t</li>\r\n" -#~ "\t </li>\r\n" -#~ "\t </ol>\r\n" -#~ msgstr "" -#~ "\t<h2>Autores</h2>\r\n" -#~ "\r\n" -#~ "\t<ol>\r\n" -#~ "\t\t<li>\r\n" -#~ "\t\t\t<p>\r\n" -#~ "\t\t\t\tGimnazjum nr 40 z OddziaÅami Integracyjnymi w Zespole\r\n" -#~ "\t\t\t\tSzkóŠnr 69 im. Armii Krajowej Grupy Bojowej âKRYBARâ,\r\n" -#~ "\t\t\t\tul. Drewniana 8, 00-345 Varsovia; segundo curso bajo la " -#~ "supervisión de\r\n" -#~ "\t\t\t\tAnna Budziarek-Friedrich:\r\n" -#~ "\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<ul>\r\n" -#~ "\t\t\t\t<li>Burdon Filip;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>DÄbski Bartek;</li>\r\n" -#~ "\t\t\t\t<li>Jackowicz Kamil;</li>\r\n" -#~ "\t\t\t\t<li>Kurek PaweÅ;</li>\r\n" -#~ "\t\t\t\t<li>Makles Bartosz;</li>\r\n" -#~ "\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n" -#~ "\t\t\t\t<li>MigdaÅ Katarzyna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Mioduszewski MichaÅ;</li>\r\n" -#~ "\t\t\t\t<li>Pfeiffer Ida;</li>\r\n" -#~ "\t\t\t\t<li>PÅaskowicka Karolina;</li>\r\n" -#~ "\t\t\t\t<li>Sailer Ewa.</li>\r\n" -#~ "\t\t\t</ul>\r\n" -#~ "\t\t</li>\r\n" -#~ "\r\n" -#~ "\t\t<li>\r\n" -#~ "\t\t\t<p>\r\n" -#~ "\t\t\t\tXXXIII Liceum OgólnoksztaÅcÄ ce im. MikoÅaja Kopernika,\r\n" -#~ "\t\t\t\tul.Bema 76, 01-225 Varsovia; primer curso de\r\n" -#~ "\t\t\t</p>perfil biológico-quÃmico bajo la supervisión de Elżbieta " -#~ "Konkowska\r\n" -#~ "\t\t\t<ul>\r\n" -#~ "\r\n" -#~ "\t\t\t<ul>\r\n" -#~ "\t\t\t\t<li>Chwil BartÅomiej;</li>\r\n" -#~ "\t\t\t\t<li>Czarnecka Natalia;</li>\r\n" -#~ "\t\t\t\t<li>GawroÅska Iga;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Grabarczyk Marta;</li>\r\n" -#~ "\t\t\t\t<li>JastrzÄ b Katarzyna;</li>\r\n" -#~ "\t\t\t\t<li>Krawczak Olga;</li>\r\n" -#~ "\t\t\t\t<li>Krawczyk Marianna;</li>\r\n" -#~ "\t\t\t\t<li>Kur Natalia;</li>\r\n" -#~ "\t\t\t\t<li>Kwiatek Marta;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>LaÅkiewicz Joanna;</li>\r\n" -#~ "\t\t\t\t<li>MachczyÅska Daria;</li>\r\n" -#~ "\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n" -#~ "\t\t\t\t<li>Moczulska Karolina;</li>\r\n" -#~ "\t\t\t\t<li>MoÅcicka Aneta;</li>\r\n" -#~ "\t\t\t\t<li>Narloch Sabina;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Przybysz PaweÅ;</li>\r\n" -#~ "\t\t\t\t<li>Puchta Marek;</li>\r\n" -#~ "\t\t\t\t<li>Ryska Cezary;</li>\r\n" -#~ "\t\t\t\t<li>Sandomierski BartÅomiej;</li>\r\n" -#~ "\t\t\t\t<li>SÅawiÅski Tomasz;</li>\r\n" -#~ "\t\t\t\t<li>SÅowik Olga;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n" -#~ "\t\t\t\t<li>Strzelczak Karolina;</li>\r\n" -#~ "\t\t\t\t<li>Szafran Danuta;</li>\r\n" -#~ "\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n" -#~ "\t\t\t\t<li>Szulkowska Alicja;</li>\r\n" -#~ "\t\t\t\t<li>Ålusarczyk Anna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Tytkowska Anna.</li>\r\n" -#~ "\t\t\t</ul>\r\n" -#~ "\t\t\t<li>\r\n" -#~ "\t\t\t\t<p>\r\n" -#~ "\t\t\t\t\tAutorskie Niepubliczne Liceum OgólnoksztaÅcÄ ce nr\r\n" -#~ "\t\t\t\t\t42, ul.Iwicka 47 B, 00-735 Varsovia; primer curso\r\n" -#~ "\t\t\t\t\tbajo la supervisión de MichaÅ Friedrich:\r\n" -#~ "\t\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<ul>\r\n" -#~ "\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>GoÅaszewska Ewa;</li>\r\n" -#~ "\t\t\t\t\t<li>Kwiatkowski MichaÅ;</li>\r\n" -#~ "\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n" -#~ "\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n" -#~ "\t\t\t\t\t<li>Przespolewski PrzemysÅaw;</li>\r\n" -#~ "\t\t\t\t\t<li>RosiÅska Zuzanna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n" -#~ "\t\t\t\t</ul>\r\n" -#~ "\t\t\t</li>\r\n" -#~ "\t\t\t<li>\r\n" -#~ "\t\t\t\t<p>\r\n" -#~ "\t\t\t\t\tLXIV Liceum OgólnoksztaÅcÄ ce im. St. I. Witkiewicza,\r\n" -#~ "\t\t\t\t\tul.ElblÄ ska 51, 01-737 Varsovia; primer curso bajo la " -#~ "supervisión de Daniel Zych:\r\n" -#~ "\t\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<ul>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n" -#~ "\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n" -#~ "\t\t\t\t\t<li>DrÄ gowska Katarzyna;</li>\r\n" -#~ "\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n" -#~ "\t\t\t\t\t<li>GÅowacki Jan;</li>\r\n" -#~ "\t\t\t\t\t<li>Grad PaweÅ;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n" -#~ "\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n" -#~ "\t\t\t\t\t<li>KÅos Aneta;</li>\r\n" -#~ "\t\t\t\t\t<li>KozieÅ Barbara;</li>\r\n" -#~ "\t\t\t\t\t<li>KozÅowska Anna;</li>\r\n" -#~ "\t\t\t\t\t<li>Krug Pamela;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n" -#~ "\t\t\t\t\t<li>LubaÅ MichaÅ;</li>\r\n" -#~ "\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n" -#~ "\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n" -#~ "\t\t\t\t\t<li>Modelska Marta;</li>\r\n" -#~ "\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n" -#~ "\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n" -#~ "\t\t\t\t\t<li>Pielat Zofia;</li>\r\n" -#~ "\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n" -#~ "\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n" -#~ "\t\t\t\t\t<li>Rosa Karolina;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>SmyczyÅska Kamila;</li>\r\n" -#~ "\t\t\t\t\t<li>StoliÅska Barbara;</li>\r\n" -#~ "\t\t\t\t\t<li>SzymaÅska Katarzyna;</li>\r\n" -#~ "\t\t\t\t\t<li>Åcibior Ewa;</li>\r\n" -#~ "\t\t\t\t\t<li>Witczak Magda;</li>\r\n" -#~ "\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n" -#~ "\t\t\t\t\t<li>ZióÅkowska Adrianna.</li>\r\n" -#~ "\t\t\t\t</ul>\r\n" -#~ "\t\t\t</li>\r\n" -#~ "\t </li>\r\n" -#~ "\t </ol>\r\n" - -#~ msgid "Możesz nam pomóc" -#~ msgstr "Puedes ayudarnos" - -#~ msgid "" -#~ "<h2>Wolontariat w Wolnych Lekturach</h2>\r\n" -#~ "<ul>\r\n" -#~ "<li>ZostaÅ naszym redaktorem, programistÄ lub tÅumaczem â wolontariuszem." -#~ "</li>\r\n" -#~ "<li>ZdobÄ dź nowe umiejÄtnoÅci i doÅwiadczenie. </li>\r\n" -#~ "<li>Weź udziaÅ w otwartym projekcie i twórz innowacyjnÄ bibliotekÄ " -#~ "internetowÄ . </li>\r\n" -#~ "</ul>\r\n" -#~ "<p>DziÄki pracy naszych wolontariuszy opublikowaliÅmy już ponad <b>1500 " -#~ "lektur</b>, z których skorzystaÅy ponad <b>3 miliony</b> czytelników z " -#~ "caÅego Åwiata. </p>\r\n" -#~ "<p>Zapraszamy wszystkie osoby, które chcÄ wspóÅtworzyÄ nasz projekt. " -#~ "WspóÅpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " -#~ "literaturÄ , redagowaniem tekstów i projektami informatycznymi. Oferujemy " -#~ "profesjonalne szkolenia i staÅÄ pomoc merytorycznÄ . Wolontariusze mogÄ " -#~ "pracowaÄ zdalnie lub w siedzibie Fundacji.</p>\r\n" -#~ "<p>Organizujemy również praktyki studenckie â nawiÄ zaliÅmy wspóÅpracÄ z " -#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " -#~ "Karier UKSW oraz WydziaÅem Fizyki UW. </p>\r\n" -#~ "\r\n" -#~ "<h2>Jak siÄ do nas zgÅosiÄ?</h2>\r\n" -#~ "<p>Wszystkie zainteresowane osoby prosimy o przysÅanie maila na adres <a " -#~ "href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n" -#~ msgstr "" -#~ "<h2>Voluntariado en Wolne Lektury</h2>\r\n" -#~ "<ul>\r\n" -#~ "<li>Hazte nuestro voluntario como redactor, programador o traductor</li>" -#~ "\r\n" -#~ "<li>Adquiere nuevas habilidades y gana experiencia. </li>\r\n" -#~ "<li>Participa en un proyecto abierto y crea una innovadora biblioteca " -#~ "virtual. </li>\r\n" -#~ "</ul>\r\n" -#~ "<p>Gracias al trabajo de nuestros voluntarios hemos logrado publicar más " -#~ "de <b>1500 libros </b> que ha usado ya más de <b>3 millones</b> de " -#~ "lectores del mundo. </p>\r\n" -#~ "<p>Todos los que quieran participar en nuestro proyecto estarán " -#~ "bienvenidos. Colaboramos con estudiantes, docentes y todos los que " -#~ "est'an interesados y aficionados en literatura, redacción de textos o en " -#~ "proyectos informáticos. Les ofrecemos adiestramiento y ayuda en cuanto al " -#~ "contenido. Los voluntarios pueden trabajar a distancia o en la oficina " -#~ "principal de la Fundación.</p>\r\n" -#~ "<p> Organizamos también prácticas para estudiantes: colaboramos con el " -#~ "Instituto de Información CientÃfica y BibliologÃa de la Universidad de " -#~ "Varsovia, el Servicio de Orientación Profesional de la Universidad de " -#~ "Cardenal Stefan Wyszynski y la Facultad de FÃsica de la Universidad de " -#~ "Varsovia. </p>\r\n" -#~ "\r\n" -#~ "<h2>¿Cómo contactar con nosotros?</h2>\r\n" -#~ "<p>A todos los interesados les invitamos a mandarnos un e-mail a <a href=" -#~ "\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n" - -#~ msgid "" -#~ "<h2>Kogo szukamy?</h2>\r\n" -#~ "\r\n" -#~ "<h3>Redaktorów technicznych (skÅad tekstu) </h3>\r\n" -#~ " <p>SkÅad jest pierwszym etapem pracy nad tekstem. Za pomocÄ znaczników " -#~ "jÄzyka WL-XML nadajemy tekstowi poÅ¼Ä danÄ formÄ i umożliwiamy wyÅwietlenie " -#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na <a " -#~ "href=\"http://redakcja.wolnelektury.pl\">Platformie Redakcyjnej</a>, " -#~ "która pozwala na zautomatyzowanie dużej czÄÅci pracy. </p>\r\n" -#~ "\r\n" -#~ " <p><b>Kto może zostaÄ redaktorem technicznym?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Każdy â po krótkim szkoleniu.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>WiÄcej informacji o redakcji technicznej znajdziecie na <a href=" -#~ "\"http://redakcja.wolnelektury.pl/documents/catalogue/\">stronie redakcji " -#~ "Wolnych Lektur</a> </p>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Redaktorów literackich (merytorycznych) </h3>\r\n" -#~ " <p>Redakcja literacka obejmuje korektÄ, uwspóÅczeÅnienia oraz dodawanie " -#~ "przypisów i motywów literackich. To unikalna możliwoÅÄ zdobycia " -#~ "doÅwiadczenia w cyfrowej edycji tekstów. </p>\r\n" -#~ "\r\n" -#~ " <p><b>Kto może zostaÄ redaktorem literackim? </b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Osoby, które majÄ doÅwiadczenie w redakcji tekstów literackich,</li>" -#~ "\r\n" -#~ "<li>Studenci i absolwenci studiów humanistycznych, którzy chcÄ takie " -#~ "doÅwiadczenie zdobyÄ. </li>\r\n" -#~ "</ul>\r\n" -#~ "<p>WiÄcej informacji o redakcji merytorycznej znajdziecie na <a href=" -#~ "\"http://redakcja.wolnelektury.pl/documents/catalogue/\">stronie redakcji " -#~ "Wolnych Lektur</a> </p>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>TÅumaczy</h3>\r\n" -#~ " <p>Strona WolneLektury.pl jest dostÄpna w siedmiu jÄzykach obcych â " -#~ "angielskim, francuskim, niemieckim, hiszpaÅskim, litewskim, rosyjskim " -#~ "oraz ukraiÅskim. Użytkownikami biblioteki jest ponad 200 tysiÄcy osób z " -#~ "zagranicy, a już niedÅugo nasze zbiory obejmÄ również dzieÅa w jÄzykach " -#~ "obcych. Dlatego potrzebujemy na bieÅ¼Ä co tÅumaczyÄ nowe informacje " -#~ "pojawiajÄ ce siÄ na stronie. </p>\r\n" -#~ " <p><b>Kto może pomóc w tÅumaczeniach? </b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Każdy, kto dobrze zna co najmniej jeden z powyższych jÄzyków. </li>" -#~ "\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Programistów</h3>\r\n" -#~ " <p>Poza samÄ stronÄ Wolnych Lektur tworzymy również: </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>narzÄdzia redakcyjne,</li>\r\n" -#~ "<li>konwertery do różnych formatów e-booków, </li>\r\n" -#~ "<li>aplikacje mobile uÅatwiajÄ ce dostÄp do naszych zasobów.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " -#~ "jQuery, LaTeX, Java.\r\n" -#~ "Tworzone przez nas oprogramowanie udostÄpniamy na <a href=\"https://" -#~ "github.com/fnp/\">wolnej licencji</a>. </p>\r\n" -#~ " <p><b>Kto może pomóc w pracach programistycznych?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Każdy, kto umie i chciaÅby zdobyÄ punkty do karmy za udziaÅ w " -#~ "otwartym projekcie programistycznym. ;)</li>\r\n" -#~ "</ul>\r\n" -#~ msgstr "" -#~ " <h3>¿A quién buscamos?</h3>\r\n" -#~ "\r\n" -#~ "<h3>Redactores técnicos (composición tipográfica)</h3>\r\n" -#~ " <p>La composición tipográfica es la primera etapa del trabajo con el " -#~ "texto. Por medio de los marcados del idioma WL-XML le damos la forma " -#~ "deseada al texto y facilitamos su visualización en la página web. La " -#~ "redacción técnica se realiza en <a href=\"http://redakcja.wolnelektury.pl" -#~ "\">la Plataforma Editorial</a>, que permite automatizar gran parte del " -#~ "trabajo.</p>\r\n" -#~ "\r\n" -#~ "<p><b>¿Quién puede ser redactor técnico?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Cualquiera, después de una breve formación.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>Más información sobre la redacción técnica en <a href=\"http://" -#~ "redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\\r\n" -#~ "\">la página web de Wolne Lektury</a> </p>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Redactores literarios </h3>\r\n" -#~ " <p>La redacción literaria incluye la corrección de pruebas, adaptación e " -#~ "inclusión de las notas a pie de página , asà como el tratamiento de los " -#~ "temas literarios. Es una oportunidad única de ganar experiencia en la " -#~ "edición digital de textos. </p>\r\n" -#~ "\r\n" -#~ " <p><b>¿Quién puede ser redactor literario? </b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Las personas que tengan experiencia en la redacción de textos " -#~ "literarios,</li>\r\n" -#~ "<li>Los estudiantes y licenciados en humanidades que deseen obtener esta " -#~ "experiencia. </li>\r\n" -#~ "</ul>\r\n" -#~ "<p>Más información sobre la redacción literaria en <a href=\"http://" -#~ "redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" -#~ "\">la página web de Wolne Lektury</a> </p>\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Traductores</h3>\r\n" -#~ "<p>La página web de Wolne Lektury.pl está traducida a 7 idiomas: inglés, " -#~ "francés, alemán, español, lituano, ruso y ucraniano. Hay más de 200 mil " -#~ "de usuarios del extranjero, además, dentro de poco nuestra colección " -#~ "incluirá también obras en otros idiomas. De ahà que necesitemos traducir " -#~ "sistemáticamente nuevos contenidos que aparezcan en la página. </p>\r\n" -#~ "<p><b>¿Quién puede ayudarnos con las traducciones?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Cualquiera que domine bien por lo menos uno de los idiomas " -#~ "mencionados anteriormente.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Programadores</h3>\r\n" -#~ "<p>Aparte de la página web creamos también:</p>\r\n" -#~ "<ul>\r\n" -#~ "<li>herramientas editoriales,</li>\r\n" -#~ "<li>convertidores para varios formatos de libros electrónicos,</li>\r\n" -#~ "<li>aplicaciones móviles que facilitan el acceso a nuestra colección</li>" -#~ "\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>Usamos las siguientes tecnologÃas: Python, Django, XHTML, JavaScript, " -#~ "jQuery, LaTex, Java. \r\n" -#~ "El software creado por nosotros lo ponemos a su disposición en <a href=" -#~ "\"https://github.com/fnp/\">libre</a>. </p>\r\n" -#~ "<p><b>¿Quién puede ayudar en las tareas relacionadas con la programación?" -#~ "</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Cualquiera que sepa y quiera ganar puntos para su karma por la " -#~ "participación en un proyecto de programación abierto. ;)</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" - -#~ msgid "O projekcie" -#~ msgstr "Sobre el proyecto" - -#~ msgid "" -#~ "{% load reporting_stats %}\r\n" -#~ "\r\n" -#~ "<p><strong>Wolne Lektury to biblioteka internetowa czynna 24 godziny na " -#~ "dobÄ, 365 dni w roku i caÅkowicie darmowa</strong>. W jej zbiorach " -#~ "znajduje siÄ <strong>{% count_books %}</strong> utworów, w tym wiele " -#~ "lektur szkolnych zalecanych do użytku przez Ministerstwo Edukacji " -#~ "Narodowej, które trafiÅy już do domeny publicznej. Wszystkie dzieÅa sÄ " -#~ "odpowiednio opracowane - opatrzone przypisami, motywami i udostÄpnione w " -#~ "kilku formatach - <strong>HTML </strong>, <strong>TXT </strong>, " -#~ "<strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>. W " -#~ "bibliotece znajduje siÄ również kilkaset audiobooków, czytanych przez " -#~ "takich aktorów jak: Danuta Stenka, Jan Peszek czy Andrzej Chyra. Można " -#~ "ich sÅuchaÄ w formatach <strong>MP3</strong> i <strong>Ogg Vorbis</" -#~ "strong>. Audiobooki sÄ również dostÄpne w formacie <strong>DAISY </" -#~ "strong>dostosowanym do potrzeb osób sÅabowidzÄ cych, niewidomych oraz osób " -#~ "majÄ cych trudnoÅci z czytaniem.</p>\r\n" -#~ "\r\n" -#~ "<p>Biblioteka Wolne Lektury dostÄpna jest za poÅrednictwem aplikacji " -#~ "mobilnych â na system <a href=\"https://market.android.com/details?id=pl." -#~ "org.nowoczesnapolska.wlmobi\"> Android</a> oraz na system iOS. </p>\r\n" -#~ "\r\n" -#~ "<p><strong>Wszystkie utwory zamieszczone w bibliotece Wolne Lektury można " -#~ "zgodnie z prawem bezpÅatnie przeglÄ daÄ, sÅuchaÄ, ÅciÄ gaÄ na swój " -#~ "komputer, a także udostÄpniaÄ innym i cytowaÄ.</strong> </p>\r\n" -#~ msgstr "" -#~ "{% load reporting_stats %}\r\n" -#~ "\r\n" -#~ "<p><strong>Wolne Lektury es una biblioteca virtual de 24 horas, 365 dÃas " -#~ "al año y completamente gratuita</strong>. La colección consta de <strong>" -#~ "{% count_books %}</strong> obras, incluso muchas de lectura obligatoria " -#~ "recomendadas por el Ministerio de Educación Nacional y que ya forman " -#~ "parte del dominio público. Todos los textos están adecuadamente " -#~ "preparados â con notas a pie de página, temas literarios, y están " -#~ "disponibles en varios formatos - <strong>HTML </strong>, <strong>TXT </" -#~ "strong>, <strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</" -#~ "strong>.\r\n" -#~ " La biblioteca contiene también centenares de audiolibros, leÃdos por " -#~ "autores como Danuta Stenka, Jan Peszek o Andrzej Chyra. Se los puede " -#~ "escuchar en los formatos <strong>MP3</strong> y <strong>Ogg Vorbis</" -#~ "strong>. Los audiolibros se pueden conseguir también en el formato " -#~ "<strong>DAISY </strong>, adaptado a las necesidades de las personas con " -#~ "baja visión, invidentes, incluso las que tienen dificultades para leer.</" -#~ "p>\r\n" -#~ "\r\n" -#~ "<p>La Biblioteca Wolne Lektury está disponible por medio de aplicaciones " -#~ "móviles para los sistemas <a href=\"https://market.android.com/details?" -#~ "id=pl.org.nowoczesnapolska.wlmobi\"> Android</a> e iOS. </p>\r\n" -#~ "\r\n" -#~ "<p><strong>Todos los textos publicados en la Biblioteca Wolne Lektury " -#~ "están preparados para hojear, escuchar, descargar, para ponerlos a la " -#~ "disposición de otros y citar, todo esto de acuerdo con la ley.</strong> </" -#~ "p>\r\n" - -#~ msgid "" -#~ "<p>Wolne Lektury to projekt fundacji Nowoczesna Polska realizowany pro " -#~ "publico bono, we wspóÅpracy z BibliotekÄ NarodowÄ , BibliotekÄ ÅlaskÄ oraz " -#~ "BibliotekÄ ElblÄ skÄ pod patronatem Ministerstwa Edukacji Narodowej, " -#~ "Ministerstwa Kultury i Dziedzictwa Narodowego oraz Stowarzyszenia Pisarzy " -#~ "Polskich. W Komitecie Honorowym Wolnych Lektur zasiadajÄ : prof. Maria " -#~ "Janion, prof. Grażyna Borkowska, prof. PrzemysÅaw CzapliÅski, prof. " -#~ "MieczysÅaw DÄ browski, prof. Ewa Kraskowska, prof. MaÅgorzata CzermiÅska, " -#~ "prof. Jerzy JarzÄbski i prof. Piotr ÅliwiÅski.</p>\r\n" -#~ "\r\n" -#~ "<p>WiÄkszoÅÄ utworów w bibliotece nie jest chroniona prawem autorskim i " -#~ "znajduje siÄ w domenie publicznej, co oznacza że można je swobodnie " -#~ "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 <a " -#~ "href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie " -#~ "autorstwa-Na tych samych warunkach 3.0</a>. Publikujemy również kilka " -#~ "utworów, które autorzy lub spadkobiercy praw udostÄpnili na wolnej " -#~ "licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl" -#~ "\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>.</p>\r\n" -#~ "\r\n" -#~ "Kontakt: wolnelektury@nowoczesnapolska.org.pl\r\n" -#~ msgstr "" -#~ "<p>Wolne Lektury es un proyecto creado por la Fundación Polonia Moderna, " -#~ "realizado pro publico bono en colaboración con la Biblioteca Nacional, la " -#~ "Biblioteca de Silesia y la Biblioteca de Elblag bajo los auspicios del " -#~ "Ministerio de Cultura y Patrimonio Nacional y la Adociación de Escritores " -#~ "Polacos. El Comité de Honor de Wolne Lektury reúne a los profesores: " -#~ "Maria Janion, Grażyna Borkowska, PrzemysÅaw CzapliÅski, MieczysÅaw " -#~ "DÄ browski, Ewa Kraskowska, MaÅgorzata CzermiÅska, Jerzy JarzÄbski y Piotr " -#~ "ÅliwiÅski.</p>\r\n" -#~ "\r\n" -#~ "</p>La mayorÃa de los textos de la Biblioteca están libres de derechos de " -#~ "autor y son de dominio público, por lo tanto se pueden publicar y " -#~ "difundir libremente. Si un texto tiene materiales adicionales (notas a " -#~ "pie de página, temas literarios, etc.), que no están libres de derechos " -#~ "de autor, dichos materiales están publicados bajo la licencia <a href=" -#~ "\"http://creativecommons.org/licenses/by-sa/3.0/deed.es\">Reconocimiento-" -#~ "Compartir bajo la misma licencia 3.0</a>.También publicamos algunos " -#~ "textos legados al dominio público por los autores o herederos bajo la " -#~ "licencia <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.es" -#~ "\">Reconocimiento-Compartir bajo la misma licencia 3.0</a>.</p>\r\n" -#~ "\r\n" -#~ "Contacto: wolnelektury@nowoczesnapolska.org.pl \r\n" - -#~ msgid "ZespóÅ" -#~ msgstr "El equipo" - -#~ msgid "" -#~ "<p><strong>Magdalena Biernat</strong> â koordynatorka projektu, dyrektor " -#~ "zarzÄ dzajÄ ca fundacji Nowoczesna Polska. Socjolożka, absolwentka " -#~ "Uniwersytetu Warszawskiego i LâUniversité libre de Bruxelles. " -#~ "Specjalistka od projektów internetowych. KoordynowaÅa projekty Kandydaci " -#~ "2009 i Mam Prawo WiedzieÄ w Stowarzyszeniu 61. PracowaÅa przy wielu " -#~ "badaniach spoÅecznych realizowanych przez organizacje pozarzÄ dowe i firmy " -#~ "badawcze. </p>\r\n" -#~ "\r\n" -#~ "<p><strong>RadosÅaw Czajka</strong> â gÅówny programista, studiowaÅ " -#~ "informatykÄ na MIMUW. BiegÅy w jÄzykach programowania, znaczników: " -#~ "Python, XHTML, Javascript, CSS, LaTeX, SQL. Posiada doÅwiadczenie z " -#~ "frameworkami Django, Jquery, doÅwiadczenie w przeksztaÅceniach dokumentów " -#~ "XML (XSLT), w produkcji ebooków w formatach PDF i EPUB oraz w tworzeniu " -#~ "aplikacji mobilnych na system Android i iOS.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Marcin Koziej </strong>â programista. Absolwent Politechniki " -#~ "Warszawskiej i doktorant w Instytucie Filozofii Uniwersytetu " -#~ "Warszawskiego. DziaÅacz Mokotowskiej Kooperatywy Spożywczej. Podróżnik, " -#~ "rowerzysta i biesiadnik. Homo ludens.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Marta NiedziaÅkowska</strong> â redaktorka techniczna, " -#~ "absolwentka bibliotekoznawstwa i informacji naukowej UW. Studentka " -#~ "studiów magisterskich Public Policy and Administration na Collegium " -#~ "Civitas. </p>\r\n" -#~ "\r\n" -#~ msgstr "" -#~ "<p><strong>Magdalena Biernat</strong> â la coordinadora del proyecto, " -#~ "directora ejecutiva de la Fundación Polonia Moderna. Socióloga, " -#~ "licenciada por la Universidad de Varsovia y de LâUniversité libre de " -#~ "Bruxelles. Especializada en proyectos de Internet. Coordinó los proyectos " -#~ "âCandidatos 2009â y âTengo el Derecho de Saberâ en la Asociación 61. Ha " -#~ "trabajado en varias investigaciones sociales realizadas por " -#~ "organizaciones no gubernamentales y empresas investigadoras.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>RadosÅaw Czajka</strong> â programador principal. Estudió " -#~ "informática en MIM UW (La Facultad de Matemáticas, Informática y Mecánica " -#~ "de la Universidad de Varsovia). Conoce los lenguajes de programación y " -#~ "los marcados: Python, XHTML, Javascript, CSS, LaTex, SQL. Tiene " -#~ "experiencia en los frameworks Django, Jquery; en la transformación de los " -#~ "archivos XML (XSLT), en la producción de libros electrónicos en los " -#~ "formatos PDF y EPUB, asimismo en la creación de aplicaciones móviles para " -#~ "los sistema Android e iOS.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Marcin Koziej </strong> â programador. El incansable amateur " -#~ "de filosofÃa, informático, viajero, ciclista y juerguista. Homo ludens.</" -#~ "p>\r\n" -#~ "\r\n" -#~ "<p><strong>Marta NiedziaÅkowska</strong> â redactora técnica, licenciada " -#~ "en Ciencias de la Información y BibliotecologÃa de la Universidad de " -#~ "Varsovia. Estudiante de segundo curso de licenciatura de Public Policy " -#~ "and Administration en el Collegium Civitas. </p>\r\n" - -#~ msgid "" -#~ "<p><strong>Dorota A. Kowalska</strong> â redaktorka literacka, " -#~ "jÄzykoznawca, polonistka i slawistka, doktor nauk humanistycznych, " -#~ "adiunkt w Pracowni Polszczyzny Kresowej IJP PAN, gdzie zajmuje siÄ " -#~ "historiÄ i wspóÅczesnoÅciÄ jÄzyka polskiego na Ukrainie. Hobbystycznie " -#~ "Åpiewa archaiczne pieÅni ukraiÅskie i rosyjskie, cyklistka.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Aleksandra SekuÅa</strong> â redaktorka literacka, historyczka " -#~ "literatury, doktor nauk humanistycznych, absolwentka WydziaÅu Polonistyki " -#~ "Uniwersytetu Warszawskiego i SzkoÅy Nauk SpoÅecznych przy IFiS PAN. " -#~ "Zawodowo i naukowo zajmuje siÄ polskim romantyzmem, historiÄ idei i " -#~ "teoriÄ kultury. </p>\r\n" -#~ "\r\n" -#~ "<p><strong>PaweÅ KozioÅ </strong>â redaktor literacki. Ur. 1979, doktor " -#~ "nauk humanistycznych specjalizujÄ cy siÄ w literaturze dawnej, absolwent " -#~ "WydziaÅu Polonistyki Uniwersytetu Warszawskiego oraz Dulwich College w " -#~ "Londynie. Poeta, krytyk literacki, stypendysta Ministerstwa Kultury i " -#~ "Dziedzictwa Narodowego (2010). </p>\r\n" -#~ "\r\n" -#~ "<p><strong>Paulina ChoromaÅska</strong> â redaktorka techniczna, " -#~ "studentka II roku studiów magisterskich w Instytucie Informacji Naukowej " -#~ "i Studiów Bibliologicznych UW. Pracuje również w Pracowni Dokumentacji " -#~ "Teatru w Instytucie Teatralnym im. Z. Raszewskiego w Warszawie.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Aneta Rawska</strong> - redaktorka techniczna, studentka II " -#~ "roku studiów magisterskich w Instytucie Informacji Naukowej i Studiów " -#~ "Bibliologicznych UW, miÅoÅniczka wypieków i dobrej kuchni. Od 2009 roku " -#~ "prowadzi serwis koÅa PZW nr 21 w WoÅominie.</p>\r\n" -#~ msgstr "" -#~ "<p><strong>Dorota A. Kowalska</strong> â redactora literaria, lingüista, " -#~ "licenciada en filologÃa polaca y eslava, doctorada en humanidades, " -#~ "profesora adjunta en el Laboratorio de Idioma Polaco de la Zona " -#~ "Fronteriza, donde se ocupa de la historia y presente del idioma polaco en " -#~ "Ucrania. Su pasatiempo favorito es cantar canciones arcaicas ucranianas y " -#~ "rusas. Ciclista.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Aleksandra SekuÅa</strong> â redactora literaria, historiadora " -#~ "de literatura, doctorada en humanidades, licenciada por la Facultad de " -#~ "FilologÃa Polaca por la Escuela de Ciencias Sociales del IFIS PAN (el " -#~ "Instituto de FilosofÃa y SociologÃa de la Academia Polaca de Ciencias). " -#~ "Se ocupa del romanticismo polaco, historia de la idea y teorÃa de cultura." -#~ "</p>\r\n" -#~ "\r\n" -#~ "<p><strong>PaweÅ KozioÅ </strong> â redactor literario. Nació en 1979, " -#~ "doctorado en humanidades, especializado en literatura antigua. Licenciado " -#~ "por la Facultad de FilologÃa Polaca de la Universidad de Varsovia y por " -#~ "Dulwich College en Londres. Poeta y crÃtico literario, becario de el " -#~ "Ministerio de Cultura y Patrimonio Nacional (2010).</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Paulina ChoromaÅska</strong> â redactora técnica, estudiante " -#~ "de segundo curso de licenciatura en el Instituto de Información " -#~ "CientÃfica y BibliotecologÃa de la Universidad de Varsovia. Aparte, " -#~ "trabaja en el Centro de Documentación de Teatro en el Instituto de " -#~ "Teatro de Zbigniew Raszewski en Varsovia. </p> \r\n" -#~ "\r\n" -#~ "<p><strong>Aneta Rawska</strong> - redactora técnica, estudiante de " -#~ "segundo curso de licenciatura en el Instituto de Ciencias de la " -#~ "Información y BibliotecologÃa de la Universidad de Varsovia, amante de la " -#~ "pastelerÃa y la buena cocina. Desde 2009 está a cargo de la página web de " -#~ "PZW (Asociación Polaca de Pesca) número 21 en Wolomin. </p>\r\n" - -#~ msgid "Wesprzyj nas" -#~ msgstr "Apóyanos" - -#~ msgid "" -#~ "<p><strong>Przekaż 1% podatku na Wolne Lektury</strong></p>\r\n" -#~ "<p>Fundacja Nowoczesna Polska posiada status Organizacji Pożytku " -#~ "Publicznego dziÄki czemu na rozwój projektu Wolne Lektury można przekazaÄ " -#~ "1% swojego podatku. W tym celu należy wypeÅniÄ odpowiedniÄ rubrykÄ w " -#~ "rocznym zeznaniu podatkowym (PIT-36, PIT-37 lub PIT-28). W zeznaniu " -#~ "należy podaÄ nazwÄ:</p>\r\n" -#~ "Fundacja Nowoczesna Polska <br/>\r\n" -#~ "oraz numer z Krajowego Rejestru SÄ dowego (KRS) 0000070056<br/>" -#~ msgstr "" -#~ "<p><strong>Dona 1% de tu impuesto a Wolne Lektury</strong></p> \r\n" -#~ "<p>La Fundación Polonia Modera tiene carácter de organización no " -#~ "gubernamental, por lo tanto se puede donar 1% de impuesto para el " -#~ "desarrollo del proyecto Wolne Lektury. Para este propósito hay que " -#~ "rellenar la casilla adecuada en la declaración de la renta anual (PIT-36, " -#~ "PIT-37 o PIT-28). Se deberÃa poner el nombre:</p>\r\n" -#~ "Fundacja Nowoczesna Polska<br/>\r\n" -#~ "y el numero de el Registro Judicial Nacional (KRS) 0000070056<br/>" - -#~ msgid "" -#~ "<p><strong>Przekaż darowiznÄ na Wolne Lektury</strong></p>\r\n" -#~ "<p>Każda wpÅacona kwota zostanie przeznaczona na rozwój zasobów naszej " -#~ "biblioteki. Wystarczy dokonaÄ przelewu na konto:</p>\r\n" -#~ "\r\n" -#~ "Fundacja Nowoczesna Polska<br/>\r\n" -#~ "ul. MarszaÅkowska 84/92 lok. 125<br/>\r\n" -#~ "00-514 Warszawa<br/>\r\n" -#~ "Nr konta: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\n" -#~ "TytuÅ przelewu: Darowizna na Wolne Lektury<br/>\r\n" -#~ msgstr "" -#~ "<p><strong>Haz un donativo a Wolne Lektury</strong></p>\r\n" -#~ "<p>Cada aporte será destinado al incremento d los fondos de nuestra " -#~ "biblioteca. Basta con hacer una transferencia a nuestra cuenta:</p>\r\n" -#~ "\r\n" -#~ "Fundacja Nowoczesna Polska<br/>\r\n" -#~ "Ul. MarszaÅkowska84/92 lok. 125<br/>\r\n" -#~ "00-514 Warszawa<br/>\r\n" -#~ "El numero de la cuenta: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\n" -#~ "El titulo de la transferencia: Darowizna na Wolne Lektury<br/>\r\n" - -#~ msgid "WÅÄ cz siÄ w prace" -#~ msgstr "Colabora" - -#~ msgid "" -#~ "<ul>\r\n" -#~ "<li>ZostaÅ naszym redaktorem, programistÄ lub tÅumaczem</li>\r\n" -#~ "<li>ZdobÄ dź nowe umiejÄtnoÅci i doÅwiadczenie </li>\r\n" -#~ "<li>Weź udziaÅ w otwartym projekcie i twórz innowacyjnÄ bibliotekÄ " -#~ "internetowÄ </li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ "<p>Zapraszamy wszystkie osoby, które chcÄ wspóÅtworzyÄ nasz projekt. " -#~ "WspóÅpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " -#~ "literaturÄ , redagowaniem tekstów i projektami informatycznymi. Oferujemy " -#~ "profesjonalne szkolenia i staÅÄ pomoc merytorycznÄ . Wolontariusze mogÄ " -#~ "pracowaÄ zdalnie lub w siedzibie Fundacji.</p>\r\n" -#~ "<p>Organizujemy również praktyki studenckie â nawiÄ zaliÅmy wspóÅpracÄ z " -#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " -#~ "Karier UKSW oraz WydziaÅem Fizyki UW. </p>\r\n" -#~ "\r\n" -#~ "<h3>Jak siÄ do nas zgÅosiÄ?</h3>\r\n" -#~ "<p>Wszystkie zainteresowane osoby prosimy o przysÅanie maila na adres <a " -#~ "href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\r\n" -#~ msgstr "" -#~ "<ul>\r\n" -#~ "<li>Hazte nuestro voluntario como redactor, programador o traductor</li> " -#~ "\r\n" -#~ "<li>Adquiere nuevas habilidades y gana experiencia</li>\r\n" -#~ "<li>Participa en un proyecto abierto y crea una innovadora biblioteca " -#~ "virtual</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ "<p>Todos los que quieran participar en nuestro proyecto estarán " -#~ "bienvenidos. Colaboramos con estudiantes, docentes y todos los que están " -#~ "interesados y aficionados en literatura, redacción de textos o en " -#~ "proyectos informáticos. Les ofrecemos adiestramiento y ayuda en cuanto al " -#~ "contenido. Los voluntarios pueden trabajar a distancia o en la oficina " -#~ "principal de la Fundación.</p>\r\n" -#~ "<p>Organizamos también prácticas para estudiantes: colaboramos con el " -#~ "Instituto de Información CientÃfica y BibliologÃa de la Universidad de " -#~ "Varsovia, el Servicio de Orientación Profesional de la Universidad de " -#~ "Cardenal Stefan Wyszynski y la Facultad de FÃsica de la Universidad de " -#~ "Varsovia. </p>\r\n" -#~ "\n" -#~ "\r\n" -#~ "<h3>¿Cómo contactar con nosotros?</h3>\r\n" -#~ "<p>A todos los interesados les invitamos a mandarnos un e-mail a <a \r\n" -#~ "href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p> \r\n" - -#~ msgid "" -#~ "<h3>Kogo szukamy?</h3>\r\n" -#~ "\r\n" -#~ "<h3>Redaktorów technicznych (skÅad tekstu) </h3>\r\n" -#~ " <p>SkÅad jest pierwszym etapem pracy nad tekstem. Za pomocÄ znaczników " -#~ "jÄzyka WL-XML nadajemy tekstowi poÅ¼Ä danÄ formÄ i umożliwiamy wyÅwietlenie " -#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na <a " -#~ "href=\"http://redakcja.wolnelektury.pl\">Platformie Redakcyjnej</a>, " -#~ "która pozwala na zautomatyzowanie dużej czÄÅci pracy. </p>\r\n" -#~ "\r\n" -#~ " <p><b>Kto może zostaÄ redaktorem technicznym?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Każdy â po krótkim szkoleniu.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>WiÄcej informacji o redakcji technicznej znajdziecie na <a href=" -#~ "\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" -#~ "\">stronie redakcji Wolnych Lektur</a> </p>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Redaktorów literackich (merytorycznych) </h3>\r\n" -#~ " <p>Redakcja literacka obejmuje korektÄ, uwspóÅczeÅnienia oraz dodawanie " -#~ "przypisów i motywów literackich. To unikalna możliwoÅÄ zdobycia " -#~ "doÅwiadczenia w cyfrowej edycji tekstów. </p>\r\n" -#~ "\r\n" -#~ " <p><b>Kto może zostaÄ redaktorem literackim? </b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Osoby, które majÄ doÅwiadczenie w redakcji tekstów literackich,</li>" -#~ "\r\n" -#~ "<li>Studenci i absolwenci studiów humanistycznych, którzy chcÄ takie " -#~ "doÅwiadczenie zdobyÄ. </li>\r\n" -#~ "</ul>\r\n" -#~ "<p>WiÄcej informacji o redakcji merytorycznej znajdziecie na <a href=" -#~ "\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" -#~ "\">stronie redakcji Wolnych Lektur</a> </p>\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>TÅumaczy</h3>\r\n" -#~ " <p>Strona WolneLektury.pl jest dostÄpna w siedmiu jÄzykach obcych â " -#~ "angielskim, francuskim, niemieckim, hiszpaÅskim, litewskim, rosyjskim " -#~ "oraz ukraiÅskim. Użytkownikami biblioteki jest ponad 200 tysiÄcy osób z " -#~ "zagranicy, a już niedÅugo nasze zbiory obejmÄ również dzieÅa w jÄzykach " -#~ "obcych. Dlatego potrzebujemy na bieÅ¼Ä co tÅumaczyÄ nowe informacje " -#~ "pojawiajÄ ce siÄ na stronie. </p>\r\n" -#~ " <p><b>Kto może pomóc w tÅumaczeniach? </b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Każdy, kto dobrze zna co najmniej jeden z powyższych jÄzyków. </li>" -#~ "\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Programistów</h3>\r\n" -#~ " <p>Poza samÄ stronÄ Wolnych Lektur tworzymy również: </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>narzÄdzia redakcyjne,</li>\r\n" -#~ "<li>konwertery do różnych formatów e-booków, </li>\r\n" -#~ "<li>aplikacje mobile uÅatwiajÄ ce dostÄp do naszych zasobów.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " -#~ "jQuery, LaTeX, Java.\r\n" -#~ "Tworzone przez nas oprogramowanie udostÄpniamy na <a href=\"https://" -#~ "github.com/fnp/\">wolnej licencji</a>. </p>\r\n" -#~ " <p><b>Kto może pomóc w pracach programistycznych?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Każdy, kto umie i chciaÅby zdobyÄ punkty do karmy za udziaÅ w " -#~ "otwartym projekcie programistycznym. ;)</li>\r\n" -#~ "</ul>\r\n" -#~ msgstr "" -#~ "<h3>¿A quién buscamos?</h3>\r\n" -#~ "\r\n" -#~ "<h3>Redactores técnicos (composición tipográfica)</h3>\r\n" -#~ " <p>La composición tipográfica es la primera etapa del trabajo con el " -#~ "texto. Por medio de los marcados del idioma WL-XML le damos la forma " -#~ "deseada al texto y facilitamos su visualización en la página web. La " -#~ "redacción técnica se realiza en <a href=\"http://redakcja.wolnelektury.pl" -#~ "\">la Plataforma Editorial</a>, que permite automatizar gran parte del " -#~ "trabajo.</p>\r\n" -#~ "\r\n" -#~ "<p><b>¿Quién puede ser redactor técnico?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Cualquiera, después de una breve formación.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>Más información sobre la redacción técnica en <a href=\"http://" -#~ "redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\\r\n" -#~ "\">la página web de Wolne Lektury</a> </p>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Redactores literarios </h3>\r\n" -#~ " <p>La redacción literaria incluye la corrección de pruebas, adaptación e " -#~ "inclusión de las notas a pie de página , asà como el tratamiento de los " -#~ "temas literarios. Es una oportunidad única de ganar experiencia en la " -#~ "edición digital de textos. </p>\r\n" -#~ "\r\n" -#~ " <p><b>¿Quién puede ser redactor literario? </b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Las personas que tengan experiencia en la redacción de textos " -#~ "literarios,</li>\r\n" -#~ "<li>Los estudiantes y licenciados en humanidades que deseen obtener esta " -#~ "experiencia. </li>\r\n" -#~ "</ul>\r\n" -#~ "<p>Más información sobre la redacción literaria en <a href=\"http://" -#~ "redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" -#~ "\">la página web de Wolne Lektury</a> </p>\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Traductores</h3>\r\n" -#~ "<p>La página web de Wolne Lektury.pl está traducida a 7 idiomas: inglés, " -#~ "francés, alemán, español, lituano, ruso y ucraniano. Hay más de 200 mil " -#~ "de usuarios del extranjero, además, dentro de poco nuestra colección " -#~ "incluirá también obras en otros idiomas. De ahà que necesitemos traducir " -#~ "sistemáticamente nuevos contenidos que aparezcan en la página. </p>\r\n" -#~ "<p><b>¿Quién puede ayudarnos con las traducciones?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Cualquiera que domine bien por lo menos uno de los idiomas " -#~ "mencionados anteriormente.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Programadores</h3>\r\n" -#~ "<p>Aparte de la página web creamos también:</p>\r\n" -#~ "<ul>\r\n" -#~ "<li>herramientas editoriales,</li>\r\n" -#~ "<li>convertidores para varios formatos de libros electrónicos,</li>\r\n" -#~ "<li>aplicaciones móviles que facilitan el acceso a nuestra colección</li>" -#~ "\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>Usamos las siguientes tecnologÃas: Python, Django, XHTML, JavaScript, " -#~ "jQuery, LaTex, Java. \r\n" -#~ "El software creado por nosotros lo ponemos a su disposición en <a href=" -#~ "\"https://github.com/fnp/\">libre</a>. </p>\r\n" -#~ "<p><b>¿Quién puede ayudar en las tareas relacionadas con la programación?" -#~ "</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Cualquiera que sepa y quiera ganar puntos para su karma por la " -#~ "participación en un proyecto de programación abierto. ;)</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" - -#~ msgid "Prawa" -#~ msgstr "Derechos" - -#~ msgid "" -#~ "<p>WiÄkszoÅÄ utworów w bibliotece nie jest chroniona prawem autorskim i " -#~ "znajduje siÄ w domenie publicznej, co oznacza, że można je swobodnie " -#~ "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 <a " -#~ "href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie " -#~ "autorstwa-Na tych samych warunkach 3.0</a>. Publikujemy również kilka " -#~ "utworów, które autorzy lub spadkobiercy praw udostÄpnili na wolnej " -#~ "licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl" -#~ "\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>.</p>" -#~ msgstr "" -#~ "</p>La mayorÃa de los textos de la Biblioteca son libres de derechos de " -#~ "autor y son de dominio público, por lo tanto se pueden publicar y " -#~ "difundir libremente. Si un texto tiene materiales adicionales (notas a " -#~ "pie de página, temas literarios, etc.), que no están libres de derechos " -#~ "de autor, dichos materiales están publicados bajo la licencia <a href=" -#~ "\"http://creativecommons.org/licenses/by-sa/3.0/deed.es\">Reconocimiento-" -#~ "Compartir bajo la misma licencia 3.0</a>.También publicamos algunos " -#~ "textos legados al dominio público por los autores o herederos bajo la " -#~ "licencia <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.es" -#~ "\">Reconocimiento-Compartir bajo la misma licencia 3.0</a>.</p>" diff --git a/apps/infopages/locale/pl/LC_MESSAGES/django.mo b/apps/infopages/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 0310e4668..000000000 Binary files a/apps/infopages/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/infopages/locale/pl/LC_MESSAGES/django.po b/apps/infopages/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index ceb4d08fe..000000000 --- a/apps/infopages/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,47 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-01-27 16:38+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2)\n" - -#: models.py:11 -msgid "main page priority" -msgstr "kolejnoÅÄ na stronie gÅównej" - -#: models.py:12 -msgid "slug" -msgstr "slug" - -#: models.py:13 -msgid "title" -msgstr "tytuÅ" - -#: models.py:14 -msgid "left column" -msgstr "lewa kolumna" - -#: models.py:15 -msgid "right column" -msgstr "prawa kolumna" - -#: models.py:19 -msgid "info page" -msgstr "strona informacyjna" - -#: models.py:20 -msgid "info pages" -msgstr "strony informacyjne" diff --git a/apps/infopages/locale/uk/LC_MESSAGES/django.mo b/apps/infopages/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index fe58f78b4..000000000 Binary files a/apps/infopages/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/infopages/locale/uk/LC_MESSAGES/django.po b/apps/infopages/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index 0ff6832e8..000000000 --- a/apps/infopages/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,1265 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: \n" -"Last-Translator: Natalia Kertyczak <natalczyk@o2.pl>\n" -"Language-Team: uk <yourteam@example.com>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:11 -msgid "main page priority" -msgstr "" - -#: models.py:12 -msgid "slug" -msgstr "" - -#: models.py:13 -msgid "title" -msgstr "" - -#: models.py:14 -msgid "left column" -msgstr "" - -#: models.py:15 -msgid "right column" -msgstr "" - -#: models.py:19 -msgid "info page" -msgstr "" - -#: models.py:20 -msgid "info pages" -msgstr "" - -#~ msgid "Wolontariat dla wiedzy" -#~ msgstr "ÐолонÑеÑÑÑво в оÑвÑÑÑ" - -#~ msgid "" -#~ "<h2>Wolontariat</h2>\r\n" -#~ "\t<p>\r\n" -#~ "\t\tBiogramy pisarzy oraz definicje epok i gatunków literackich w\r\n" -#~ "\t\tbibliotece internetowej Wolne Lektury napisali uczniowie\r\n" -#~ "\t\tczterech szkóŠpodczas warsztatów âWolontariat dla wiedzyâ.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t\tUczniowie pracowali wspólnie pod merytorycznym nadzorem\r\n" -#~ "\t\tnauczycieli i specjalistów â literaturoznawców na\r\n" -#~ "\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n" -#~ "\r\n" -#~ "\t\t\tplatformie internetowej wiki</a>\r\n" -#~ "\t\tprzygotowanej przez zespóÅ\r\n" -#~ "\t\t<a href=\"http://2ia.pl/\">2ia</a>. Praca nad notami byÅa " -#~ "jednoczeÅnie naukÄ wykorzystywania\r\n" -#~ "\t\tkomputerów i internetu do wyszukiwania informacji, a także\r\n" -#~ "\t\tweryfikowania ich wiarygodnoÅci.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t\tProjekt \"Wolontariat dla wiedzy\" zostaÅ zrealizowany dziÄki\r\n" -#~ "\t\twsparciu\r\n" -#~ "\t\t<a href=\"http://www.menis.gov.pl/\">\r\n" -#~ "\t\t\tMinisterstwa Edukacji Narodowej</a>. Nagrody dla uczniów ufundowali" -#~ "\r\n" -#~ "\t\t<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n" -#~ "\r\n" -#~ "\t\t\tWydawnictwo Nasza KsiÄgarnia</a>\r\n" -#~ "\t\ti\r\n" -#~ "\t\t<a href=\"http://helion.pl/\">Wydawnictwo Helion</a>. Noty " -#~ "zweryfikowano w serwisie\r\n" -#~ "\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n" -#~ "\t\t\tPlagiat.pl</a>.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t\t<a href=\"/static/wolontariat.pdf\">Raport z realizacji projektu " -#~ "âWolontariat dla wiedzy\"</a>.\r\n" -#~ "\t</p>\r\n" -#~ "\r\n" -#~ "\t<p>\r\n" -#~ "\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />" -#~ "\r\n" -#~ "\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n" -#~ "\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n" -#~ " <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />" -#~ "\r\n" -#~ " <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />" -#~ "\r\n" -#~ "\t</p>\r\n" -#~ msgstr "" -#~ "<h2>ÐолонÑеÑÑÑво</h2>\r\n" -#~ "               <p>\r\n" -#~ "                              ÐÑогÑами пиÑÑменникÑв Ñа деÑÑнÑÑÑÑ ÐµÐ¿Ð¾Ñ Ñа " -#~ "лÑÑеÑаÑÑÑÐ½Ð¸Ñ Ð¶Ð°Ð½ÑÑв в ÑнÑеÑнеÑ-бÑблÑоÑеÑÑ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ñ ÑÑнÑми ÑоÑиÑÑÐ¾Ñ ÑкÑл " -#~ "пÑдÑÐ°Ñ Ð¼Ð°Ð¹ÑÑеÑ-клаÑÑв âÐолонÑеÑÑÑво в оÑвÑÑÑâ.\r\n" -#~ "               </p>\r\n" -#~ "\r\n" -#~ "               <p>\r\n" -#~ "                              УÑÐ½Ñ ÑпÑлÑно пÑаÑÑвали вÑд доглÑдом " -#~ "вÑиÑелÑв Ñа ÑпеÑÑалÑÑÑÑв â лÑÑеÑаÑÑÑознавÑÑв на <a href=\"http://" -#~ "wolnepodreczniki.pl/wolontariat/\">\r\n" -#~ "\r\n" -#~ "                                              ÑнÑеÑнеÑовÑй вÑкÑ-" -#~ "плаÑÑоÑмÑ</a>\r\n" -#~ "                              вÑÑановленÑй командоÑ\r\n" -#~ "                              <a href=\"http://2ia.pl/\">2ia</a>. РобоÑа " -#~ "над Ñими ÑекÑÑами бÑла водноÑÐ°Ñ Ð½Ð°ÑÐºÐ¾Ñ ÐºÐ¾ÑиÑÑÑваÑиÑÑ ÐºÐ¾Ð¼Ð¿âÑÑеÑом Ñа " -#~ "ÑнÑеÑнеÑом Ð´Ð»Ñ Ð¿Ð¾ÑÑÐºÑ ÑнÑоÑмаÑÑÑ, а Ñакож пеÑевÑÑки ÑÑ Ð²ÑÑогÑдноÑÑÑ.\r\n" -#~ "               </p>\r\n" -#~ "\r\n" -#~ "               <p>\r\n" -#~ "                              ÐÑÐ¾ÐµÐºÑ \"ÐолонÑеÑÑÑво в оÑвÑÑÑ\" здÑйÑнено " -#~ "завдÑки пÑдÑÑимÑÑ \r\n" -#~ "                              <a href=\"http://www.menis.gov.pl/\">\r\n" -#~ "                                              ÐÑнÑÑÑеÑÑÑва наÑÑоналÑÐ½Ð¾Ñ " -#~ "оÑвÑÑи</a>. ÐÑизи Ð´Ð»Ñ ÑÑнÑв пÑигоÑÑвали             <a href=\"http://www." -#~ "nk.com.pl/engine/index.php?page=glowna\">\r\n" -#~ "\r\n" -#~ "                                              ÐидавниÑÑво Nasza " -#~ "KsiÄgarnia</a>\r\n" -#~ "                              Ñа\r\n" -#~ "                              <a href=\"http://helion.pl/\">ÐидавниÑÑво " -#~ "Helion</a>. ТекÑÑи пеÑевÑÑено в ÑеÑÑÑÑÑ <a href=\"http://www.plagiat.pl/" -#~ "webplagiat/main.action\">\r\n" -#~ "                                              Plagiat.pl</a>.\r\n" -#~ "               </p>\r\n" -#~ "\r\n" -#~ "               <p>\r\n" -#~ "                              <a href=\"/static/wolontariat.pdf\">ÐвÑÑ Ð· " -#~ "ÑеалÑзаÑÑÑ Ð¿ÑоекÑÑ \"ÐолонÑеÑÑÑво в оÑвÑÑÑ\"</a>.\r\n" -#~ "               </p>\r\n" -#~ "\r\n" -#~ "               <p>\r\n" -#~ "               <img src=\"/static/img/wolontariat/okladka.jpg\" " -#~ "style='margin: 10px' />\r\n" -#~ "               <img src=\"/static/img/wolontariat/01.jpg\" " -#~ "style='margin: 10px' />\r\n" -#~ "               <img src=\"/static/img/wolontariat/02.jpg\" " -#~ "style='margin: 10px' />\r\n" -#~ "   <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />" -#~ "\r\n" -#~ "   <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />" -#~ "\r\n" -#~ "               </p> \r\n" - -#~ msgid "" -#~ "\t<h2>Autorzy</h2>\r\n" -#~ "\r\n" -#~ "\t<ol>\r\n" -#~ "\t\t<li>\r\n" -#~ "\t\t\t<p>\r\n" -#~ "\t\t\t\tGimnazjum nr 40 z OddziaÅami Integracyjnymi w Zespole\r\n" -#~ "\t\t\t\tSzkóŠnr 69 im. Armii Krajowej Grupy Bojowej âKRYBARâ,\r\n" -#~ "\t\t\t\tul. Drewniana 8, 00-345 Warszawa; klasa druga pod opiekÄ \r\n" -#~ "\t\t\t\tAnny Budziarek-Friedrich:\r\n" -#~ "\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t<ul>\r\n" -#~ "\t\t\t\t<li>Burdon Filip;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>DÄbski Bartek;</li>\r\n" -#~ "\t\t\t\t<li>Jackowicz Kamil;</li>\r\n" -#~ "\t\t\t\t<li>Kurek PaweÅ;</li>\r\n" -#~ "\t\t\t\t<li>Makles Bartosz;</li>\r\n" -#~ "\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n" -#~ "\t\t\t\t<li>MigdaÅ Katarzyna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Mioduszewski MichaÅ;</li>\r\n" -#~ "\t\t\t\t<li>Pfeiffer Ida;</li>\r\n" -#~ "\t\t\t\t<li>PÅaskowicka Karolina;</li>\r\n" -#~ "\t\t\t\t<li>Sailer Ewa.</li>\r\n" -#~ "\t\t\t</ul>\r\n" -#~ "\t\t</li>\r\n" -#~ "\r\n" -#~ "\t\t<li>\r\n" -#~ "\t\t\t<p>\r\n" -#~ "\t\t\t\tXXXIII Liceum OgólnoksztaÅcÄ ce im. MikoÅaja Kopernika,\r\n" -#~ "\t\t\t\tul. Bema 76, 01-225 Warszawa; klasa pierwsza o profilu\r\n" -#~ "\t\t\t\tbiologiczno-chemicznym pod opiekÄ Elżbiety Konkowskiej:\r\n" -#~ "\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t<ul>\r\n" -#~ "\t\t\t\t<li>Chwil BartÅomiej;</li>\r\n" -#~ "\t\t\t\t<li>Czarnecka Natalia;</li>\r\n" -#~ "\t\t\t\t<li>GawroÅska Iga;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Grabarczyk Marta;</li>\r\n" -#~ "\t\t\t\t<li>JastrzÄ b Katarzyna;</li>\r\n" -#~ "\t\t\t\t<li>Krawczak Olga;</li>\r\n" -#~ "\t\t\t\t<li>Krawczyk Marianna;</li>\r\n" -#~ "\t\t\t\t<li>Kur Natalia;</li>\r\n" -#~ "\t\t\t\t<li>Kwiatek Marta;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>LaÅkiewicz Joanna;</li>\r\n" -#~ "\t\t\t\t<li>MachczyÅska Daria;</li>\r\n" -#~ "\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n" -#~ "\t\t\t\t<li>Moczulska Karolina;</li>\r\n" -#~ "\t\t\t\t<li>MoÅcicka Aneta;</li>\r\n" -#~ "\t\t\t\t<li>Narloch Sabina;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Przybysz PaweÅ;</li>\r\n" -#~ "\t\t\t\t<li>Puchta Marek;</li>\r\n" -#~ "\t\t\t\t<li>Ryska Cezary;</li>\r\n" -#~ "\t\t\t\t<li>Sandomierski BartÅomiej;</li>\r\n" -#~ "\t\t\t\t<li>SÅawiÅski Tomasz;</li>\r\n" -#~ "\t\t\t\t<li>SÅowik Olga;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n" -#~ "\t\t\t\t<li>Strzelczak Karolina;</li>\r\n" -#~ "\t\t\t\t<li>Szafran Danuta;</li>\r\n" -#~ "\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n" -#~ "\t\t\t\t<li>Szulkowska Alicja;</li>\r\n" -#~ "\t\t\t\t<li>Ålusarczyk Anna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<li>Tytkowska Anna.</li>\r\n" -#~ "\t\t\t</ul>\r\n" -#~ "\t\t\t<li>\r\n" -#~ "\t\t\t\t<p>\r\n" -#~ "\t\t\t\t\tAutorskie Niepubliczne Liceum OgólnoksztaÅcÄ ce nr\r\n" -#~ "\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; klasa pierwsza\r\n" -#~ "\t\t\t\t\to profilu ogólnym pod opiekÄ MichaÅa Friedricha:\r\n" -#~ "\t\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<ul>\r\n" -#~ "\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>GoÅaszewska Ewa;</li>\r\n" -#~ "\t\t\t\t\t<li>Kwiatkowski MichaÅ;</li>\r\n" -#~ "\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n" -#~ "\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n" -#~ "\t\t\t\t\t<li>Przespolewski PrzemysÅaw;</li>\r\n" -#~ "\t\t\t\t\t<li>RosiÅska Zuzanna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n" -#~ "\t\t\t\t</ul>\r\n" -#~ "\t\t\t</li>\r\n" -#~ "\t\t\t<li>\r\n" -#~ "\t\t\t\t<p>\r\n" -#~ "\t\t\t\t\tLXIV Liceum OgólnoksztaÅcÄ ce im. St. I. Witkiewicza,\r\n" -#~ "\t\t\t\t\tul. ElblÄ ska 51, 01-737 Warszawa; klasa pierwsza o\r\n" -#~ "\t\t\t\t\tprofilu ogólnym pod opiekÄ Daniela Zycha:\r\n" -#~ "\t\t\t\t</p>\r\n" -#~ "\r\n" -#~ "\t\t\t\t<ul>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n" -#~ "\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n" -#~ "\t\t\t\t\t<li>DrÄ gowska Katarzyna;</li>\r\n" -#~ "\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n" -#~ "\t\t\t\t\t<li>GÅowacki Jan;</li>\r\n" -#~ "\t\t\t\t\t<li>Grad PaweÅ;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n" -#~ "\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n" -#~ "\t\t\t\t\t<li>KÅos Aneta;</li>\r\n" -#~ "\t\t\t\t\t<li>KozieÅ Barbara;</li>\r\n" -#~ "\t\t\t\t\t<li>KozÅowska Anna;</li>\r\n" -#~ "\t\t\t\t\t<li>Krug Pamela;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n" -#~ "\t\t\t\t\t<li>LubaÅ MichaÅ;</li>\r\n" -#~ "\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n" -#~ "\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n" -#~ "\t\t\t\t\t<li>Modelska Marta;</li>\r\n" -#~ "\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n" -#~ "\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n" -#~ "\t\t\t\t\t<li>Pielat Zofia;</li>\r\n" -#~ "\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n" -#~ "\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n" -#~ "\t\t\t\t\t<li>Rosa Karolina;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>SmyczyÅska Kamila;</li>\r\n" -#~ "\t\t\t\t\t<li>StoliÅska Barbara;</li>\r\n" -#~ "\t\t\t\t\t<li>SzymaÅska Katarzyna;</li>\r\n" -#~ "\t\t\t\t\t<li>Åcibior Ewa;</li>\r\n" -#~ "\t\t\t\t\t<li>Witczak Magda;</li>\r\n" -#~ "\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n" -#~ "\r\n" -#~ "\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n" -#~ "\t\t\t\t\t<li>ZióÅkowska Adrianna.</li>\r\n" -#~ "\t\t\t\t</ul>\r\n" -#~ "\t\t\t</li>\r\n" -#~ "\t </li>\r\n" -#~ "\t </ol>\r\n" -#~ msgstr "" -#~ "<h2>ÐвÑоÑи</h2>\r\n" -#~ "\r\n" -#~ "               <ol>\r\n" -#~ "                              <li>\r\n" -#~ "                                              <p>\r\n" -#~ "                                                              ÐÑмназÑÑ " -#~ "â40 з ÑнÑегÑаÑÑйними вÑддÑлами в ÐомплекÑÑ ÑкÑл â 69 ÑÐ¼ÐµÐ½Ñ ÐÑмÑÑ ÐÑÐ°Ð¹Ð¾Ð²Ð¾Ñ " -#~ "ÐÐ¾Ð¹Ð¾Ð²Ð¾Ñ ÐÑÑпи âÐÐ ÐÐÐÐ â,\r\n" -#~ "                                                              вÑл. " -#~ "ÐÑевнÑна 8, 00-345 ÐаÑÑава; дÑÑгий ÐºÐ»Ð°Ñ Ð¿Ñд опÑÐºÐ¾Ñ Ðнни ÐÑдзÑÑек-ФÑÑдÑÑÑ :" -#~ "\r\n" -#~ "                                              </p>\r\n" -#~ "\r\n" -#~ "                                              <ul>\r\n" -#~ "                                                              <li>ÐÑÑдон " -#~ "ФÑлÑп;</li>\r\n" -#~ "\r\n" -#~ "                                                              " -#~ "<li>ÐембÑÑÐºÑ ÐаÑÑек;</li>\r\n" -#~ "                                                              " -#~ "<li>ЯÑковÑÑ ÐамÑл;</li>\r\n" -#~ "                                                              <li>ÐÑÑек " -#~ "Ðавел;</li>\r\n" -#~ "                                                              <li>ÐÐ°ÐºÐ»ÐµÑ " -#~ "ÐаÑÑоÑ;</li>\r\n" -#~ "                                                              " -#~ "<li>ÐаÑкевÑÑ ÐÑемÑÑ;</li>\r\n" -#~ "                                                              <li>ÐÑгдал " -#~ "ÐаÑажина;</li>\r\n" -#~ "\r\n" -#~ "                                                              " -#~ "<li>ÐÑодÑÑевÑÑÐºÑ ÐÑÑ Ð°Ð»;</li>\r\n" -#~ "                                                              <li>ФайÑÐµÑ " -#~ "Ðда;</li>\r\n" -#~ "                                                              " -#~ "<li>ÐлаÑковÑÑÑка ÐаÑолÑна;</li>\r\n" -#~ "                                                              <li>Ð¡Ð°Ð¹Ð»ÐµÑ " -#~ "Ðва.</li>\r\n" -#~ "                                              </ul>\r\n" -#~ "                              </li>\r\n" -#~ "\r\n" -#~ "                              <li>\r\n" -#~ "                                              <p>\r\n" -#~ "                                                              XXXIII " -#~ "ÐагалÑнооÑвÑÑний лÑÑей ÑÐ¼ÐµÐ½Ñ ÐÐ¸ÐºÐ¾Ð»Ð°Ñ ÐопеÑника,\r\n" -#~ "                                                              вÑл. Ðема " -#~ "76, 01-225 ÐаÑÑава; пеÑÑий ÐºÐ»Ð°Ñ Ð±ÑологÑÑно-Ñ ÑмÑÑного пÑоÑÑÐ»Ñ Ð¿Ñд опÑÐºÐ¾Ñ " -#~ "ÐлÑжбÑÑи ÐонковÑÑÐºÐ¾Ñ :\r\n" -#~ "                                              </p>\r\n" -#~ "\r\n" -#~ "                                              <ul>\r\n" -#~ "                                                              <li>ХвÑл " -#~ "ÐаÑÑломÑй;</li>\r\n" -#~ "                                                              " -#~ "<li>ЧаÑнеÑÑка ÐаÑалÑÑ ;</li>\r\n" -#~ "                                                              " -#~ "<li>ÒавÑонÑÑка ÐÒа ;</li>\r\n" -#~ "\r\n" -#~ "                                                              " -#~ "<li>ÒÑабаÑÑик ÐаÑÑа;</li>\r\n" -#~ "                                                              " -#~ "<li>ЯаÑÑжомб ÐаÑажина;</li>\r\n" -#~ "                                                              " -#~ "<li>ÐÑавÑак ÐлÑга;</li>\r\n" -#~ "                                                              " -#~ "<li>ÐÑавÑик ÐаÑÑанна ;</li>\r\n" -#~ "                                                              <li>ÐÑÑ " -#~ "ÐаÑалÑÑ;</li>\r\n" -#~ "                                                              <li>ÐвÑÑек " -#~ "ÐаÑÑа;</li>\r\n" -#~ "\r\n" -#~ "                                                              " -#~ "<li>ÐаÑÑÐºÐµÐ²Ð¸Ñ Ðоанна;</li>\r\n" -#~ "                                                              " -#~ "<li>ÐÐ°Ñ ÑинÑÑка ÐаÑÑÑ;</li>\r\n" -#~ "                                                              " -#~ "<li>ÐÑÑнÑковÑÑка ÐзабелÑ;</li>\r\n" -#~ "                                                              " -#~ "<li>ÐоÑÑлÑÑка ÐаÑолÑна;</li>\r\n" -#~ "                                                              " -#~ "<li>ÐоÑÑÑÑÑка ÐнеÑа;</li>\r\n" -#~ "                                                              <li>ÐаÑÐ»Ð¾Ñ " -#~ "СабÑна;</li>\r\n" -#~ "\r\n" -#~ "                                                              <li>ÐÑÐ¸Ð±Ð¸Ñ " -#~ "Ðавел;</li>\r\n" -#~ "                                                              <li>ÐÑÑ Ñа " -#~ "ÐаÑек;</li>\r\n" -#~ "                                                              <li>РиÑка " -#~ "ЦезаÑи;</li>\r\n" -#~ "                                                              " -#~ "<li>СандомÑÑÑÑÐºÑ ÐаÑломÑй;</li>\r\n" -#~ "                                                              " -#~ "<li>СлавÑнÑÑÐºÑ Ð¢Ð¾Ð¼Ð°Ñ;</li>\r\n" -#~ "                                                              <li>СловÑк " -#~ "ÐлÑга;</li>\r\n" -#~ "\r\n" -#~ "                                                              " -#~ "<li>СÑажиÑÑка ÐаÑажина;</li>\r\n" -#~ "                                                              " -#~ "<li>СÑжелÑак ÐаÑолÑна;</li>\r\n" -#~ "                                                              <li>ШаÑÑан " -#~ "ÐанÑÑа;</li>\r\n" -#~ "                                                              " -#~ "<li>ШмÑÒÑлÑÑÑка ÐаÒдалена;</li>\r\n" -#~ "                                                              " -#~ "<li>ШÑлковаÑÑка ÐлÑÑÑÑ;</li>\r\n" -#~ "                                                              " -#~ "<li>СÑлÑÑаÑÑик Ðнна;</li>\r\n" -#~ "\r\n" -#~ "                                                              " -#~ "<li>ТиÑковÑÑка  Ðнна.</li>\r\n" -#~ "                                              </ul>\r\n" -#~ "                                              <li>\r\n" -#~ "                                                              <p>\r\n" -#~ "                                                                             " -#~ "ÐвÑоÑÑÑкий ÐепÑблÑÑний ÐагалÑнооÑвÑÑнÑй ÐÑÑей â " -#~ "                                                             42, вÑл. " -#~ "ÐвÑÑÑка 47 B, 00-735 ÐаÑÑава; пеÑÑий ÐºÐ»Ð°Ñ Ð·Ð°Ð³Ð°Ð»Ñного пÑоÑÑÐ»Ñ Ð¿Ñд опÑÐºÐ¾Ñ " -#~ "ÐÑÑ Ð°Ð»Ð° ФÑÑдÑÑÑ Ð°:\r\n" -#~ "                                                              </p>\r\n" -#~ "\r\n" -#~ "                                                              <ul>\r\n" -#~ "                                                                             " -#~ "<li>ÐаÑанÑÑÑка ÐаÑÑа;</li>\r\n" -#~ "\r\n" -#~ "                                                                             " -#~ "<li>ÒолаÑевÑÑка Ðва;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐвÑÑковÑÑÐºÑ ÐÑÑ Ð°Ð»;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐÐ°Ñ Ð½ÑковÑÑка ÐонÑка;</li>\r\n" -#~ "                              " -#~ "                                              <li>ÐÑÑжак ÐаÑÑоÑ;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐÑеÑполевÑÑÐºÑ ÐÑемиÑлав;</li>\r\n" -#~ "                                                                             " -#~ "<li>РоÑÑнÑÑка ÐÑзанна;</li>\r\n" -#~ "\r\n" -#~ "                                                                             " -#~ "<li>СÑбÑÒа ÐаÒдалена.</li>\r\n" -#~ "                                                              </ul>\r\n" -#~ "                                              </li>\r\n" -#~ "                                              <li>\r\n" -#~ "                                                              <p>\r\n" -#~ "                                                                             " -#~ "LXIV ÐагалÑнооÑвÑÑнÑй ÐÑÑей ÑÐ¼ÐµÐ½Ñ Ð¡Ñ.Ð. ÐÑÑкÑвÑÑа,\r\n" -#~ "                                                                             " -#~ "вÑл. ÐлÑблонзÑка 51, 01-737 ÐаÑÑава; пеÑÑий ÐºÐ»Ð°Ñ Ð·Ð°Ð³Ð°Ð»Ñного пÑоÑÑÐ»Ñ Ð¿Ñд " -#~ "опÑÐºÐ¾Ñ ÐанÑла ÐÐ¸Ñ Ð°:\r\n" -#~ "                                                              </p>\r\n" -#~ "\r\n" -#~ "                                                              <ul>\r\n" -#~ "\r\n" -#~ "                                                                             " -#~ "<li>ÐнджейÑак ÐамÑл;</li>\r\n" -#~ "                                                                             " -#~ "<li>ЧÑбай ÐонÑад;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐÑонÒовÑÑка ÐаÑажина;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÒаÑвÑÑка ÐаÒдалена;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÒловаÑÑÐºÑ Ð¯Ð½;</li>\r\n" -#~ "                              " -#~ "                                              <li>ÒÑад  Ðавел;</li>\r\n" -#~ "\r\n" -#~ "                                                                             " -#~ "<li>ÐнаÑовÑÑÐºÑ ÐаÑÑек;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐаÑвовÑÑÐºÑ ÐаÑÑÑн;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐÐ»Ð¾Ñ ÐнеÑа;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐозÑл ÐаÑбаÑа;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐозловÑÑка Ðнна;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐÑÑÒ Ðамела;</li>\r\n" -#~ "\r\n" -#~ "                                                                             " -#~ "<li>ÐжоÑек ЯкÑб;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐÑбаÑÑ ÐÑÑ Ð°Ð»;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐаÑевÑÑ ÐаÑалÑÑ;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐаÑÑалеж ÐÒнÑÑка;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐоделÑÑÑка ÐаÑÑа;</li>\r\n" -#~ "                                                                             " -#~ "<li>Ðовак ÐлекÑандÑа;</li>\r\n" -#~ "\r\n" -#~ "                                                                             " -#~ "<li>ÐабÑн ÐÒнÑÑка;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐаÑковÑÑка ÐлекÑандÑа;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐÑÐ»Ð°Ñ ÐоÑÑÑ;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐонÑÑÑка ÐÒнÑÑка;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐиÑлак УÑÑÑлÑ;</li>\r\n" -#~ "                                                                             " -#~ "<li>РоÑа ÐаÑолÑна;</li>\r\n" -#~ "\r\n" -#~ "                                                                             " -#~ "<li>СмÑинÑÑка ÐамÑлÑ;</li>\r\n" -#~ "                                                                             " -#~ "<li>СÑолÑнÑÑка ÐаÑбаÑа;</li>\r\n" -#~ "                                                                             " -#~ "<li>ШиманÑÑка ÐаÑажина;</li>\r\n" -#~ "                                                                             " -#~ "<li>СÑÑÑÐ±Ð¾Ñ Ðва;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐÑÑÑак ÐаÒда;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐÑÑковÑÑка ЮÑÑина;</li>\r\n" -#~ "\r\n" -#~ "                                                                             " -#~ "<li>ÐижиковÑÑка ÐовÑÑа;</li>\r\n" -#~ "                                                                             " -#~ "<li>ÐÑлковÑÑка ÐдÑÑанна.</li>\r\n" -#~ "                                                              </ul>\r\n" -#~ "                                              </li>\r\n" -#~ "                </li>\r\n" -#~ "                </ol>\r\n" - -#~ msgid "Możesz nam pomóc" -#~ msgstr "ÐожеÑе нам допомогÑи" - -#~ msgid "" -#~ "<h2>Wolontariat w Wolnych Lekturach</h2>\r\n" -#~ "<ul>\r\n" -#~ "<li>ZostaÅ naszym redaktorem, programistÄ lub tÅumaczem â wolontariuszem." -#~ "</li>\r\n" -#~ "<li>ZdobÄ dź nowe umiejÄtnoÅci i doÅwiadczenie. </li>\r\n" -#~ "<li>Weź udziaÅ w otwartym projekcie i twórz innowacyjnÄ bibliotekÄ " -#~ "internetowÄ . </li>\r\n" -#~ "</ul>\r\n" -#~ "<p>DziÄki pracy naszych wolontariuszy opublikowaliÅmy już ponad <b>1500 " -#~ "lektur</b>, z których skorzystaÅy ponad <b>3 miliony</b> czytelników z " -#~ "caÅego Åwiata. </p>\r\n" -#~ "<p>Zapraszamy wszystkie osoby, które chcÄ wspóÅtworzyÄ nasz projekt. " -#~ "WspóÅpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " -#~ "literaturÄ , redagowaniem tekstów i projektami informatycznymi. Oferujemy " -#~ "profesjonalne szkolenia i staÅÄ pomoc merytorycznÄ . Wolontariusze mogÄ " -#~ "pracowaÄ zdalnie lub w siedzibie Fundacji.</p>\r\n" -#~ "<p>Organizujemy również praktyki studenckie â nawiÄ zaliÅmy wspóÅpracÄ z " -#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " -#~ "Karier UKSW oraz WydziaÅem Fizyki UW. </p>\r\n" -#~ "\r\n" -#~ "<h2>Jak siÄ do nas zgÅosiÄ?</h2>\r\n" -#~ "<p>Wszystkie zainteresowane osoby prosimy o przysÅanie maila na adres <a " -#~ "href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n" -#~ msgstr "" -#~ "<h2>ÐолонÑеÑÑÑво</h2>\r\n" -#~ "\r\n" -#~ "<p>Ðи намагаÑмоÑÑ Ñкомога кÑаÑе пÑдгоÑÑваÑи ÑвоÑи, ÑÐºÑ Ð¿Ð¾ÑÑÑпово " -#~ "додаÑÑÑÑÑ Ð´Ð¾ наÑÐ¾Ñ Ð±ÑблÑоÑеки. Це можливо ÑÑлÑки завдÑки наÑим волонÑеÑам." -#~ "</p>\r\n" -#~ "\r\n" -#~ "<p>ÐапÑоÑÑÑмо ÑÑÑÑ , Ñ Ñо Ñ Ð¾Ñе допомогÑи Ñ ÑвоÑÐµÐ½Ð½Ñ ÑкÑлÑÐ½Ð¾Ñ ÑнÑеÑнеÑ-" -#~ "бÑблÑоÑеки Wolne Lektury.</p>\r\n" -#~ "\r\n" -#~ "<p>ÐÑÑм волонÑеÑам ми пÑопонÑÑмо ÑÑенÑнги Ñ Ð¿ÑакÑиÑний доÑвÑд обÑобки " -#~ "ÑекÑÑÑ: змÑÑÑовне Ñа ÑÐµÑ Ð½ÑÑне ÑедагÑваннÑ. ÐолонÑеÑи можÑÑÑ Ð¾Ð·Ð½Ð°Ð¹Ð¾Ð¼Ð¸ÑиÑÑ " -#~ "з пÑоблемами Ñа можливоÑÑÑми, повâÑзаними з ÑнÑеÑнеÑ-пÑблÑкаÑÑÑми.\r\n" -#~ "\r\n" -#~ "СпÑлÑно з нами волонÑеÑи оÑганÑзÑÑÑÑ ÑÑенÑнги Ñа конÑеÑенÑÑÑ, допомагаÑÑÑ " -#~ "в пÑдгоÑÐ¾Ð²Ð»ÐµÐ½Ð½Ñ ÑекÑÑÑв Ð´Ð»Ñ ÑлÑÑ Ð°Ð½Ð½Ñ (Ñак Ð·Ð²Ð°Ð½Ð¸Ñ Ð°ÑдÑо-книг). Ðи " -#~ "пÑдпиÑÑÑмо з волонÑеÑами Ñгоди Ñа надаÑмо Ñм поÑвÑдÑÐµÐ½Ð½Ñ Ð¿Ñо Ñе коли Ñ " -#~ "ÑÐºÑ Ð¿ÑаÑÑ Ð²Ð¸ÐºÐ¾Ð½Ñвав Ð´Ð»Ñ Ð½Ð°Ñого ÑÐ¾Ð½Ð´Ñ Ð²Ð¾Ð»Ð¾Ð½ÑеÑ. ТÑенÑнги, доÑвÑд " -#~ "ÑедагÑÐ²Ð°Ð½Ð½Ñ Ñа ÑеÑÑиÑÑкаÑи, ÑÐºÑ Ñе заÑвÑдÑÑÑÑÑ, можÑÑÑ Ð±ÑÑи ÑÑнними в " -#~ "пÑоÑеÑÑ Ð¿ÑдвиÑÐµÐ½Ð½Ñ ÐºÐ²Ð°Ð»ÑÑÑкаÑÑй Ñ Ð¿ÑоÑеÑÑйнÑй каÑ'ÑÑÑ.</p>\r\n" -#~ "\r\n" -#~ "<h2>Що можна ÑобиÑи?</h2>\r\n" -#~ "\r\n" -#~ "<p>ÐайбÑлÑÑе ÑобоÑи пÑиÑвÑÑÑÑÑÑÑÑ Ð¿ÑдгоÑÐ¾Ð²Ð»ÐµÐ½Ð½Ñ ÑекÑÑÑ Ð´Ð»Ñ Ð¿ÑблÑкаÑÑÑ. Ð " -#~ "ÑекÑÑÑ, Ñкий ми оÑÑимÑÑмо вÑд ÐаÑÑоналÑÐ½Ð¾Ñ Ð±ÑблÑоÑеки ÑÑеба випÑавиÑи " -#~ "оÑÑогÑаÑÑÑÐ½Ñ Ñа ÑнÑÑ Ð¼ÐµÑ Ð°Ð½ÑÑÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸, а поÑÑм додаÑи в ÑекÑÑÑ Ð¿ÑимÑÑки, " -#~ "памâÑÑаÑÑи пÑо Ñе, Ñо наÑа пÑопозиÑÑÑ ÑкеÑована пеÑÑ Ð·Ð° вÑе до ÑÑнÑв, Ð´Ð»Ñ " -#~ "ÑÐºÐ¸Ñ Ð±Ð°Ð³Ð°Ñо ÑлÑв Ñа ÑÑаз звÑÑаÑиме Ð°Ð½Ð°Ñ ÑонÑÑно. ÐавнÑÑÑ Ð¿ÑблÑкаÑÑÑ (вÑе " -#~ "залежиÑÑ ÑÑÑ Ð²Ñд авÑоÑÑÑкого пÑава) пÑддаÑÑÑÑÑ Ð½ÐµÐ¾Ð±Ñ ÑÐ´Ð½Ð¾Ð¼Ñ Ð¼Ð¾Ð²Ð½Ð¾Ð¼Ñ " -#~ "оÑÑÑаÑненнÑ, на пÑиклад Ñодо пÑавопиÑÑ Ñи ÑлекÑÑÑ, пÑи ÑÐ¾Ð¼Ñ Ð¼Ð¸ дбаÑмо пÑо " -#~ "Ñе Ñоб не поÑÑÑÑваÑи аÑÑиÑÑиÑного Ñ Ð°ÑакÑеÑÑ ÑекÑÑÑ. ÐÑÑаннÑм еÑапом Ñ " -#~ "поÑÑк лÑÑеÑаÑÑÑÐ½Ð¸Ñ Ð¼Ð¾ÑивÑв Ñа Ñем, ÑÐºÑ Ð¼Ð°ÑÑÑ Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ñи в Ð³Ð»Ð¸Ð±Ð¸Ð½Ð½Ð¾Ð¼Ñ " -#~ "пÑÐ·Ð½Ð°Ð½Ð½Ñ Ð»ÑÑеÑаÑÑÑи. Ð ÑÑÑÑ ÑÐ¸Ñ Ð¿ÑаÑÑÑ Ð½Ð°Ñ Ð¿ÑдÑÑимÑÑÑÑ Ð²Ð¾Ð»Ð¾Ð½ÑеÑи - " -#~ "вÑиÑÐµÐ»Ñ Ñа ÑÑÑденÑи - ÑÐºÑ ÑаÑÑо допомагаÑÑÑ Ñакож поÑÐ°Ð´Ð¾Ñ Ñа заÑваженнÑми " -#~ "пÑи пÑийнÑÑÑÑ Ð²Ð°Ð¶Ð»Ð¸Ð²Ð¸Ñ ÑÑÑенÑ.</p>\r\n" -#~ "\r\n" -#~ "<h2>Як до Ð½Ð°Ñ Ð·Ð³Ð¾Ð»Ð¾ÑиÑиÑÑ?</h2>\r\n" -#~ "\r\n" -#~ "<p>УÑÑÑ Ð·Ð°ÑÑÐºÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑоÑимо виÑлаÑи лиÑÑа на адÑеÑÑ <a href=\"mail:" -#~ "fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</" -#~ "p>\r\n" -#~ "\r\n" -#~ "<p>ÐапÑоÑÑÑмо Ñакож на <a href=\"http://redakcja.wolnelektury.pl/" -#~ "documents/catalogue/\">ÑÐ°Ð¹Ñ ÑедакÑÑÑ Wolne Lektury</a>, де можна знайÑи " -#~ "ÑÑÑ Ð½ÐµÐ¾Ð±Ñ ÑÐ´Ð½Ñ ÑнÑоÑмаÑÑÑ Ð¿Ñо Ñе, Ñк залÑÑиÑиÑÑ Ñ ÑедакÑÑÐ¹Ð½Ñ ÑобоÑÑ.</p>" -#~ "\r\n" - -#~ msgid "" -#~ "<h2>Kogo szukamy?</h2>\r\n" -#~ "\r\n" -#~ "<h3>Redaktorów technicznych (skÅad tekstu) </h3>\r\n" -#~ " <p>SkÅad jest pierwszym etapem pracy nad tekstem. Za pomocÄ znaczników " -#~ "jÄzyka WL-XML nadajemy tekstowi poÅ¼Ä danÄ formÄ i umożliwiamy wyÅwietlenie " -#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na <a " -#~ "href=\"http://redakcja.wolnelektury.pl\">Platformie Redakcyjnej</a>, " -#~ "która pozwala na zautomatyzowanie dużej czÄÅci pracy. </p>\r\n" -#~ "\r\n" -#~ " <p><b>Kto może zostaÄ redaktorem technicznym?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Każdy â po krótkim szkoleniu.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>WiÄcej informacji o redakcji technicznej znajdziecie na <a href=" -#~ "\"http://redakcja.wolnelektury.pl/documents/catalogue/\">stronie redakcji " -#~ "Wolnych Lektur</a> </p>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Redaktorów literackich (merytorycznych) </h3>\r\n" -#~ " <p>Redakcja literacka obejmuje korektÄ, uwspóÅczeÅnienia oraz dodawanie " -#~ "przypisów i motywów literackich. To unikalna możliwoÅÄ zdobycia " -#~ "doÅwiadczenia w cyfrowej edycji tekstów. </p>\r\n" -#~ "\r\n" -#~ " <p><b>Kto może zostaÄ redaktorem literackim? </b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Osoby, które majÄ doÅwiadczenie w redakcji tekstów literackich,</li>" -#~ "\r\n" -#~ "<li>Studenci i absolwenci studiów humanistycznych, którzy chcÄ takie " -#~ "doÅwiadczenie zdobyÄ. </li>\r\n" -#~ "</ul>\r\n" -#~ "<p>WiÄcej informacji o redakcji merytorycznej znajdziecie na <a href=" -#~ "\"http://redakcja.wolnelektury.pl/documents/catalogue/\">stronie redakcji " -#~ "Wolnych Lektur</a> </p>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>TÅumaczy</h3>\r\n" -#~ " <p>Strona WolneLektury.pl jest dostÄpna w siedmiu jÄzykach obcych â " -#~ "angielskim, francuskim, niemieckim, hiszpaÅskim, litewskim, rosyjskim " -#~ "oraz ukraiÅskim. Użytkownikami biblioteki jest ponad 200 tysiÄcy osób z " -#~ "zagranicy, a już niedÅugo nasze zbiory obejmÄ również dzieÅa w jÄzykach " -#~ "obcych. Dlatego potrzebujemy na bieÅ¼Ä co tÅumaczyÄ nowe informacje " -#~ "pojawiajÄ ce siÄ na stronie. </p>\r\n" -#~ " <p><b>Kto może pomóc w tÅumaczeniach? </b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Każdy, kto dobrze zna co najmniej jeden z powyższych jÄzyków. </li>" -#~ "\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Programistów</h3>\r\n" -#~ " <p>Poza samÄ stronÄ Wolnych Lektur tworzymy również: </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>narzÄdzia redakcyjne,</li>\r\n" -#~ "<li>konwertery do różnych formatów e-booków, </li>\r\n" -#~ "<li>aplikacje mobile uÅatwiajÄ ce dostÄp do naszych zasobów.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " -#~ "jQuery, LaTeX, Java.\r\n" -#~ "Tworzone przez nas oprogramowanie udostÄpniamy na <a href=\"https://" -#~ "github.com/fnp/\">wolnej licencji</a>. </p>\r\n" -#~ " <p><b>Kto może pomóc w pracach programistycznych?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Każdy, kto umie i chciaÅby zdobyÄ punkty do karmy za udziaÅ w " -#~ "otwartym projekcie programistycznym. ;)</li>\r\n" -#~ "</ul>\r\n" -#~ msgstr "" -#~ "<h2>ÐайбÑлÑÑ Ð·Ð°ÑлÑÐ¶ÐµÐ½Ñ Ð²Ð¾Ð»Ð¾Ð½ÑеÑи</h2>\r\n" -#~ "\r\n" -#~ "\t<h3>Agatapaszkowska (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 15 беÑÐµÐ·Ð½Ñ 2008)</h3>\r\n" -#~ "\r\n" -#~ " <p>мÑж ÑнÑими, опÑаÑÑвала «РпÑÑÑÐµÐ»Ñ Ñ Ð² джÑнглÑÑ Â» СенкевиÑа; " -#~ "дивиÑÑ Ñакож на наÑÐ¾Ð¼Ñ ÑайÑÑ Â«Ð²ÐºÐ»Ð°Ð´ коÑиÑÑÑваÑа»: <a href=\"http://wiki." -#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki." -#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\t<h3>AgnieszkaKappa (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 16 беÑÐµÐ·Ð½Ñ 2008)</h3>\r\n" -#~ "\r\n" -#~ " <p>мÑж ÑнÑими, бÑала ÑÑаÑÑÑ Ð² ÑвоÑÐµÐ½Ð½Ñ ÑпиÑÐºÑ Ñа опиÑÑ " -#~ "викоÑиÑÑÐ°Ð½Ð½Ñ Ð»ÑÑеÑаÑÑÑÐ½Ð¸Ñ Ð¼Ð¾ÑивÑв Ñа Ñем; опÑаÑÑвала ÑекÑÑи СенкевиÑа " -#~ "(Latarnik, Янко ÐÑзиканÑ, Quo vadis); дивиÑÑ Ñакож на наÑÐ¾Ð¼Ñ ÑайÑÑ Â«Ð²ÐºÐ»Ð°Ð´ " -#~ "коÑиÑÑÑваÑа»: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?" -#~ "title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa" -#~ "\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk" -#~ "%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ " <h3>Anerys (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 5 Ð»Ð¸Ð¿Ð½Ñ 2007)</h3>\r\n" -#~ "\r\n" -#~ " <p> мÑж ÑнÑими, бÑала ÑÑаÑÑÑ Ð² ÑвоÑÐµÐ½Ð½Ñ ÑпиÑÐºÑ Ð»ÑÑеÑаÑÑÑÐ½Ð¸Ñ " -#~ "моÑивÑв Ñа Ñем, диÑкÑÑÑÑ Ð½Ð° ÑÐµÐ¼Ñ Ð»ÑÑеÑаÑÑÑÐ½Ð¸Ñ Ð¶Ð°Ð½ÑÑв, опÑаÑÑвала гÑмн " -#~ "ÐогоÑодиÑÑ, «ФÑаÑки» Ñа «ТÑени» ÐÐ¾Ñ Ð°Ð½Ð¾Ð²ÑÑкого; вÑÑÑÑ Ð¡Ð»Ð¾Ð²Ð°ÑÑкого (Grób " -#~ "Agamemnona), «ТаÑÑÑÑа» ÐолÑÑÑа, Ñа поезÑÑ ÐаÑпÑовÑÑа (в ÑÑÐ¾Ð¼Ñ ÑиÑÐ»Ñ Ð³Ñмн " -#~ "âDies Iraeâ); дивиÑÑ Ñакож на наÑÐ¾Ð¼Ñ ÑайÑÑ Â«Ð²ÐºÐ»Ð°Ð´ коÑиÑÑÑваÑа»: <a href=" -#~ "\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://" -#~ "wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\t<h3>EmiliaZdankiewicz (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 17 беÑÐµÐ·Ð½Ñ 2008)</h3>\r\n" -#~ "\r\n" -#~ " <p>мÑж ÑнÑими, лÑÑеÑаÑÑÑÐ½Ñ Ð¼Ð¾Ñиви â диÑкÑÑÑÑ Ñа опиÑ, СловаÑÑкий, " -#~ "ÐоÑдÑан; ÐонопнÑÑÑка, Nasza szkapa; ÐÑÑкевиÑ, ÐзÑди Ñ. III; дивиÑÑ Ñакож " -#~ "на наÑÐ¾Ð¼Ñ ÑайÑÑ Â«Ð²ÐºÐ»Ð°Ð´ коÑиÑÑÑваÑа»: <a href=\"http://wiki." -#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz\">http://wiki." -#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz</a></p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\t<h3>Ewa_Serafin (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 15 беÑÐµÐ·Ð½Ñ 2008)</h3>\r\n" -#~ "\r\n" -#~ " <p>мÑж ÑнÑими, бÑала ÑÑаÑÑÑ Ð² ÑвоÑÐµÐ½Ð½Ñ ÑпиÑÐºÑ Ñа опиÑÑ " -#~ "викоÑиÑÑÐ°Ð½Ð½Ñ Ð»ÑÑеÑаÑÑÑÐ½Ð¸Ñ Ð¼Ð¾ÑивÑв Ñа Ñем, опÑаÑÑвала поезÑÑ ÐаÑпÑовÑÑа " -#~ "(âZ wichrów i halâ, âNad przepaÅciamiâ, âW ciemnoÅci schodzi moja " -#~ "duszaâ), а Ñакож âNad Niemnemâ ÐлÑзи ÐжеÑко; дивиÑÑ Ñакож на наÑÐ¾Ð¼Ñ ÑайÑÑ " -#~ "«вклад коÑиÑÑÑваÑа»: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:" -#~ "Wk%C5%82ad/Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk" -#~ "%C5%82ad/Ewa_Serafi</a>n</p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ " \t<h3>Hanna_Golab (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 15 беÑÐµÐ·Ð½Ñ 2008)</h3>\r\n" -#~ "\r\n" -#~ " <p>опÑаÑÑвала âЦаÑÑ ÐдÑпаâ СоÑокла Ñа вÑÑÑ âDusioÅekâ ÐеÑÑмÑна; " -#~ "дивиÑÑ Ñакож на наÑÐ¾Ð¼Ñ ÑайÑÑ Â«Ð²ÐºÐ»Ð°Ð´ коÑиÑÑÑваÑа»: <a href=\"http://wiki." -#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\">http://wiki." -#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\t<h3>Ingene (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 16 Ð»Ð¸Ð¿Ð½Ñ 2008)</h3>\r\n" -#~ "\r\n" -#~ " <p> мÑж ÑнÑими, опÑаÑÑвала оповÑÐ´Ð°Ð½Ð½Ñ âSiÅaczkaâ ÐеÑомÑÑкого, " -#~ "âQuo vadisâ СенкевиÑа Ñа âТÑениâ ÐÐ¾Ñ Ð°Ð½Ð¾Ð²ÑÑкого; дивиÑÑ Ñакож на наÑÐ¾Ð¼Ñ " -#~ "ÑайÑÑ Â«Ð²ÐºÐ»Ð°Ð´ коÑиÑÑÑваÑа»: <a href=\"http://wiki.wolnepodreczniki.pl/" -#~ "Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk" -#~ "%C5%82ad/Ingene</a></p>\r\n" -#~ " \r\n" -#~ "\t<h3>Jmyszkowska (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 26 беÑÐµÐ·Ð½Ñ 2008)</h3>\r\n" -#~ "\r\n" -#~ " <p>мÑж ÑнÑими, опÑаÑÑвала âÐÑÑÑаâ ÐайÑона Ñа âQuo vadisâ " -#~ "СенкевиÑа; дивиÑÑ Ñакож на наÑÐ¾Ð¼Ñ ÑайÑÑ Â«Ð²ÐºÐ»Ð°Ð´ коÑиÑÑÑваÑа»: <a href=" -#~ "\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska" -#~ "\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></" -#~ "p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ " <h3>Marysiabailey (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 1 жовÑÐ½Ñ 2007)</h3>\r\n" -#~ "\r\n" -#~ " <p>мÑж ÑнÑими, бÑала ÑÑаÑÑÑ Ñ ÑвоÑÐµÐ½Ð½Ñ ÑпиÑÐºÑ Ð»ÑÑеÑаÑÑÑÐ½Ð¸Ñ Ñем Ñа " -#~ "опиÑÑ ÑÑ Ð·Ð°ÑÑоÑÑваннÑ; опÑаÑÑвала ÑвоÑи: âСелÑниâ РеймонÑа , âLalkaâ " -#~ "ÐÑÑÑа, âNie-Boska komediaâ ÐÑаÑÑнÑÑкого, âBajkiâ Ñа âSatyryâ ÐÑаÑÑÑÑкого, " -#~ "âÐнÑигонаâ СоÑокла, а Ñакож ÑвоÑи ÐÐ¾Ñ Ð°Ð½Ð¾Ð²ÑÑкого, ÐоÑÑÑина, ÐÑÑкевиÑа, " -#~ "ÒеÑе, Ðппмана, ÐаÑпÑовÑÑа; дивиÑÑ Ñакож на наÑÐ¾Ð¼Ñ ÑайÑÑ Â«Ð²ÐºÐ»Ð°Ð´ " -#~ "коÑиÑÑÑваÑа»: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?" -#~ "title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey" -#~ "\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk" -#~ "%C5%82ad&limit=500&target=Marysiabailey</a>; кÑÑм Ñого, " -#~ "пÑдгоÑÑвала Ñ Ð¿Ñовела ÑÑенÑнг Ð´Ð»Ñ Ð²Ð¾Ð»Ð¾Ð½ÑеÑÑв 15 беÑÐµÐ·Ð½Ñ 2008; заÑмалаÑÑ " -#~ "Ñакод коÑекÑоÑ, а на даний Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¿ÑаÑÑÑ Ð½Ð°Ð´ аÑдÑо-книгами.</p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ " <h3>Olga_Wojtczak (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 21 жовÑÐ½Ñ 2008)</h3>\r\n" -#~ "\r\n" -#~ " <p> мÑж ÑнÑими, опÑаÑÑвала Ñомани СенкевиÑа (ТÑилогÑÑ), РеймонÑа, " -#~ "ÐеÑомÑÑкого, дÑами ШекÑпÑÑа; дивиÑÑ Ñакож на наÑÐ¾Ð¼Ñ ÑайÑÑ Â«Ð²ÐºÐ»Ð°Ð´ " -#~ "коÑиÑÑÑваÑа»: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk" -#~ "%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk" -#~ "%C5%82ad/Olga_Wojtczak</a></p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ " <h3>Renataml (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 30 ÑеÑÐ²Ð½Ñ 2007)</h3>\r\n" -#~ "\r\n" -#~ " <p>бÑала ÑÑаÑÑÑ Ð² диÑкÑÑÑÑ Ð½Ð° ÑÐµÐ¼Ñ ÑпиÑÐºÑ Ð¼Ð¾ÑивÑв; Ñк доÑвÑдÑена " -#~ "вÑиÑелÑка, надавала пÑдÑÑÐ¸Ð¼ÐºÑ Ñа поÑади, ÑедагÑвала Ñоман «Lalka» ÐÑÑÑа, " -#~ "дÑÐ°Ð¼Ñ Â«Ðалладина» СловаÑÑкого, оповÑÐ´Ð°Ð½Ð½Ñ Â«SiÅaczka» ÐеÑомÑÑкого.\r\n" -#~ "\r\n" -#~ " <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/" -#~ "Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</" -#~ "a></p>\r\n" - -#~ msgid "O projekcie" -#~ msgstr "ÐÑо пÑоекÑ" - -#~ msgid "" -#~ "{% load reporting_stats %}\r\n" -#~ "\r\n" -#~ "<p><strong>Wolne Lektury to biblioteka internetowa czynna 24 godziny na " -#~ "dobÄ, 365 dni w roku i caÅkowicie darmowa</strong>. W jej zbiorach " -#~ "znajduje siÄ <strong>{% count_books %}</strong> utworów, w tym wiele " -#~ "lektur szkolnych zalecanych do użytku przez Ministerstwo Edukacji " -#~ "Narodowej, które trafiÅy już do domeny publicznej. Wszystkie dzieÅa sÄ " -#~ "odpowiednio opracowane - opatrzone przypisami, motywami i udostÄpnione w " -#~ "kilku formatach - <strong>HTML </strong>, <strong>TXT </strong>, " -#~ "<strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>. W " -#~ "bibliotece znajduje siÄ również kilkaset audiobooków, czytanych przez " -#~ "takich aktorów jak: Danuta Stenka, Jan Peszek czy Andrzej Chyra. Można " -#~ "ich sÅuchaÄ w formatach <strong>MP3</strong> i <strong>Ogg Vorbis</" -#~ "strong>. Audiobooki sÄ również dostÄpne w formacie <strong>DAISY </" -#~ "strong>dostosowanym do potrzeb osób sÅabowidzÄ cych, niewidomych oraz osób " -#~ "majÄ cych trudnoÅci z czytaniem.</p>\r\n" -#~ "\r\n" -#~ "<p>Biblioteka Wolne Lektury dostÄpna jest za poÅrednictwem aplikacji " -#~ "mobilnych â na system <a href=\"https://market.android.com/details?id=pl." -#~ "org.nowoczesnapolska.wlmobi\"> Android</a> oraz na system iOS. </p>\r\n" -#~ "\r\n" -#~ "<p><strong>Wszystkie utwory zamieszczone w bibliotece Wolne Lektury można " -#~ "zgodnie z prawem bezpÅatnie przeglÄ daÄ, sÅuchaÄ, ÅciÄ gaÄ na swój " -#~ "komputer, a także udostÄpniaÄ innym i cytowaÄ.</strong> </p>\r\n" -#~ msgstr "" -#~ "{% load reporting_stats %}\r\n" -#~ "\r\n" -#~ "<p><strong>Wolne Lektury Ñе елекÑÑонна бÑблÑоÑека вÑдкÑиÑа 24 години на " -#~ "добÑ, 365 днÑв в ÑоÑÑ Ñ Ð¿Ð¾Ð²Ð½ÑÑÑÑ Ð±ÐµÐ·ÐºÐ¾ÑÑовна</strong>. Ð ÑÑ ÐºÐ¾Ð»ÐµÐºÑÑÑ " -#~ "Ð·Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑÑ <strong>{% count_books %}</strong> ÑвоÑÑв, в ÑÐ¾Ð¼Ñ ÑиÑÐ»Ñ " -#~ "багаÑо ÑкÑлÑÐ½Ð¾Ñ Ð»ÑÑеÑаÑÑÑи, ÑÐµÐºÐ¾Ð¼ÐµÐ½Ð´Ð¾Ð²Ð°Ð½Ð¾Ñ ÐÑнÑÑÑеÑÑÑвом наÑÑоналÑÐ½Ð¾Ñ " -#~ "оÑвÑÑи, Ñка ÑвÑйÑла вже до ÑÑÑпÑлÑного надбаннÑ. УÑÑ ÑвоÑи ÑÑаÑанно " -#~ "опÑаÑÑÐ¾Ð²Ð°Ð½Ñ - до Ð½Ð¸Ñ Ð´Ð¾Ð´Ð°ÑÑÑÑÑ Ð¿ÑимÑÑки, моÑиви Ñ Ð½Ð°Ð´Ð°ÑÑÑÑÑ Ð´Ð¾ÑÑÑп в " -#~ "декÑлÑÐºÐ¾Ñ ÑоÑмаÑÐ°Ñ - <strong>HTML </strong>, <strong>TXT </strong>, " -#~ "<strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>. У " -#~ "бÑблÑоÑеÑÑ Ð¼Ð¾Ð¶Ð½Ð° Ñакож знайÑи кÑлÑка ÑоÑÐµÐ½Ñ Ð°ÑдÑокниг Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÑÐ°ÐºÐ¸Ñ " -#~ "авÑоÑÑв Ñк: ÐанÑÑа СÑенка, Ян ÐеÑек Ñи Ðнджей ХиÑа. Ðожна ÑÑ ÑлÑÑ Ð°Ñи Ñ " -#~ "ÑоÑмаÑÐ°Ñ <strong>MP3</strong> i <strong>Ogg Vorbis</strong>. ÐÑдÑокниги " -#~ "доÑÑÑÐ¿Ð½Ñ Ñакож Ñ ÑоÑмаÑÑ <strong>DAISY </strong>, Ñкий пÑиÑÑоÑований Ð´Ð»Ñ " -#~ "ÑлабозоÑÐ¸Ñ Ñа ÑлÑÐ¿Ð¸Ñ Ð¾ÑÑб, а Ñакож Ð´Ð»Ñ ÑÐ¸Ñ , Ñ Ñо Ð¼Ð°Ñ ÑÑÑдноÑÑ Ð· ÑиÑаннÑм.</" -#~ "p>\r\n" -#~ "\r\n" -#~ "<p>ÐÑблÑоÑека Wolne Lektury Ñакож доÑÑÑпна за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð¼Ð¾Ð±ÑлÑÐ½Ð¸Ñ " -#~ "аплÑкаÑÑй â в ÑиÑÑÐµÐ¼Ñ <a href=\"https://market.android.com/details?id=pl." -#~ "org.nowoczesnapolska.wlmobi\">Android</a>, а Ñакож в ÑиÑÑÐµÐ¼Ñ iOS.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>УÑÑ ÑвоÑи ÑозмÑÑÐµÐ½Ñ Ñ Ð±ÑблÑоÑеÑÑ Wolne Lektury можна легалÑно " -#~ "пеÑеглÑдаÑи, ÑлÑÑ Ð°Ñи, заванÑажÑваÑи на влаÑний компâÑÑеÑ, надаваÑи доÑÑÑп " -#~ "до Ð½Ð¸Ñ ÑнÑим Ñа ÑиÑÑваÑи.</strong></p>\r\n" - -#~ msgid "" -#~ "<p>Wolne Lektury to projekt fundacji Nowoczesna Polska realizowany pro " -#~ "publico bono, we wspóÅpracy z BibliotekÄ NarodowÄ , BibliotekÄ ÅlaskÄ oraz " -#~ "BibliotekÄ ElblÄ skÄ pod patronatem Ministerstwa Edukacji Narodowej, " -#~ "Ministerstwa Kultury i Dziedzictwa Narodowego oraz Stowarzyszenia Pisarzy " -#~ "Polskich. W Komitecie Honorowym Wolnych Lektur zasiadajÄ : prof. Maria " -#~ "Janion, prof. Grażyna Borkowska, prof. PrzemysÅaw CzapliÅski, prof. " -#~ "MieczysÅaw DÄ browski, prof. Ewa Kraskowska, prof. MaÅgorzata CzermiÅska, " -#~ "prof. Jerzy JarzÄbski i prof. Piotr ÅliwiÅski.</p>\r\n" -#~ "\r\n" -#~ "<p>WiÄkszoÅÄ utworów w bibliotece nie jest chroniona prawem autorskim i " -#~ "znajduje siÄ w domenie publicznej, co oznacza że można je swobodnie " -#~ "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 <a " -#~ "href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie " -#~ "autorstwa-Na tych samych warunkach 3.0</a>. Publikujemy również kilka " -#~ "utworów, które autorzy lub spadkobiercy praw udostÄpnili na wolnej " -#~ "licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl" -#~ "\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>.</p>\r\n" -#~ "\r\n" -#~ "Kontakt: wolnelektury@nowoczesnapolska.org.pl\r\n" -#~ msgstr "" -#~ "<p>Wolne Lektury Ñе пÑÐ¾ÐµÐºÑ Ð¤Ð¾Ð½Ð´Ñ Ð¡ÑÑаÑна ÐолÑÑа (Fundacja Nowoczesna " -#~ "Polska), ÑеалÑзований з некомеÑÑÑÐ¹Ð½Ð¾Ñ Ð¼ÐµÑоÑ, Ñ ÑпÑвпÑаÑÑ Ð· ÐаÑÑоналÑÐ½Ð¾Ñ " -#~ "бÑблÑоÑекоÑ, СÑлезÑÐºÐ¾Ñ Ð±ÑблÑоÑÐµÐºÐ¾Ñ Ñа ÐлÑблонзÑÐºÐ¾Ñ Ð±ÑблÑоÑÐµÐºÐ¾Ñ Ð¿Ñд " -#~ "паÑÑонаÑом ÐÑнÑÑÑеÑÑÑва наÑÑоналÑÐ½Ð¾Ñ Ð¾ÑвÑÑи, ÐÑнÑÑÑеÑÑÑва кÑлÑÑÑÑи Ñа " -#~ "наÑÑоналÑÐ½Ð¾Ñ ÑпадÑини, а Ñакож СпÑлки полÑÑÑÐºÐ¸Ñ Ð¿Ð¸ÑÑменникÑв. Ð ÐоÑеÑÐ½Ð¾Ð¼Ñ " -#~ "комÑÑеÑÑ Ð¿ÑоекÑÑ Wolne Lektury заÑÑдаÑÑÑ Ð¿ÑоÑ. ÐаÑÑÑ Ð¯Ð½Ñон, пÑоÑ. ÒÑажина " -#~ "ÐоÑковÑÑка, пÑоÑ. ÐÑемиÑлав ЧаплÑнÑÑкий, пÑоÑ. ÐÑÑиÑлав ÐомбÑовÑÑкий, " -#~ "пÑоÑ. Ðва ÐÑаÑковÑÑка, пÑоÑ. ÐалÒожаÑа ЧеÑмÑнÑÑка, пÑоÑ. Ðжи ЯжембÑÑкий " -#~ "Ñа пÑоÑ. ÐÑоÑÑ Ð¡Ð»ÑвÑнÑÑкий.</p>\r\n" -#~ "\r\n" -#~ "<p>ÐÑлÑÑÑÑÑÑ ÑвоÑÑв Ñ Ð±ÑблÑоÑеÑÑ Ð½Ðµ Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом Ñ " -#~ "ÑвлÑÑÑÑÑÑ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного надбаннÑ, ÑÐ¾Ð¼Ñ ÑÑ Ð¼Ð¾Ð¶Ð½Ð° вÑлÑно пÑблÑкÑваÑи " -#~ "Ñа ÑозповÑÑджÑваÑи. ЯкÑо ÑекÑÑи ÑÑпÑоводжÑÑÑÑÑÑ Ð´Ð¾Ð´Ð°Ñковими маÑеÑÑалами " -#~ "(пÑимÑÑками, лÑÑеÑаÑÑÑними моÑивами ÑоÑо), ÑÐºÑ Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким " -#~ "пÑавом, доÑÑÑп до ÑÐ¸Ñ Ð´Ð¾Ð´Ð°ÑÐºÐ¾Ð²Ð¸Ñ Ð¼Ð°ÑеÑÑалÑв надаÑÑÑÑÑ Ð½Ð° ÑÐ¼Ð¾Ð²Ð°Ñ Ð»ÑÑензÑÑ " -#~ "<a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Ðз " -#~ "зазнаÑеннÑм ÑÐ¼ÐµÐ½Ñ Ð°Ð²ÑоÑа â Ðа ÑÐ¸Ñ Ð¶Ðµ ÑÐ¼Ð¾Ð²Ð°Ñ 3.0</a>. Також ми пÑблÑкÑÑмо " -#~ "декÑлÑка ÑвоÑÑв, до ÑÐºÐ¸Ñ Ð°Ð²ÑоÑи або ÑпадкоÑмÑÑ Ð¿Ñав надали доÑÑÑп на " -#~ "пÑдÑÑÐ°Ð²Ñ Ð²ÑлÑÐ½Ð¾Ñ Ð»ÑÑензÑÑ <a href=\"http://creativecommons.org/licenses/" -#~ "by-sa/3.0/deed.pl\">Ðз зазнаÑеннÑм ÑÐ¼ÐµÐ½Ñ Ð°Ð²ÑоÑа â Ðа ÑÐ¸Ñ Ð¶Ðµ ÑÐ¼Ð¾Ð²Ð°Ñ 3.0</" -#~ "a>.</p>\r\n" -#~ "\r\n" -#~ "ÐонÑакÑ: wolnelektury@nowoczesnapolska.org.pl\r\n" - -#~ msgid "ZespóÅ" -#~ msgstr "Ðоманда" - -#~ msgid "" -#~ "<p><strong>Magdalena Biernat</strong> â koordynatorka projektu, dyrektor " -#~ "zarzÄ dzajÄ ca fundacji Nowoczesna Polska. Socjolożka, absolwentka " -#~ "Uniwersytetu Warszawskiego i LâUniversité libre de Bruxelles. " -#~ "Specjalistka od projektów internetowych. KoordynowaÅa projekty Kandydaci " -#~ "2009 i Mam Prawo WiedzieÄ w Stowarzyszeniu 61. PracowaÅa przy wielu " -#~ "badaniach spoÅecznych realizowanych przez organizacje pozarzÄ dowe i firmy " -#~ "badawcze. </p>\r\n" -#~ "\r\n" -#~ "<p><strong>RadosÅaw Czajka</strong> â gÅówny programista, studiowaÅ " -#~ "informatykÄ na MIMUW. BiegÅy w jÄzykach programowania, znaczników: " -#~ "Python, XHTML, Javascript, CSS, LaTeX, SQL. Posiada doÅwiadczenie z " -#~ "frameworkami Django, Jquery, doÅwiadczenie w przeksztaÅceniach dokumentów " -#~ "XML (XSLT), w produkcji ebooków w formatach PDF i EPUB oraz w tworzeniu " -#~ "aplikacji mobilnych na system Android i iOS.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Marcin Koziej </strong>â programista. Absolwent Politechniki " -#~ "Warszawskiej i doktorant w Instytucie Filozofii Uniwersytetu " -#~ "Warszawskiego. DziaÅacz Mokotowskiej Kooperatywy Spożywczej. Podróżnik, " -#~ "rowerzysta i biesiadnik. Homo ludens.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Marta NiedziaÅkowska</strong> â redaktorka techniczna, " -#~ "absolwentka bibliotekoznawstwa i informacji naukowej UW. Studentka " -#~ "studiów magisterskich Public Policy and Administration na Collegium " -#~ "Civitas. </p>\r\n" -#~ "\r\n" -#~ msgstr "" -#~ "<p><strong>ÐаÒдалена ÐâÑÑнаÑ</strong> â кооÑдинаÑÐ¾Ñ Ð¿ÑоекÑÑ, кеÑÑÑÑий " -#~ "диÑекÑÐ¾Ñ Ð¤Ð¾Ð½Ð´Ñ Ð¡ÑÑаÑна ÐолÑÑа (Fundacja Nowoczesna Polska). СоÑÑолог, " -#~ "випÑÑкниÑÑ ÐаÑÑавÑÑкого ÑнÑвеÑÑиÑеÑÑ Ñа ÐÑÑÑÑелÑÑÑкого вÑлÑного " -#~ "ÑнÑвеÑÑиÑеÑÑ. СпеÑÑалÑÑÑ ÑнÑеÑнеÑÐ½Ð¸Ñ Ð¿ÑоекÑÑв. ÐеÑÑвала пÑоекÑами " -#~ "«ÐандидаÑи 2009» Ñа «Я Ð¼Ð°Ñ Ð¿Ñаво знаÑи» Ñ ÐÑоÑÑаÑÑÑ 61. ÐÑаÑÑвала Ñ " -#~ "багаÑÑÐ¾Ñ ÑоÑÑалÑÐ½Ð¸Ñ Ð´Ð¾ÑлÑдженнÑÑ , ÑÐºÑ Ð¿ÑоводилиÑÑ Ð³ÑомадÑÑкими " -#~ "оÑганÑзаÑÑÑми Ñа доÑлÑдниÑÑкими ÑÑÑмами. </p>\r\n" -#~ "\r\n" -#~ "<p><strong>РадоÑлав Чайка</strong> â головний пÑогÑамÑÑÑ, вивÑав " -#~ "ÑнÑоÑмаÑÐ¸ÐºÑ Ð½Ð° ФакÑлÑÑеÑÑ ÐаÑемаÑики, ÐнÑоÑмаÑики Ñа ÐÐµÑ Ð°Ð½Ñки " -#~ "ÐаÑÑавÑÑкого УнÑвеÑÑиÑеÑÑ. ÐолодÑÑ Ð½Ð°ÑÑÑпними мовами пÑогÑамÑÐ²Ð°Ð½Ð½Ñ Ñа " -#~ "ÑегÑв: Python, XHTML, Javascript, CSS, LaTeX, SQL. ÐÐ°Ñ Ð´Ð¾ÑвÑд Ñ " -#~ "ÑÑеймвоÑÐºÐ°Ñ Django, Jquery, а Ñакож Ñ ÑÑанÑÑоÑмÑÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ÐºÑменÑÑв XML " -#~ "(XSLT), Ñ ÑвоÑÐµÐ½Ð½Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ð¸Ñ ÐºÐ½Ð¸Ð³ Ñ ÑоÑмаÑÐ°Ñ PDF Ñа EPUB Ñ Ð¼Ð¾Ð±ÑлÑÐ½Ð¸Ñ " -#~ "аплÑкаÑÑй на ÑиÑÑеми Android Ñа iOS.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>ÐаÑÑÑн ÐозÑй </strong>â пÑогÑамÑÑÑ. ÐипÑÑкник ÐаÑÑавÑÑкого " -#~ "ÐолÑÑÐµÑ Ð½ÑÑного УнÑвеÑÑиÑеÑÑ Ñа аÑпÑÑÐ°Ð½Ñ Ð² ÐнÑÑиÑÑÑÑ Ð¤ÑлоÑоÑÑÑ " -#~ "ÐаÑÑавÑÑкого УнÑвеÑÑиÑеÑÑ. ÐÑÑÑ ÐокоÑовÑÑкого ÐÑодоволÑÑого ÐоопеÑаÑивÑ. " -#~ "ÐандÑÑвник, велоÑипедиÑÑ, лÑбиÑÐµÐ»Ñ ÑÑÑлÑÐºÐ¸Ñ Ð±Ð°Ð½ÐºÐµÑÑв. Homo ludens.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>ÐаÑÑа ÐÑдзÑлковÑÑка</strong> â ÑÐµÑ Ð½ÑÑний ÑедакÑоÑ, випÑÑкниÑÑ " -#~ "бÑблÑоÑекознавÑÑва Ñа наÑÐºÐ¾Ð²Ð¾Ñ ÑнÑоÑмаÑÑÑ ÐаÑÑавÑÑкого ÑнÑвеÑÑиÑеÑÑ. " -#~ "СÑÑденÑка магÑÑÑÑаÑÑÑи на ÑпеÑÑалÑноÑÑÑ Public Policy and Administration " -#~ "Ñ Collegium Civitas. </p>\r\n" -#~ "\r\n" - -#~ msgid "" -#~ "<p><strong>Dorota A. Kowalska</strong> â redaktorka literacka, " -#~ "jÄzykoznawca, polonistka i slawistka, doktor nauk humanistycznych, " -#~ "adiunkt w Pracowni Polszczyzny Kresowej IJP PAN, gdzie zajmuje siÄ " -#~ "historiÄ i wspóÅczesnoÅciÄ jÄzyka polskiego na Ukrainie. Hobbystycznie " -#~ "Åpiewa archaiczne pieÅni ukraiÅskie i rosyjskie, cyklistka.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Aleksandra SekuÅa</strong> â redaktorka literacka, historyczka " -#~ "literatury, doktor nauk humanistycznych, absolwentka WydziaÅu Polonistyki " -#~ "Uniwersytetu Warszawskiego i SzkoÅy Nauk SpoÅecznych przy IFiS PAN. " -#~ "Zawodowo i naukowo zajmuje siÄ polskim romantyzmem, historiÄ idei i " -#~ "teoriÄ kultury. </p>\r\n" -#~ "\r\n" -#~ "<p><strong>PaweÅ KozioÅ </strong>â redaktor literacki. Ur. 1979, doktor " -#~ "nauk humanistycznych specjalizujÄ cy siÄ w literaturze dawnej, absolwent " -#~ "WydziaÅu Polonistyki Uniwersytetu Warszawskiego oraz Dulwich College w " -#~ "Londynie. Poeta, krytyk literacki, stypendysta Ministerstwa Kultury i " -#~ "Dziedzictwa Narodowego (2010). </p>\r\n" -#~ "\r\n" -#~ "<p><strong>Paulina ChoromaÅska</strong> â redaktorka techniczna, " -#~ "studentka II roku studiów magisterskich w Instytucie Informacji Naukowej " -#~ "i Studiów Bibliologicznych UW. Pracuje również w Pracowni Dokumentacji " -#~ "Teatru w Instytucie Teatralnym im. Z. Raszewskiego w Warszawie.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>Aneta Rawska</strong> - redaktorka techniczna, studentka II " -#~ "roku studiów magisterskich w Instytucie Informacji Naukowej i Studiów " -#~ "Bibliologicznych UW, miÅoÅniczka wypieków i dobrej kuchni. Od 2009 roku " -#~ "prowadzi serwis koÅa PZW nr 21 w WoÅominie.</p>\r\n" -#~ msgstr "" -#~ "<p><strong>ÐоÑоÑа Ð. ÐовалÑÑÑка</strong> â лÑÑеÑаÑÑÑний ÑедакÑоÑ, " -#~ "мовознавеÑÑ, полÑÑÑкий ÑÑлолог Ñа ÑлавÑÑÑ, ÐºÐ°Ð½Ð´Ð¸Ð´Ð°Ñ Ð³ÑманÑÑаÑÐ½Ð¸Ñ Ð½Ð°Ñк, " -#~ "ад'ÑÐ½ÐºÑ Ñ ÐÑддÑÐ»Ñ Ð¿Ð¾Ð»ÑÑÑÐºÐ¾Ñ Ð¼Ð¾Ð²Ð¸ ÐÑеÑÑв в ÐнÑÑиÑÑÑÑ Ð¿Ð¾Ð»ÑÑÑÐºÐ¾Ñ Ð¼Ð¾Ð²Ð¸ в " -#~ "ÐолÑÑÑкÑй ÐкадемÑÑ ÐаÑк, де займаÑÑÑÑÑ ÑÑÑоÑÑÑÑ Ñа ÑÑÑаÑнÑÑÑÑ Ð¿Ð¾Ð»ÑÑÑÐºÐ¾Ñ " -#~ "мови в УкÑаÑнÑ. ÐÑ Ñ Ð¾Ð±Ñ - ÑпÑваÑи аÑÑ Ð°ÑÑÐ½Ñ ÑкÑаÑнÑÑÐºÑ Ñа ÑоÑÑйÑÑÐºÑ Ð¿ÑÑнÑ; " -#~ "велоÑипедиÑÑка.</p>\r\n" -#~ "\r\n" -#~ "<p><strong>ÐлекÑандÑа СекÑла</strong> â лÑÑеÑаÑÑÑний ÑедакÑоÑ, ÑÑÑоÑик " -#~ "лÑÑеÑаÑÑÑи, ÐºÐ°Ð½Ð´Ð¸Ð´Ð°Ñ Ð³ÑманÑÑаÑÐ½Ð¸Ñ Ð½Ð°Ñк, випÑÑкниÑÑ Ð¤Ð°ÐºÑлÑÑеÑÑ Ð¿Ð¾Ð»ÑÑÑÐºÐ¾Ñ " -#~ "ÑÑлологÑÑ ÐаÑÑавÑÑкого ÑнÑвеÑÑиÑеÑÑ Ñа Школи СÑÑпÑлÑÐ½Ð¸Ñ ÐаÑк ÐнÑÑиÑÑÑÑ " -#~ "ÑÑлоÑоÑÑÑ Ñа ÑоÑÑологÑÑ ÐолÑÑÑÐºÐ¾Ñ Ð°ÐºÐ°Ð´ÐµÐ¼ÑÑ Ð½Ð°Ñк. ÐÑоÑеÑÑйно Ñа наÑково " -#~ "займаÑÑÑÑÑ Ð¿Ð¾Ð»ÑÑÑким ÑоманÑизмом, ÑÑÑоÑÑÑÑ ÑÐ´ÐµÑ Ñа ÑеоÑÑÑÑ ÐºÑлÑÑÑÑи. </p>" -#~ "\r\n" -#~ "\r\n" -#~ "<p><strong>Ðавел ÐозÑол </strong>â лÑÑеÑаÑÑÑний ÑедакÑоÑ, наÑоджений Ñ " -#~ "1979, ÐºÐ°Ð½Ð´Ð¸Ð´Ð°Ñ Ð³ÑманÑÑаÑÐ½Ð¸Ñ Ð½Ð°Ñк, Ñкий ÑпеÑÑалÑзÑÑÑÑÑÑ Ñ Ð´Ð°Ð²Ð½Ñй " -#~ "лÑÑеÑаÑÑÑÑ, випÑÑкник ФакÑлÑÑеÑÑ ÐолонÑÑÑики ÐаÑÑавÑÑкого ÑнÑвеÑÑиÑеÑÑ Ñа " -#~ "ÐалÑдж-ÐÐ¾Ð»ÐµÐ´Ð¶Ñ Ñ ÐондонÑ. ÐоеÑ, лÑÑеÑаÑÑÑний кÑиÑик, ÑÑипендиÑÑ " -#~ "ÐÑнÑÑÑеÑÑÑва кÑлÑÑÑÑи Ñа наÑÑоналÑÐ½Ð¾Ñ ÑпадÑини (2010). </p>\r\n" -#~ "\r\n" -#~ "<p><strong>ÐаÑлÑна ХоÑоманÑÑка</strong> â ÑÐµÑ Ð½ÑÑний ÑедакÑоÑ, ÑÑÑденÑка " -#~ "ÐРкÑÑÑÑ Ð¼Ð°Ð³ÑÑÑÑаÑÑÑи в ÐнÑÑиÑÑÑÑ Ð½Ð°ÑÐºÐ¾Ð²Ð¾Ñ ÑнÑоÑмаÑÑÑ Ñа " -#~ "бÑблÑоÑекознавÑÑва ÐаÑÑавÑÑкого УнÑвеÑÑиÑеÑÑ. ÐÑаÑÑÑ Ñакож Ñ ÐÑддÑÐ»Ñ " -#~ "докÑменÑаÑÑÑ ÑеаÑÑÑ Ð² ТеаÑÑалÑÐ½Ð¾Ð¼Ñ ÐнÑÑиÑÑÑÑ Ñм. Ð. РаÑевÑÑкого Ñ ÐаÑÑавÑ." -#~ "</p>\r\n" -#~ "\r\n" -#~ "<p><strong>ÐнеÑа РавÑÑка</strong> - ÑÐµÑ Ð½ÑÑний ÑедакÑоÑ, ÑÑÑденÑка ÐÐ " -#~ "кÑÑÑÑ Ð¼Ð°Ð³ÑÑÑÑаÑÑÑи в ÐнÑÑиÑÑÑÑ Ð½Ð°ÑÐºÐ¾Ð²Ð¾Ñ ÑнÑоÑмаÑÑÑ Ñа бÑблÑоÑекознавÑÑва " -#~ "ÐаÑÑавÑÑкого УнÑвеÑÑиÑеÑÑ, лÑбиÑелÑка випÑÑки Ñа добÑÐ¾Ñ ÐºÑÑ Ð½Ñ. Ð 2009 " -#~ "ÑÐ¾ÐºÑ Ð·Ð°Ð¹Ð¼Ð°ÑÑÑÑÑ ÑнÑеÑнеÑÐ½Ð¾Ñ ÑÑоÑÑÐ½ÐºÐ¾Ñ Ð³ÑÑÑка ÐолÑÑÑÐºÐ¾Ñ ÑпÑлки Ñибалок â " -#~ "21 Ñ ÐоломÑнÑ.</p>\r\n" - -#~ msgid "Wesprzyj nas" -#~ msgstr "ÐÑдÑÑимайÑе наÑ" - -#~ msgid "" -#~ "<p><strong>Przekaż 1% podatku na Wolne Lektury</strong></p>\r\n" -#~ "<p>Fundacja Nowoczesna Polska posiada status Organizacji Pożytku " -#~ "Publicznego dziÄki czemu na rozwój projektu Wolne Lektury można przekazaÄ " -#~ "1% swojego podatku. W tym celu należy wypeÅniÄ odpowiedniÄ rubrykÄ w " -#~ "rocznym zeznaniu podatkowym (PIT-36, PIT-37 lub PIT-28). W zeznaniu " -#~ "należy podaÄ nazwÄ:</p>\r\n" -#~ "Fundacja Nowoczesna Polska <br/>\r\n" -#~ "oraz numer z Krajowego Rejestru SÄ dowego (KRS) 0000070056<br/>\r\n" -#~ msgstr "" -#~ "<p><strong>ÐеÑекажÑÑÑ 1% подаÑÐºÑ Ð½Ð° Wolne Lektury</strong></p>\r\n" -#~ "<p>Фонд СÑÑаÑна ÐолÑÑа (Fundacja Nowoczesna Polska) Ð¼Ð°Ñ ÑÑаÑÑÑ " -#~ "ÐÑганÑзаÑÑÑ ÑÑÑпÑлÑÐ½Ð¾Ñ ÐºÐ¾ÑиÑÑÑ, ÑÐ¾Ð¼Ñ Ð½Ð° ÑозвиÑок пÑоекÑÑ Wolne Lektury " -#~ "можна пеÑеказаÑи 1% Ñвого подаÑкÑ. ÐÐ»Ñ ÑÑого поÑÑÑбно заповниÑи " -#~ "вÑдповÑдне поле Ñ ÑÑÑнÑй подаÑковÑй деклаÑаÑÑÑ (PIT-36, PIT-37 або " -#~ "PIT-28). У деклаÑаÑÑÑ Ð¿Ð¾ÑÑÑбно вказаÑи Ð½Ð°Ð·Ð²Ñ Ð¤Ð¾Ð½Ð´Ñ:</p>\r\n" -#~ "Fundacja Nowoczesna Polska <br/>\r\n" -#~ "Ñа Ð½Ð¾Ð¼ÐµÑ Ð· ÐаÑÑоналÑного СÑдового РеÑÑÑÑÑ (KRS) 0000070056<br/>\r\n" - -#~ msgid "" -#~ "<p><strong>Przekaż darowiznÄ na Wolne Lektury</strong></p>\r\n" -#~ "<p>Każda wpÅacona kwota zostanie przeznaczona na rozwój zasobów naszej " -#~ "biblioteki. Wystarczy dokonaÄ przelewu na konto:</p>\r\n" -#~ "\r\n" -#~ "Fundacja Nowoczesna Polska<br/>\r\n" -#~ "ul. MarszaÅkowska 84/92 lok. 125<br/>\r\n" -#~ "00-514 Warszawa<br/>\r\n" -#~ "Nr konta: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\n" -#~ "TytuÅ przelewu: Darowizna na Wolne Lektury<br/>\r\n" -#~ msgstr "" -#~ "<p><strong>ÐÑобÑÑÑ Ð±Ð»Ð°Ð³Ð¾Ð´Ñйний внеÑок на Wolne Lektury</strong></p>\r\n" -#~ "<p>УÑÑ Ð¾ÑÑÐ¸Ð¼Ð°Ð½Ñ ÐºÐ¾ÑÑи бÑде викоÑиÑÑано Ð´Ð»Ñ ÑозвиÑÐºÑ ÐºÐ¾Ð»ÐµÐºÑÑÑ Ð½Ð°ÑÐ¾Ñ " -#~ "бÑблÑоÑеки. Ðдине, Ñо поÑÑÑбно зÑобиÑи, Ñе пеÑеÑÐ°Ñ ÑваÑи коÑÑи на ÑÐ°Ñ Ñнок:" -#~ "</p>\r\n" -#~ "\r\n" -#~ "Fundacja Nowoczesna Polska<br/>\r\n" -#~ "ul. MarszaÅkowska 84/92 lok. 125<br/>\r\n" -#~ "00-514 Warszawa<br/>\r\n" -#~ "ÐÐ¾Ð¼ÐµÑ Ð±Ð°Ð½ÐºÑвÑÑкого ÑÐ°Ñ ÑнкÑ: PKO BP 46 10201097 0000 7502 0001 6766<br/>" -#~ "\r\n" -#~ "ÐÑизнаÑÐµÐ½Ð½Ñ Ð¿Ð»Ð°ÑежÑ: ÐлагодÑйний внеÑок на Wolne Lektury<br/>\r\n" - -#~ msgid "WÅÄ cz siÄ w prace" -#~ msgstr "ÐÑзÑмÑÑÑ ÑÑаÑÑÑ Ñ Ð½Ð°ÑÑй дÑÑлÑноÑÑÑ" - -#~ msgid "" -#~ "<ul>\r\n" -#~ "<li>ZostaÅ naszym redaktorem, programistÄ lub tÅumaczem</li>\r\n" -#~ "<li>ZdobÄ dź nowe umiejÄtnoÅci i doÅwiadczenie </li>\r\n" -#~ "<li>Weź udziaÅ w otwartym projekcie i twórz innowacyjnÄ bibliotekÄ " -#~ "internetowÄ </li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ "<p>Zapraszamy wszystkie osoby, które chcÄ wspóÅtworzyÄ nasz projekt. " -#~ "WspóÅpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " -#~ "literaturÄ , redagowaniem tekstów i projektami informatycznymi. Oferujemy " -#~ "profesjonalne szkolenia i staÅÄ pomoc merytorycznÄ . Wolontariusze mogÄ " -#~ "pracowaÄ zdalnie lub w siedzibie Fundacji.</p>\r\n" -#~ "<p>Organizujemy również praktyki studenckie â nawiÄ zaliÅmy wspóÅpracÄ z " -#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " -#~ "Karier UKSW oraz WydziaÅem Fizyki UW. </p>\r\n" -#~ "\r\n" -#~ "<h3>Jak siÄ do nas zgÅosiÄ?</h3>\r\n" -#~ "<p>Wszystkie zainteresowane osoby prosimy o przysÅanie maila na adres <a " -#~ "href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\r\n" -#~ msgstr "" -#~ "<ul>\r\n" -#~ "<li>СÑÐ°Ð½Ñ Ð½Ð°Ñим ÑедакÑоÑом, пÑогÑамÑÑÑом або пеÑекладаÑем</li>\r\n" -#~ "<li>ÐдобÑÐ´Ñ Ð½Ð¾Ð²Ñ ÑмÑÐ½Ð½Ñ Ñа доÑвÑд </li>\r\n" -#~ "<li>ÐÑзÑми ÑÑаÑÑÑ Ñ Ð²ÑдкÑиÑÐ¾Ð¼Ñ Ð¿ÑоекÑÑ Ñа допоможи ÑвоÑиÑи ÑнноваÑÑÐ¹Ð½Ñ " -#~ "ÑнÑеÑнеÑ-бÑблÑоÑÐµÐºÑ </li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ "<p>ÐапÑоÑÑÑмо ÑÑÑÑ , Ñ Ñо Ñ Ð¾Ñе допомогÑи Ñ Ð½Ð°ÑÐ¾Ð¼Ñ Ð¿ÑоекÑÑ. СпÑвпÑаÑÑÑмо Ð·Ñ " -#~ "ÑÑÑденÑами, вÑиÑелÑми Ñа ÑÑÑма, Ñ Ñо ÑÑкавиÑÑÑÑ Ð»ÑÑеÑаÑÑÑоÑ, ÑедагÑваннÑм " -#~ "ÑекÑÑÑв Ñа компâÑÑеÑними пÑоекÑами. Ðи пÑопонÑÑмо пÑоÑеÑÑÐ¹Ð½Ñ ÑÑенÑнги Ñа " -#~ "поÑÑÑÐ¹Ð½Ñ Ð·Ð¼ÑÑÑÐ¾Ð²Ð½Ñ Ð¿ÑдÑÑимкÑ. ÐолонÑеÑи можÑÑÑ Ð¿ÑаÑÑваÑи в елекÑÑÐ¾Ð½Ð½Ð¾Ð¼Ñ " -#~ "ÑÐµÐ¶Ð¸Ð¼Ñ Ð°Ð±Ð¾ в оÑÑÑÑ Ð¤Ð¾Ð½Ð´Ñ.</p>\r\n" -#~ "<p>Також ми оÑганÑзÑÑмо ÑÑÑденÑÑÑÐºÑ Ð¿ÑакÑики - ÑозпоÑали ÑпÑвпÑаÑÑ Ð· " -#~ "ÐнÑÑиÑÑÑом наÑÐºÐ¾Ð²Ð¾Ñ ÑнÑоÑмаÑÑÑ Ñа бÑблÑоÑекознавÑÐ¸Ñ Ð´Ð¾ÑлÑÐ´Ð¶ÐµÐ½Ñ " -#~ "ÐаÑÑавÑÑкого УнÑвеÑÑиÑеÑÑ, СÑÑденÑÑÑким ÑенÑÑом зайнÑÑоÑÑÑ Ð£Ð½ÑвеÑÑиÑеÑÑ " -#~ "ÐаÑдинала СÑеÑана ÐиÑинÑÑкого Ñа ФакÑлÑÑеÑом ФÑзики ÐаÑÑавÑÑкого " -#~ "УнÑвеÑÑиÑеÑÑ. </p>\r\n" -#~ "\r\n" -#~ "<h3>Як до Ð½Ð°Ñ Ð¿ÑиÑднаÑиÑÑ?</h3>\r\n" -#~ "<p>УÑÑÑ Ð·Ð°ÑÑÐºÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑоÑимо виÑлаÑи повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð° адÑеÑÑ <a href=" -#~ "\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." -#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n" -#~ "\r\n" -#~ "\r\n" -#~ "\r\n" - -#~ msgid "" -#~ "<h3>Kogo szukamy?</h3>\r\n" -#~ "\r\n" -#~ "<h3>Redaktorów technicznych (skÅad tekstu) </h3>\r\n" -#~ " <p>SkÅad jest pierwszym etapem pracy nad tekstem. Za pomocÄ znaczników " -#~ "jÄzyka WL-XML nadajemy tekstowi poÅ¼Ä danÄ formÄ i umożliwiamy wyÅwietlenie " -#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na <a " -#~ "href=\"http://redakcja.wolnelektury.pl\">Platformie Redakcyjnej</a>, " -#~ "która pozwala na zautomatyzowanie dużej czÄÅci pracy. </p>\r\n" -#~ "\r\n" -#~ " <p><b>Kto może zostaÄ redaktorem technicznym?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Każdy â po krótkim szkoleniu.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>WiÄcej informacji o redakcji technicznej znajdziecie na <a href=" -#~ "\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" -#~ "\">stronie redakcji Wolnych Lektur</a> </p>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Redaktorów literackich (merytorycznych) </h3>\r\n" -#~ " <p>Redakcja literacka obejmuje korektÄ, uwspóÅczeÅnienia oraz dodawanie " -#~ "przypisów i motywów literackich. To unikalna możliwoÅÄ zdobycia " -#~ "doÅwiadczenia w cyfrowej edycji tekstów. </p>\r\n" -#~ "\r\n" -#~ " <p><b>Kto może zostaÄ redaktorem literackim? </b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Osoby, które majÄ doÅwiadczenie w redakcji tekstów literackich,</li>" -#~ "\r\n" -#~ "<li>Studenci i absolwenci studiów humanistycznych, którzy chcÄ takie " -#~ "doÅwiadczenie zdobyÄ. </li>\r\n" -#~ "</ul>\r\n" -#~ "<p>WiÄcej informacji o redakcji merytorycznej znajdziecie na <a href=" -#~ "\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" -#~ "\">stronie redakcji Wolnych Lektur</a> </p>\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>TÅumaczy</h3>\r\n" -#~ " <p>Strona WolneLektury.pl jest dostÄpna w siedmiu jÄzykach obcych â " -#~ "angielskim, francuskim, niemieckim, hiszpaÅskim, litewskim, rosyjskim " -#~ "oraz ukraiÅskim. Użytkownikami biblioteki jest ponad 200 tysiÄcy osób z " -#~ "zagranicy, a już niedÅugo nasze zbiory obejmÄ również dzieÅa w jÄzykach " -#~ "obcych. Dlatego potrzebujemy na bieÅ¼Ä co tÅumaczyÄ nowe informacje " -#~ "pojawiajÄ ce siÄ na stronie. </p>\r\n" -#~ " <p><b>Kto może pomóc w tÅumaczeniach? </b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Każdy, kto dobrze zna co najmniej jeden z powyższych jÄzyków. </li>" -#~ "\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>Programistów</h3>\r\n" -#~ " <p>Poza samÄ stronÄ Wolnych Lektur tworzymy również: </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>narzÄdzia redakcyjne,</li>\r\n" -#~ "<li>konwertery do różnych formatów e-booków, </li>\r\n" -#~ "<li>aplikacje mobile uÅatwiajÄ ce dostÄp do naszych zasobów.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " -#~ "jQuery, LaTeX, Java.\r\n" -#~ "Tworzone przez nas oprogramowanie udostÄpniamy na <a href=\"https://" -#~ "github.com/fnp/\">wolnej licencji</a>. </p>\r\n" -#~ " <p><b>Kto może pomóc w pracach programistycznych?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Każdy, kto umie i chciaÅby zdobyÄ punkty do karmy za udziaÅ w " -#~ "otwartym projekcie programistycznym. ;)</li>\r\n" -#~ "</ul>\r\n" -#~ msgstr "" -#~ "<h3>Ðого ми ÑÑкаÑмо?</h3>\r\n" -#~ "\r\n" -#~ "<h3>Ð¢ÐµÑ Ð½ÑÑÐ½Ð¸Ñ ÑедакÑоÑÑв (веÑÑÑка) </h3>\r\n" -#~ " <p>ÐеÑÑÑка - Ñе пеÑÑий еÑап пÑаÑÑ Ð½Ð°Ð´ ÑекÑÑом. Ðа Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ ÑегÑв мови " -#~ "WL-XML надаÑмо ÑекÑÑам поÑÑÑбний виглÑд Ñа Ñобимо можливим ÑÑ Ð¿ÑблÑкаÑÑÑ " -#~ "на веб-ÑайÑÑ. Ð¢ÐµÑ Ð½ÑÑне ÑедагÑÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½ÑÑÑÑÑÑ Ð½Ð° <a href=\"http://" -#~ "redakcja.wolnelektury.pl\">РедакÑÑйнÑй плаÑÑоÑмÑ</a>, Ñка дозволÑÑ " -#~ "авÑомаÑизÑваÑи Ð²ÐµÐ»Ð¸ÐºÑ ÑаÑÑÐ¸Ð½Ñ Ð¿ÑаÑÑ. </p>\r\n" -#~ "\r\n" -#~ " <p><b>Ð¥Ñо може ÑÑаÑи ÑÐµÑ Ð½ÑÑним ÑедакÑоÑом?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Ðожен - пÑÑÐ»Ñ ÐºÐ¾ÑоÑкого ÑÑенÑнгÑ.</li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>ÐÑлÑÑе ÑнÑоÑмаÑÑÑ Ð¿Ñо ÑÐµÑ Ð½ÑÑне ÑедагÑÐ²Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ð¹Ð´ÐµÑе на <a href=" -#~ "\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" -#~ "\">ÑайÑÑ ÑедакÑÑÑ Wolne Lektury</a> </p>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>ÐÑÑеÑаÑÑÑÐ½Ð¸Ñ ÑедакÑоÑÑв </h3>\r\n" -#~ " <p>ÐÑÑеÑаÑÑÑне ÑедагÑÐ²Ð°Ð½Ð½Ñ Ð²ÐºÐ»ÑÑÐ°Ñ Ð² Ñебе коÑекÑÑ, оÑÑÑаÑÐ½ÐµÐ½Ð½Ñ ÑекÑÑÑ, а " -#~ "Ñакож Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð¿ÑимÑÑок Ñа лÑÑеÑаÑÑÑÐ½Ð¸Ñ Ð¼Ð¾ÑивÑв. Це ÑнÑкалÑна можливÑÑÑÑ " -#~ "здобÑÑи доÑвÑд Ñ ÑиÑÑовÑй обÑобÑÑ ÑекÑÑÑв. </p>\r\n" -#~ "\r\n" -#~ " <p><b>Ð¥Ñо може ÑÑаÑи лÑÑеÑаÑÑÑним ÑедакÑоÑом? </b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Той, Ñ Ñо Ð¼Ð°Ñ Ð´Ð¾ÑвÑд Ñ ÑедагÑÐ²Ð°Ð½Ð½Ñ Ð»ÑÑеÑаÑÑÑÐ½Ð¸Ñ ÑекÑÑÑв,</li>\r\n" -#~ "<li>СÑÑденÑи Ñа випÑÑкники гÑманÑÑаÑÐ½Ð¸Ñ ÑакÑлÑÑеÑÑв, ÑÐºÑ Ñ Ð¾ÑÑÑÑ Ð·Ð´Ð¾Ð±ÑÑи " -#~ "Ñакий доÑвÑд. </li>\r\n" -#~ "</ul>\r\n" -#~ "<p>ÐÑлÑÑе ÑнÑоÑмаÑÑÑ Ð¿Ñо лÑÑеÑаÑÑÑне ÑедагÑÐ²Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ð¹Ð´ÐµÑе на <a href=" -#~ "\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" -#~ "\">ÑайÑÑ ÑедакÑÑÑ Wolne Lektury</a> </p>\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>ÐеÑекладаÑÑв</h3>\r\n" -#~ " <p>Ð¡Ð°Ð¹Ñ WolneLektury.pl доÑÑÑпний на Ñеми ÑÐ½Ð¾Ð·ÐµÐ¼Ð½Ð¸Ñ Ð¼Ð¾Ð²Ð°Ñ â англÑйÑÑкÑй, " -#~ "ÑÑанÑÑзÑкÑй, нÑмеÑÑкÑй, ÑÑпанÑÑкÑй, лиÑовÑÑкÑй, ÑоÑÑйÑÑкÑй Ñа " -#~ "ÑкÑаÑнÑÑкÑй. ÐÑблÑоÑÐµÐºÐ¾Ñ ÐºÐ¾ÑиÑÑÑÑÑÑÑÑ Ð±ÑлÑÑе нÑж 200 ÑиÑÑÑ Ð·Ð°ÐºÐ¾ÑÐ´Ð¾Ð½Ð½Ð¸Ñ " -#~ "вÑдвÑÑÑваÑÑв, а незабаÑом Ñ Ð½Ð°ÑÑй колекÑÑй знайдÑÑÑÑÑ Ñакож ÑвоÑи на " -#~ "ÑÐ½Ð¾Ð·ÐµÐ¼Ð½Ð¸Ñ Ð¼Ð¾Ð²Ð°Ñ . Ð¢Ð¾Ð¼Ñ Ð½Ð°Ð¼ поÑÑÑбно ÑиÑÑемаÑиÑно пеÑекладаÑи Ð½Ð¾Ð²Ñ " -#~ "ÑнÑоÑмаÑÑÑ, Ñка зâÑвлÑÑÑÑÑÑ Ð½Ð° ÑайÑÑ. </p>\r\n" -#~ " <p><b>Ð¥Ñо може допомогÑи Ñ Ð¿ÐµÑÐµÐºÐ»Ð°Ð´Ð°Ñ ? </b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Ðожний, Ñ Ñо добÑе володÑÑ Ð¿ÑÐ¸Ð½Ð°Ð¹Ð¼Ð½Ñ Ð¾Ð´Ð½ÑÑÑ Ð· виÑÐµÐ·Ð³Ð°Ð´Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð². </li>" -#~ "\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ "<hr/>\r\n" -#~ "\r\n" -#~ "<h3>ÐÑогÑамÑÑÑÑв</h3>\r\n" -#~ " <p>ÐÑÑм Ñамого ÑайÑÑ Wolne Lektury ми ÑвоÑимо Ñакож: </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>ÑедакÑÑÐ¹Ð½Ñ ÑнÑÑÑÑменÑи,</li>\r\n" -#~ "<li>конвеÑÑеÑи Ð´Ð»Ñ ÑÑÐ·Ð½Ð¸Ñ ÑоÑмаÑÑв елекÑÑÐ¾Ð½Ð½Ð¸Ñ ÐºÐ½Ð¸Ð³, </li>\r\n" -#~ "<li>мобÑлÑÐ½Ñ Ð°Ð¿Ð»ÑкаÑÑÑ, ÑÐºÑ ÑоблÑÑÑ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¸Ð¼ доÑÑÑп до наÑÐ¸Ñ ÐºÐ¾Ð»ÐµÐºÑÑй.</" -#~ "li>\r\n" -#~ "</ul>\r\n" -#~ "\r\n" -#~ " <p>Ðи коÑиÑÑÑÑмоÑÑ Ñакими ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³ÑÑми, Ñк Python, Django, XHTML, " -#~ "JavaScript, jQuery, LaTeX, Java.\r\n" -#~ "ÐÑогÑамне забезпеÑеннÑ, Ñке ÑÑвоÑÑÑмо, надаÑÑÑÑÑ Ð½Ð° <a href=\"https://" -#~ "github.com/fnp/\">вÑлÑнÑй лÑÑензÑÑ</a>. </p>\r\n" -#~ " <p><b>Ð¥Ñо може допомогÑи Ñ Ð¿ÑогÑамÑваннÑ?</b> </p>\r\n" -#~ "<ul>\r\n" -#~ "<li>Ðожен, Ñ Ñо вмÑÑ Ñ Ñ Ð¾Ñе за ÑÑаÑÑÑ Ñ Ð²ÑдкÑиÑÐ¾Ð¼Ñ Ð¿ÑогÑамÑÑÑиÑÐ½Ð¾Ð¼Ñ " -#~ "пÑоекÑÑ Ð·Ð´Ð¾Ð±ÑÑи додаÑÐºÐ¾Ð²Ñ Ð±Ð°Ð»Ð¸ до каÑми. ;)</li>\r\n" -#~ "</ul>\r\n" - -#~ msgid "Prawa" -#~ msgstr "ÐÑава" - -#~ msgid "" -#~ "<p>WiÄkszoÅÄ utworów w bibliotece nie jest chroniona prawem autorskim i " -#~ "znajduje siÄ w domenie publicznej, co oznacza, że można je swobodnie " -#~ "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 <a " -#~ "href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie " -#~ "autorstwa-Na tych samych warunkach 3.0</a>. Publikujemy również kilka " -#~ "utworów, które autorzy lub spadkobiercy praw udostÄpnili na wolnej " -#~ "licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl" -#~ "\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>.</p>" -#~ msgstr "" -#~ "<p>ÐÑлÑÑÑÑÑÑ ÑвоÑÑв Ñ Ð±ÑблÑоÑеÑÑ Ð½Ðµ Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом Ñ " -#~ "ÑвлÑÑÑÑÑÑ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного надбаннÑ, ÑÐ¾Ð¼Ñ ÑÑ Ð¼Ð¾Ð¶Ð½Ð° вÑлÑно пÑблÑкÑваÑи " -#~ "Ñа ÑозповÑÑджÑваÑи. ЯкÑо ÑекÑÑи ÑÑпÑоводжÑÑÑÑÑÑ Ð´Ð¾Ð´Ð°Ñковими маÑеÑÑалами " -#~ "(пÑимÑÑками, лÑÑеÑаÑÑÑними моÑивами ÑоÑо), ÑÐºÑ Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким " -#~ "пÑавом, доÑÑÑп до ÑÐ¸Ñ Ð´Ð¾Ð´Ð°ÑÐºÐ¾Ð²Ð¸Ñ Ð¼Ð°ÑеÑÑалÑв надаÑÑÑÑÑ Ð½Ð° ÑÐ¼Ð¾Ð²Ð°Ñ Ð»ÑÑензÑÑ " -#~ "<a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Ðз " -#~ "зазнаÑеннÑм ÑÐ¼ÐµÐ½Ñ Ð°Ð²ÑоÑа â Ðа ÑÐ¸Ñ Ð¶Ðµ ÑÐ¼Ð¾Ð²Ð°Ñ 3.0</a>. Також ми пÑблÑкÑÑмо " -#~ "декÑлÑка ÑвоÑÑв, до ÑÐºÐ¸Ñ Ð°Ð²ÑоÑи або ÑпадкоÑмÑÑ Ð¿Ñав надали доÑÑÑп на " -#~ "пÑдÑÑÐ°Ð²Ñ Ð²ÑлÑÐ½Ð¾Ñ Ð»ÑÑензÑÑ <a href=\"http://creativecommons.org/licenses/" -#~ "by-sa/3.0/deed.pl\">Ðз зазнаÑеннÑм ÑÐ¼ÐµÐ½Ñ Ð°Ð²ÑоÑа â Ðа ÑÐ¸Ñ Ð¶Ðµ ÑÐ¼Ð¾Ð²Ð°Ñ 3.0</" -#~ "a>.</p>" diff --git a/apps/infopages/migrations/0001_initial.py b/apps/infopages/migrations/0001_initial.py deleted file mode 100644 index 2c3f4f07a..000000000 --- a/apps/infopages/migrations/0001_initial.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='InfoPage', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('main_page', models.IntegerField(null=True, verbose_name='main page priority', blank=True)), - ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), - ('title', models.CharField(max_length=120, verbose_name='Title', blank=True)), - ('title_de', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), - ('title_en', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), - ('title_es', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), - ('title_fr', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), - ('title_it', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), - ('title_lt', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), - ('title_pl', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), - ('title_ru', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), - ('title_uk', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), - ('left_column', models.TextField(verbose_name='left column', blank=True)), - ('left_column_de', models.TextField(null=True, verbose_name='left column', blank=True)), - ('left_column_en', models.TextField(null=True, verbose_name='left column', blank=True)), - ('left_column_es', models.TextField(null=True, verbose_name='left column', blank=True)), - ('left_column_fr', models.TextField(null=True, verbose_name='left column', blank=True)), - ('left_column_it', models.TextField(null=True, verbose_name='left column', blank=True)), - ('left_column_lt', models.TextField(null=True, verbose_name='left column', blank=True)), - ('left_column_pl', models.TextField(null=True, verbose_name='left column', blank=True)), - ('left_column_ru', models.TextField(null=True, verbose_name='left column', blank=True)), - ('left_column_uk', models.TextField(null=True, verbose_name='left column', blank=True)), - ('right_column', models.TextField(verbose_name='right column', blank=True)), - ('right_column_de', models.TextField(null=True, verbose_name='right column', blank=True)), - ('right_column_en', models.TextField(null=True, verbose_name='right column', blank=True)), - ('right_column_es', models.TextField(null=True, verbose_name='right column', blank=True)), - ('right_column_fr', models.TextField(null=True, verbose_name='right column', blank=True)), - ('right_column_it', models.TextField(null=True, verbose_name='right column', blank=True)), - ('right_column_lt', models.TextField(null=True, verbose_name='right column', blank=True)), - ('right_column_pl', models.TextField(null=True, verbose_name='right column', blank=True)), - ('right_column_ru', models.TextField(null=True, verbose_name='right column', blank=True)), - ('right_column_uk', models.TextField(null=True, verbose_name='right column', blank=True)), - ], - options={ - 'ordering': ('main_page', 'slug'), - 'verbose_name': 'info page', - 'verbose_name_plural': 'info pages', - }, - bases=(models.Model,), - ), - ] diff --git a/apps/infopages/migrations/0002_auto_20151221_1225.py b/apps/infopages/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index d5755e7ef..000000000 --- a/apps/infopages/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('infopages', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='infopage', - name='slug', - field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), - ), - migrations.AlterField( - model_name='infopage', - name='title', - field=models.CharField(max_length=120, verbose_name='title', blank=True), - ), - migrations.AlterField( - model_name='infopage', - name='title_de', - field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), - ), - migrations.AlterField( - model_name='infopage', - name='title_en', - field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), - ), - migrations.AlterField( - model_name='infopage', - name='title_es', - field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), - ), - migrations.AlterField( - model_name='infopage', - name='title_fr', - field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), - ), - migrations.AlterField( - model_name='infopage', - name='title_it', - field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), - ), - migrations.AlterField( - model_name='infopage', - name='title_lt', - field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), - ), - migrations.AlterField( - model_name='infopage', - name='title_pl', - field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), - ), - migrations.AlterField( - model_name='infopage', - name='title_ru', - field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), - ), - migrations.AlterField( - model_name='infopage', - name='title_uk', - field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), - ), - ] diff --git a/apps/infopages/migrations/__init__.py b/apps/infopages/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/infopages/models.py b/apps/infopages/models.py deleted file mode 100644 index cf9e9bf66..000000000 --- a/apps/infopages/models.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.db import models -from django.utils.translation import ugettext_lazy as _ - -class InfoPage(models.Model): - """An InfoPage is used to display a two-column flatpage.""" - - main_page = models.IntegerField(_('main page priority'), null=True, blank=True) - slug = models.SlugField(_('slug'), max_length=120, unique=True, db_index=True) - title = models.CharField(_('title'), max_length=120, blank=True) - left_column = models.TextField(_('left column'), blank=True) - right_column = models.TextField(_('right column'), blank=True) - - class Meta: - ordering = ('main_page', 'slug',) - verbose_name = _('info page') - verbose_name_plural = _('info pages') - - def __unicode__(self): - return self.title - - @models.permalink - def get_absolute_url(self): - return ('infopage', [self.slug]) diff --git a/apps/infopages/templates/infopages/infopage.html b/apps/infopages/templates/infopages/infopage.html deleted file mode 100755 index 75dae0850..000000000 --- a/apps/infopages/templates/infopages/infopage.html +++ /dev/null @@ -1,23 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block titleextra %}{{ page.title }}{% endblock %} - -{% block metadescription %}{{ left_column|striptags|truncatewords:10 }}{% endblock %} - -{% block body %} - <h1>{{ page.title }}</h1> - - {% autoescape off %} - <div class="left-column"> - <div class="normal-text"> - {{ left_column }} - </div> - </div> - <div class="right-column"> - <div class="normal-text"> - {{ right_column }} - </div> - </div> - {% endautoescape %} -{% endblock %} diff --git a/apps/infopages/templates/infopages/on_main.html b/apps/infopages/templates/infopages/on_main.html deleted file mode 100755 index 5d80dad57..000000000 --- a/apps/infopages/templates/infopages/on_main.html +++ /dev/null @@ -1,3 +0,0 @@ -{% for page in objects %} - <li><a href="{{ page.get_absolute_url }}">{{ page.title }}</a></li> -{% endfor %} diff --git a/apps/infopages/templatetags/__init__.py b/apps/infopages/templatetags/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/infopages/templatetags/infopages_tags.py b/apps/infopages/templatetags/infopages_tags.py deleted file mode 100755 index d7c93ca8f..000000000 --- a/apps/infopages/templatetags/infopages_tags.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import template -from infopages.models import InfoPage - -register = template.Library() - - -@register.inclusion_tag('infopages/on_main.html') -def infopages_on_main(): - objects = InfoPage.objects.exclude(main_page=None) - return {"objects": objects} diff --git a/apps/infopages/translation.py b/apps/infopages/translation.py deleted file mode 100644 index e002482a3..000000000 --- a/apps/infopages/translation.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# - -from modeltranslation.translator import translator, TranslationOptions -from infopages.models import InfoPage - -class InfoPageTranslationOptions(TranslationOptions): - fields = ('title', 'left_column', 'right_column') - -translator.register(InfoPage, InfoPageTranslationOptions) diff --git a/apps/infopages/urls.py b/apps/infopages/urls.py deleted file mode 100755 index 206f7cbf9..000000000 --- a/apps/infopages/urls.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url - - -urlpatterns = patterns('infopages.views', - url(r'^(?P<slug>[a-zA-Z0-9_-]+)/$', 'infopage', name='infopage'), -) - diff --git a/apps/infopages/views.py b/apps/infopages/views.py deleted file mode 100644 index d5dee7630..000000000 --- a/apps/infopages/views.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.shortcuts import render_to_response, get_object_or_404 -from django.template import RequestContext, Template, TemplateSyntaxError - -from infopages.models import InfoPage - - -def infopage(request, slug): - page = get_object_or_404(InfoPage, slug=slug) - rc = RequestContext(request) - try: - left_column = Template(page.left_column).render(rc) - except TemplateSyntaxError: - left_column = '' - - try: - right_column = Template(page.right_column).render(rc) - except TemplateSyntaxError: - left_column = '' - - return render_to_response('infopages/infopage.html', locals(), - context_instance=RequestContext(request)) diff --git a/apps/lesmianator/__init__.py b/apps/lesmianator/__init__.py deleted file mode 100644 index 54eee5b94..000000000 --- a/apps/lesmianator/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# - -# LeÅmianator do dziaÅania wymaga pliku dictionary.p w katalogu aplikacji -# plik ten powinien zawieraÄ sÅownik postaci: -# <3-znakowy ciÄ g> => <kolejny znak> => <czÄstoÅÄ wystÄpowania> diff --git a/apps/lesmianator/locale/pl/LC_MESSAGES/django.mo b/apps/lesmianator/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index a072a55da..000000000 Binary files a/apps/lesmianator/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/lesmianator/locale/pl/LC_MESSAGES/django.po b/apps/lesmianator/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 959b77882..000000000 --- a/apps/lesmianator/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,47 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-01-27 16:38+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2)\n" - -#: models.py:26 -msgid "slug" -msgstr "slug" - -#: models.py:27 -msgid "text" -msgstr "tekst" - -#: models.py:29 -msgid "extra information" -msgstr "dodatkowe informacje" - -#: models.py:30 -msgid "creation date" -msgstr "data utworzenia" - -#: models.py:31 -msgid "last view date" -msgstr "data ostatniego obejrzenia" - -#: models.py:32 -msgid "view count" -msgstr "licznik obejrzeÅ" - -#: models.py:104 -msgid "Continuations file" -msgstr "plik kontynuacji" diff --git a/apps/lesmianator/management/__init__.py b/apps/lesmianator/management/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/lesmianator/management/commands/__init__.py b/apps/lesmianator/management/commands/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/lesmianator/management/commands/lesmianator.py b/apps/lesmianator/management/commands/lesmianator.py deleted file mode 100644 index b2341ab31..000000000 --- a/apps/lesmianator/management/commands/lesmianator.py +++ /dev/null @@ -1,101 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import re -from cPickle import dump -from optparse import make_option - -from django.core.management.base import BaseCommand -from django.core.management.color import color_style -from django.conf import settings - -from catalogue.models import Book, Tag - -# extract text from text file -re_text = re.compile(r'\n{3,}(.*?)\n*-----\n', re.S).search - - -class Command(BaseCommand): - option_list = BaseCommand.option_list + ( - make_option('-t', '--tags', dest='tags', metavar='SLUG,...', - help='Use only books tagged with this tags'), - make_option('-i', '--include', dest='include', metavar='SLUG,...', - help='Include specific books by slug'), - make_option('-e', '--exclude', dest='exclude', metavar='SLUG,...', - help='Exclude specific books by slug') - ) - help = 'Prepare data for Lesmianator.' - - def handle(self, *args, **options): - self.style = color_style() - verbose = int(options.get('verbosity')) - tags = options.get('tags') - include = options.get('include') - exclude = options.get('exclude') - - try: - path = settings.LESMIANATOR_PICKLE - except: - print self.style.ERROR('LESMIANATOR_PICKLE not set in the settings.') - return - - books = [] - - if include: - books += list(Book.objects.filter(slug__in=include.split(',')).only('slug', 'txt_file')) - - if tags: - books += list(Book.tagged.with_all(Tag.objects.filter(slug__in=tags.split(','))).only('slug', 'txt_file')) - elif not include: - books = list(Book.objects.all().only('slug', 'txt_file')) - - if exclude: - books = [book for book in books if book.slug not in exclude.split(',')] - - books = set(books) - - lesmianator = {} - processed = skipped = 0 - for book in books: - if verbose >= 2: - print 'Parsing', book.slug - if not book.txt_file: - if verbose >= 1: - print self.style.NOTICE('%s has no TXT file' % book.slug) - skipped += 1 - continue - f = open(book.txt_file.path) - m = re_text(f.read()) - if not m: - print self.style.ERROR("Unknown text format: %s" % book.slug) - skipped += 1 - continue - - processed += 1 - last_word = '' - text = unicode(m.group(1), 'utf-8').lower() - for letter in text: - mydict = lesmianator.setdefault(last_word, {}) - mydict.setdefault(letter, 0) - mydict[letter] += 1 - last_word = last_word[-2:] + letter - f.close() - - if not processed: - if skipped: - print self.style.ERROR("No books with TXT files found") - else: - print self.style.ERROR("No books found") - return - - try: - dump(lesmianator, open(path, 'w')) - except: - print self.style.ERROR("Couldn't write to $s" % path) - return - - dump(lesmianator, open(path, 'w')) - if verbose >= 1: - print "%d processed, %d skipped" % (processed, skipped) - print "Results dumped to %s" % path diff --git a/apps/lesmianator/migrations/0001_initial.py b/apps/lesmianator/migrations/0001_initial.py deleted file mode 100644 index 17627e682..000000000 --- a/apps/lesmianator/migrations/0001_initial.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import jsonfield.fields -from django.conf import settings - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('contenttypes', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Continuations', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('pickle', models.FileField(upload_to=b'lesmianator', verbose_name='Continuations file')), - ('object_id', models.PositiveIntegerField()), - ('content_type', models.ForeignKey(to='contenttypes.ContentType')), - ], - options={ - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Poem', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('slug', models.SlugField(max_length=120, verbose_name='Slug')), - ('text', models.TextField(verbose_name='text')), - ('created_from', jsonfield.fields.JSONField(null=True, verbose_name='Additional information', blank=True)), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date')), - ('seen_at', models.DateTimeField(auto_now_add=True, verbose_name='last view date')), - ('view_count', models.IntegerField(default=1, verbose_name='view count')), - ('created_by', models.ForeignKey(to=settings.AUTH_USER_MODEL, null=True)), - ], - options={ - }, - bases=(models.Model,), - ), - migrations.AlterUniqueTogether( - name='continuations', - unique_together=set([('content_type', 'object_id')]), - ), - ] diff --git a/apps/lesmianator/migrations/0002_auto_20151221_1225.py b/apps/lesmianator/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index 29a33a85c..000000000 --- a/apps/lesmianator/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models -import jsonfield.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('lesmianator', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='poem', - name='created_from', - field=jsonfield.fields.JSONField(null=True, verbose_name='extra information', blank=True), - ), - migrations.AlterField( - model_name='poem', - name='slug', - field=models.SlugField(max_length=120, verbose_name='slug'), - ), - ] diff --git a/apps/lesmianator/migrations/__init__.py b/apps/lesmianator/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/lesmianator/models.py b/apps/lesmianator/models.py deleted file mode 100644 index 5db02c2ae..000000000 --- a/apps/lesmianator/models.py +++ /dev/null @@ -1,178 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import cPickle -from datetime import datetime -from random import randint -from StringIO import StringIO - -from django.core.files.base import ContentFile -from django.db import models -from django.utils.timezone import utc -from django.utils.translation import ugettext_lazy as _ -from django.core.urlresolvers import reverse -from django.contrib.auth.models import User -from django.contrib.contenttypes.models import ContentType -from django.contrib.contenttypes.fields import GenericForeignKey -from django.conf import settings - -from jsonfield import JSONField -from catalogue.models import Book, Tag - - -class Poem(models.Model): - slug = models.SlugField(_('slug'), max_length=120, db_index=True) - text = models.TextField(_('text')) - created_by = models.ForeignKey(User, null=True) - created_from = JSONField(_('extra information'), null=True, blank=True) - created_at = models.DateTimeField(_('creation date'), auto_now_add=True, editable=False) - seen_at = models.DateTimeField(_('last view date'), auto_now_add=True, editable=False) - view_count = models.IntegerField(_('view count'), default=1) - - try: - f = open(settings.LESMIANATOR_PICKLE) - global_dictionary = cPickle.load(f) - f.close() - except: - global_dictionary = {} - - def visit(self): - self.view_count += 1 - self.seen_at = datetime.utcnow().replace(tzinfo=utc) - self.save() - - def __unicode__(self): - return "%s (%s...)" % (self.slug, self.text[:20]) - - @staticmethod - def choose_letter(word, continuations): - if word not in continuations: - return u'\n' - - choices = sum((continuations[word][letter] - for letter in continuations[word])) - r = randint(0, choices - 1) - - for letter in continuations[word]: - r -= continuations[word][letter] - if r < 0: - return letter - - @classmethod - def write(cls, continuations=None, length=3, min_lines=2, maxlen=1000): - if continuations is None: - continuations = cls.global_dictionary - if not continuations: - return '' - - letters = [] - word = u'' - - finished_stanza_verses = 0 - current_stanza_verses = 0 - verse_start = True - - char_count = 0 - - # do `min_lines' non-empty verses and then stop, - # but let Lesmianator finish his last stanza. - while finished_stanza_verses < min_lines and char_count < maxlen: - letter = cls.choose_letter(word, continuations) - letters.append(letter) - word = word[-length + 1:] + letter - char_count += 1 - - if letter == u'\n': - if verse_start: - finished_stanza_verses += current_stanza_verses - current_stanza_verses = 0 - else: - current_stanza_verses += 1 - verse_start = True - else: - verse_start = False - - return ''.join(letters).strip() - - def get_absolute_url(self): - return reverse('get_poem', kwargs={'poem': self.slug}) - - -class Continuations(models.Model): - pickle = models.FileField(_('Continuations file'), upload_to='lesmianator') - content_type = models.ForeignKey(ContentType) - object_id = models.PositiveIntegerField() - content_object = GenericForeignKey('content_type', 'object_id') - - class Meta: - unique_together = (('content_type', 'object_id'), ) - - def __unicode__(self): - return "Continuations for: %s" % unicode(self.content_object) - - @staticmethod - def join_conts(a, b): - for pre in b: - a.setdefault(pre, {}) - for post in b[pre]: - a[pre].setdefault(post, 0) - a[pre][post] += b[pre][post] - return a - - @classmethod - def for_book(cls, book, length=3): - # count from this book only - output = StringIO() - wldoc = book.wldocument(parse_dublincore=False) - output = wldoc.as_text(('raw-text',)).get_string() - del wldoc - - conts = {} - last_word = '' - for letter in output.decode('utf-8').strip().lower(): - mydict = conts.setdefault(last_word, {}) - mydict.setdefault(letter, 0) - mydict[letter] += 1 - last_word = last_word[-length+1:] + letter - # add children - return reduce(cls.join_conts, - (cls.get(child) for child in book.children.all().iterator()), - conts) - - @classmethod - def for_set(cls, tag): - books = Book.tagged_top_level([tag]) - cont_tabs = (cls.get(b) for b in books.iterator()) - return reduce(cls.join_conts, cont_tabs) - - @classmethod - def get(cls, sth): - object_type = ContentType.objects.get_for_model(sth) - should_keys = set([sth.id]) - if isinstance(sth, Tag): - should_keys = set(b.pk for b in Book.tagged.with_any((sth,)).iterator()) - try: - obj = cls.objects.get(content_type=object_type, object_id=sth.id) - if not obj.pickle: - raise cls.DoesNotExist - f = open(obj.pickle.path) - keys, conts = cPickle.load(f) - f.close() - if set(keys) != should_keys: - raise cls.DoesNotExist - return conts - except cls.DoesNotExist: - if isinstance(sth, Book): - conts = cls.for_book(sth) - elif isinstance(sth, Tag): - conts = cls.for_set(sth) - else: - raise NotImplementedError('Lesmianator continuations: only Book and Tag supported') - - c, created = cls.objects.get_or_create(content_type=object_type, object_id=sth.id) - c.pickle.save(sth.slug+'.p', ContentFile(cPickle.dumps((should_keys, conts)))) - c.save() - return conts - - diff --git a/apps/lesmianator/templates/lesmianator/lesmianator.html b/apps/lesmianator/templates/lesmianator/lesmianator.html deleted file mode 100644 index cc7decbc7..000000000 --- a/apps/lesmianator/templates/lesmianator/lesmianator.html +++ /dev/null @@ -1,60 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} - -{% block titleextra %}LeÅmianator{% endblock %} - -{% block metadescription %}Stwórz wÅasny wierszmiks z utworów znajdujÄ cych siÄ na Wolnych Lekturach.{% endblock %} - -{% block bodyid %}lesmianator{% endblock %} - -{% block body %} - <h1>LeÅmianator</h1> - - <div class="left-column"> - <div class="normal-text"> - <p>LeÅmianator tworzy wierszmiksy â dziÄki niemu - <a href="{% url 'new_poem' %}">napiszesz wiersz jednym klikniÄciem</a>. - W nowej odsÅonie nowe możliwoÅci zabawy â teraz możesz zdecydowaÄ, co wrzucasz do miksera, - a swoimi dzieÅami podzieliÄ siÄ z przyjacióÅmi!</p> - <p>PrzygotowaliÅmy kilka propozycji na start â możesz wybraÄ jednÄ z nich, - albo uÅożyÄ sobie wÅasnÄ , niepowtarzalnÄ mieszankÄ.</p> - <ul> - <li><a href="{% url 'poem_from_book' 'liryki-lozanskie' %}">Adam Mickiewicz, Liryki lozaÅskie</a></li> - <li><a href="{% url 'poem_from_book' 'sonety-krymskie' %}">Adam Mickiewicz, Sonety krymskie</a></li> - <li><a href="{% url 'poem_from_book' 'hymny' %}">Jan Kasprowicz, Hymny</a></li> - <li><a href="{% url 'poem_from_book' 'bogurodzica' %}">Bogurodzica</a></li> - {% for s in shelves %} - <li><a href="{% url 'poem_from_set' s.slug %}">{{ s.name }}</a></li> - {% endfor %} - - </div> - </div> - - <div class="right-column"> - <div class="normal-text"> - <h3>Miksuj utwory</h3> - <p>Możesz <a href="{% url 'new_poem' %}">zmiksowaÄ caÅÄ lirykÄ</a> w naszej bibliotece - albo tylko jeden konkretny utwór. Jak? Wejdź na - <a href="{% url 'book_detail' 'do-m' %}">stronÄ utworu</a>, - kliknij w link âmiksuj ten utwórâ â i gotowe!</p> - - <h3>Miksuj póÅki</h3> - <p>ZaÅóż konto, poukÅadaj swoje ulubione ksiÄ Å¼ki na póÅkach i miksuj - w dowolnych konfiguracjach. Nic prostszego, niż zmieszaÄ - <a href="{% url 'tagged_object_list' 'autor/boleslaw-lesmian' %}">LeÅmiana</a> z - <a href="{% url 'tagged_object_list' 'autor/kazimierz-przerwa-tetmajer' %}">Tetmajerem</a>, - a <a href="{% url 'tagged_object_list' 'autor/stefan-zeromski' %}">Å»eromskiego</a> z - <a href="{% url 'tagged_object_list' 'autor/henryk-sienkiewicz' %}">Sienkiewiczem</a> - â wystarczy wrzuciÄ ich utwory na póÅkÄ i kliknÄ Ä - w link âmiksuj utwory z tej póÅkiâ.</p> - - <h3>Dziel siÄ z innymi</h3> - <p>WyszedÅ Ci wyjÄ tkowo udany wierszmiks? Znajdziesz pod nim link, przy pomocy - którego możesz siÄ nim podzieliÄ z przyjacióÅmi.</p> - - <p>MiÅej zabawy!</p> - - </div> - </div> -{% endblock %} diff --git a/apps/lesmianator/templates/lesmianator/poem.html b/apps/lesmianator/templates/lesmianator/poem.html deleted file mode 100644 index 4c4726f0f..000000000 --- a/apps/lesmianator/templates/lesmianator/poem.html +++ /dev/null @@ -1,65 +0,0 @@ -{% extends "catalogue/viewer_base.html" %} -{% load i18n %} - - -{% block title %}LeÅmianator{% endblock %} - - -{% block menu %} - <li><a href='{% url 'lesmianator' %}'><span class="label">Wolne Lektury przepuszczone przez mikser.</span></a></li> - {% if shelf or not books %} - {# shelf or global mixing #} - <li><a href=''><span class='label'>Twórzże siÄ jeszcze raz!</span></a></li> - {% else %}{% if book %} - <li><a href='{% url "poem_from_book" book.slug %}'><span class='label'>Twórzże siÄ jeszcze raz!</span></a></li> - {% endif %}{% endif %} -{% endblock menu %} - - - -{% block main-text %} - <div id="book-text"> - <h1> - <span class="author">LeÅmianator</span> - <span class="title">***</span> - </h1> - {{ poem.text|linebreaksbr }} - <div id="footnotes" > - <h3>O utworze</h3> - <div><p> - Aby pokazaÄ innym ten utwór, użyj linku:<br/> - <a class="permalink" href="{{ poem.get_absolute_url }}">http://www.wolnelektury.pl{{ poem.get_absolute_url }}</a> - </p></div> - <div> - {% if book %} - <p>Tekst powstaÅ przez zmiksowanie utworu - <a href="{{ book.get_absolute_url }}">{{ book.title }}</a>.<br/> - <a href="{% url 'poem_from_book' book.slug %}">Zmiksuj go ponownie</a> - albo <a href="{% url 'lesmianator' %}">zobacz</a>, co jeszcze możesz zamieszaÄ.</p> - {% else %}{% if books %} - <p>Tekst powstaÅ przez zmiksowanie utworów:</p> - <ul> - {% for book in books %} - <li><a href="{{ book.get_absolute_url }}">{{ book.title }}</a></li> - {% endfor %} - </ul> - {% if shelf %} - <p> - <a href="">Zmiksuj</a> - póÅkÄ <a href="{{ shelf.get_absolute_url }}">{{ shelf.name }}</a> - jeszcze raz, albo - <a href="{% url 'lesmianator' %}">zobacz</a>, co jeszcze możesz zamieszaÄ.</p> - {% else %} - <p><a href="{% url 'lesmianator' %}">Zobacz</a>, - jak Åatwo możesz stworzyÄ wÅasny wierszmiks.</p> - {% endif %} - {% else %} - <p>Wiersz powstaÅ przez zmiksowanie ze sobÄ caÅej liryki z Wolnych Lektur. - <a href="">Spróbuj jeszcze raz</a>, albo - <a href="{% url 'lesmianator' %}">zobacz</a>, co jeszcze możesz zamieszaÄ.</p> - {% endif %}{% endif %} - <div> - </div> - </div> - </div> -{% endblock main-text %} diff --git a/apps/lesmianator/urls.py b/apps/lesmianator/urls.py deleted file mode 100644 index 1770140b9..000000000 --- a/apps/lesmianator/urls.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import url, patterns - -urlpatterns = patterns('lesmianator.views', - url(r'^$', 'main_page', name='lesmianator'), - url(r'^wiersz/$', 'new_poem', name='new_poem'), - url(r'^lektura/(?P<slug>[a-z0-9-]+)/$', 'poem_from_book', name='poem_from_book'), - url(r'^polka/(?P<shelf>[a-zA-Z0-9-]+)/$', 'poem_from_set', name='poem_from_set'), - url(r'^wiersz/(?P<poem>[a-zA-Z0-9-]+)/$', 'get_poem', name='get_poem'), -) - diff --git a/apps/lesmianator/views.py b/apps/lesmianator/views.py deleted file mode 100644 index 1ef4397b3..000000000 --- a/apps/lesmianator/views.py +++ /dev/null @@ -1,78 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.shortcuts import render_to_response, get_object_or_404 -from django.template import RequestContext -from django.views.decorators import cache - -from catalogue.utils import get_random_hash -from catalogue.models import Book, Tag -from lesmianator.models import Poem, Continuations - - -def main_page(request): - last = Poem.objects.all().order_by('-created_at')[:10] - shelves = Tag.objects.filter(user__username='lesmianator') - - return render_to_response('lesmianator/lesmianator.html', - {"last": last, "shelves": shelves}, - context_instance=RequestContext(request)) - - -@cache.never_cache -def new_poem(request): - user = request.user if request.user.is_authenticated() else None - text = Poem.write() - p = Poem(slug=get_random_hash(text), text=text, created_by=user) - p.save() - - return render_to_response('lesmianator/poem.html', - {"poem": p}, - context_instance=RequestContext(request)) - - -@cache.never_cache -def poem_from_book(request, slug): - book = get_object_or_404(Book, slug=slug) - user = request.user if request.user.is_authenticated() else None - text = Poem.write(Continuations.get(book)) - p = Poem(slug=get_random_hash(text), text=text, created_by=user) - p.created_from = [book.id] - p.save() - - return render_to_response('lesmianator/poem.html', - {"poem": p, "books": [book], "book": book}, - context_instance=RequestContext(request)) - - -@cache.never_cache -def poem_from_set(request, shelf): - user = request.user if request.user.is_authenticated() else None - tag = get_object_or_404(Tag, category='set', slug=shelf) - text = Poem.write(Continuations.get(tag)) - p = Poem(slug=get_random_hash(text), text=text, created_by=user) - books = Book.tagged.with_any((tag,)) - p.created_from = [b.id for b in books] - p.save() - - book = books[0] if len(books) == 1 else None - - return render_to_response('lesmianator/poem.html', - {"poem": p, "shelf": tag, "books": books, "book": book}, - context_instance=RequestContext(request)) - -def get_poem(request, poem): - p = get_object_or_404(Poem, slug=poem) - p.visit() - if p.created_from: - books = Book.objects.filter(id__in=p.created_from) - book = books[0] if len(books) == 1 else None - else: - books = book = None - - return render_to_response('lesmianator/poem.html', - {"poem": p, "books": books, "book": book}, - context_instance=RequestContext(request)) - - diff --git a/apps/libraries/__init__.py b/apps/libraries/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/libraries/admin.py b/apps/libraries/admin.py deleted file mode 100644 index 5629e93a0..000000000 --- a/apps/libraries/admin.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib import admin - -from libraries.models import Library, Catalog - - -admin.site.register(Catalog) -admin.site.register(Library) diff --git a/apps/libraries/locale/pl/LC_MESSAGES/django.mo b/apps/libraries/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 8772f1aae..000000000 Binary files a/apps/libraries/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/libraries/locale/pl/LC_MESSAGES/django.po b/apps/libraries/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 58df7be76..000000000 --- a/apps/libraries/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,60 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" - -#: models.py:8 models.py:26 -msgid "name" -msgstr "nazwa" - -#: models.py:9 models.py:27 -msgid "slug" -msgstr "" - -#: models.py:12 -msgid "catalog" -msgstr "katalog" - -#: models.py:13 -msgid "catalogs" -msgstr "katalogi" - -#: models.py:29 -msgid "url" -msgstr "url" - -#: models.py:30 -msgid "description" -msgstr "opis" - -#: models.py:33 -msgid "library" -msgstr "biblioteka" - -#: models.py:34 -msgid "libraries" -msgstr "biblioteki" - -#: templates/libraries/catalog_view.html:4 -msgid "Libraries directory" -msgstr "Katalog bibliotek" - -#: templates/libraries/main_view.html:4 templates/libraries/main_view.html:8 -msgid "Library directories" -msgstr "Katalogi bibliotek" diff --git a/apps/libraries/migrations/0001_initial.py b/apps/libraries/migrations/0001_initial.py deleted file mode 100644 index 4b210f8b7..000000000 --- a/apps/libraries/migrations/0001_initial.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Catalog', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=120, verbose_name='name')), - ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), - ], - options={ - 'verbose_name': 'catalog', - 'verbose_name_plural': 'catalogs', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Library', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=120, verbose_name='name', blank=True)), - ('slug', models.SlugField(max_length=120, unique=True, null=True, verbose_name='Slug')), - ('url', models.CharField(max_length=120, verbose_name='url', blank=True)), - ('description', models.TextField(verbose_name='Description', blank=True)), - ('catalog', models.ForeignKey(related_name=b'libraries', on_delete=django.db.models.deletion.PROTECT, to='libraries.Catalog')), - ], - options={ - 'verbose_name': 'library', - 'verbose_name_plural': 'libraries', - }, - bases=(models.Model,), - ), - ] diff --git a/apps/libraries/migrations/0002_auto_20151221_1225.py b/apps/libraries/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index 123580d91..000000000 --- a/apps/libraries/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('libraries', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='catalog', - name='slug', - field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), - ), - migrations.AlterField( - model_name='library', - name='description', - field=models.TextField(verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='library', - name='slug', - field=models.SlugField(max_length=120, unique=True, null=True, verbose_name='slug'), - ), - ] diff --git a/apps/libraries/migrations/__init__.py b/apps/libraries/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/libraries/models.py b/apps/libraries/models.py deleted file mode 100644 index c83afbbba..000000000 --- a/apps/libraries/models.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.db import models -from django.utils.translation import ugettext_lazy as _ - - -class Catalog(models.Model): - """Represents a dictionary of libraries""" - - name = models.CharField(_('name'), max_length=120, null=False) - slug = models.SlugField(_('slug'), max_length=120, unique=True, db_index=True) - - class Meta: - verbose_name = _('catalog') - verbose_name_plural = _('catalogs') - - def __unicode__(self): - return self.name - - @models.permalink - def get_absolute_url(self): - return ('libraries_catalog_view', [self.slug]) - - -class Library(models.Model): - """Represent a single library in the libraries dictionary""" - - name = models.CharField(_('name'), max_length=120, blank=True) - slug = models.SlugField(_('slug'), max_length=120, unique=True, db_index=True, null=True) - catalog = models.ForeignKey(Catalog, null=False, related_name='libraries', on_delete=models.PROTECT) - url = models.CharField(_('url'), max_length=120, blank=True) - description = models.TextField(_('description'), blank=True) - - class Meta: - verbose_name = _('library') - verbose_name_plural = _('libraries') - - def __unicode__(self): - return self.name - - @models.permalink - def get_absolute_url(self): - return ('libraries_library_view', [self.catalog.slug, self.slug]) diff --git a/apps/libraries/templates/libraries/catalog_view.html b/apps/libraries/templates/libraries/catalog_view.html deleted file mode 100644 index 5d35fd973..000000000 --- a/apps/libraries/templates/libraries/catalog_view.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block titleextra %}{% trans 'Libraries directory' %}{% endblock %} - - -{% block body %} - <h1>{{ catalog.name }}</h1> - <div class="left-column"> - <div class="normal-text"> - <ul> - {% for library in catalog.libraries.all %} - <li><a href="{{library.get_absolute_url}}">{{library.name}}</a></li> - {% endfor %} - </ul> - </div> - </div> - -{% endblock %} \ No newline at end of file diff --git a/apps/libraries/templates/libraries/library_view.html b/apps/libraries/templates/libraries/library_view.html deleted file mode 100644 index a97282987..000000000 --- a/apps/libraries/templates/libraries/library_view.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block titleextra %}{{ library.name }}{% endblock %} - - -{% block body %} - <h1>{{ library.name }}</h1> - <div class="normal-text"> - <p>Adres strony www: <a href="{{library.url}}">{{library.url}}</a></p> - {% autoescape off %}{{library.description}}{% endautoescape%} - </div> -{% endblock %} \ No newline at end of file diff --git a/apps/libraries/templates/libraries/main_view.html b/apps/libraries/templates/libraries/main_view.html deleted file mode 100644 index 55e5f0249..000000000 --- a/apps/libraries/templates/libraries/main_view.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block titleextra %}{% trans 'Library directories' %}{% endblock %} - - -{% block body %} - <h1>{% trans 'Library directories' %}</h1> - <div class="left-column"> - <div class="normal-text"> - <ul> - {% for catalog in catalogs %} - <li><a href="{{catalog.get_absolute_url}}">{{catalog}}</a></li> - {% endfor %} - </ul> - </div> - </div> - -{% endblock %} \ No newline at end of file diff --git a/apps/libraries/urls.py b/apps/libraries/urls.py deleted file mode 100644 index 754b17e44..000000000 --- a/apps/libraries/urls.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url - - -urlpatterns = patterns('libraries.views', - url(r'^$', 'main_view', name='libraries_main_view'), - url(r'^(?P<slug>[a-zA-Z0-9_-]+)$', 'catalog_view', name='libraries_catalog_view'), - url(r'^(?P<catalog_slug>[a-zA-Z0-9_-]+)/(?P<slug>[a-zA-Z0-9_-]+)$', 'library_view', name='libraries_library_view'), -) diff --git a/apps/libraries/views.py b/apps/libraries/views.py deleted file mode 100644 index 7e245adbd..000000000 --- a/apps/libraries/views.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.shortcuts import render_to_response, get_object_or_404 -from django.template import RequestContext - -from libraries.models import Catalog, Library - - -def main_view(request): - context = RequestContext(request) - context['catalogs'] = Catalog.objects.all() - return render_to_response('libraries/main_view.html', context_instance=context) - -def catalog_view(request, slug): - context = RequestContext(request) - context['catalog'] = get_object_or_404(Catalog.objects.filter(slug=slug).select_related()) - return render_to_response('libraries/catalog_view.html', context_instance=context) - -def library_view(request, catalog_slug, slug): - context = RequestContext(request) - context['library'] = get_object_or_404(Library.objects.filter(slug=slug).filter(catalog__slug=catalog_slug)) - return render_to_response('libraries/library_view.html', context_instance=context) diff --git a/apps/newtagging/__init__.py b/apps/newtagging/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/newtagging/admin.py b/apps/newtagging/admin.py deleted file mode 100644 index 57a76d5d4..000000000 --- a/apps/newtagging/admin.py +++ /dev/null @@ -1,67 +0,0 @@ -# -*- coding: utf-8 -*- -from django.contrib import admin -from django import forms -from django.utils.safestring import mark_safe -from django.utils.translation import ugettext_lazy as _ - - -class FilteredSelectMultiple(forms.SelectMultiple): - """ - A SelectMultiple with a JavaScript filter interface. - - Note that the resulting JavaScript assumes that the SelectFilter2.js - library and its dependencies have been loaded in the HTML page. - """ - def _media(self): - from django.conf import settings - js = ['js/SelectBox.js' , 'js/SelectFilter2.js'] - return forms.Media(js=['%sadmin/%s' % (settings.STATIC_URL, url) for url in js]) - media = property(_media) - - def __init__(self, verbose_name, is_stacked, attrs=None, choices=()): - self.verbose_name = verbose_name - self.is_stacked = is_stacked - super(FilteredSelectMultiple, self).__init__(attrs, choices) - - def render(self, name, value, attrs=None, choices=()): - from django.conf import settings - output = [super(FilteredSelectMultiple, self).render(name, value, attrs, choices)] - output.append(u'<script type="text/javascript">addEvent(window, "load", function(e) {') - # TODO: "id_" is hard-coded here. This should instead use the correct - # API to determine the ID dynamically. - output.append(u'SelectFilter.init("id_%s", "%s", %s, "%s"); });</script>\n' % \ - (name, self.verbose_name.replace('"', '\\"'), int(self.is_stacked), settings.STATIC_URL + "admin/")) - return mark_safe(u''.join(output)) - - -class TaggableModelForm(forms.ModelForm): - tags = forms.MultipleChoiceField(label=_('tags').capitalize(), required=False, widget=FilteredSelectMultiple(_('tags'), False)) - - def __init__(self, *args, **kwargs): - if 'instance' in kwargs: - if 'initial' not in kwargs: - kwargs['initial'] = {} - kwargs['initial']['tags'] = [tag.id for tag in self.tag_model.objects.get_for_object(kwargs['instance'])] - super(TaggableModelForm, self).__init__(*args, **kwargs) - self.fields['tags'].choices = [(tag.id, tag.name) for tag in self.tag_model.objects.all()] - - def save(self, commit): - obj = super(TaggableModelForm, self).save() - tag_ids = self.cleaned_data['tags'] - tags = self.tag_model.objects.filter(pk__in=tag_ids) - self.tag_model.objects.update_tags(obj, tags) - return obj - - def save_m2m(self): - # TODO: Shouldn't be needed - pass - - -class TaggableModelAdmin(admin.ModelAdmin): - form = TaggableModelForm - - def get_form(self, request, obj=None): - form = super(TaggableModelAdmin, self).get_form(request, obj) - form.tag_model = self.tag_model - return form - diff --git a/apps/newtagging/locale/de/LC_MESSAGES/django.mo b/apps/newtagging/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index a3ba8feae..000000000 Binary files a/apps/newtagging/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/de/LC_MESSAGES/django.po b/apps/newtagging/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index 01dcf5fa3..000000000 --- a/apps/newtagging/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,50 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-13 12:19+0100\n" -"Last-Translator: xxx <xxx>\n" -"Language-Team: \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: admin.py:38 -msgid "tags" -msgstr "Tags" - -#: models.py:531 -msgid "tag" -msgstr "Tag" - -#: models.py:532 -msgid "content type" -msgstr "Inhaltstyp" - -#: models.py:533 -msgid "object id" -msgstr "Objekt-ID" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "tagged_object_list must be called with a queryset or a model." - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "tagged_object_list must be called with a tag model." - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "tagged_object_list must be called with a tag." - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "Keine entsprechende Tags zu \"%s\" gefunden" diff --git a/apps/newtagging/locale/en/LC_MESSAGES/django.mo b/apps/newtagging/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index 571ac5d62..000000000 Binary files a/apps/newtagging/locale/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/en/LC_MESSAGES/django.po b/apps/newtagging/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index a2b36bea6..000000000 --- a/apps/newtagging/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,50 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 20:05+0100\n" -"Last-Translator: xxx <xxx>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: admin.py:38 -msgid "tags" -msgstr "tags" - -#: models.py:531 -msgid "tag" -msgstr "tag" - -#: models.py:532 -msgid "content type" -msgstr "content type" - -#: models.py:533 -msgid "object id" -msgstr "object id" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "tagged_object_list must be defined with a queryset or a model" - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "tagged_object_list must be defined with a tag model" - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "tagged_object_list must be defined with a tag" - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "No tag found matching \"%s\"." diff --git a/apps/newtagging/locale/es/LC_MESSAGES/django.mo b/apps/newtagging/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index 0e3ceedeb..000000000 Binary files a/apps/newtagging/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/es/LC_MESSAGES/django.po b/apps/newtagging/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index 06accc8c0..000000000 --- a/apps/newtagging/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,51 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-28 12:01+0100\n" -"Last-Translator: Aneta <afroneta@wp.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: admin.py:38 -msgid "tags" -msgstr "tags" - -#: models.py:531 -msgid "tag" -msgstr "tag" - -#: models.py:532 -msgid "content type" -msgstr "tipo de contenido" - -#: models.py:533 -msgid "object id" -msgstr "id de objeto" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "" -"lista_de_objetos_agregados debe ser llamada con un queryset o un modelo." - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "lista_de_objetos_agregados debe ser nombrada con un modelo de tag." - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "lista_de_objetos_agregados debe ser nombrada con un tag." - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "No se han encontrado tags correspondientes \"%s\"." diff --git a/apps/newtagging/locale/fr/LC_MESSAGES/django.mo b/apps/newtagging/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index 87ec8c5d3..000000000 Binary files a/apps/newtagging/locale/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/fr/LC_MESSAGES/django.po b/apps/newtagging/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index 9368f459a..000000000 --- a/apps/newtagging/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,50 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-23 17:28+0100\n" -"Last-Translator: Ela Janota <amarillis5@wp.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: admin.py:38 -msgid "tags" -msgstr "étiquettes" - -#: models.py:531 -msgid "tag" -msgstr "étiquette" - -#: models.py:532 -msgid "content type" -msgstr "type du contenu" - -#: models.py:533 -msgid "object id" -msgstr "Identifiant de l'objet" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "tagged_object_list doit être appelé avec un queryset ou un modèle." - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "tagged_object_list doit être appelé avec un modèle d'étiquette." - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "tagged_object_list doit être appelé avec une étiquette." - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "Aucune étiquette correspondant à \"%s\" trouvée." diff --git a/apps/newtagging/locale/it/LC_MESSAGES/django.mo b/apps/newtagging/locale/it/LC_MESSAGES/django.mo deleted file mode 100644 index bc4994c9e..000000000 Binary files a/apps/newtagging/locale/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/it/LC_MESSAGES/django.po b/apps/newtagging/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index fd1d8bc72..000000000 --- a/apps/newtagging/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,53 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-18 13:41+0100\n" -"Last-Translator: xxx\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" - -#: admin.py:38 -msgid "tags" -msgstr "i tag" - -#: models.py:531 -msgid "tag" -msgstr "tag" - -#: models.py:532 -msgid "content type" -msgstr "tipo di contenuto" - -#: models.py:533 -msgid "object id" -msgstr "oggetto id" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "" -"Lâelenco degli oggetti taggati deve essere chiamato con un queryset oppure " -"un modello. " - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "Lâelenco degli oggetti taggati deve essere chiamato con un modello tag" - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "Lâelenco degli oggetti taggati deve essere chiamato con un tag." - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "Nessun tag corrispondente a \"%s\" è stato trovato." diff --git a/apps/newtagging/locale/jp/LC_MESSAGES/django.mo b/apps/newtagging/locale/jp/LC_MESSAGES/django.mo deleted file mode 100644 index c9739db34..000000000 Binary files a/apps/newtagging/locale/jp/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/jp/LC_MESSAGES/django.po b/apps/newtagging/locale/jp/LC_MESSAGES/django.po deleted file mode 100644 index 7ea964955..000000000 --- a/apps/newtagging/locale/jp/LC_MESSAGES/django.po +++ /dev/null @@ -1,51 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: admin.py:38 -msgid "tags" -msgstr "" - -#: models.py:531 -msgid "tag" -msgstr "" - -#: models.py:532 -msgid "content type" -msgstr "" - -#: models.py:533 -msgid "object id" -msgstr "" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "" - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "" - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "" - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "" diff --git a/apps/newtagging/locale/lt/LC_MESSAGES/django.mo b/apps/newtagging/locale/lt/LC_MESSAGES/django.mo deleted file mode 100644 index c10c450bd..000000000 Binary files a/apps/newtagging/locale/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/lt/LC_MESSAGES/django.po b/apps/newtagging/locale/lt/LC_MESSAGES/django.po deleted file mode 100644 index a98ffc79b..000000000 --- a/apps/newtagging/locale/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,51 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-01 16:13+0100\n" -"Last-Translator: Aneta\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" - -#: admin.py:38 -msgid "tags" -msgstr "žymÄs" - -#: models.py:531 -msgid "tag" -msgstr "žymÄ" - -#: models.py:532 -msgid "content type" -msgstr "turinio tipas" - -#: models.py:533 -msgid "object id" -msgstr "objekto ID" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "tagged_object_list must be called with a queryset or a model." - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "tagged_object_ list must be called with a tag model." - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "tagged_object_ list turi must be called with a tag." - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "Nerasta atitinkanÄių žymių \"%s\"." diff --git a/apps/newtagging/locale/pl/LC_MESSAGES/django.mo b/apps/newtagging/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index e6610193e..000000000 Binary files a/apps/newtagging/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/pl/LC_MESSAGES/django.po b/apps/newtagging/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index a2e61d98b..000000000 --- a/apps/newtagging/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,51 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2010-05-19 16:20\n" -"Last-Translator: <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" - -#: admin.py:38 -msgid "tags" -msgstr "tagi" - -#: models.py:531 -msgid "tag" -msgstr "tag" - -#: models.py:532 -msgid "content type" -msgstr "typ zawartoÅci" - -#: models.py:533 -msgid "object id" -msgstr "id obiektu" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "" - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "" - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "" - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "" diff --git a/apps/newtagging/locale/ru/LC_MESSAGES/django.mo b/apps/newtagging/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index 6f5130fa2..000000000 Binary files a/apps/newtagging/locale/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/ru/LC_MESSAGES/django.po b/apps/newtagging/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index 5090f89e2..000000000 --- a/apps/newtagging/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,51 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 22:11+0100\n" -"Last-Translator: xxx <xxx>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: admin.py:38 -msgid "tags" -msgstr "Ñаги" - -#: models.py:531 -msgid "tag" -msgstr "Ñаг" - -#: models.py:532 -msgid "content type" -msgstr "Ñип ÑодеÑжаниÑ" - -#: models.py:533 -msgid "object id" -msgstr "ID обÑекÑа" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "" -"ÑпиÑок Ñаг-обÑекÑов должен ÑоÑеÑаÑÑÑÑ Ñ Ð½Ð°Ð±Ð¾Ñом вопÑоÑов или Ñ Ð¼Ð¾Ð´ÐµÐ»ÑÑ." - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "ÑпиÑок Ñаг-обÑекÑов дожен ÑоÑеÑаÑÑÑÑ Ñ Ñаг-моделÑÑ." - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "ÑпиÑок Ñаг-обÑекÑов должен ÑоÑеÑаÑÑÑÑ Ñ Ñагом." - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "Ðикакой Ñаг не ÑооÑвеÑÑÑвÑÐµÑ \"%s\"." diff --git a/apps/newtagging/locale/uk/LC_MESSAGES/django.mo b/apps/newtagging/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index fd066609c..000000000 Binary files a/apps/newtagging/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/newtagging/locale/uk/LC_MESSAGES/django.po b/apps/newtagging/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index 392d1bfab..000000000 --- a/apps/newtagging/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,50 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-29 23:08+0100\n" -"Last-Translator: Anna Vasiutynska <was_ania@op.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: admin.py:38 -msgid "tags" -msgstr "ÑеÒи" - -#: models.py:531 -msgid "tag" -msgstr "ÑеÒ" - -#: models.py:532 -msgid "content type" -msgstr "Ñип змÑÑÑÑ" - -#: models.py:533 -msgid "object id" -msgstr "ID об'ÑкÑÑ" - -#: views.py:30 -msgid "tagged_object_list must be called with a queryset or a model." -msgstr "tagged_object_list must be called with a queryset or a model." - -#: views.py:32 -msgid "tagged_object_list must be called with a tag model." -msgstr "tagged_object_list must be called with a tag model." - -#: views.py:34 -msgid "tagged_object_list must be called with a tag." -msgstr "tagged_object_list must be called with a tag." - -#: views.py:38 -#, python-format -msgid "No tags found matching \"%s\"." -msgstr "Ðе знайдено ÑеÒÑв вÑдповÑдаÑÑÐ¸Ñ \"%s\"." diff --git a/apps/newtagging/managers.py b/apps/newtagging/managers.py deleted file mode 100644 index 0bfec5413..000000000 --- a/apps/newtagging/managers.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Custom managers for Django models registered with the tagging -application. -""" -from django.contrib.contenttypes.models import ContentType -from django.db import models - - -class ModelTagManager(models.Manager): - """ - A manager for retrieving tags for a particular model. - """ - def __init__(self, tag_model): - super(ModelTagManager, self).__init__() - self.tag_model = tag_model - - def get_queryset(self): - content_type = ContentType.objects.get_for_model(self.model) - return self.tag_model.objects.filter( - items__content_type__pk=content_type.pk).distinct() - - def related(self, tags, *args, **kwargs): - return self.tag_model.objects.related_for_model(tags, self.model, *args, **kwargs) - - def usage(self, *args, **kwargs): - return self.tag_model.objects.usage_for_model(self.model, *args, **kwargs) - - -class ModelTaggedItemManager(models.Manager): - """ - A manager for retrieving model instances based on their tags. - """ - def __init__(self, tag_model): - super(ModelTaggedItemManager, self).__init__() - self.intermediary_table_model = tag_model.objects.intermediary_table_model - - def related_to(self, obj, queryset=None): - if queryset is None: - return self.intermediary_table_model.objects.get_related( - obj, self.model) - else: - return self.intermediary_table_model.objects.get_related( - obj, queryset) - - def with_all(self, tags, queryset=None): - if queryset is None: - return self.intermediary_table_model.objects.get_by_model(self.model, tags) - else: - return self.intermediary_table_model.objects.get_by_model(queryset, tags) - - def with_any(self, tags, queryset=None): - if queryset is None: - return self.intermediary_table_model.objects.get_union_by_model(self.model, tags) - else: - return self.intermediary_table_model.objects.get_union_by_model(queryset, tags) - - -class TagDescriptor(object): - """ - A descriptor which provides access to a ``ModelTagManager`` for - model classes and simple retrieval, updating and deletion of tags - for model instances. - """ - def __init__(self, tag_model): - self.tag_model = tag_model - - def __get__(self, instance, owner): - if not instance: - tag_manager = ModelTagManager(self.tag_model) - tag_manager.model = owner - return tag_manager - else: - return self.tag_model.objects.get_for_object(instance) - - def __set__(self, instance, value): - self.tag_model.objects.update_tags(instance, value) - - def __del__(self, instance): - self.tag_model.objects.update_tags(instance, []) - diff --git a/apps/newtagging/models.py b/apps/newtagging/models.py deleted file mode 100644 index 694f5b868..000000000 --- a/apps/newtagging/models.py +++ /dev/null @@ -1,259 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Models and managers for generic tagging. -""" - -from django.contrib.contenttypes.fields import GenericForeignKey -from django.contrib.contenttypes.models import ContentType -from django.db import connection, models -from django.utils.translation import ugettext_lazy as _ -from django.db.models.base import ModelBase -from django.core.exceptions import ObjectDoesNotExist -from django.dispatch import Signal - -qn = connection.ops.quote_name - - -tags_updated = Signal(providing_args=["affected_tags"]) - -def get_queryset_and_model(queryset_or_model): - """ - Given a ``QuerySet`` or a ``Model``, returns a two-tuple of - (queryset, model). - - If a ``Model`` is given, the ``QuerySet`` returned will be created - using its default manager. - """ - try: - return queryset_or_model, queryset_or_model.model - except AttributeError: - return queryset_or_model._default_manager.all(), queryset_or_model - - -############ -# Managers # -############ -class TagManager(models.Manager): - def __init__(self, intermediary_table_model): - super(TagManager, self).__init__() - self.intermediary_table_model = intermediary_table_model - models.signals.pre_delete.connect(self.target_deleted) - - def target_deleted(self, instance, **kwargs): - """ clear tag relations before deleting an object """ - try: - int(instance.pk) - except ValueError: - return - - self.update_tags(instance, []) - - def update_tags(self, obj, tags): - """ - Update tags associated with an object. - """ - content_type = ContentType.objects.get_for_model(obj) - current_tags = list(self.filter(items__content_type__pk=content_type.pk, - items__object_id=obj.pk)) - updated_tags = self.model.get_tag_list(tags) - - # Remove tags which no longer apply - tags_for_removal = [tag for tag in current_tags \ - if tag not in updated_tags] - if len(tags_for_removal): - self.intermediary_table_model._default_manager.filter(content_type__pk=content_type.pk, - object_id=obj.pk, - tag__in=tags_for_removal).delete() - # Add new tags - tags_to_add = [tag for tag in updated_tags - if tag not in current_tags] - for tag in tags_to_add: - if tag not in current_tags: - self.intermediary_table_model._default_manager.create(tag=tag, content_object=obj) - - tags_updated.send(sender=type(obj), instance=obj, affected_tags=tags_to_add + tags_for_removal) - - def remove_tag(self, obj, tag): - """ - Remove tag from an object. - """ - content_type = ContentType.objects.get_for_model(obj) - self.intermediary_table_model._default_manager.filter(content_type__pk=content_type.pk, - object_id=obj.pk, tag=tag).delete() - - def get_for_object(self, obj): - """ - Create a queryset matching all tags associated with the given - object. - """ - ctype = ContentType.objects.get_for_model(obj) - return self.filter(items__content_type__pk=ctype.pk, - items__object_id=obj.pk) - - def usage_for_model(self, model, counts=False, filters=None): - """ - Obtain a list of tags associated with instances of the given - Model class. - - If ``counts`` is True, a ``count`` attribute will be added to - each tag, indicating how many times it has been used against - the Model class in question. - - To limit the tags (and counts, if specified) returned to those - used by a subset of the Model's instances, pass a dictionary - of field lookups to be applied to the given Model as the - ``filters`` argument. - """ - # TODO: Do we really need this filters stuff? - if filters is None: filters = {} - - queryset = model._default_manager.filter() - for f in filters.items(): - queryset.query.add_filter(f) - usage = self.usage_for_queryset(queryset, counts) - return usage - - def usage_for_queryset(self, queryset, counts=False): - """ - Obtain a list of tags associated with instances of a model - contained in the given queryset. - - If ``counts`` is True, a ``count`` attribute will be added to - each tag, indicating how many times it has been used against - the Model class in question. - """ - usage = self.model._default_manager.filter( - items__content_type=ContentType.objects.get_for_model(queryset.model), - items__object_id__in=queryset - ) - if counts: - usage = usage.annotate(count=models.Count('id')) - else: - usage = usage.distinct() - return usage - - def related_for_model(self, tags, model, counts=False): - """ - Obtain a list of tags related to a given list of tags - that - is, other tags used by items which have all the given tags. - - If ``counts`` is True, a ``count`` attribute will be added to - each tag, indicating the number of items which have it in - addition to the given list of tags. - """ - objs = self.model.intermediary_table_model.objects.get_by_model(model, tags) - qs = self.usage_for_queryset(objs, counts) - qs = qs.exclude(pk__in=[tag.pk for tag in tags]) - return qs - - -class TaggedItemManager(models.Manager): - def __init__(self, tag_model): - super(TaggedItemManager, self).__init__() - self.tag_model = tag_model - - def get_by_model(self, queryset_or_model, tags): - """ - Create a ``QuerySet`` containing instances of the specified - model associated with a given tag or list of tags. - """ - queryset, model = get_queryset_and_model(queryset_or_model) - tags = self.tag_model.get_tag_list(tags) - if not tags: - # No existing tags were given - return queryset.none() - - # TODO: presumes reverse generic relation - # Multiple joins are WAY faster than having-count, at least on Postgres 9.1. - for tag in tags: - queryset = queryset.filter(tag_relations__tag=tag) - return queryset - - def get_union_by_model(self, queryset_or_model, tags): - """ - Create a ``QuerySet`` containing instances of the specified - model associated with *any* of the given list of tags. - """ - queryset, model = get_queryset_and_model(queryset_or_model) - tags = self.tag_model.get_tag_list(tags) - if not tags: - return queryset.none() - # TODO: presumes reverse generic relation - return queryset.filter(tag_relations__tag__in=tags).distinct() - - def get_related(self, obj, queryset_or_model): - """ - Retrieve a list of instances of the specified model which share - tags with the model instance ``obj``, ordered by the number of - shared tags in descending order. - """ - queryset, model = get_queryset_and_model(queryset_or_model) - # TODO: presumes reverse generic relation. - # Do we know it's 'tags'? - return queryset.filter(tag_relations__tag__in=obj.tags).annotate( - count=models.Count('pk')).order_by('-count').exclude(pk=obj.pk) - - -########## -# Models # -########## -def create_intermediary_table_model(model): - """Create an intermediary table model for the specific tag model""" - name = model.__name__ + 'Relation' - - class Meta: - db_table = '%s_relation' % model._meta.db_table - unique_together = (('tag', 'content_type', 'object_id'),) - app_label = model._meta.app_label - - def obj_unicode(self): - try: - return u'%s [%s]' % (self.content_type.get_object_for_this_type(pk=self.object_id), self.tag) - except ObjectDoesNotExist: - return u'<deleted> [%s]' % self.tag - - # Set up a dictionary to simulate declarations within a class - attrs = { - '__module__': model.__module__, - 'Meta': Meta, - 'tag': models.ForeignKey(model, verbose_name=_('tag'), related_name='items'), - 'content_type': models.ForeignKey(ContentType, verbose_name=_('content type')), - 'object_id': models.PositiveIntegerField(_('object id'), db_index=True), - 'content_object': GenericForeignKey('content_type', 'object_id'), - '__unicode__': obj_unicode, - } - - return type(name, (models.Model,), attrs) - - -class TagMeta(ModelBase): - "Metaclass for tag models (models inheriting from TagBase)." - def __new__(mcs, name, bases, attrs): - model = super(TagMeta, mcs).__new__(mcs, name, bases, attrs) - if not model._meta.abstract: - # Create an intermediary table and register custom managers for concrete models - model.intermediary_table_model = create_intermediary_table_model(model) - TagManager(model.intermediary_table_model).contribute_to_class(model, 'objects') - TaggedItemManager(model).contribute_to_class(model.intermediary_table_model, 'objects') - return model - - -class TagBase(models.Model): - """Abstract class to be inherited by model classes.""" - __metaclass__ = TagMeta - - class Meta: - abstract = True - - @staticmethod - def get_tag_list(tag_list): - """ - Utility function for accepting tag input in a flexible manner. - - You should probably override this method in your subclass. - """ - if isinstance(tag_list, TagBase): - return [tag_list] - else: - return tag_list - diff --git a/apps/newtagging/views.py b/apps/newtagging/views.py deleted file mode 100644 index 867686d3c..000000000 --- a/apps/newtagging/views.py +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tagging related views. -""" -from django.http import Http404 -from django.utils.translation import ugettext as _ -from django.views.generic import ListView - - -def tagged_object_list(request, queryset_or_model=None, tag_model=None, tags=None, - related_tags=False, related_tag_counts=True, **kwargs): - """ - A thin wrapper around - ``django.views.generic.list_detail.object_list`` which creates a - ``QuerySet`` containing instances of the given queryset or model - tagged with the given tag. - - In addition to the context variables set up by ``object_list``, a - ``tag`` context variable will contain the ``Tag`` instance for the - tag. - - If ``related_tags`` is ``True``, a ``related_tags`` context variable - will contain tags related to the given tag for the given model. - Additionally, if ``related_tag_counts`` is ``True``, each related - tag will have a ``count`` attribute indicating the number of items - which have it in addition to the given tag. - """ - # Check attributes - if queryset_or_model is None: - raise AttributeError(_('tagged_object_list must be called with a queryset or a model.')) - if tag_model is None: - raise AttributeError(_('tagged_object_list must be called with a tag model.')) - if tags is None: - raise AttributeError(_('tagged_object_list must be called with a tag.')) - - tag_instances = tag_model.get_tag_list(tags) - if tag_instances is None: - raise Http404(_('No tags found matching "%s".') % tags) - queryset = tag_model.intermediary_table_model.objects.get_by_model(queryset_or_model, tag_instances) - if not kwargs.has_key('extra_context'): - kwargs['extra_context'] = {} - kwargs['extra_context']['tags'] = tag_instances - if related_tags: - kwargs['extra_context']['related_tags'] = \ - tag_model.objects.related_for_model(tag_instances, queryset_or_model, - counts=related_tag_counts) - return ListView.as_view(queryset=queryset)(request, **kwargs) - diff --git a/apps/oai/__init__.py b/apps/oai/__init__.py deleted file mode 100644 index 8b1378917..000000000 --- a/apps/oai/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/oai/handlers.py b/apps/oai/handlers.py deleted file mode 100644 index d9699f9fe..000000000 --- a/apps/oai/handlers.py +++ /dev/null @@ -1,238 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from oaipmh import server, common, metadata, error -from catalogue.models import Book, Tag -from api.models import Deleted -from api.handlers import WL_BASE -from librarian import WLURI -from django.contrib.contenttypes.models import ContentType -from datetime import datetime -from lxml import etree -from django.conf import settings -from django.contrib.sites.models import Site -from django.utils import timezone - - -make_time_naive = lambda d: timezone.localtime(d).replace(tzinfo=None) - -WL_DC_READER_XPATH = '(.|*)/rdf:RDF/rdf:Description/%s/text()' -wl_dc_reader = metadata.MetadataReader( - fields={ - 'title': ('textList', WL_DC_READER_XPATH % 'dc:title'), - 'creator': ('textList', WL_DC_READER_XPATH % 'dc:creator'), - 'subject': ('textList', (WL_DC_READER_XPATH + ' | ' + WL_DC_READER_XPATH + ' | ' + WL_DC_READER_XPATH) % - ('dc:subject.period', 'dc:subject.type', 'dc:subject.genre')), - 'description': ('textList', WL_DC_READER_XPATH % 'dc:description'), - 'publisher': ('textList', WL_DC_READER_XPATH % 'dc:publisher'), - 'contributor': ('textList', (WL_DC_READER_XPATH + ' | ' + WL_DC_READER_XPATH + ' | ' + WL_DC_READER_XPATH) % - ('dc:contributor.editor', 'dc:contributor.translator', 'dc:contributor.technical_editor')), - 'date': ('textList', WL_DC_READER_XPATH % 'dc:date'), - 'type': ('textList', WL_DC_READER_XPATH % 'dc:type'), - 'format': ('textList', WL_DC_READER_XPATH % 'dc:format'), - 'identifier': ('textList', WL_DC_READER_XPATH % 'dc:identifier.url'), - 'source': ('textList', WL_DC_READER_XPATH % 'dc:source'), - 'language': ('textList', WL_DC_READER_XPATH % 'dc:language'), - #'isPartOf': ('textList', 'rdf:RDF/rdf:Description/dc:relation.isPartOf/text()'), - 'hasPart': ('textList', WL_DC_READER_XPATH % 'dc:relation.hasPart'), - # 'relation': ('textList', 'rdf:RDF/rdf:Description/dc:relation/text()'), - # 'coverage': ('textList', 'rdf:RDF/rdf:Description/dc:coverage/text()'), - 'rights': ('textList', WL_DC_READER_XPATH % 'dc:rights') - }, - namespaces={ - 'dc': 'http://purl.org/dc/elements/1.1/', - 'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'} - ) - - -NS_DCTERMS = "http://purl.org/dc/terms/" - - -def nsdcterms(name): - return '{%s}%s' % (NS_DCTERMS, name) - - -class Catalogue(common.ResumptionOAIPMH): - TAG_CATEGORIES = ['author', 'epoch', 'kind', 'genre'] - - def __init__(self, metadata_registry): - super(Catalogue, self).__init__() - self.metadata_registry = metadata_registry - - self.oai_id = "oai:" + Site.objects.get_current().domain + ":%s" - - # earliest change - year_zero = timezone.make_aware(datetime(1990, 1, 1, 0, 0, 0), timezone.utc) - - try: - earliest_change = \ - Book.objects.order_by('changed_at')[0].changed_at - except: earliest_change = year_zero - - try: - earliest_delete = \ - Deleted.objects.exclude(slug__exact=u'').ordery_by('deleted_at')[0].deleted_at - except: earliest_delete = year_zero - - self.earliest_datestamp = earliest_change <= earliest_delete and \ - earliest_change or earliest_delete - - def metadata(self, book): - try: - xml = etree.parse(book.xml_file) - finally: - book.xml_file.close() - md = wl_dc_reader(xml) - m = md.getMap() - if book.parent: - m['isPartOf'] = [str(WLURI.from_slug(book.parent.slug))] - return m - - def record_for_book(self, book, headers_only=False): - meta = None - identifier = self.slug_to_identifier(book.slug) - if isinstance(book, Book): - # setSpec = map(self.tag_to_setspec, book.tags.filter(category__in=self.TAG_CATEGORIES)) - header = common.Header(identifier, make_time_naive(book.changed_at), [], False) - if not headers_only: - meta = common.Metadata(self.metadata(book)) - about = None - elif isinstance(book, Deleted): - header = common.Header(identifier, make_time_naive(book.deleted_at), [], True) - if not headers_only: - meta = common.Metadata({}) - about = None - if headers_only: - return header - return header, meta, about - - def identify(self, **kw): - ident = common.Identify( - 'Wolne Lektury', # generate - '%s/oaipmh' % unicode(WL_BASE), # generate - '2.0', # version - [m[1] for m in settings.MANAGERS], # adminEmails - make_time_naive(self.earliest_datestamp), # earliest datestamp of any change - 'persistent', # deletedRecord - 'YYYY-MM-DDThh:mm:ssZ', # granularity - ['identity'], # compression - [] # descriptions - ) - return ident - - def books(self, tag, from_, until): - if tag: - # we do not support sets, since they are problematic for deleted books. - raise error.NoSetHierarchyError("Wolne Lektury does not support sets.") - # books = Book.tagged.with_all([tag]) - else: - books = Book.objects.all() - deleted = Deleted.objects.exclude(slug__exact=u'') - - books = books.order_by('changed_at') - deleted = deleted.order_by('deleted_at') - if from_: - books = books.filter(changed_at__gte=from_) - deleted = deleted.filter(deleted_at__gte=from_) - if until: - books = books.filter(changed_at__lte=until) - deleted = deleted.filter(deleted_at__lte=until) - return list(books) + list(deleted) - - @staticmethod - def tag_to_setspec(tag): - return "%s:%s" % (tag.category, tag.slug) - - @staticmethod - def setspec_to_tag(s): - if not s: return None - cs = s.split(':') - if len(cs) == 2: - if not cs[0] in Catalogue.TAG_CATEGORIES: - raise error.NoSetHierarchyError("No category part in set") - tag = Tag.objects.get(slug=cs[1], category=cs[0]) - return tag - raise error.NoSetHierarchyError("Setspec should have two components: category:slug") - - def getRecord(self, **kw): - """ -Returns (header, metadata, about) for given record. - """ - slug = self.identifier_to_slug(kw['identifier']) - try: - book = Book.objects.get(slug=slug) - return self.record_for_book(book) - except Book.DoesNotExist: - book_type = ContentType.objects.get_for_model(Book) - try: - deleted_book = Deleted.objects.get(content_type=book_type, - slug=slug) - except: - raise error.IdDoesNotExistError("No item for this identifier") - return self.record_for_book(deleted_book) - - def validate_kw(self, kw): - if 'resumptionToken' in kw: - raise error.BadResumptionTokenError("No resumption token support at this point") - if 'metadataPrefix' in kw and not self.metadata_registry.hasWriter(kw['metadataPrefix']): - raise error.CannotDisseminateFormatError("This format is not supported") - - def identifier_to_slug(self, ident): - return ident.split(':')[-1] - - def slug_to_identifier(self, slug): - return self.oai_id % slug - - def listIdentifiers(self, **kw): - self.validate_kw(kw) - records = [self.record_for_book(book, headers_only=True) for - book in self.books(None, - kw.get('from_', None), - kw.get('until', None))] - return records, None - - def listRecords(self, **kw): - """ -can get a resumptionToken kw. -returns result, token - """ - self.validate_kw(kw) - records = [self.record_for_book(book) for - book in self.books(None, - kw.get('from_', None), - kw.get('until', None))] - - return records, None - - def listMetadataFormats(self, **kw): - formats = [ - ('oai_dc', - 'http://www.openarchives.org/OAI/2.0/oai_dc.xsd', - server.NS_OAIDC), - ('qdc', - 'http://dublincore.org/schemas/xmls/qdc/2006/01/06/dcterms.xsd', - NS_DCTERMS)] - if 'identifier' in kw: - slug = self.identifier_to_slug(kw['identifier']) - try: - b = Book.objects.get(slug=slug) - return formats - except: - try: - d = Deleted.objects.get(slug=slug) - return [] - except: - raise error.IdDoesNotExistError("This id does not exist") - else: - return formats - - def listSets(self, **kw): - raise error.NoSetHierarchyError("Wolne Lektury does not support sets.") - # tags = [] - # for category in Catalogue.TAG_CATEGORIES: - # for tag in Tag.objects.filter(category=category): - # tags.append(("%s:%s" % (tag.category, tag.slug), - # tag.name, - # tag.description)) - # return tags, None diff --git a/apps/oai/tests/__init__.py b/apps/oai/tests/__init__.py deleted file mode 100644 index 561ef604a..000000000 --- a/apps/oai/tests/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from oai.tests.oaipmhapi import * diff --git a/apps/oai/tests/files/antygona.xml b/apps/oai/tests/files/antygona.xml deleted file mode 100755 index f5244c4b4..000000000 --- a/apps/oai/tests/files/antygona.xml +++ /dev/null @@ -1,2981 +0,0 @@ -<utwor> - -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> -<rdf:Description rdf:about="http://redakcja.wolnelektury.pl/documents/book/antygona/"> -<dc:creator xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Sofokles</dc:creator> -<dc:title xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Antygona</dc:title> -<dc:contributor.editor xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">SekuÅa, Aleksandra</dc:contributor.editor> -<dc:contributor.translator xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Morawski, Kazimierz</dc:contributor.translator> -<dc:contributor.technical_editor xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">GaÅecki, Dariusz</dc:contributor.technical_editor> -<dc:publisher xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Fundacja Nowoczesna Polska</dc:publisher> -<dc:subject.period xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">StarożytnoÅÄ</dc:subject.period> -<dc:subject.type xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Dramat</dc:subject.type> -<dc:subject.genre xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Tragedia</dc:subject.genre> -<dc:description xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez BibliotekÄ NarodowÄ z egzemplarza pochodzÄ cego ze zbiorów BN.</dc:description> -<dc:identifier.url xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">http://wolnelektury.pl/katalog/lektura/antygona</dc:identifier.url> -<dc:source.URL xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">http://www.polona.pl/Content/3768</dc:source.URL> -<dc:source xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Sofokles, Antygona, tÅum. Kazimierz Morawski, wyd. 7, Wydawnictwo ZakÅadu Narodowego imienia OssoliÅskich, Lwów 1939</dc:source> -<dc:rights xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Domena publiczna - tÅumacz Kazimierz Morawski zm. 1925</dc:rights> -<dc:date.pd xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">1925</dc:date.pd> -<dc:format xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">xml</dc:format> -<dc:type xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">text</dc:type> -<dc:type xml:lang="en" xmlns:dc="http://purl.org/dc/elements/1.1/">text</dc:type> -<dc:date xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">2007-08-30</dc:date> -<dc:audience xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">G</dc:audience> -<dc:language xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">pol</dc:language> -</rdf:Description> -</rdf:RDF> - - -<dramat_wierszowany_l> - - -<extra><!--<elementy_poczatkowe>--></extra> - -<autor_utworu>Sofokles</autor_utworu> - -<nazwa_utworu>Antygona</nazwa_utworu> - - -<lista_osob> -<naglowek_listy>OSOBY DRAMATU</naglowek_listy> -<lista_osoba>ANTYGONA, córka Edypa</lista_osoba> -<lista_osoba>ISMENA, jej siostra<pe><slowo_obce>synowica</slowo_obce> --- bratanica, córka brata.</pe></lista_osoba> -<lista_osoba>CHÃR TEBANSKICH STARCÃW</lista_osoba> -<lista_osoba>KREON, król Teb</lista_osoba> -<lista_osoba>STRAÅ»NIK</lista_osoba> -<lista_osoba>HAJMON, syn Kreona</lista_osoba> -<lista_osoba>TYREZJASZ, wróżbita</lista_osoba> -<lista_osoba>POSÅANIEC.</lista_osoba> -<lista_osoba>EURYDYKA, żona Kreona</lista_osoba> -<lista_osoba>POSÅANIEC drugi</lista_osoba> -</lista_osob> - -<miejsce_czas>Rzecz dzieje siÄ przed dworcem królewskim w Tebach</miejsce_czas> - -<extra><!--</elementy_poczatkowe>--></extra> - - - -<extra><!--<tekst_glowny>--></extra> - - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -O ukochana siostro ma, Ismeno,/ -Czy ty nie widzisz, że z klÄsk Edypowych/ -Å»adnej za życia los nam nie oszczÄdza?/ -Bo nie ma cierpieÅ i nie ma ohydy,/ -Nie ma niesÅawy i haÅby, które by/ -Nas poÅród nieszczÄÅÄ pasma nie dotknÄÅy./ -Cóż bo za rozkaz znów obwieÅciÅ miastu/ -Ten, który teraz wÅadzÄ w rÄku dzierży?/ -CzyÅ zasÅyszaÅa? Czy uszÅo twej wiedzy,/ -Å»e znów wrogowie godzÄ w naszych miÅych? -</strofa> -</kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia> -<strofa> -O Antygono, żadna wieÅÄ nie doszÅa/ -Do mnie, ni sÅodka, ni goryczy peÅna,/ -Od dnia, gdy braci straciÅyÅmy obu,/ -W bratnim zabitych razem pojedynku./ -OdkÄ d tej nocy odeszÅy Argiwów/ -Hufce<pr><slowo_obce>Argiwów hufce</slowo_obce> --- Polinik zebraÅ swe zastÄpy w Argolidzie, czyli w Argosie.</pr>, niczego wiÄcej nie zaznaÅam/ -Ni ku pociesze, ni ku wiÄkszej trosce. -</strofa> -</kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -Lecz mnie wieÅÄ doszÅa, i dlatego z domu/ -CiÄ wywoÅaÅam, by rzecz ci powierzyÄ. -</strofa> -</kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia><strofa>Cóż to? Ty jakieÅ ciÄżkie ważysz sÅowa.</strofa></kwestia> - - -<begin id="b1188565612339"/><motyw id="m1188565612339">ObowiÄ zek, Rodzina</motyw><naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -O tak! Czyż nie wiesz, że z polegÅych braci/ -Kreon jednemu wrÄcz odmówiÅ grobu?/ -Å»e Eteokla, jak czyniÄ przystoi,/ -PogrzebaÅ w ziemi wÅród umarÅych rzeszy,/ -A zaÅ obwieÅciÅ, aby Polinika/ -NieszczÄsne zwÅoki bez czci pozostaÅy,/ -By nikt ich pÅakaÄ, nikt grzeÅÄ siÄ nie ważyÅ;/ -MajÄ wiec leżeÄ bez Åez i bez grobu,/ -Na pastwÄ ptakom żarÅocznym i strawÄ./ -SÅychaÄ, że Kreon czcigodny dla ciebie,/ -Co mówiÄ, dla mnie też wydaÅ ten ukaz/ -I że tu przyjdzie, by tym go ogÅosiÄ,/ -Co go nie znajÄ , nie na wiatr zaiste/ -Rzecz tÄ stanowiÄ c, lecz groÅ¼Ä c zarazem/ -Kamienowaniem ukazu przestÄpcom./ -Tak siÄ ma sprawa, teraz wraz ukażesz,/ -CzyÅ godnÄ rodu, czy wyrodnÄ córÄ . -</strofa> -</kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia> -<strofa> -Gdy taka dola, to cóż, o nieszczÄsna,/ -PrujÄ c czy snujÄ c bym mogÅa tu przydaÄ? -</strofa> -</kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>Patrz, byÅ wspomogÅa i poparÅa siostrÄ.</strofa></kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia><strofa>W jakimże dziele? DokÄ d myÅl twa mierzy?</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>Ze mnÄ masz zwÅoki opatrzyÄ braterskie.</strofa></kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia><strofa>WiÄc ty zamierzasz grzebaÄ wbrew ukazom?</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -Tak! brata mego, a dodam... i twego;/ -Bo wiaroÅomstwem nie myÅlÄ siÄ kalaÄ. -</strofa> -</kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia><strofa>Niczym dla ciebie wiÄc zakaz Kreona?</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>Niczym, on nie ma nad moimi prawa.</strofa></kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia> -<strofa> -Biada! o rozważ, siostro, jak nam ojciec/ -ZginÄ Å wÅród sromu i poÅród niesÅawy,/ -Kiedy siÄ jemu bÅÄdy ujawniÅy,/ -A on siÄ targnÄ Å na wÅasne swe oczy;/ -Å»ona i matka<pr><slowo_obce>Å»ona i matka</slowo_obce> --- odnosi siÄ do Jokasty, matki i żony Edypa, która po odkryciu swego poÅożenia z rozpaczy siÄ powiesiÅa.</pr> --- dwuznaczne to miano ---/ -Splecionym wÄzÅem swe życie ukróca;/ -Wreszcie i bracia przy jednym dnia sÅoÅcu/ -GodzÄ na siebie i morderczÄ rÄkÄ / -Jeden drugiemu ÅmierÄ srogÄ zadaje./ -<begin id="b1188559408957"/><motyw id="m1188559408957">BezsilnoÅÄ</motyw>Zważ wiÄc, że teraz i my pozostaÅe/ -Zginiemy marnie, jeżeli wbrew prawu/ -ZÅamiemy wolÄ i rozkaz tyrana./ -BaczyÄ to trzeba, że my przecie sÅabe,/ -Do walk z mÄżczyznÄ niezdolne niewiasty;/ -Å»e nam ulegaÄ silniejszym należy,/ -Tych sÅuchaÄ, nawet i sroższych rozkazów;/ -Ja wiÄc, bÅagajÄ c o wyrozumienie/ -ZmarÅych, że muszÄ tak ulec przemocy,/ -PosÅuszna bÄdÄ wÅadcom tego Åwiata,/ -Bo próżny opór urÄ ga rozwadze.<end id="e1188559408957"/> -</strofa> -</kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -<begin id="b1188559489751"/><motyw id="m1188559489751">MiÅoÅÄ silniejsza niż ÅmierÄ</motyw>Ja ci nie kaÅ¼Ä niczego, ni, choÄbyÅ/ -Pomóc mi chciaÅa, wdziÄczne by mi byÅo,/ -Lecz stój przy twojej myÅli, a ja tego/ -PogrzebiÄ sama, potem zginÄ z chlubÄ ./ -Niechaj siÄ zbratam z mym kochanym w Åmierci/ -Po ÅwiÄtej zbrodni; a dÅużej mi zmarÅym/ -MiÅÄ byÄ trzeba, niż ziemi mieszkaÅcom,/ -Bo tam zostanÄ na wieki<end id="e1188559489751"/>; tymczasem/ -Ty tu znieważaj ÅwiÄte prawa bogów. -</strofa> -</kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia> -<strofa> -Ja nie znieważam ich, nie bÄdÄ c w mocy/ -DziaÅaÄ na przekór stanowieniom wÅadców. -</strofa> -</kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -Rób po twej myÅli; ja zaÅ wnet podÄ Å¼Ä,/ -By kochanemu bratu grób usypaÄ. -</strofa> -</kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia><strofa>O ty nieszczÄsna! serce drży o ciebie.</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>Nie troszcz siÄ o mnie; nad twoim radź losem.</strofa></kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia> -<strofa> -Ale nie zdradzaj twej myÅli nikomu,/ -Kryj twe zamiary, ja też je zatajÄ. -</strofa> -</kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -O nie! mów gÅoÅno, bo ciÄżkie ty kaźnie/ -ÅciÄ gnÄ Ä byÅ mogÅa milczeniem na siebie. -</strofa> -</kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia><strofa>Z żarów twej duszy mroźne mieciesz sÅowa.</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>Lecz miÅa jestem tym, o których stojÄ.</strofa></kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia><strofa>JeÅli podoÅasz w trudnych mar poÅcigu.</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>Jak nie podoÅam, to zaniecham dzieÅa.</strofa></kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia><strofa>Nie trza siÄ z góry porywaÄ na mary.</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -Kiedy tak mówisz, wstrÄt budzisz w mym sercu/ -I sÅusznie zmierzisz siÄ także zmarÅemu;/ -<begin id="b1188560333104"/><motyw id="m1188560333104">ÅmierÄ bohaterska</motyw>Pozwól, bym ja wraz z moim zaÅlepieniem/ -SpojrzaÅa w oczy grozie; bo ta groza/ -Chlubnej mi Åmierci przenigdy nie wydrze.<end id="e1188560333104"/> -</strofa> -</kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia> -<strofa> -JeÅli tak mniemasz, idź, lecz wiedz zarazem,/ -Å»eÅ nierozważna, choÄ miÅym tyÅ miÅa. -</strofa> -</kwestia><end id="e1188565612339"/> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -O sÅoÅca grocie, coÅ jasno znów Tebom<pr>Wersy 99-160: liczba wierszy w ten sposób podana odnosi siÄ do wierszy tekstu oryginalnego.</pr>/ -<wers_wciety typ="2">BÅysnÄ Å po trudach i znoju,</wers_wciety>/ -ZÅote dnia oko, przyÅwiecasz ty niebom/ -<wers_wciety typ="2">I w Dirki<pr>Dirke --- źródÅo na póÅnocny zachód od Teb.</pr> nurzasz siÄ zdroju.</wers_wciety>/ -Witaj! TyÅ sprawiÅ, że wrogów mych krocie/ -<wers_wciety typ="2">W dzikim pierzchnÄÅy odwrocie.</wers_wciety> -</strofa> - -<strofa> -<wers_wciety typ="2">Bo Polinika gniewny spór</wers_wciety>/ -<wers_wciety typ="2">Krwawy zażegÅ w ziemi bój,</wers_wciety>/ -<wers_wciety typ="2">Z chrzÄstem zapadÅ, z szumem piór</wers_wciety>/ -<wers_wciety typ="2">Ånieżnych orÅów lotny rój,</wers_wciety>/ -<wers_wciety typ="2">I zbroice liczne bÅysÅy,</wers_wciety>/ -<wers_wciety typ="2">I z szyszaków pióra trysÅy.</wers_wciety> -</strofa> - -<strofa> -I wróg już wieÅcem dzid groźnych otoczyÅ/ -<wers_wciety>Siedmiu bram miasta gardziele,</wers_wciety>/ -Lecz pierzchÅ, nim w mojej krwi strugach siÄ zbroczyÅ,/ -<wers_wciety>Zanim Hefajstos<pr>Hefajstos --- bóg ognia, tu w znaczeniu: pożar.</pr> ognisty w popiele</wers_wciety>/ -PogrÄ Å¼yÅ mury, bo z tyÅu nawaÅem/ -<wers_wciety>RunÄ Å na smoka<pr><slowo_obce>na smoka</slowo_obce> --- bo Adrastos, najprzedniejszy wÅród najeźdźców, miaÅ smoka wyrzeźbionego na tarczy.</pr> Ares z wojny szaÅem.</wers_wciety> -</strofa> - -<strofa> -<wers_wciety typ="2">Bo Zeus nie cierpi dumnych gÅów,</wers_wciety>/ -<wers_wciety typ="3">A widzÄ c ich wyniosÅy lot</wers_wciety>/ -<wers_wciety typ="2">I zÅota chrzÄst, i pychÄ sÅów,</wers_wciety>/ -<wers_wciety typ="3">WypuÅciÅ swój piorunny grot<pr><slowo_obce>piorunny grot</slowo_obce> --- jeden z siedmiu ksiÄ Å¼Ä t, którzy najechali Teby, olbrzymi Kapaneus, runÄ Å rażony od gromu Zeusa.</pr></wers_wciety>/ -<wers_wciety typ="2">I w zwyciÄstwa samym progu</wers_wciety>/ -<wers_wciety typ="3">SkarciÅ butÄ w dumnym wrogu.</wers_wciety> -</strofa> - -<strofa> -A ugodzony wznak na ziemiÄ runie/ -<wers_wciety>Ten, który w namiÄtnym gniewie</wers_wciety>/ -Miasto pogrzebaÄ chciaÅ w ognia caÅunie/ -<wers_wciety>I jak wicher dÄ Å w zarzewie.</wers_wciety>/ -LegÅ on od Zeusa gromu powalony,/ -Innym znów Ares inne znaczy zgony. -</strofa> - -<strofa> -<wers_wciety typ="2">Bo siedmiu --- siedmiu strzegÅo wrót,</wers_wciety>/ -<wers_wciety typ="3">Na mÄża mÄ Å¼ wymierzyÅ dÅoÅ,</wers_wciety>/ -<wers_wciety typ="2">DziÅ w stosach lÅni za zwyciÄstw trud</wers_wciety>/ -<wers_wciety typ="3">Ku Zeusa czci pobitych broÅ.</wers_wciety>/ -<wers_wciety typ="2">Ale przy jednej miasta bramie</wers_wciety>/ -<wers_wciety typ="3">Nie bÅyszczy żaden chwaÅy Åup,</wers_wciety>/ -<wers_wciety typ="2">Gdzie brat na brata podniósÅ ramiÄ,</wers_wciety>/ -<wers_wciety typ="3">Tam obok trupa polegÅ trup.</wers_wciety> -</strofa> - -<strofa> -WiÄc teraz Nike,<pe>Nike --- bogini zwyciÄstwa, także: samo zwyciÄstwo.</pe> czci syta i sÅawy,/ -<wers_wciety>Zwraca ku Tebom radosne swe oczy,</wers_wciety>/ -Po twardym znoju i po walce krwawej/ -<wers_wciety>Rzezi wspomnienie niech serca nie mroczy;</wers_wciety>/ -Idźmy do ÅwiÄ tyÅ, a niechaj na przedzie/ -Teb skoczny Bakchus<pr>Bakchus urodziÅ siÄ rzekomo w Tebach z matki Semeli, dlatego nazywano go <wyroznienie>tebaÅskim</wyroznienie> bogiem.</pr> korowody wiedzie. -</strofa> - -<strofa> -<wers_wciety typ="2">Lecz otóż widzÄ, jak do nas tu zdÄ Å¼a</wers_wciety>/ -<wers_wciety typ="3">Kreon, co ziemiÄ tÄ wÅada,</wers_wciety>/ -<wers_wciety typ="2">Nowy bóstw wyrok go w myÅlach pogrÄ Å¼a,</wers_wciety>/ -<wers_wciety typ="3">Ważne on plany waży i ukÅada.</wers_wciety>/ -<wers_wciety typ="2">Widno, że zbadaÄ chciaÅby nasze zdanie,</wers_wciety>/ -<wers_wciety typ="2">Skoro tu starców wezwaÅ na zebranie.</wers_wciety> -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -O TebaÅczycy, nareszcie bogowie/ -Z burzy i wstrzÄ ÅnieÅ wyrwali to miasto;/ -A jam was zwoÅaÅ tutaj przed innymi,/ -BoÅcie wy byli podporami tronu/ -Za Laiosa i Edypa rzÄ dów,/ -I po Edypa zgonie mÅodzieniaszkom/ -PewnÄ swÄ radÄ sÅużyliÅcie chÄtnie./ -Kiedy zaÅ oni za losu wyrokiem/ -Polegli obaj w bratobójczej walce,/ -KrwiÄ pokajawszy braterskie prawice,/ -Wtedy ja wÅadzÄ i tron ten objÄ Åem,/ -Który mi z prawa po zmarÅych przypada./ -<begin id="b1188560798082"/><motyw id="m1188560798082">WÅadza</motyw>Trudno jest duszÄ przeniknÄ Ä czÅowieka,/ -Jego zamysÅy i pragnienia, zanim/ -On ich na szerszym nie odsÅoni polu./ -Ja tedy wÅadcÄ, co by, rzÄ dzÄ c miastem,/ -Wnet siÄ najlepszych nie imaÅ zamysÅów/ -I ÅmiaÅo woli swej nie ÅmiaÅ ujawniÄ,/ -Za najgorszego uważaÅbym pana./ -A gdyby wyżej nad dobro publiczne/ -KÅadÅ zysk przyjacióÅ, za nic bym go ważyÅ./ -I nie milczaÅbym, klnÄ siÄ na Jowisza/ -WszechwidzÄ cego, gdybym spostrzegÅ zgubÄ/ -Zamiast zbawienia kroczÄ cÄ ku miastu./ -Nigdy też wroga nie chciaÅbym ojczyzny/ -MieÄ przyjacielem, o tym przeÅwiadczony,/ -Å»e nasze szczÄÅcie w szczÄÅciu miasta leży,/ -I jego dobro przyjacióŠma raiÄ./ -Przez te zasady podnoszÄ to miasto/ -I tym zasadom wierny obwieÅciÅem/ -Ukaz ostatni na Edypa synów./ -Aby dzielnego w walce Eteokla./ -Który w obronie polegÅ tego miasta,/ -W grobie pochowaÄ i uczciÄ ofiarÄ ,/ -Która w kraj zmarÅych za zacnymi idzie;/ -Brata zaÅ jego, Polinika mniemam,/ -Który to bogów i ziemiÄ ojczystÄ / -NaszedÅ z wygnania i ognia pożogÄ / -ZamierzaÅ zniszczyÄ, i swoich rodaków/ -KrwiÄ siÄ napoiÄ, a w pÄta wziÄ Ä drugich,/ -WydaÅem rozkaz, by chowaÄ ni pÅakaÄ/ -Nikt siÄ nie ważyÅ, lecz zostawiÅ ciaÅo/ -Przez psy i ptaki w polu poszarpane./ -Taka ma wola, a nie ÅcierpiÄ nigdy,/ -By źli w nagrodzie wyprzedzili prawych./ -Kto za to miastu temu dobrze życzy,/ -W zgonie i w życiu dozna mej opieki.<end id="e1188560798082"/> -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -Tak wiÄc, Kreonie, raczysz rozporzÄ dzaÄ/ -Ty co do wrogów i przyjacióŠgrodu,/ -A wszelka wÅadza zaprawdÄ ci sÅuży,/ -I nad zmarÅymi, i nami, co żyjem. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>A wiÄc czuwajcie nad mymi rozkazy.</strofa></kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia><strofa>PoleÄ mÅodszemu straż nad tym i pieczÄ.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Przecież tam stojÄ straże w pogotowiu.</strofa></kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia><strofa>Czegóż byÅ tedy od nas jeszcze Å¼Ä daÅ?</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>ByÅcie niesfornym stanÄli oporem.</strofa></kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia><strofa>GÅupi ten, kto by na ÅmierÄ siÄ narażaÅ.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -Tak, ÅmierÄ go czeka! Lecz wielu do zguby/ -PopchnÄÅa Å¼Ä dza i zysku rachuby. -</strofa> -</kwestia> - - -<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> - -<kwestia> -<strofa> -O najjaÅniejszy, nie powiem, że w biegu/ -SpieszÄ c ja tutaj tak siÄ zadyszaÅem,/ -Bom ja raz po raz przystawaÅ po drodze/ -I chciaÅem na zad zawróciÄ z powrotem,/ -A dusza tak mi mówiÅa co chwila:/ -Czemuż to, gÅupi, ty karku nadstawiasz?/ -Czemuż tak lecisz? przecież może inny/ -DonieÅÄ to ksiÄciu; na cóż ty masz skomleÄ?/ -Tak sobie myÅlÄ c, spieszyÅem powolnie,/ -A krótka droga wraz mi siÄ wzdÅużaÅa./ -Na koniec myÅlÄ: niech bÄdzie, co bÄdzie,/ -I stajÄ, ksiÄ Å¼Ä, przed tobÄ i powiem,/ -ChoÄ tak po prawdzie sam nie wiem zbyt wiele./ -A zresztÄ tuszÄ, że nic mnie nie czeka,/ -Chyba, co w górze byÅo mi pisane. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Cóż wiÄc nadmiernÄ przejmuje ciÄ trwogÄ ?</strofa></kwestia> - - -<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> - -<kwestia> -<strofa> -ZacznÄ od siebie, żem nie zrobiÅ tego,/ -Co siÄ zdarzyÅo, anim widziaÅ sprawcy,/ -Å»em wiÄc na żadnÄ nie zarobiÅ karÄ. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -Dzielnie warujesz i waÅujesz sprawÄ,/ -Lecz jasne, że coÅ przynosisz nowego. -</strofa> -</kwestia> - - -<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> - -<kwestia><strofa>Bo to niesporo na plac ze zÅÄ wieÅciÄ .</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Lecz mów już w koÅcu i wynoÅ siÄ potem.</strofa></kwestia> - - -<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> - -<kwestia> -<strofa> -A wiÄc już powiem. Trupa ktoÅ co tylko/ -PogrzebaÅ skrycie i wyniósÅ siÄ chyÅkiem,/ -RzuciÅ garÅÄ ziemi i uczciÅ to ciaÅo. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Co mówisz? Któż byÅ tak bardzo bezczelny?</strofa></kwestia> - - -<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> - -<kwestia> -<strofa> -Tego ja nie wiem, bo żadnego znaku/ -Ani topora, motyki nie byÅo./ -Ziemia wokoÅo byÅa gÅadka, zwarta,/ -Ani w niej stopy, ni żadnej kolei,/ -Lecz, krótko mówiÄ c, sprawca znikÅ bez Åladu./ -Skoro też jeden ze straży rzecz wskazaÅ,/ -Zaraz nam w myÅli, że w tym jakieÅ licho./ -Trup znikÅ, a leżaÅ nie pod grubÄ zaspÄ ,/ -Lecz przyprószony, jak czyniÄ , co winy/ -SiÄ wobec zmarÅych strachajÄ ; i zwierza/ -Lub psów szarpiÄ cych trupy ani Åladu./ -WiÄc zaczÄ Å jeden wyrzekaÄ na drugich,/ -Jeden drugiego winowaÄ, i byÅo/ -Blisko już bójki, bo któż by ich zgodziÅ?/ -W każdym ze straży wietrzyliÅmy sprawcÄ,/ -Lecz tak na oÅlep, bo nikt siÄ nie przyznaÅ./ -I my gotowi: i żary braÄ w rÄce,/ -I w ogieÅ skoczyÄ, i przysiÄ c na bogów,/ -Å»e nie my winni, ani byli w spóÅce/ -Z tym, co obmyÅliÅ tÄ rzecz i wykonaÅ./ -WiÄc koniec koÅcem, gdy dalej tak nie szÅo,/ -Jeden rzekÅ sÅowo, które wszystkim oczy/ -ZaryÅo w ziemiÄ; boÅmy nie wiedzieli,/ -Co na to odrzec, a strach nas zdjÄ Å wielki,/ -Co z tego bÄdzie. RzekÅ wiÄc na ten sposób,/ -Å»e tobie wszystko to donieÅÄ należy./ -I tak stanÄÅo, a mnie nieszczÄsnemu/ -Los kazaÅ zażyÄ tej przyjemnej sÅużby./ -WiÄc po niewoli sobie i wam stajÄ./ -Bo nikt nie lubi zÅych nowin zwiastuna. -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -O panie, mnie już od dawna siÄ roi,/ -Å»e siÄ bez bogów przy tym nie obeszÅo. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -Milcz, jeÅli nie chcesz wzbudziÄ mego gniewu,/ -I prócz staroÅci ukazaÄ gÅupoty./ -Bo brednie pleciesz, mówiÄ c, że bogowie/ -O tego trupa na ziemi siÄ troszczÄ ./ -Czyżby z szacunku, jako dobroczyÅcÄ,/ -Jego pogrzebli, jego, co tu wtargnÄ Å,/ -Aby ÅwiÄ tynie i ofiarne dary/ -ZburzyÄ, spustoszyÄ ich ziemiÄ i prawa?/ -Czyż, wedÅug ciebie, bóstwa czczÄ zbrodniarzy?/ -O nie, przenigdy! Lecz tego tu miasta/ -Ludzie już dawno przeciw mnie szemrajÄ c/ -GÅowÄ wstrzÄ sali i jarzmem ukrycie/ -Przeciw mym rzÄ dom i mojej osobie./ -Wiem ja to dobrze, że za ich pieniÄ dze/ -Straże siÄ tego dopuÅciÅy czynu./ -Bo nie ma gorszej dla ludzi potÄgi,/ -Jak pieniÄ dz: on to i miasta rozburzÄ ,/ -On to wypiera ze zagród i domu,/ -On prawe dusze krzywi i popycha/ -Do szpetnych kroków i nieprawych czynów./ -Zbrodni on wszelkiej ludzkoÅci jest mistrzem/ -I drogowskazem we wszelkiej sromocie./ -A ci, co czyn ten za pieniÄ dz speÅnili,/ -Wreszcie spóźnione wywoÅali kaźnie./ -Bo jeÅli dotÄ d Zeusowi hoÅd skÅadam,/ -Miarkuj to dobrze, a klnÄ siÄ przysiÄgÄ ,/ -JeÅli wy zaraz schwytanego sprawcy/ -Nie dostawicie przed moje oblicze,/ -To jednej Åmierci nie bÄdzie wam dosyÄ,/ -Lecz wprzódy wiszÄ c bÄdziecie zeznawaÄ,/ -ByÅcie w przyszÅoÅci wiedzieli, skÄ d grabiÄ/ -I ciÄ gnÄ Ä zyski, i mieli naukÄ,/ -Å»e nie na wszelki zysk godziÄ należy./ -Bo to jest pewne, że brudne dorobki/ -CzÄÅciej do zguby prowadzÄ , niż szczÄÅcia. -</strofa> -</kwestia> - - -<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> - -<kwestia><strofa>Wolnoż mi mówiÄ? czy pójÅÄ mam w milczeniu?</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Czyż nie wiesz jeszcze, jak gÅos twój mi wstrÄtny?</strofa></kwestia> - - -<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> - -<kwestia><strofa>Uszy ci rani, czy też duszÄ twojÄ ?</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Cóż to? chcesz badaÄ, skÄ d idÄ me gniewy?</strofa></kwestia> - - -<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> - -<kwestia><strofa>Sprawca ci duszÄ, a ja uszy trapiÄ.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Cóż to za urwisz z niego jest wierutny!</strofa></kwestia> - - -<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> - -<kwestia><strofa>A przecież nie ja czyn ten popeÅniÅem.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Ty! --- swojÄ duszÄ frymarczÄ c w dodatku.</strofa></kwestia> - - -<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> - -<kwestia> -<strofa> -O nie!/ -Próżne to myÅli, próżniejsze domysÅy. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -ZmyÅlne twe sÅowa, lecz jeżeli winnych/ -Mi nie stawicie, to wnet wam zaÅwita,/ -Å»e brudne zyski sprowadzajÄ kaźnie. -</strofa> -</kwestia> - - -<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> - -<kwestia> -<strofa> -O, niech go ujmÄ , owszem, lecz cokolwiek/ -Teraz siÄ stanie za dopustem losu;/ -Ty mnie już tutaj nie zobaczysz wiÄcej;/ -Bo już i teraz dziÄkujÄ ja bogom,/ -Å»em wbrew nadziei stÄ d wyszedÅ bez szwanku. -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -SiÅa jest dziwów, lecz nad wszystkie siÄga/ -<wers_wciety typ="2">Dziwy czÅowieka potÄga.</wers_wciety>/ -Bo on prze ÅmiaÅo poza sine morze,/ -<wers_wciety typ="2">Gdy toÅ siÄ wzdyma i kÅÄbi.</wers_wciety>/ -I z roku na rok swym lemieszem porze/ -<wers_wciety typ="2">MatkÄ-ziemicÄ do gÅÄbi.</wers_wciety> -</strofa> - -<strofa> -Lotny ród ptaków i stepu zwierzÄta/ -I dzieci fali usidla on w pÄta,/ -<wers_wciety typ="2">Wszystko rozumem zwyciÄży.</wers_wciety>/ -Dzikiego zwierza z gór ÅciÄ gnie na bÅonie,/ -KrnÄ brny kark tura i grzywiaste konie/ -<wers_wciety typ="2">Ujarzmi w swojej uprzÄży.</wers_wciety> -</strofa> - -<strofa> -WynalazÅ mowÄ i myÅli dal skrzydÅa/ -I życie ujÄ Å w porzÄ dku prawidÅa,/ -Od mroźnych wichrów na deszcze i gromy/ -ZbudowaÅ sobie schroniska i domy,/ -<wers_wciety typ="2">Na wszystko z radÄ on gotów.</wers_wciety>/ -Lecz choÄby ÅmiaÅo patrzaÅ w wiek daleki./ -ChoÄ ma na bóle i cierpienia leki./ -<wers_wciety typ="2">Åmierci nie ujdzie on grotów.</wers_wciety> -</strofa> - -<strofa> -A siÅ potÄgÄ, które w duszy tlejÄ ,/ -Popchnie on zbrodni lub cnoty kolejÄ ;/ -Jeżeli prawa i bogów czeÅÄ wyzna./ -<wers_wciety typ="2">To hoÅd mu odda ojczyzna;</wers_wciety>/ -A bÄdzie jej wrogiem ten, który nie z bogiem/ -<wers_wciety typ="2">Na czeÅÄ i prawoÅÄ siÄ ciska.</wers_wciety>/ -Niechajby on sromu mi nie wniósÅ do domu./ -<wers_wciety typ="2">Nie skalaÅ mego ogniska.</wers_wciety> -</strofa> - -<strofa> -Lecz jakiż widok uderza me oczy?/ -Czyż ja zdoÅaÅbym wbrew prawdzie zaprzeczyÄ,/ -Å»e to dzieweczka idzie Antygona?/ -O ty nieszczÄsna, równie nieszczÄsnego/ -Edypa córo!/ -Cóż-że siÄ staÅo? czy ciÄ na przestÄpstwie/ -Ukazu króla schwytano, i teraz/ -Wskutek tej zbrodni prowadzÄ jak brankÄ? -</strofa> -</kwestia> - - -<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> - -<kwestia> -<strofa> -Oto jest dziewka, co to popeÅniÅa./ -TÄ schwytaliÅmy. Lecz gdzieżeż jest Kreon? -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia><strofa>Wychodzi oto z domu w samÄ porÄ.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Cóż to? jakież tu zeszedÅem zdarzenie?</strofa></kwestia> - - -<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> - -<kwestia> -<strofa> -Niczego, panie, nie trza siÄ odrzekaÄ,/ -Bo myÅl późniejsza kÅam zada zamysÅom;/ -Ja bo dopiero klÄ Åem, że już nigdy/ -Nie stanÄ tutaj po groźbach, coÅ miotaÅ,/ -Ale ta nowa, wielka niespodzianka/ -Nie da siÄ zmierzyÄ z nijakÄ radoÅciÄ ;/ -IdÄ wiec, chociaż tak siÄ zaklinaÅem,/ -WiodÄ c tÄ dziewkÄ, którÄ przychwytano,/ -Gdy grób gÅadziÅa; żaden los tym razem/ -Mnie tu nie przywiódÅ, lecz wÅasne odkrycie./ -SÄ dź jÄ i badaj; jam sobie zasÅużyÅ,/ -Bym z tych opaÅów wydostaÅ siÄ wreszcie. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Jakim sposobem i gdzieżeÅ jÄ schwytaÅ?</strofa></kwestia> - - -<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> - -<kwestia><strofa>Trupa pogrzebiÄ c. W dwóch sÅowach masz wszystko.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Czy pewny jesteÅ tego, co tu gÅosisz?</strofa></kwestia> - - -<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> - -<kwestia> -<strofa> -Na wÅasne oczy przecież jÄ widziaÅem/ -GrzebiÄ cÄ trupa; chyba jasno mówiÄ. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>WiÄc na gorÄ cym zszedÅeÅ jÄ uczynku?</strofa></kwestia> - - -<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> - -<kwestia> -<strofa> -Tak siÄ rzecz miaÅa: kiedyÅmy tam przyszli,/ -Groźbami twymi srodze przepÅoszeni,/ -ZmietliÅmy z trupa ziemiÄ i znów nagie/ -I już nadpsute zostawiwszy ciaÅo/ -Na bliskim wzgórzu siedliÅmy, to baczÄ c,/ -By nam wiatr nie niósÅ wstrÄtnego zaduchu./ -A jeden besztaÅ drugiego sÅowami,/ -By siÄ nie leniÄ i nie zaspaÄ sprawy./ -To trwaÅo chwilÄ; a potem na niebie/ -ZabÅysnÄ Å w Årodku ognisty krÄ g sÅoÅca/ -I grzaÄ poczÄÅo; aż nagle siÄ z ziemi/ -Wicher poderwaÅ i wÅród strasznej trÄ by/ -WyÅ po równinie, drÄ c liÅcie i korÄ/ -Z drzew, i zapeÅniÅ kurzawÄ powietrze;/ -PrzymknÄ wszy oczy, drżeliÅmy od strachu./ -A kiedy wreszcie ten szturm siÄ uciszyÅ,/ -Widzimy dziewkÄ, która tak boleÅnie/ -Jak ptak zawodzi, gdy znajdzie swe gniazdo/ -Obrane z pisklÄ t i opustoszaÅe./ -Tak ona, trupa dojrzawszy nagiego,/ -Zaczyna jÄczeÄ i przekleÅstwa miotaÄ/ -Na tych, co brata obnażyli ciaÅo./ -I wnet przynosi garÅÄ suchego piasku,/ -A potem z wiadra, co dźwiga na gÅowie,/ -Potrójnym pÅynem martwe skrapia zwÅoki<pr><slowo_obce>Potrójnym pÅynem martwe skrapia zwÅoki</slowo_obce> --- Antygona skropiÅa ciaÅo pÅynem zmieszanym z wina, mleka i oliwy.</pr>./ -My wiec rzucimy siÄ na niÄ i dziewkÄ/ -Chwytamy, ona zaÅ nic siÄ nie lÄka./ -Badamy dawne i Åwieże jej winy./ -Ona zaŠżadnej nie zaprzecza zbrodni,/ -Co dla mnie miÅe, lecz i przykre byÅo./ -Bo że z opaÅów sam siÄ wydostaÅem,/ -ByÅo mi sÅodkie, lecz żem w nie pogrÄ Å¼yÅ/ -Znajomych, przykre. Chociaż ostatecznie,/ -Skórom ja caÅy, resztÄ lekko ważÄ. -</strofa> -</kwestia> - - -<naglowek_osoba><begin id="b1188561690295"/><motyw id="m1188561690295">Konflikt</motyw>KREON</naglowek_osoba> - -<kwestia> -<strofa> -Lecz ty, co gÅowÄ tak skÅaniasz ku ziemi,/ -Mów, czy to prawda, czy donos kÅamliwy? -</strofa> -</kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>Jam to speÅniÅa, zaprzeczyÄ nie myÅlÄ.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -Ty wiÄc siÄ wynoÅ, gdzie ci siÄ podoba,/ -Wolny od winy i ciÄżkich podejrzeÅ./ -A ty odpowiedz mi teraz w dwóch sÅowach,/ -CzyżeÅ wiedziaÅa o moim zakazie? -</strofa> -</kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>WiedziaÅam dobrze. Wszakże nie byÅ tajny.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>I ÅmiaÅaÅ wbrew tym stanowieniom dziaÅaÄ?</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -Przecież nie Jowisz obwieÅciÅ to prawo,/ -Ni wola Diki<pr>Dike, bogini sprawiedliwoÅci, córka Jowisza, siedzÄ ca na tronie obok niego. Inne wyobrażenie wyznaczaÅo jej tron w podziemiach, tam, gdzie siÄ na ludzi wymierza sprawiedliwoÅÄ.</pr> podziemnych bóstw siostry,/ -Taka ród ludzki zwiÄ zaÅa ustawÄ ./ -A nie mniemaÅam, by ukaz twój ostry/ -Tyle miaÅ wagi i siÅy w czÅowieku,/ -Aby mógÅ ÅamaÄ ÅwiÄte prawa boże,/ -Które sÄ wieczne i trwajÄ od wieku,/ -Å»e ich poczÄ tku nikt zbadaÄ nie może./ -Ja wiÄc nie chciaÅam ulÄknÄ Ä siÄ czÅeka/ -I za zÅamanie praw tych kiedyÅ bogom/ -ZdawaÄ tam sprawÄ. Bom Åmierci ja pewna/ -Nawet bez twego ukazu; a jeÅli/ -WczeÅniej ÅmierÄ przyjdzie, za zysk to poczytam./ -Bo komu przyszÅo żyÄ wÅród nieszczÄÅÄ tylu,/ -Jakże by w Åmierci zysku nie dopatrzyÅ?/ -Tak wiÄc nie mierzi mnie Åmierci ta groźba,/ -Lecz mierziÅoby mnie braterskie ciaÅo/ -Niepogrzebane. Tak, ÅmierÄ mnie nie straszy,/ -A jeÅli gÅupio dziaÅaÄ ci siÄ zdajÄ,/ -Niech mój nierozum za nierozum staje. -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -KrnÄ brne po krnÄ brnym dziewczyna ma ojcu/ -ObejÅcie, grozie nie ustÄ pi Åatwo. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -Lecz wiedz, że czÄsto zamysÅy zbyÅ harde/ -SpadajÄ nisko, że czÄsto siÄ widzi./ -Jako żelazo najtwardsze wÅród ognia/ -Gnie siÄ i mimo swej twardoÅci pÄka;/ -Wiem też, że drobne wÄdzidÅo rumaki/ -Dzikie poskramia. Bo tym nieprzystojna/ -WyniosÅoÅÄ, którzy u innych w niewoli./ -Dziewka ta jednÄ splamiÅa siÄ winÄ / -Rozkazy dane obchodzÄ c i ÅamiÄ c,/ -Teraz przed drugim nie sroma siÄ gwaÅtem,/ -Z czynu siÄ cheÅpi i nadto urÄ ga./ -Lecz nie ja mÄżem, lecz ona by byÅa,/ -Gdyby postÄpek ten jej uszedÅ pÅazem./ -Ale czy z siostry, czy choÄby i bliższej/ -KrwiÄ mi istoty ona pochodziÅa,/ -Ona i siostra nie ujdÄ przenigdy/ -Åmierci straszliwej; bo i siostrÄ skarcÄ,/ -Å»e jej spólniczkÄ byÅa w tym pogrzebie./ -WoÅaÄ mi tamtÄ , którÄ co dopiero/ -WidziaÅem w domu zmieszanÄ , szalonÄ ./ -Tak duch zazwyczaj tych zdradza, co tajnie/ -SiÄ dopuÅcili jakiegoÅ wystÄpku./ -WstrÄt zaÅ ja czujÄ przeciw tym zÅoczyÅcom,/ -Którzy swe grzechy chcÄ polem upiÄkszaÄ. -</strofa> -</kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>Chceszli co wiÄcej, czyli ÅmierÄ mi zadaÄ?</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>O! nie! w tym jednym zawiera siÄ wszystko.</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -WiÄc na cóż zwlekaÄ?. Jako twoje sÅowa/ -MierÅ¼Ä , i oby zawsze mnie mierziÅy,/ -Tak wstrÄtne tobie wszelkie me postÄpki./ -A jednak, skÄ d bym piÄkniejszÄ ja sÅawÄ/ -UszczknÄÅa, jako z brata pogrzebania./ -I ci tu wszyscy rzecz by pochwalili,/ -Gdyby im trwoga nie zawarÅa mowy./ -Ale tyranów los ze wszech miar bÅogi,/ -Wolno im czyniÄ, co zechcÄ , i mówiÄ. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Sama tak sÄ dzisz poÅród Kadinejczyków.</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>I ci tak sÄ dzÄ , lecz stulajÄ wargi.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Nie wstyd ci, jeÅli od tych siÄ wyróżniasz?</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>CzciÄ swe rodzeÅstwo nie przynosi wstydu.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Nic byÅ ci bratem ten, co polegÅ drugi?</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>Z jednego ojca i matki zrodzonym.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Czemuż wiÄc niesiesz czeÅÄ, co jemu wstrÄtna?</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>ZmarÅy nie rzuci mi skargi tej w oczy.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>JeÅli na równi z nim uczcisz zÅoczyÅcÄ?</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>Nie jak niewolnik, lecz jak brat on zginÄ Å.</strofa></kwestia> - - -<naglowek_osoba>KKEON</naglowek_osoba> - -<kwestia><strofa>On, co pustoszyÅ kraj, gdy tamten broniÅ?</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>A jednak Hades poÅ¼Ä da praw równych.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Dzielnemu równoÅÄ ze zÅym nie przystoi.</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>Któż wie, czy takie wÅród zmarÅych sÄ prawa?</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Wróg i po Åmierci nie stanie siÄ miÅym.</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa><wers_cd>WspóÅkochaÄ przyszÅam, nie wspóÅnienawidziÄ.</wers_cd></strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -JeÅli chcesz kochaÄ, kochaj ich w Hadesie,/ -U mnie nie bÄdzie przewodziÄ kobieta.<end id="e1188561690295"/> -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -Lecz otóż wiodÄ IsmenÄ, o panie,/ -WidaÄ jej boleÅÄ i sÅychaÄ jej Åkanie./ -A jakaÅ chmura przesÅania jej oczy/ -<wers_wciety typ="2">I piÄknÄ dziewki twarz mroczy.</wers_wciety> -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -O ty, co w domu przypiÄÅaÅ siÄ do mnie/ -Jak wÄ Å¼ podstÄpnie, żem wiedzieÄ wrÄcz nie mógÅ./ -Iż na mÄ zgubÄ dwa wyrodki żywiÄ,/ -Nuże, mów teraz, czyÅ byÅa wspólniczkÄ / -W tym pogrzebaniu, lub wyprzyj siÄ winy. -</strofa> -</kwestia> - - -<begin id="b1188561970096"/><motyw id="m1188561970096">Siostra</motyw><naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia> -<strofa> -Winna ja jestem, jak stwierdzi to siostra,/ -I biorÄ na siÄ tej zbrodni poÅowÄ. -</strofa> -</kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -Lecz sprawiedliwoÅÄ przeczy twym twierdzeniom;/ -AniÅ ty chciaÅa, ni jaÄ przypuÅciÅam. -</strofa> -</kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia> -<strofa> -Jednak w niedoli twojej nie omieszkam/ -WziÄ Ä na siÄ czÄ stkÄ twych cierpieÅ i kaźni. -</strofa> -</kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -Hades i zmarli wiedzÄ , kto to zdziaÅaÅ./ -<begin id="b1188561798583"/><motyw id="m1188561798583">MiÅoÅÄ</motyw>SÅowami ÅwiadczyÄ miÅoÅÄ --- to nie miÅoÅÄ.<end id="e1188561798583"/> -</strofa> -</kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia> -<strofa> -O, nie zabraniaj mi, siostro, choÄ w Åmierci/ -Z tobÄ siÄ zÅÄ czyÄ i uczciÄ zmarÅego. -</strofa> -</kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -Nie chcÄ twej Åmierci, a nie zwij twym dzieÅem/ -CoÅ nie sprawiÅa; mój zgon starczy bratu. -</strofa> -</kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia><strofa>Lecz jakiż żywot mnie czeka bez ciebie?</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>Pytaj Kreona! ZwykÅaÅ naÅ ty baczyÄ.</strofa></kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia><strofa>Po cóż mnie drÄczysz bez żadnej potrzeby?</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>CierpiÄ ja, że mi ÅmiaÄ przyszÅo siÄ z ciebie.</strofa></kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia><strofa>W czym bym choÄ teraz ci przydaÄ siÄ mogÅa?</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>MyÅl o ratunku, ja go nie zawiszczÄ.</strofa></kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia><strofa>O, ja nieszczÄsna! wiÄc chcesz mnie porzuciÄ?</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>WybraÅaŠżycie --- ja życia ofiarÄ.</strofa></kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia><strofa>SkÄ d wiesz, co na dnie sÅów moich siÄ kryje?</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia><strofa>W sÅowach ty rady, ja szukaÅam w czynie.</strofa></kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia><strofa>A jednak wina ta sama nas ÅÄ czy.</strofa></kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -BÄ dź zdrowa, żyjesz, --- a moja już dusza/ -W krainie Åmierci... zmarÅym ÅwiadczyÄ może. -</strofa> -</kwestia><end id="e1188561970096"/> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -Z dziewczÄ t siÄ jednej teraz zwichnÄ Å rozum,/ -Druga od mÅodu wciÄ Å¼ byÅa szalona. -</strofa> -</kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia> -<strofa> -O wÅadco, w ludziach zgnÄbionych nieszczÄÅciem/ -UmysÅ siÄ chwieje pod ciosów obuchem. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>W tobie zaiste, co ÅÄ czysz siÄ z zbrodniÄ ,</strofa></kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia><strofa>Bo cóż mi życie warte bez mej siostry?</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Jej nie nazywaj --- bo ona już zmarÅa.</strofa></kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia><strofa>WiÄc narzeczonÄ chcesz zabiÄ ty syna?</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>SÄ inne Åany dla jego posiewu.</strofa></kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia><strofa>Lecz on byÅ dziwnie do niej dostrojony.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>ZÅymi dla synów niewiasty siÄ brzydzÄ.</strofa></kwestia> - - -<naglowek_osoba>ISMENA</naglowek_osoba> - -<kwestia><strofa>Drogi Hajmonie, jak ojciec ciÄ krzywdzi!</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Twój gÅos i swadźby zbyt mierÅ¼Ä mnie twoje.</strofa></kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia><strofa>A wiÄc chcesz wydrzeÄ kochankÄ synowi?</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Hades posÅaniem bÄdzie tej miÅoÅci.</strofa></kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia><strofa>Taka wiÄc wola, że ta umrzeÄ musi?</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -Twoja i moja; lecz dosyÄ tych zwlekaÅ;/ -Wiedźcie je, sÅugi, w dom, bo odtÄ d majÄ / -Å»yÄ jak niewiasty, nie wedÅug swej woli./ -ToÄ i zbyt ÅmiaÅe ulÄknÄ siÄ serca,/ -Gdy widmo Åmierci zaglÄ dnie im w oczy. -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -SzczÄÅliwy, kogo w życiu klÄski nie dosiÄgÅy,/ -Bo skoro bóg potrzÄ Ånie domowymi wÄgÅy,/ -<wers_wciety typ="2">Z jednego gromu caÅy szereg nieci,</wers_wciety>/ -<wers_wciety typ="2">Po ojcach godzi i w dzieci.</wers_wciety>/ -Tak jako fale na morzu siÄ piÄtrzÄ ,/ -Gdy wicher tracki<pr><slowo_obce>wicher tracki</slowo_obce> --- morze na wybrzeżach Tracji uchodziÅo za bardzo burzliwe.</pr> do gÅÄbiny wpadnie/ -I ryje iÅy drzemiÄ ce gdzieÅ na dnie,/ -Aż brzeżne skaÅy od burzy zajÄczÄ : --- -</strofa> - -<strofa> -Tak już od wieków w Labdakidów domy/ -Po dawnych gromach nowe godzÄ gromy,/ -<wers_wciety typ="2">Bóle minionych pokoleÅ</wers_wciety>/ -<wers_wciety typ="2">Nie niosÄ ulg i wyzwoleÅ.</wers_wciety>/ -I ledwie sÅoÅce promienie rozpostrze/ -Ponad ostatniÄ odnogÄ rodzeÅstwa,/ -A już bóstw krwawych podcina jÄ ostrze,/ -ObÅÄd i szaÅu przekleÅstwa. -</strofa> - -<strofa> -O Zeusie, któż siÄ z twÄ potÄgÄ zmierzy?/ -Ciebie ni czasu odwieczne miesiÄ ce,/ -Ni sen nie zmoże wÅród swoich obierzy./ -Ty, co Olimpu szczyty jaÅniejÄ ce/ -<wers_wciety typ="2">Przez wieki dzierżysz promienny,</wers_wciety>/ -<wers_wciety typ="2">Równy w swej sile, niezmienny.</wers_wciety>/ -A wieczne prawo gniecie ziemi syny,/ -Å»e nikt żywota nie przejdzie bez winy. -</strofa> - -<strofa> -Nadzieja zÅudna, bo jednym da skrzydÅa,/ -<wers_wciety typ="2">Drugich omota w swe sidÅa;</wers_wciety>/ -Å»Ä dz lotnych wzbudzi w nich ognie./ -<wers_wciety typ="2">Aż życie pióra te pognie.</wers_wciety>/ -A wiecznÄ prawda, że w przystÄpie dumy/ -MieniÄ dobrymi ci nieprawe czyny./ -Którym bóg zmieszaÅ rozumy!/ -Nikt siÄ na ziemi nie ustrzeże winy./ -</strofa> - -<strofa> -Lecz otóż Hajmon, z twojego potomstwa/ -Wiekiem najmÅodszy; widocznie boleje/ -Nad ciÄżkim losem swej umiÅowanej/ -<wers_wciety typ="2">I po swym szczÄÅciu Åzy leje.</wers_wciety> -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -Wkrótce przejrzymy jaÅniej od wróżbitów./ -O synu! czyż ty przybywasz tu gniewny/ -Wskutek wyroku na twÄ narzeczonÄ ,/ -Czy w każdej doli zachowasz mnie miÅoÅÄ? -</strofa> -</kwestia> - - -<naglowek_osoba>HAJMON</naglowek_osoba> - -<kwestia> -<strofa> -Twoim ja, ojcze! Skoro mÄ drze radzisz,/ -IdÄ ja chÄtnie za twoim przewodem;/ -I żaden zwiÄ zek nie bÄdzie mi droższy/ -Ponad wskazówki z ust twoich rozumnych. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -O! tak, mój synu, byÄ zawsze powinno,/ -Zdanie ojcowskie ponad wszystkim ważyÄ./ -Przecież dlatego bÅagajÄ ojcowie,/ -Aby powolnych synów dom im chowaÅ,/ -Którzy by krzywdy od wrogów pomÅcili,/ -A równo z ojcem uczcili przyjacióÅ./ -Kto by zaÅ pÅodziÅ potomstwo nic warte,/ -Cóż by on chowaÅ, jak troski dla siebie,/ -A wobec wrogów wstyd i poÅmiewisko?/ -Synu, nie folguj wiec Å¼Ä dzy, nie porzuÄ/ -Dla marnej dziewki rozsÄ dku, wiedz dobrze,/ -Å»e nie ma bardziej mroźnego uÅcisku,/ -Jak w zÅej kobiety ramionach; bo trudno/ -O wiÄkszÄ klÄskÄ, jako zÅy przyjaciel./ -Przeto ze wstrÄtem ty porzuÄ tÄ dziewkÄ,/ -Aby w Hadesie innemu siÄ daÅa./ -Bo skorom poznaÅ, że z caÅego miasta/ -Ona jedyna, oparÅa siÄ prawu,/ -Nie myÅlÄ stanÄ Ä wszem wobec jak kÅamca,/ -Ale jÄ stracÄ; rodzinnego Zeusa<pr><slowo_obce>Zeus rodzinny</slowo_obce> --- Zeus opiekuÅczy nad rodzinÄ .</pr>/ -Niechby bÅagaÅa; <begin id="b1188562576807"/><motyw id="m1188562576807">Dom, PaÅstwo</motyw>jeÅli wÅród rodziny/ -Nie bÄdzie Åadu, jak obcych poskromiÄ?/ -Bo kto w swym domu potrafi siÄ rzÄ dziÄ,/ -Ten sterem paÅstwa pokieruje dobrze;/ -Kto zaÅ zuchwale przeciw prawu dziaÅa/ -I tym, co rzÄ dzÄ , narzucaÄ chce wolÄ,/ -Ten nie doczeka siÄ mego uznania./ -WybraÅcom ludu posÅusznym byÄ trzeba/ -W dobrych i sÅusznych, nawet w innych sprawach./ -Takiego mÄża rzÄ dom bym zaufaÅ,/ -Po takim sÅużby wyglÄ daÅ ochotnej,/ -Taki by w starciu oszczepów i w walce/ -WytrwaÅ na miejscu jak dzielny towarzysz./ -Nie ma zaÅ wiÄkszej klÄski od nierzÄ du,/ -On gubi miasta, on domy rozburza,/ -On wÅród szeregów roznieca ucieczkÄ./ -ZaÅ poÅród mÄżów powolnych rozkazom/ -Za życia puklerz stanie posÅuszeÅstwo./ -Tak wiÄc wypada strzec prawa i wÅadzy/ -I nie ulegaÄ niewiast samowoli./ -Jeżeli upaÅÄ, to z rÄki paÅÄ mÄskiej,/ -Bo haÅba doznaÄ od niewiasty klÄski. -</strofa> -</kwestia><end id="e1188562576807"/> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -Nam, jeÅli staroÅÄ rozumu nie tÅumi,/ -Zdajesz siÄ mówiÄ o tym bardzo trafnie. -</strofa> -</kwestia> - - -<naglowek_osoba>HAJMON</naglowek_osoba> - -<kwestia> -<strofa> -Ojcze, najwyższym darem Åaski bogów/ -Jest niewÄ tpliwie u czÅowieka rozum./ -A ja sÅusznoÅci twoich sÅów zaprzeczyÄ/ -Ani bym umiaÅ, ani chciaÅbym zdoÅaÄ./ -Ale sÄ d zdrowy mógÅbym mieÄ też inny./ -Mam ja tÄ wyższoÅÄ nad tobÄ , że mogÄ/ -PoznaÄ, co ludzie mówiÄ , czyniÄ , ganiÄ ,/ -Bo na twój widok zdejmuje ich trwoga,/ -I sÅowo, ciebie raÅ¼Ä ce, zamiera./ -A wiÄc cichaczem przyszÅo mi wysÅuchaÄ,/ -Jak miasto nad tÄ siÄ Å¼ali dziewicÄ ,/ -Å»e ze wszech niewiast najmniej ona winna,/ -Po najzacniejszym czynie marnie koÅczy./ -Czyż bo ta, co w swym nie przeniosÅa sercu,/ -By brat jej leżaÅ martwy bez pogrzebu,/ -Psom na pożarcie i ptactwu dzikiemu,/ -Raczej nagrody nie godna jest zÅotej?/ -Takie siÄ gÅosy odzywajÄ z cicha./ -Ja zaÅ, o ojcze, niczego nie pragnÄ,/ -Jak by siÄ tobie dobrze powodziÅo./ -Bo jestli wiÄkszy skarb nad dobre imiÄ/ -Ojca dla dzieci, lub dzieci dla ojca?/ -Nie żyw wiÄc tego, ojcze, przeÅwiadczenia,/ -Å»e tylko twoje coÅ warte jest zdanie;/ -Bo kto jedynie sam sobie zawierzy,/ -Na swojej mowie polega i duszy,/ -Gdy go odsÅoniÄ , pustym siÄ okaże./ -ChoÄby byÅ mÄ dry, przystoi mÄżowi/ -CiÄ gle siÄ uczyÄ, a niezbyt upieraÄ./ -Widzisz przy rwÄ cych strumieniach, jak drzewo,/ -Które siÄ nagnie, zachowa konary,/ -A zbyt oporne z korzeniami runie./ -Także i żeglarz, który zbyt naciÄ gnie/ -Å»agle i folgi nie daje, przewróci/ -Åódź i osiÄ dzie bez Åawic na desce./ -UstÄ p ty przeto i zaniechaj gniewu,/ -Bo jeÅli wolno sÄ dziÄ mnie mÅodszemu,/ -Mniemam, że taki czÅowiek najprzedniejszy,/ -Który opÅywa w rozum z przyrodzenia;/ -JeÅli tak nie jest --- a i to siÄ zdarzy, ---/ -Niechaj rad dobrych zbyt lekko nie waży. -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -O panie, sÅuchaj, jeÅli w porÄ mówi,/ -A ty znów ojca; obaj mÄ drze prawiÄ . -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -A wiÄc w mym wieku mam mÄ droÅci szukaÄ/ -I braÄ nauki u tego mÅokosa? -</strofa> -</kwestia> - - -<naglowek_osoba>HAJMON</naglowek_osoba> - -<kwestia> -<strofa> -Nie w nieprawoÅci; a jeÅli ja mÅody,/ -To na rzecz raczej, niż wiek, baczyÄ trzeba. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Na rzecz, niesfornym która czeÅÄ oddaje?</strofa></kwestia> - - -<naglowek_osoba>HAJMON</naglowek_osoba> - -<kwestia><strofa>Ni sÅowem ÅmiaÅbym czeÅÄ takÄ zalecaÄ.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>A czyż nie w takie popadÅa ta bÅÄdy?</strofa></kwestia> - - -<naglowek_osoba>HAJMON</naglowek_osoba> - -<kwestia><strofa>Przeczy gÅos ludu, co mieszka w Teb grodzie.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>WiÄc lud mi wskaże, co ja mam zarzÄ dzaÄ?</strofa></kwestia> - - -<naglowek_osoba>HAJMON</naglowek_osoba> - -<kwestia><strofa>Niemal jak mÅodzian porywczy przemawiasz.</strofa></kwestia> - - -<begin id="b1188562762586"/><motyw id="m1188562762586">PaÅstwo, WÅadza</motyw><naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Sobie czy innym gwoli ja tu rzÄ dzÄ?</strofa></kwestia> - - -<naglowek_osoba>HAJMON</naglowek_osoba> - -<kwestia><strofa>Marne to paÅstwo, co li panu sÅuży.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Czyż nie do wÅadcy wiÄc paÅstwo należy?</strofa></kwestia> - - -<naglowek_osoba>HAJMON</naglowek_osoba> - -<kwestia><strofa>PiÄknie byÅ wtedy rzÄ dziÅ... na pustyni.</strofa></kwestia><end id="e1188562762586"/> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Ten, jak siÄ zdaje, z tamtÄ dziewkÄ trzyma.</strofa></kwestia> - - -<naglowek_osoba>HAJMON</naglowek_osoba> - -<kwestia><strofa>JeÅli ty dziewkÄ ; o ciebie siÄ troskam.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Z ojcem siÄ swarzÄ c, o przewrotny synu?</strofa></kwestia> - - -<naglowek_osoba>HAJMON</naglowek_osoba> - -<kwestia><strofa>Bo widzÄ, że ty z drogi zbaczasz prawej.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>BÅÄ dzÄż ja strzegÄ c godnoÅci mej wÅadzy?</strofa></kwestia> - - -<naglowek_osoba>HAJMON</naglowek_osoba> - -<kwestia><strofa>Nie strzeżesz --- wÅadzÄ pomiatajÄ c bogów.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>O niski duchu, na sÅużbie kobiety!</strofa></kwestia> - - -<naglowek_osoba>HAJMON</naglowek_osoba> - -<kwestia><strofa>Bo w sÅużbie zÅego nie znajdziesz minie nigdy.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>CaÅa twa mowa jej sprawy ma broniÄ.</strofa></kwestia> - - -<naglowek_osoba>HAJMON</naglowek_osoba> - -<kwestia><strofa>Twej sprawy, mojej i podziemnych bogów.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Nigdy już żywcem ty jej nie poÅlubisz.</strofa></kwestia> - - -<naglowek_osoba>HAJMON</naglowek_osoba> - -<kwestia><strofa>Zginie --- to ÅmierciÄ sprowadzi zgon inny.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>A wiÄc już groźbÄ Åmiesz we mnie ty godziÄ?</strofa></kwestia> - - -<naglowek_osoba>HAJMON</naglowek_osoba> - -<kwestia><strofa>Cóż warta groźba, gdzie puste zamysÅy?</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Wnet pożaÅujesz twych nauk, mÅokosie!</strofa></kwestia> - - -<naglowek_osoba>HAJMON</naglowek_osoba> - -<kwestia><strofa>Nie byÅbyÅ ojcem, rzekÅbym, żeÅ niemÄ dry.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Niewiast sÅużalcze, przestaÅ siÄ uprzykrzaÄ!</strofa></kwestia> - - -<naglowek_osoba>HAJMON</naglowek_osoba> - -<kwestia><strofa>Chcesz wiÄc ty mówiÄ, a drugich nie sÅuchaÄ?</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -Doprawdy? Ale, na Olimp, wiedz o tym,/ -Å»e ciÄ twe drwiny o zgubÄ przyprawiÄ ./ -Wiedźcie tu dziewkÄ; niechajże wyrodna/ -W oczach kochanka tu ginie natychmiast. -</strofa> -</kwestia> - - -<naglowek_osoba>HAJMON</naglowek_osoba> - -<kwestia> -<strofa> -Nie umrze ona przy mnie! nie marz o tym./ -Nie ujrzÄ tego! raczej ty nie ujrzysz/ -WiÄcej mojego oblicza, jeżeli/ -W szale na bliskich porywaÄ siÄ myÅlisz. -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -Uniesion gniewem wypadÅ on, o wÅadco./ -A w mÅodej gÅowie rozpacz zÅym doradcÄ . -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -Niech myÅli, czyny knuje on zuchwaÅe/ -Ale tych dziewek nie wyrwie on Åmierci, -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia><strofa>Jak to? czyż obie ty zgÅadziÄ zamyÅlasz?</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Niewinna ujdzie: sÅusznie mnie strofujesz.</strofa></kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia><strofa>A jakiż tamtej gotujesz ty koniec?</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -GdzieÅ na bezludnym zamknÄ jÄ pustkowiu./ -W skalistym lochu zostawiÄ Å¼yjÄ cÄ ,/ -Strawy przydajÄ c jej tyle, by kaźniÄ/ -PozbawiÄ grozy i klÄ twy nie ÅciÄ gnÄ Ä,/ -A tam jej Hades, którego jedynie/ -Z bogów uwielbia, może da zbawienie, ---/ -Lub pozna wreszcie, jeÅli marnie zginie,/ -Å»e próżnÄ sÅużbÄ czciÄ Hadesu cienie. -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -MiÅoÅci, któż siÄ wyrwie z twych obierzy,/ -MiÅoÅci, która runiesz na ofiary,/ -W gÅadkich dziew licach gdy rozniecisz czary./ -Kroczysz po morzu i wÅród chat pasterzy,/ -Ni bóg nie ujdzie przed twoim nawaÅem,/ -Ani Åmiertelny. Kim wÅadasz, wre szaÅem. -</strofa> - -<strofa> -Za twym podmuchem, do winy/ -Zboczy i prawy wraz czÅowiek;/ -Spory ty szerzysz wÅród jednej rodziny./ -Urok wystrzela zwyciÄsko spod powiek/ -Dziewicy, siÄgnie i praw majestatu/ -Moc Afrodyty, co przewodzi Åwiatu. -</strofa> - -<strofa> -A i ja nawet, chociaż wiernie sÅużÄ,/ -Prawie siÄ w duszy na ukazy burzÄ,/ -<wers_wciety typ="2">A boleÅÄ serce mi rani,</wers_wciety>/ -Bo straszny widok uderza me oczy:/ -Do wszechchÅonÄ cej Antygona kroczy/ -<wers_wciety typ="2">Ciemnej Hadesu przystani.</wers_wciety> -</strofa> -</kwestia> - - -<begin id="b1188563217251"/><motyw id="m1188563217251">MiÅoÅÄ, Rozpacz, ÅmierÄ</motyw><naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -Patrzcie, o patrzcie, wy ziemi tej dzieci,/ -Na mnie, kroczÄ cÄ w smutne Åmierci cienie,/ -OglÄ dajÄ cÄ ostatnie promienie/ -SÅoÅca, co nigdy już mi nie zaÅwieci,/ -Bo mnie Hadesa dziÅ rÄka Åmiertelna/ -Do Acherontu<pr>Acheront --- rzeka Tartaru.</pr> bladych wiedzie wÅoÅci./ -<wers_wciety typ="2">Ani zaznaÅam miÅoÅci,</wers_wciety>/ -Ani mi zabrzmi żadna pieÅÅ weselna;/ -Ale na zimne Acherontu Åoże/ -<wers_wciety typ="2">CiaÅo nieszczÄsne me zÅożÄ.</wers_wciety> -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba><uwaga>Czy to przypadkiem nie kwestia Przewodnika Chóru? Tak podejrzewam, trzeba by porównaÄ z innnymi wydaniami. DG</uwaga> - -<kwestia> -<strofa> -PieÅni ty godna, i w chwaÅy rozkwicie/ -W kraj Åmierci niesiesz twe życie./ -Ani ciÄ chorób przygnÄbiÅo brzemiÄ,/ -Ni miecza ostrze zwaliÅo na ziemiÄ,/ -Lecz wÅasnowolna, nie dobiegÅszy kresu,/ -<wers_wciety typ="2">Å»ywa w kraj stÄ pasz Hadesu.</wers_wciety> -</strofa> -</kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -SÅyszaÅam niegdyÅ o frygijskiej Niobie,/ -Córce Tantala, i jej strasznym zgonie./ -Å»e skamieniaÅa w swej niemej żaÅobie<pr>Niobe, która miaÅa szeÅciu synów i szeÅÄ córek, urÄ gaÅa Latonie, która miaÅa tylko Apollina i ArtemidÄ. Gniew tych bogów zabiÅ jej dzieci, a ona skamieniaÅa z boleÅci.</pr>/ -I odtÄ d ciÄ gle we Åzach bólu tonie./ -<wers_wciety typ="2">SkaÅa owiÅa jÄ jak bujne bluszcze.</wers_wciety>/ -A na jej szczytach Ånieg miecie, deszcz pluszcze;/ -<wers_wciety typ="2">Rozpaczy Åkaniem zroszone jej Åono, ---</wers_wciety>/ -Mnie też kamiennÄ poÅciel przeznaczono. -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -Lecz ona przecież z krwi bogów jest rodem,/ -My Åmiertelnego pokolenia pÅodem./ -HoÅd jednak temu, kto choÄ w Åmierci progu/ -<wers_wciety typ="2">Dorówna bogu.</wers_wciety> -</strofa> -</kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -UrÄ gasz biednej. Czemuż obelżywÄ / -MowÄ mnie ranisz, pókim jeszcze żywÄ ?/ -Miasto i mÄże, dzierÅ¼Ä cy te grody./ -Wzywam was, zwróÄcie litosne swe oczy,/ -I wy, Teb gaje i dirkejskie wody,/ -Na mnie, co idÄ ku ciemnej pomroczy,/ -Nie opÅakana przez przyjacióŠżale,/ -Do niezwykÅego grobowca gdzieÅ w skale./ -<wers_wciety typ="2">O, ja nieszczÄsna!</wers_wciety>/ -Anim ja zmarÅa, ani też przy życiu,/ -ÅmierÄ mnie już trzyma w swym mroźnym spowiciu. -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -W nadmiarze pychy zuchwaÅej/ -<wers_wciety typ="2">Z tronem siÄ Diki twe myÅli i mowy</wers_wciety>/ -ZderzyÅy w locie, zÅamaÅy./ -<wers_wciety typ="2">ZÅy duch ciÄ Åciga rodowy.</wers_wciety> -</strofa> -</kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -Mowa ta gÅÄbiÄ mego serca targa;/ -DotknÄ ÅeÅ ojca ty sromu,/ -I w sÅowach twoich rozbrzmiaÅa znów skarga/ -<wers_wciety typ="2">Nad nieszczÄÅciami Labdakidów domu.</wers_wciety>/ -Straszna ja pomnÄ ÅożnicÄ,/ -W której syn z matkÄ zdrożne Åluby wiÄ Å¼e./ -<wers_wciety typ="2">NieszczÄÅni moi rodzice!</wers_wciety>/ -KlÄ twÄ brzemienna dziÅ do was podÄ Å¼Ä,/ -DziewiczoÅÄ niosÄ c wam serca./ -O drogi bracie, zÅowrogie twe Åluby<pr><slowo_obce>zÅowrogie twe Åluby</slowo_obce> --- Åluby Polinika z córkÄ Adrastosa, które uÅatwiÅy wyprawÄ Siedmiu na Teby.</pr>/ -ByÅy poczÄ tkiem pogromu i zguby;/ -TyÅ --- choÄ zmarÅy --- mój morderca. -</strofa> -</kwestia> - - -<naglowek_osoba>CHOR</naglowek_osoba> - -<kwestia> -<strofa> -ZmarÅych czciÄ --- czcigodny czyn,/ -<wers_wciety typ="2">Ale godny kaźni bÅÄ d</wers_wciety>/ -<wers_wciety typ="2">ÅamaÄ prawo, waliÄ rzÄ d.</wers_wciety>/ -<wers_wciety typ="2">TyÅ zginÄÅa z wÅasnych win.</wers_wciety> -</strofa> -</kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -Bez Åez, przyjacióÅ, weselnego pienia/ -KroczÄ już, biedna, ku Åmiertelnej toni,/ -Wnet już nie ujrzÄ ni sÅoÅca promienia,/ -NikÅ Åzy nad mojÄ dolÄ nie uroni. -</strofa> -</kwestia><end id="e1188563217251"/> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -Czyżby kto ustaÅ w przedzgonnych tych skargach/ -Gdyby mu dano siÄ Å¼aliÄ bez koÅca?/ -Bierzcie stÄ d dziewkÄ i w ciemnym jÄ grobie/ -Zawrzyjcie zaraz, jak już nakazaÅem./ -Tam jÄ zostawcie samotnÄ , by zmarÅa,/ -Albo też żywa pÄdziÅa dni marne;/ -Tak wobec dziewki zostaniem bez winy,/ -A nie Åcierpimy, aby wÅród nas żyÅa. -</strofa> -</kwestia> - - -<begin id="b1188563989733"/><motyw id="m1188563989733">MiÅoÅÄ, Rozpacz, ÅmierÄ</motyw><naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -Grobie, ty mojej Åożnico miÅoÅci,/ -Mieszkanie wieczne, ciemnico sklepiona!/ -IdÄ do moich, których tylu goÅci/ -W pozgonnych domach boska Persefona<pr>Persefona --- maÅżonka Iladesa, pana podziemi.</pr>./ -Za wami idÄ ja, co w życia wioÅnie -ZginÄÅam, prawie nie zaznawszy Åwiata./ -A tuszÄ, że mnie tam przyjmÄ radoÅnie,/ -Ty, ojcze, matko, i miÅa dÅoÅ brata,/ -Bom tu z miÅosnÄ sÅużbÄ wasze ciaÅa/ -WÅasnÄ obmyÅa, namaÅciÅa rÄkÄ ;/ -Å»em bratnie zwÅoki uczciwie grzebaÅa,/ -<wers_wciety typ="2">TakÄ mnie darzÄ podziÄkÄ !</wers_wciety>/ -Mam u szlachetnych ludzi czeÅÄ i chwaÅÄ,/ -Lecz potÄpienie ze strony Kreona,/ -Bo on me czyny uznaÅ za zuchwaÅe./ -RÄkÄ wiÄc teraz jego uwiÄziona,/ -Ani zaznawszy sÅodyczy wesela,/ -Ni uczuÄ maiki, ni dziatek pieszczoty,/ -SchodzÄ tak sama i bez przyjaciela,/ -NieszczÄsna, żywa do grobowej groty./ -Jakież to bogów zÅamaÅam ustawy?/ -Jakże do bogów podnosiÄ mam modÅy,/ -WoÅaÄ o pomoc, jeżeli czyn prawy,/ -Który speÅniÅam, uznano za podÅy?/ -Lecz jeÅli z bogów to zrzÄ dzenia pÅynie,/ -Trzeba mi winnej znieÅÄ w ciszy cierpienia./ -JeÅli ci bÅÄ dzÄ , niech siÄgnie ich w winie/ -<wers_wciety typ="2">KaźŠrówna z bogów ramienia!</wers_wciety> -</strofa> -</kwestia><end id="e1188563989733"/> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -Te same burze i te same jeszcze/ -DuszÄ tej dziewki wciÄ Å¼ miotajÄ dreszcze. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -PachoÅki, którym wieÅÄ jÄ nakazaÅem,/ -SwojÄ powolnoÅÄ ciÄżko mi... odpÅaczÄ . -</strofa> -</kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -Biada! ta mowa groÅ¼Ä ca/ -Bliskiego wróżbÄ mi koÅca. -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -A ja odwagi nie ÅmiaÅbym dodawaÄ,/ -Å»e siÄ te srogie ukazy odwlokÄ . -</strofa> -</kwestia> - - -<naglowek_osoba>ANTYGONA</naglowek_osoba> - -<kwestia> -<strofa> -Ziemi tebaÅskiej ojczysty ty grodzie,/ -<wers_wciety typ="2">I wy bogowie rodowi,</wers_wciety>/ -Oto mnie wiodÄ w bezzwÅocznym pochodzie/ -<wers_wciety typ="2">Ku samotnemu grobowi.</wers_wciety>/ -Patrzcie na ksiÄżnÄ ostatniÄ z Teb królów,/ -<wers_wciety typ="2">W rÄce siepaczy ujÄtÄ ,</wers_wciety>/ -Ile mÄ k ona, ile zniosÅa bólów/ -<wers_wciety typ="2">Za wiernÄ sÅużbÄ i ÅwiÄtÄ .</wers_wciety> -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -Tak i Danae jasnego dnia zorze/ -ZmieniÄ musiaÅa na loch w miedź obity,/ -<wers_wciety typ="2">W grobowej skryta komorze<pr>Danae zostaÅa zamkniÄta przez ojca Akryzjosa w podziemnym lochu, by nie urodziÅa zÅowróżbnego syna. Tu jÄ jednak zapÅodniÅ zÅotym deszczem Zeus i urodziÅa sÅynnego Perseusza.</pr>.</wers_wciety>/ -A przecież ród jej zapewniaÅ zaszczyty/ -I Zeus deszcz zÅoty na Åono jej roni./ -<wers_wciety typ="2">Straszne przeznaczeÅ obierze!</wers_wciety>/ -PieniÄ dz, ni siÅa, ni warowne wieże,/ -<wers_wciety typ="2">Ni morski żagiel przed nimi nie chroni.</wers_wciety>/ -</strofa> - -<strofa> -Hedonów króla Likurga też bucie,/ -<wers_wciety typ="2">Å»e hardym sÅowem na boga siÄ miota,</wers_wciety>/ -Bakchus kamienne zgotowaÅ okucie,/ -<wers_wciety typ="2">Gdzie zÅa wykipi ochota<pr>Likurg, baÅniowy król Hedonów w Tracji, oparÅ siÄ kultowi Bakchusa, wyszydzaÅ jego towarzyszki, szalone bachantki i muzy; za to zamknÄ Å go bóg w skalnej czeluÅci.</pr>.</wers_wciety>/ -RozpoznaÅ on tam za późno swe zbrodnie/ -<wers_wciety typ="2">I pożaÅowaÅ sÅów gniewu.</wers_wciety>/ -ChciaÅ bo szaÅ boski tÅumiÄ i pochodnie,/ -<wers_wciety typ="2">UrÄ gaÅ muzom wÅród Åpiewu.</wers_wciety>/ -</strofa> - -<strofa> -Gdzie z mórz strzelajÄ kyanejskie progi<pr><slowo_obce>kyanejskie progi</slowo_obce> (Åac. Cyaneae) --- skaliste wyspy na Morzu Czarnym przy Bosforze.</pr>,/ -Kraj Salmidesu<pr>Salmy-dessus --- wybrzeże i miasto na trackim brzegu Morza Czarnego.</pr>, dla przybyszów wrogi,/ -Gdzie brzeg Bosforu baÅwany roztrÄ ca,/ -Tam widziaÅ Ares, jak dzikoÅciÄ wrÄ ca/ -Å»ona Fineusa pasierby swe nÄka./ -Nie mieczem srogim wymierza im ciÄgi,/ -Lecz krwawÄ rÄkÄ zaÅapiÄ w ócz krÄgi,/ -<wers_wciety typ="2">Ostrzem je Åupi czóÅenka<pr>Król Fineus ze Salmidesu ożeniÅ siÄ z KleopatrÄ , córkÄ Boreasza, ksiÄżniczkÄ z krwi attyckiej. Potem jÄ porzuciÅ, aby poÅlubiÄ nimfÄ nazwiskiem Idaea. Przewrotnej Idaei wydaÅ Fineus swe dzieci z Kleopatry; macocha je oÅlepiÅa i nastÄpnie zamknÄÅa żywcem w grobowcu. Także ich matka, Kleopatra, zawarta zostaÅa w kamiennej niewoli.</pr>.</wers_wciety>/ -</strofa> - -<strofa> -UjÄci oni kamiennÄ niewolÄ ,/ -PÅaczÄ nad matki i swojÄ niedolÄ ./ -Przecież jej przodki z Erechtydów<pr>Erechtydzi --- AteÅczycy; nazwa ta pochodzi od Erechteusa, bohatera ateÅskiego rodu.</pr>,/ -Ojcem Boreasz; poÅród skaÅ i gÅogów/ -I burz pÄdziÅa dni swoje od mÅodu,/ -Na chyżych koniach --- prawe dzieciÄ bogów./ -Jednak, choÄ w dali, i tu jej dosiÄga/ -<wers_wciety typ="2">Odwiecznej Mojry<pr>Mojra --- bogini przeznaczenia.</pr> potÄga.</wers_wciety> -</strofa> -</kwestia> - - -<naglowek_osoba>TYREZJASZ</naglowek_osoba> - -<didaskalia>[wiedziony przez chÅopca ukazuje siÄ na scenie]</didaskalia> - -<kwestia> -<strofa> -O, Teb starszyzno, wspólnym my tu krokiem/ -I wspólnym wzrokiem zdÄ Å¼amy, bo ciemnym/ -Za oko staje przewodnika rÄka. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Cóż tam nowego, Tyrezjaszu stary?</strofa></kwestia> - - -<naglowek_osoba>TYREZJASZ</naglowek_osoba> - -<kwestia><strofa>Ja rzeknÄ, ty zaÅ posÅuchaj wróżbiarza.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Nigdy twoimi nie wzgardziÅem sÅowy.</strofa></kwestia> - - -<naglowek_osoba>TYREZJASZ</naglowek_osoba> - -<kwestia><strofa>Przeto szczÄÅliwie sterujesz tÄ nawÄ .</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -PrzyÅwiadczyÄ mogÄ, doznawszy korzyÅci. - - -<naglowek_osoba>TYREZJASZ</naglowek_osoba> - -<kwestia><strofa>Zważ teraz, znowu stoisz na przeÅomie.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Co mówisz? trwogÄ przejmujÄ twe sÅowa.</strofa></kwestia> - - -<naglowek_osoba>TYREZJASZ</naglowek_osoba> - -<kwestia> -<strofa> -Poznasz ty prawdÄ, ze znaków mej sztuki./ -SiadÅem na starej wróżbity siedzibie,/ -Gdzie wszelkie ptactwo kieruje swe loty,/ -Aż naraz sÅyszÄ, jak niezwykÅe gÅosy/ -WydajÄ ptaki, szalone i dzikie;/ -I wnet poznaÅem, że szarpiÄ siÄ szpony,/ -Bo Åopot skrzydeÅ to stwierdzaÅ dobitnie./ -PrzejÄty trwogÄ , próbujÄ ofiary/ -Na pÅomienistym oÅtarzu, lecz ogieÅ/ -Nie chce wystrzelaÄ ku górze, a sÄ czy/ -Ciecz z miÄs ofiarnych, wsiÄ kajÄ c w popioÅy,/ -Kipi i syczy, żóÅÄ bryzga w powietrze,/ -I spoza tÅuszczu, co spÅynÄ Å stopiony,/ -Uda wyjrzaÅy na oÅtarzu nagie./ -Od tego chÅopca wnet siÄ dowiedziaÅem,/ -Å»e takie marne szÅy z ofiary znaki,/ -Bo on przewodzi mnie, a ja znów innym./ -Tak wiÄc chorzeje miasto z twojej winy./ -Bo wsze oÅtarze i ofiarne stoÅy/ -Psy pokalaÅy i ptactwo, co ciaÅem/ -Edypowego siÄ Å¼ywiÅo syna./ -WiÄc nie przyjmujÄ już ofiarnych modÅów/ -Bogowie od nas, ni ofiarnych dymów./ -A ptak, co żÅopaÅ krew trupa zastygÅÄ ,/ -Już nie wydaje gÅosów dobrej wróżby./ -Rozważ to synu: bo wszystkich jest ludzi/ -BÅÄ dziÄ udziaÅem i z prostej zejÅÄ drogi;/ -Lecz mÄ Å¼, co zbÅÄ dziÅ, nie jest pozbawiony/ -Czci i rozwagi, jeżeli wÅród nieszczÄÅÄ/ -Szuka lekarstwa i nie trwa w uporze./ -Upór jest zawsze nierozumu znakiem;/ -UstÄ p ty Åmierci i nie drażŠzmarÅego/ -Cóż bo za chwaÅa nad trupem siÄ znÄcaÄ?/ -Å»yczliwoÅÄ moja tÄ radÄ ci sÅuży,/ -Dobrze jej sÅuchaÄ, gdy korzyÅci wróży. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -Starcze, wy wszyscy jak Åucznik do celu/ -Mierzycie we mnie: teraz i wróżbiarstwo/ -SidÅa zastawia, a krewni mÄ myÅlÄ / -KupczÄ , frymarczÄ z dawna jak towarem;/ -Nuże, gromadźcie wy sardyjskie skarby,/ -Wskażcie mi górÄ indyjskiego zÅota<pr><slowo_obce>sardyjskie skarby... indyjskie zÅoto</slowo_obce> --- Sardes, stolica Lidii, sÅynÄÅa ze swych skarbów, Indie ze swego zÅota.</pr>,/ -Na pogrzeb tego jednak nie zezwolÄ./ -I choÄby orÅy Zeusowe porwaÅy/ -Trupa i przed tron Zeusowy zaniosÅy,/ -Ja siÄ takiego nie ulÄknÄ sromu,/ -GrzeÅÄ nie pozwolÄ; wiem bo ja zbyt dobrze:/ -Bogów zbezczeÅciÄ nie zdoÅa Åmiertelny./ -PotknÄ Ä siÄ mogÄ i ludzie przemÄ drzy,/ -Starcze, haniebnie, kiedy szpetne myÅli/ -UbiorÄ w sÅowa barwiste... dla zysku. -</strofa> -</kwestia> - - -<naglowek_osoba>TYREZJASZ</naglowek_osoba> - -<kwestia> -<strofa> -Biada!/ -Czyż wie to czÅowiek, czy rozważa sobie... -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Cóż, z jakim znowu na plac ogólnikiem?</strofa></kwestia> - - -<naglowek_osoba>TYREZJASZ</naglowek_osoba> - -<kwestia><strofa>Ile rozsÄ dek góruje nad skarby?</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>O ile klÄskÄ najwiÄkszÄ nierozum.</strofa></kwestia> - - -<naglowek_osoba>TYREZJASZ</naglowek_osoba> - -<kwestia><strofa>CiÄżko ty na tÄ zapadÅeÅ chorobÄ.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Nie chciaÅbym ciÄżkim obraziÄ ciÄ sÅowem.</strofa></kwestia> - - -<naglowek_osoba>TYREZJASZ</naglowek_osoba> - -<kwestia><strofa>Czynisz to, kiedy mi kÅamstwo zarzucasz.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Bo cech wasz caÅy Åapczywy na zyski.</strofa></kwestia> - - -<naglowek_osoba>TYREZJASZ</naglowek_osoba> - -<kwestia><strofa>A ród tyranów w mÄtach chciwie Åowi.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Wiesz, że ty pana twojego obrażasz?</strofa></kwestia> - - -<naglowek_osoba>TYREZJASZ</naglowek_osoba> - -<kwestia> -<strofa>Wiem, bo ja tobie gród ten zachowaÅem<pr>Tyrezjasz <wyroznienie>zachowaÅ</wyroznienie> Teby, gdy podczas najazdu Siedmiu na miasto poradziÅ Kreonowi, aby tenże wÅasnego syna (zapewne Megarcusa) poÅwiÄciÅ, a tÄ ÅmierciÄ okupiÅ wybawienie.</pr>.</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>MÄ dry ty wróżbiarz, lecz oddany zÅemu.</strofa></kwestia> - - -<naglowek_osoba>TYREZJASZ</naglowek_osoba> - -<kwestia><strofa>TyÅ gotów wydrzeÄ mi z wnÄtrza tajniki.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Wyrusz ty z nimi, byle nie dla zysku.</strofa></kwestia> - - -<naglowek_osoba>TYREZJASZ</naglowek_osoba> - -<kwestia><strofa>Å»e ty stÄ d zysku nie uszczkniesz, to myÅlÄ.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Bacz, że zamysÅów moich nie stargujesz.</strofa></kwestia> - - -<naglowek_osoba>TYREZJASZ</naglowek_osoba> - -<kwestia> -<strofa> -Wiedz wiÄc stanowczo, że nim sÅoÅce tobie/ -Wielu dokona koÅowych obrotów,/ -PÅód z twoich wÅasnych poczÄty wnÄtrznoÅci/ -Jak trupa oddasz w zamianÄ za trupy,/ -Za to, że z ÅwiatÅa strÄ ciÅeÅ do nocy,/ -ZamknÄ ÅeŠżycie haniebnie w grobowcu,/ -A tu na ziemi zmarÅe trzymasz ciaÅo,/ -Które siÄ bóstwom należy podziemnym./ -Nie masz żadnego ty nad zmarÅym prawa,/ -Ni ÅwiatÅa bogi, którym gwaÅt zadajesz./ -Za to czyhajÄ Hadesa i bogów/ -MÅciwe i zgubÄ groÅ¼Ä ce Erynie<pr>Erynie --- boginie podziemi, mszczÄ ce zbrodnie ludzi.</pr>,/ -By ciÄ w podobnym pogrÄ Å¼yÄ nieszczÄÅciu./ -Poznasz ty wkrótce, czy ja przekupiony/ -Tak mówiÄ, w krótkim pokaÅ¼Ä to czasie/ -MÄżczyzn i niewiast w twoim domu jÄki./ -A wszelkie miasto przeciw tobie stanie,/ -W którym psy strzÄpy zbezczeÅciÅy trupów,/ -ZwierzÄta dzikie i ptactwo, roznoszÄ c/ -WstrÄtne po ÅwiÄtych zaduchy ogniskach./ -Takimi strzaÅy ja, ciÄżko zelżony,/ -GodzÄ jak Åucznik z gniewem w twoje serce/ -I tak celujÄ, że ostrze poczujesz./ -O chÅopcze, wiedźże mnie teraz do domu,/ -By on na mÅodszych swe gniewy upuÅciÅ,/ -A lepiej odtÄ d miarkowaÅ siÄ w sÅowie/ -I myÅl mu lepsza zajaÅniaÅa w gÅowie. -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -O, wÅadco, poszedÅ on po wróżbie strasznej./ -A wiem to, odkÄ d mi czarne siwiznÄ / -StaroÅÄ na gÅowie posrebrzyÅa wÅosy:/ -FaÅszu on nigdy nie zwiastowaÅ miastu. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -Ja też wiem o tym, i trwoga mnÄ miota./ -UstÄ piÄ ciÄżko, a jeÅli siÄ oprÄ,/ -To Åatwo klÄska roztrÄ ci mÄ czelnoÅÄ. -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia><strofa>Synu Menojka, rozwagi ci trzeba.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Cóż tedy czyniÄ? Mów, pójdÄ za radÄ .</strofa></kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -Idź i wyprowadź dziewkÄ z ciemnej groty,/ -A grób przygotuj dla ciaÅa, co leży. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Radzisz i mniemasz, że ja mam ustÄ piÄ?</strofa></kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -O, jak najprÄdzej, mój ksiÄ Å¼Ä, bo chyżo/ -KaźŠbogów ludzki pochwyci nierozum. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -CiÄżkie to, ale kaÅ¼Ä milczeÄ sercu./ -CofnÄ siÄ, trudno z koniecznoÅciÄ walczyÄ. -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia><strofa>Idź, sam to uczyÅ, nie zwalaj na innych.</strofa></kwestia> - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -IdÄ sam zaraz, a wy, moi sÅudzy,/ -WziÄ wszy topory pospieszcie pospoÅem/ -Na miejsce widne, gdzie nagi trup leży./ -Ja, że zmieniÅem me dawne zamysÅy,/ -Com sam namotaÅ, sam teraz rozwiÄ Å¼Ä./ -Najlepiej może dziaÅa, kto do zgonu/ -Praw istniejÄ cych przestrzega zakonu. -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -Wieloimienny<pr>Wieloimiennym nazywa siÄ tu Bakchusa, bo w rozmaitych miejscach czciÄ siÄ cieszyÅ pod rozmaitymi przydomkami.</pr>, coÅ z Kadmosa domu/ -PrzysporzyÅ chwaÅy dziewczynie,/ -Synu ty Zeusa, pana burz i gromu!/ -W italskiej ziemi twoje imiÄ sÅynie<pr>W Italii, szczególnie poÅudniowej, w której winnic byÅo wiele, kult Bakchusa byÅ szczególnie popularny.</pr>,/ -<wers_wciety typ="2">A i w Eleuzys, o, synu Semeli,</wers_wciety>/ -<wers_wciety typ="2">Roje ciÄ sÅawiÄ czcicieli.</wers_wciety>/ -Bakchusie, w Tebach ty dzierżysz stolicÄ<pr>W poÅożonych nad rzekÄ Ismenem Tebach, zaÅożonych przez Kadmosa, z dawien dawna Bakchus wielkiej czci zażywaÅ. W jego otoczeniu sÄ szalejÄ ce dziewice, zwane bakchami, tyjadami, lub menadami. WystÄpujÄ one w szaÅem opanowanych obchodach i pochodach (<slowo_obce>thiasoi</slowo_obce>) Bakchusa, a Teby brzmiÄ wtedy pieÅniami.</pr>,/ -KÄdy Ismenos ciche wody toczy;/ -Szalem twym tchnÄ ce plÄ sajÄ dziewice,/ -<wers_wciety typ="2">Pienieni rozbrzmiewa gród smoczy<pr><slowo_obce>gród smoczy</slowo_obce> --- w Tebach Kadmos zabiÅ smoka, sÅuÅ¼Ä cego Aresowi.</pr>.</wers_wciety>/ -WidnyÅ ty w Åunie jarzÄ cych kagaÅców,/ -Gdzie Parnas<pr>Także i góra Parnassos w Focydzie byÅa sÅawna jako siedziba Bakchusa i jego orszaku.</pr> szczytem dwugÅowym wystrzela,/ -Gdzie zdrój Kastalii<pr>ŹródÅo Kastalia, przynoszÄ ce natchnienia poetom, znajdowaÅo siÄ w bliskoÅci.</pr> i swawolnych taÅców/ -Koryku<pr>Korykijska grota leżaÅa u poÅudniowego stoku Parnasu.</pr> nimfy zawodzÄ wesela./ -W górach nysejskiej Eubei<pr>Nysa, miejscowoÅÄ Eubei. W Nysie pono nimfy piastowaÅy mÅodziutkiego Bakchusa. StÄ d wyprowadzano jego drugÄ nazwÄ: Dionysos.</pr>/ -W spowitej bluszczem mkniesz kniei,/ -Potem z tych brzegów, gdzie bujne winnice,/ -PieÅni ciÄ chwaÅy wiodÄ przez ulice/ -I brzmiÄ radoÅnie ku niebom. -</strofa> - -<strofa> -Gród ten nad wszystkie czcisz grody na Åwiecie/ -Wraz z matkÄ twojÄ ciÄżarnÄ od gromu;/ -Kiedy wiÄc brzemiÄ nieszczÄÅcia nas gniecie/ -PeÅnego cierpieÅ i sromu,/ -PrzybÄ dź z Parnasu ku naszej obronie,/ -Lub przez wyjÄ ce mórz tonie. -</strofa> - -<strofa> -Ty, co przodujesz wÅród gwiazd korowodu<pr><slowo_obce>Ty, co przodujesz wÅród gwiazd...</slowo_obce> --- gwiazdy zdajÄ siÄ taÅczyÄ wÅród obchodów Bakchusa, które siÄ odbywajÄ nocnÄ porÄ .</pr>,/ -PieÅniom przewodzisz wÅród mroczy,/ -Zawitaj, synu Zeusowego rodu!/ -Niechaj ciÄ zastÄp naksyjskich<pr>Wyspa Naksos byÅa ogniskiem kultu Bakchusa. Legenda umieszczaÅa także i na niej urodzenie boga, a wiadomo, że miejsc roszczÄ cych sobie prawa do tego zaszczytu byÅo wiele.</pr> otoczy/ -Tyjad, co w szale od zmierzchu do rana/ -TaÅczÄ i w tobie czczÄ pana. -</strofa> -</kwestia> - - -<naglowek_osoba>POSÅANIEC</naglowek_osoba> - -<kwestia> -<strofa> -O, Kadma grodu, domów Amfiona<pr>Domy Amfiona znajdujÄ siÄ w Tebach. Amfion, bliźniak Zethosa, byÅ drugim zaÅożycielem Teb. Bo podczas gdy Kadmos zbudowaÅ fortecÄ miasta, KadmeÄ, on dźwiÄkami swej lutni uÅożyÅ mury gród okalajÄ ce.</pr>/ -MieszkaÅcy! życia czÅowieka nie ÅmiaÅbym/ -Ani wysÅawiaÄ, ni ganiÄ przenigdy,/ -Bo los podnosi i los znów pogrÄ Å¼a/ -Bez przerwy w szczÄÅcie ludzi i w nieszczÄÅcia,/ -A nikt przyszÅoÅci wywróżyÄ nie zdolny./ -Tak Kreon zdawaÅ siÄ godnym podziwu,/ -On, co wyzwoliÅ tÄ ziemiÄ od wrogów/ -I jako wÅadca jedyny nad krajem/ -RzÄ dziÅ, potomstwem cieszÄ c siÄ kwitnÄ cym/ -A dziÅ to wszystko --- stracone. Bo radoÅÄ/ -JeÅli W czÅowieku przygaÅnie, to trzymam,/ -Å»e on nie żyje, lecz żywym jest trupem;/ -Gromadź bogactwa do woli w twym domu,/ -ÅwieÄ jako tyran na zewnÄ trz: gdy cieszyÄ/ -Tym siÄ nie można, to reszty tych skarbów/ -Ja bym nie nabyÅ za dymu cieÅ marny. -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia><strofa>JakÄ Å¼ ty znowu wieÅÄ niesiesz zÅÄ ksiÄciu?</strofa></kwestia> - - -<naglowek_osoba>POSÅANIEC</naglowek_osoba> - -<kwestia><strofa>SkoÅczyli... Åmierci ich winni, co żyjÄ .</strofa></kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia><strofa>Któż to mordercÄ , któż polegÅ, o rzeknij!</strofa></kwestia> - - -<naglowek_osoba>POSÅANIEC</naglowek_osoba> - -<kwestia><strofa>Hajmon nie żyje, we wÅasnej krwi broczy.</strofa></kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia><strofa>Z ojca czy z wÅasnej zginÄ Åże on rÄki?</strofa></kwestia> - - -<naglowek_osoba>POSÅANIEC</naglowek_osoba> - -<kwestia><strofa>W gniewie na ojca mordy sam siÄ zabiÅ.</strofa></kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia><strofa>Wróżbito, jakżeÅ czyn trafnie okreÅliÅ!</strofa></kwestia> - - -<naglowek_osoba>POSÅANIEC</naglowek_osoba> - -<kwestia><strofa>W tym rzeczy stanie dalszej trza narady.</strofa></kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -Lecz otóż widzÄ biednÄ EurydykÄ,/ -Å»onÄ Kreona; albo siÄ przypadkiem/ -Pojawia, albo sÅyszaÅa o synu. -</strofa> -</kwestia> - - -<naglowek_osoba>EURYDYKA</naglowek_osoba> - -<kwestia> -<strofa> -Starcy, rozmowy waszej dosÅyszaÅam/ -WÅaÅnie, gdym z domu wybiec zamierzaÅa,/ -By do Pallady z modÅami siÄ zwróciÄ./ -I wÅaÅnie odrzwi odmykam zasuwki,/ -By je roztworzyÄ, gdy nagle nieszczÄsna/ -WieÅÄ uszy rani; wiÄc padÅam, zemdlona/ -Z trwogi, w objÄcia mych wiernych sÅużebnic./ -Powtórzcie tedy, co ta wieÅÄ przynosi;/ -W zÅym doÅwiadczona, wysÅucham sÅów waszych. -</strofa> -</kwestia> - - -<naglowek_osoba><begin id="b1188564649499"/><motyw id="m1188564649499">Samobójstwo</motyw>POSÅANIEC</naglowek_osoba> - -<kwestia> -<strofa> -Ja, miÅoÅciwa pani, byÅem przy tym,/ -Powiem wiÄc wszystko, jak siÄ wydarzyÅo;/ -Cóż bo ukrywaÄ, by potem na kÅamcÄ/ -WyjÅÄ; --- przecie prawda zawsze faÅsz przemoże./ -Ja tedy wiodÅem twojego maÅżonka/ -Na ten pagórek, gdzie biedne leżaÅo/ -Przez psy podarte ciaÅo Polinika./ -Wnet do Hekaty<pr>Hekate --- bóstwo podobne do Artemidy i Persefony; gÅównie czczona jako bogini podziemna lub straszÄ ca po drogach w otoczeniu dusz ludzi zmarÅych, a niepogrzebanych, lub przedwczeÅnie zgasÅych.</pr> zanieÅliÅmy modÅy/ -I do Plutona, by gniew ich zÅagodziÄ;/ -Obmywszy potem ciaÅo w ÅwiÄtej wodzie,/ -Palimy szczÄ tki na stosie z gaÅÄzi/ -I grób z ojczystej sypiemy im ziemi./ -To uczyniwszy, zaraz do kamiennej/ -Ålubnogrobowej Åożnicy dziewczyny/ -Spieszymy; z dala ktoÅ jÄki usÅyszaÅ,/ -Od strony lochu, co za grób miaÅ sÅużyÄ,/ -ChoÄ nie ÅwiÄciÅy go żadne obrzÄdy./ -Wraz wiÄc donosi panu, co zasÅyszaÅ./ -Tego dochodzÄ zaÅ, kiedy siÄ zbliżyÅ,/ -Åkania żaÅosne, a pierÅ mu wybucha/ -GÅosem rozpaczy: «O, ja nieszczÄÅliwy,/ -Czyż ja wróżbitÄ ? czyż nie kroczÄ teraz/ -DrogÄ najwiÄkszej w żywocie mym klÄski?/ -Syna woÅanie mnie mrozi. O, sÅudzy,/ -Spieszcie wy naprzód, zbliżcie siÄ do grobu,/ -I przez szczelinÄ gÅazem zawalonÄ / -WszedÅszy do wnÄtrza, baczcie, czy Hajmona/ -GÅosy ja sÅyszÄ, czy bogi mnie durzÄ Â». ---/ -PosÅuszni woli zwÄ tpiaÅego pana,/ -Idziem na zwiady, a w grobowca gÅÄbi/ -Dojrzym wnet dziewki, wiszÄ cej za gardÅo/ -ÅciÅniÄte wÄzÅem muÅlinowej chusty,/ -Podczas gdy mÅodzian uchwyciÅ jÄ wpoÅy,/ -BoleÅnie jÄczÄ c nad szczÄÅcia utratÄ ,/ -Nad czynem ojca, nieszczÄsnymi Åluby./ -Kreon, zoczywszy to, ciÄżko zajÄknÄ Å,/ -Rzuca siÄ naprzód i wÅród Åkania woÅa:/ -«O, ty nieszczÄsny! cóżeÅ ty uczyniÅ!/ -Czy szaÅ ciÄ jaki opÄtaÅ zÅowrogi?/ -Wychodź, o synu, bÅagalnie ciÄ proszÄ!»/ -Lecz syn na niego dzikim ÅysnÄ Å wzrokiem/ -I twarz przekrzywiÅ, a sÅowa nie rzekÅszy/ -Ima siÄ miecza; wraz ojciec ucieczkÄ / -UszedÅ zamachu; natenczas nieszczÄsny/ -W gniewie na siebie nad ostrzem siÄ schyla/ -I miecz w bok wraża; lecz jeszcze w konaniu/ -DrÄtwym ramieniem do zmarÅej siÄ tuli,/ -A z ust dyszÄ cych wytryska mu struga/ -Krwawa na blade kochanki policzki.<end id="e1188564649499"/> -</strofa> - -<didaskalia>[<osoba>Eurydyka</osoba> wybiega za scenÄ]</didaskalia> - -<strofa> -Trup dziÅ przy trupie, osiÄ gnÄ Å on Åluby,/ -W domu Hadesa zÅożony przy lubej./ -NieszczÄÅciem dowiódÅ, że wÅród ludzi tÅumu/ -NajwiÄksze klÄski pÅynÄ z nierozumu. -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -A cóż stÄ d wróżysz, że znikÅa niewiasta,/ -Nie rzekÅszy zÅego lub dobrego sÅowa? -</strofa> -</kwestia> - -<naglowek_osoba>POSÅANIEC</naglowek_osoba> - -<kwestia> -<strofa> -I ja siÄ dziwiÄ, lecz żywiÄ nadziejÄ,/ -Å»e posÅyszawszy o ciosie, nie chciaÅa/ -Å»aÅoÅci swojej pospólstwu okazaÄ,/ -Lecz siÄ cofnÄÅa do wnÄtrza domostwa,/ -By wÅród sÅug wiernych wylewaÄ Åzy gorzkie./ -ToÄ jej rozwaga nie dopuÅci zbrodni. -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -Nic nie wiem, ale milczenie uporne,/ -Jak i zbyt gÅoÅne jÄki, zÅo mi wrÃ³Å¼Ä . -</strofa> -</kwestia> - - -<naglowek_osoba>POSÅANIEC</naglowek_osoba> - -<kwestia> -<strofa> -Wnet siÄ dowiemy, czy w gÅÄbiach rozpaczy/ -Nie kryje ona tajnego zamysÅu./ -Idźmy do domu, bo dobrze ty mówisz:/ -Nadmierna cisza jest gÅosem zÅowrogim. -</strofa> -</kwestia> - - -<didaskalia>[Wchodzi <osoba>Kreon</osoba>, dźwigajÄ c ciaÅo syna]</didaskalia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -Lecz otóż ksiÄ Å¼Ä tu wÅaÅnie nadchodzi;/ -<wers_wciety typ="2">O! znak wymowny ujÄ Å on ramiony,</wers_wciety>/ -Nie cudzej zbrodni, jeÅli rzec siÄ godzi,/ -<wers_wciety typ="2">Lecz wÅasnej winy szalonej.</wers_wciety> -</strofa> -</kwestia> - - -<begin id="b1188564726535"/><motyw id="m1188564726535">Rozpacz, Wyrzuty sumienia</motyw><naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -KlnÄ moich myÅli Åmierciodajne winy,/ -<wers_wciety typ="2">Co zatwardziÅy mi serce!</wers_wciety>/ -Widzicie teraz wÅród jednej rodziny/ -<wers_wciety typ="2">Ofiary, ofiar mordercÄ.</wers_wciety>/ -SÅowo dziÅ moje me czyny przeklina;/ -<wers_wciety typ="2">W samym, o! życia rozkwicie</wers_wciety>/ -Przedwczesne losy porwaÅy mi syna,/ -Mój obÅÄd zmiażdżyÅ to życie. -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia><strofa>Późno siÄ zdajesz poznawaÄ, co sÅuszne.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -Biada mi!/ -PrzejrzaÅem biedny: jakiÅ bóg zÅowrogi/ -ZwaliÅ na gÅowÄ swe brzemiÄ,/ -Na szaÅu popeÅniaÅ mnie drogi,/ -SzczÄÅcie me zdeptaÅ, wbiÅ w ziemiÄ./ -O biada! do zguby/ -WiodÄ Åmiertelnych rachuby. -</strofa> -</kwestia><end id="e1188564726535"/> - - -<naglowek_osoba>POSÅANIEC DRUGI</naglowek_osoba> - -<kwestia> -<strofa> -Panie! Ty nieszczÄÅÄ masz wielkie zasoby./ -Bo jedne dźwigasz w twych rÄkach nieszczÄsnych/ -A drugie ujrzysz niebawem w twym domu. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Czyż ja nie na dnie już nieszczÄÅcia gÅÄbi?</strofa></kwestia> - - -<begin id="b1188564835221"/><motyw id="m1188564835221">Samobójstwo</motyw><naglowek_osoba>POSÅANIEC DRUGI</naglowek_osoba> - -<kwestia> -<strofa> -Nie masz już żony; syna twego matka/ -WÅaÅnie na swoje targnÄÅa siÄ Å¼ycie. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -NieubÅagana przystani, Hadesie,/ -Gdzież koniec moich boleÅci?/ -O! znowu nowe len niesie/ -GodzÄ ce w serce mi wieÅci./ -W mÄża, co legÅ już, wtórym godzisz ciosem,/ -ZÅowrogim sÅowami i gÅosem./ -Biada! NieszczÄÅcie z nieszczÄÅcia siÄ sÄ czy,/ -Z synem ÅmierÄ Å¼onÄ mi ÅÄ czy. -</strofa> -</kwestia> - - -<naglowek_osoba>CHOR</naglowek_osoba> - -<kwestia><strofa>WidzieÄ to możesz, dom stoi otworem.</strofa></kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -ZÅe siÄ jak burza nade mnÄ zerwaÅo,/ -Nie widzÄ koÅca mej mÄce:/ -Syna zmarÅego dźwigaÅem ja w rÄce,/ -A teraz żony martwe widzÄ ciaÅo./ -O biada! matczyna/ -Rozpacz dognaÅa już syna. -</strofa> -</kwestia> - - -<naglowek_osoba>POSÅANIEC DRUGI</naglowek_osoba> - -<kwestia> -<strofa> -Zranionej ciÄżko nocÄ zaszÅy oczy,/ -U stóp oÅtarza zajÄkÅa nad zgonem/ -NiegdyÅ chwalebnym syna Megareusa/ -I nad Hajmonem, a wreszcie przekleÅstwa/ -Tobie rzuciÅa ciÄżkie, dzieciobójcy. -</strofa> -</kwestia><end id="e1188564835221"/> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -Groza mnÄ trzÄsie. Przecz mieczem nikt w Åono/ -<wers_wciety typ="2">Ciosu mi Åmierci nie zada?</wers_wciety>/ -<wers_wciety typ="2">O, ja nieszczÄsny! O, biada mi! biada!</wers_wciety>/ -W toÅ nieszczÄÅÄ sunÄ spienionÄ . -</strofa> -</kwestia> - - -<naglowek_osoba>POSÅANIEC DRUGI</naglowek_osoba> - -<kwestia> -<strofa> -W konaniu jeszcze za te wszystkie zgony/ -Na twojÄ gÅowÄ miotaÅa przekleÅstwa. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Jakimże ona skoÅczyÅa sposobem?</strofa></kwestia> - - -<naglowek_osoba>POSÅANIEC DRUGI</naglowek_osoba> - -<kwestia> -<strofa> -Å»elazo w wÅasnej utopiÅa piersi,/ -SÅyszÄ c o syna opÅakanym koÅcu. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -O, biada! win mi nie ujmie nikt inny,/ -<wers_wciety typ="2">Nie ujmie mÄki ni kaźni.</wers_wciety>/ -Ja bo nieszczÄsny, ja twej Åmierci winny./ -<wers_wciety typ="2">Nuże, o sÅudzy, wiedźcie mnie co raźniej,</wers_wciety>/ -Uwodźcie mnie stad; niech moim obliczem/ -Nie mierżÄ, ja, co mniej jestem, jak niczym! -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -Zysku ty szukasz, jestli zysk w nieszczÄÅciu,/ -Bo lżejsza klÄska, co nie gnÄbi dÅugo. -</strofa> -</kwestia> - - -<begin id="b1188564945226"/><motyw id="m1188564945226">Rozpacz</motyw><naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -BÅogosÅawiony dzieŠów, który nÄdzy/ -Kres już ostatni poÅoży,/ -PrzybÄ dź, o przybÄ dź co prÄdzej,/ -Niechbym nie ujrzaÅ jutrzejszej ja zorzy! -</strofa> -</kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -To rzecz przyszÅoÅci, dla obecnej chwili/ -Trza dziaÅaÄ; tamto obmyÅliÄ --- rzecz bogów. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia><strofa>Wszystkie pragnienia w tym jednym zawarÅem</strofa></kwestia> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -O nic nie bÅagaj, bo próżne marzenia,/ -By czÅowiek uszedÅ swego przeznaczenia. -</strofa> -</kwestia> - - -<naglowek_osoba>KREON</naglowek_osoba> - -<kwestia> -<strofa> -Wiedźcie mnie, sÅugi, uchodźcie stÄ d ze mnÄ ,/ -Mnie, który syna zabiÅem wbrew woli/ -I tamtÄ . Biada! aż w oczach mi ciemno./ -DokÄ d siÄ zwróciÄ, gdzie spojrzeÄ w niedoli?/ -Wszystko mi Åamie siÄ w rÄku,/ -Los mnie powaliÅ, peÅen burz i lÄku. -</strofa> -</kwestia><end id="e1188564945226"/> - - -<naglowek_osoba>CHÃR</naglowek_osoba> - -<kwestia> -<strofa> -Nad szczÄÅcia bÅysk, co zÅudÄ mar,/ -Najwyższy skarb rozumu dar./ -A wyzwie ten niechybny sÄ d,/ -Kto bogów lży i wali rzÄ d./ -I zeÅlÄ oni swÄ zemstÄ i kary/ -Na pychÄ sÅowa w czÅowieku,/ -I w klÄsk odmÄcie rozumu i miary/ -W późnym nauczÄ go wieku. -</strofa> -</kwestia> - - - -<extra><!--</tekst_glowny>--></extra> - - -</dramat_wierszowany_l> - - -</utwor> \ No newline at end of file diff --git a/apps/oai/tests/files/lubie-kiedy-kobieta.xml b/apps/oai/tests/files/lubie-kiedy-kobieta.xml deleted file mode 100755 index 7ea6f44b0..000000000 --- a/apps/oai/tests/files/lubie-kiedy-kobieta.xml +++ /dev/null @@ -1,63 +0,0 @@ -<utwor> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> -<rdf:Description rdf:about="http://redakcja.wolnelektury.pl/documents/book/przerwa_tetmajer__lubie_kiedy_kobieta/"> -<dc:creator xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Przerwa-Tetmajer, Kazimierz</dc:creator> -<dc:title xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">LubiÄ, kiedy kobieta...</dc:title> -<dc:contributor.editor xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">KozioÅ, PaweÅ</dc:contributor.editor> -<dc:contributor.technical_editor xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">NiedziaÅkowska, Marta</dc:contributor.technical_editor> -<dc:publisher xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Fundacja Nowoczesna Polska</dc:publisher> -<dc:subject.period xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Modernizm</dc:subject.period> -<dc:subject.type xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Liryka</dc:subject.type> -<dc:subject.genre xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Wiersz</dc:subject.genre> -<dc:description xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez BibliotekÄ ÅlÄ skÄ z egzemplarza pochodzÄ cego ze zbiorów BÅ.</dc:description> -<dc:identifier.url xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">http://wolnelektury.pl/katalog/lektura/lubie-kiedy-kobieta</dc:identifier.url> -<dc:source xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Kazimierz Przerwa-Tetmajer, Wybór poezji, nakÅ. Gebethnera i Wolffa, Warszawa-Kraków 1897</dc:source> -<dc:rights xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Domena publiczna - Kazimierz Przerwa-Tetmajer zm. 1940</dc:rights> -<dc:date.pd xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">1940</dc:date.pd> -<dc:format xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">xml</dc:format> -<dc:type xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">text</dc:type> -<dc:type xml:lang="en" xmlns:dc="http://purl.org/dc/elements/1.1/">text</dc:type> -<dc:date xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">2010-10-12</dc:date> -<dc:audience xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">L</dc:audience> -<dc:language xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">pol</dc:language></rdf:Description> -</rdf:RDF> - - -<liryka_l> -<autor_utworu>Kazimierz Przerwa-Tetmajer</autor_utworu> - -<nazwa_utworu>LubiÄ, kiedy kobieta...</nazwa_utworu> - -<strofa>LubiÄ, kiedy kobieta omdlewa w objÄciu,/ -Kiedy w lubieżnym zwisa przez ramiÄ przegiÄciu,/ -<begin id="b1288014720458-1717646767"/><motyw id="m1288014720458-1717646767">PoÅ¼Ä danie</motyw>Gdy jej oczy zachodzÄ mgÅÄ , twarz caÅa blednie,/ -I wargi siÄ wilgotne rozchylÄ bezwiednie.</strofa> - - -<strofa> -LubiÄ, kiedy jÄ rozkosz i Å¼Ä dza oniemi,/ -Gdy wpija siÄ w ramiona palcami drÅ¼Ä cemi,/ -Gdy krótkim, urywanym oddycha oddechem,/ -I oddaje siÄ caÅa z mdlejÄ cym uÅmiechem. -<end id="e1288014720458-1717646767"/></strofa> - - -<strofa><begin id="b1288014780333-48828945"/><motyw id="m1288014780333-48828945">Wstyd</motyw>I lubiÄ ten wstyd, co siÄ kobiecie zabrania/ -PrzyznaÄ, że czuje rozkosz, że moc poÅ¼Ä dania/ -Zwalcza jÄ , a sycenie Å¼Ä dzy oszalenia<pe><slowo_obce>oszaleniaÄ</slowo_obce> (neol.) --- czyniÄ szalonym.</pe>,/ -Gdy szuka ust, a lÄka siÄ sÅów i spojrzenia. -<end id="e1288014780333-48828945"/></strofa> - - -<strofa><begin id="b1288014533484-249140150"/><motyw id="m1288014533484-249140150">Poeta, Mizoginia</motyw>LubiÄ to --- i tÄ chwilÄ lubiÄ, gdy koÅo mnie/ -Wyczerpana, zmÄczona leży nieprzytomnie,/ -A myÅl moja już od niej wybiega skrzydlata/ -W nieskoÅczone przestrzenie nieziemskiego Åwiata. -<end id="e1288014533484-249140150"/></strofa> - - -</liryka_l> - - - -</utwor> \ No newline at end of file diff --git a/apps/oai/tests/oaipmhapi.py b/apps/oai/tests/oaipmhapi.py deleted file mode 100644 index db57bc18b..000000000 --- a/apps/oai/tests/oaipmhapi.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from catalogue.test_utils import WLTestCase -from catalogue import models -from oai.handlers import * -from oaipmh.server import * -from os import path -from oaipmh.metadata import MetadataRegistry -from lxml import etree - - -class BookMetadataTest(WLTestCase): - def setUp(self): - super(BookMetadataTest, self).setUp() - xml = path.join(path.dirname(__file__), 'files/lubie-kiedy-kobieta.xml') - self.book = models.Book.from_xml_file(xml) - - xml = path.join(path.dirname(__file__), 'files/antygona.xml') - self.book2 = models.Book.from_xml_file(xml) - - mr = MetadataRegistry() - self.catalogue = Catalogue(mr) - - mr.registerWriter('oai_dc', oai_dc_writer) - nsmap = {'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI} - self.xml = XMLTreeServer(self.catalogue, mr, nsmap) - - def test_get_record(self): - self.xml.getRecord(identifier='lubie-kiedy-kobieta', - metadataPrefix='oai_dc') - self.xml.listRecords(metadataPrefix='oai_dc') - - def test_selecting(self): - records, token = self.catalogue.listRecords(**{'set': 'epoch:starozytnosc'}) diff --git a/apps/oai/urls.py b/apps/oai/urls.py deleted file mode 100644 index 13ea9f12a..000000000 --- a/apps/oai/urls.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url - -urlpatterns = patterns('oai.views', - url(r'^$', 'oaipmh', name='oaipmh')) diff --git a/apps/oai/views.py b/apps/oai/views.py deleted file mode 100644 index 5bb902508..000000000 --- a/apps/oai/views.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from oai.handlers import Catalogue, NS_DCTERMS, nsdcterms -from oaipmh.server import ServerBase, NS_OAIDC, NS_DC, NS_XSI, nsoaidc, nsdc -from oaipmh.metadata import MetadataRegistry -from django.http import HttpResponse -from django.utils.functional import SimpleLazyObject -from lxml.etree import SubElement - - - -#ns_map = {'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI } - - -def fbc_oai_dc_writer(element, metadata): - """FBC notified us that original writer does not output all necessary namespace declarations. - """ - e_dc = SubElement(element, nsoaidc('dc'), - nsmap={'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI}) - e_dc.set('{%s}schemaLocation' % NS_XSI, - '%s http://www.openarchives.org/OAI/2.0/oai_dc.xsd' % NS_OAIDC) - map = metadata.getMap() - for name in [ - 'title', 'creator', 'subject', 'description', 'publisher', - 'contributor', 'date', 'type', 'format', 'identifier', - 'source', 'language', 'relation', 'coverage', 'rights', - ]: - for value in map.get(name, []): - e = SubElement(e_dc, nsdc(name)) - e.text = value - - -def qdc_writer(element, metadata): - """FBC notified us that original writer does not output all necessary namespace declarations. - """ - nsmap = {'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI, 'dcterms': NS_DCTERMS} - map = metadata.getMap() - for name in [ - 'title', 'creator', 'subject', 'description', 'publisher', - 'contributor', 'date', 'type', 'format', 'identifier', - 'source', 'language', 'relation', 'coverage', 'rights', - ]: - for value in map.get(name, []): - e = SubElement(element, nsdc(name), nsmap=nsmap) - e.text = value - - for name in ['hasPart', 'isPartOf']: - for value in map.get(name, []): - e = SubElement(element, nsdcterms(name), nsmap=nsmap) - e.text = value - - - -metadata_registry = MetadataRegistry() -metadata_registry.registerWriter('oai_dc', fbc_oai_dc_writer) -metadata_registry.registerWriter('qdc', qdc_writer) - - -server = SimpleLazyObject(lambda: - ServerBase(Catalogue(metadata_registry), metadata_registry, - {'topxsi': NS_XSI}) - ) - - -def oaipmh(request): - resp = server.handleRequest(request.GET) - return HttpResponse(resp, content_type='application/xml') diff --git a/apps/opds/__init__.py b/apps/opds/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/opds/tests/__init__.py b/apps/opds/tests/__init__.py deleted file mode 100755 index b1399aee7..000000000 --- a/apps/opds/tests/__init__.py +++ /dev/null @@ -1,66 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from unittest import skipIf -from lxml import etree -from django.conf import settings -from django.core.files.base import ContentFile -import catalogue -from catalogue.test_utils import (BookInfoStub, PersonStub, info_args, - WLTestCase, get_fixture) -from catalogue.models import Book -from librarian import WLURI, XMLNamespace -from search.index import Index, Search - -AtomNS = XMLNamespace("http://www.w3.org/2005/Atom") - - -@skipIf(getattr(settings, 'NO_SEARCH_INDEX', False), - u'Requires search server and NO_SEARCH_INDEX=False.') -class OpdsSearchTests(WLTestCase): - """Tests search feed in OPDS..""" - def setUp(self): - WLTestCase.setUp(self) - index = Index() - index.index.delete_all() - index.index.commit() - - self.do_doktora = Book.from_xml_file( - get_fixture('do-doktora.xml')) - self.do_anusie = Book.from_xml_file( - get_fixture('fraszka-do-anusie.xml', catalogue)) - - def assert_finds(self, query, books): - """Takes a query and tests against books expected to be found.""" - tree = etree.fromstring( - self.client.get('/opds/search/?%s' % query).content) - elem_ids = tree.findall('.//%s/%s' % (AtomNS('entry'), AtomNS('id'))) - slugs = [WLURI(elem.text).slug for elem in elem_ids] - self.assertEqual(set(slugs), set(b.slug for b in books), - u"OPDS search '%s' failed." % query) - - def test_opds_search_simple(self): - """Do a simple q= test, also emulate dumb OPDS clients.""" - both = set([self.do_doktora, self.do_anusie]) - self.assert_finds('q=fraszka', both) - self.assert_finds('q=fraszka&author={opds:author}', both) - - def test_opds_search_title(self): - """Search by title.""" - both = set([self.do_doktora, self.do_anusie]) - self.assert_finds('title=fraszka', both) - self.assert_finds('title=fraszka', both) - self.assert_finds('q=title:doktora', [self.do_doktora]) - - def test_opds_search_author(self): - """Search by author.""" - self.assert_finds('q=fraszka&author=Kochanowski', [self.do_doktora]) - self.assert_finds('q=fraszka+author:Kochanowski', [self.do_doktora]) - self.assert_finds('q=Kochanowski', [self.do_doktora]) - - def test_opds_search_translator(self): - """Search by translator.""" - self.assert_finds('q=fraszka&translator=Fikcyjny', [self.do_doktora]) - self.assert_finds('q=fraszka+translator:Fikcyjny', [self.do_doktora]) - self.assert_finds('q=Fikcyjny', [self.do_doktora]) diff --git a/apps/opds/tests/files/do-doktora.xml b/apps/opds/tests/files/do-doktora.xml deleted file mode 100644 index 53c172430..000000000 --- a/apps/opds/tests/files/do-doktora.xml +++ /dev/null @@ -1,56 +0,0 @@ -<utwor> - <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> -<rdf:Description rdf:about="http://redakcja.wolnelektury.pl/documents/book/fraszki-ksiegi-trzecie-do-doktora-fraszka-a-doktor-to-sa-dwi/"> -<dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Kochanowski, Jan</dc:creator> -<dc:title xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Do doktora (Fraszka a doktor â to sÄ dwie rzeczy przeciwne...)</dc:title> -<dc:relation.isPartOf xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">http://wolnelektury.pl/lektura/fraszki-ksiegi-trzecie</dc:relation.isPartOf> -<dc:contributor.editor xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Krzyżanowski, Julian</dc:contributor.editor> -<dc:contributor.editor xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Otwinowska, Barbara</dc:contributor.editor> -<dc:contributor.editor xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">SekuÅa, Aleksandra</dc:contributor.editor> -<dc:contributor.technical_editor xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Sutkowska, Olga</dc:contributor.technical_editor> -<dc:contributor.technical_editor xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">GaÅecki, Dariusz</dc:contributor.technical_editor> -<dc:contributor.translator xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Fikcyjny, TÅumacz</dc:contributor.translator> -<dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Fundacja Nowoczesna Polska</dc:publisher> -<dc:subject.period xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Renesans</dc:subject.period> -<dc:subject.type xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Liryka</dc:subject.type> -<dc:subject.genre xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Fraszka</dc:subject.genre> -<dc:description xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez BibliotekÄ NarodowÄ z egzemplarza pochodzÄ cego ze zbiorów BN.</dc:description> -<dc:identifier.url xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">http://wolnelektury.pl/katalog/lektura/fraszki-ksiegi-trzecie-do-doktora-fraszka-a-doktor-to-sa-dwi</dc:identifier.url> -<dc:source.URL xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">http://www.polona.pl/dlibra/doccontent2?id=1499&from=editionindex&dirids=1</dc:source.URL> -<dc:source xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Jan Kochanowski, DzieÅa polskie, tom 1, PaÅstwowy Instytut Wydawniczy, wyd. 8, Warszawa, 1976</dc:source> -<dc:rights xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Domena publiczna - Jan Kochanowski zm. 1584</dc:rights> -<dc:date.pd xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">1584</dc:date.pd> -<dc:format xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">xml</dc:format> -<dc:type xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">text</dc:type> -<dc:type xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">text</dc:type> -<dc:date xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">2007-09-07</dc:date> -<dc:audience xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">SP2</dc:audience> -<dc:audience xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">G</dc:audience> -<dc:audience xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">L</dc:audience> -<dc:language xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">pol</dc:language> -<dc:relation.coverImage.url xmlns:dc="http://purl.org/dc/elements/1.1/">http://redakcja.wolnelektury.pl/media/dynamic/cover/image/607.jpg</dc:relation.coverImage.url> -<dc:relation.coverImage.attribution xmlns:dc="http://purl.org/dc/elements/1.1/">Artondra Hall@Flickr, CC BY 2.0</dc:relation.coverImage.attribution> -<dc:relation.coverImage.source xmlns:dc="http://purl.org/dc/elements/1.1/">http://redakcja.wolnelektury.pl/cover/image/607</dc:relation.coverImage.source> -</rdf:Description> -</rdf:RDF> - <liryka_l> - -<autor_utworu>Jan Kochanowski</autor_utworu> - -<dzielo_nadrzedne>Fraszki, KsiÄgi wtóre</dzielo_nadrzedne> - -<nazwa_utworu>Do doktora<pr>Å»artobliwy ton każe przypuszczaÄ, iż adresatem wierszyka jest Jakub Montanus (por. przyp. do fr. II 49).</pr></nazwa_utworu> - - - -<strofa>Fraszka a doktor --- to sÄ dwie rzeczy przeciwne;/ -Przeto u mnie, doktorze, twe Å¼Ä danie dziwne,/ -Å»e do mnie Ålesz po fraszki, tak daleko k'temu;/ -Ja jednak dosyÄ czyniÄ rozkazaniu twemu./ -Ty strzeż swojej powagi, nie baw siÄ fraszkami,/ -Ale mi je odeÅli prÄdkimi nogami,/ -A nie dziwuj siÄ, że je tak drogo szacujÄ,/ -Bo chocia fraszki, przedsiÄ w nich doktory czujÄ.</strofa> - -</liryka_l> -</utwor> \ No newline at end of file diff --git a/apps/opds/urls.py b/apps/opds/urls.py deleted file mode 100644 index 00831f0b3..000000000 --- a/apps/opds/urls.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url -from opds.views import RootFeed, ByCategoryFeed, ByTagFeed, UserFeed, UserSetFeed, SearchFeed - - -urlpatterns = patterns('opds.views', - url(r'^$', RootFeed(), name="opds_authors"), - url(r'^search/$', SearchFeed(), name="opds_search"), - url(r'^user/$', UserFeed(), name="opds_user"), - url(r'^set/(?P<slug>[a-zA-Z0-9-]+)/$', UserSetFeed(), name="opds_user_set"), - url(r'^(?P<category>[a-zA-Z0-9-]+)/$', ByCategoryFeed(), name="opds_by_category"), - url(r'^(?P<category>[a-zA-Z0-9-]+)/(?P<slug>[a-zA-Z0-9-]+)/$', ByTagFeed(), name="opds_by_tag"), -) diff --git a/apps/opds/views.py b/apps/opds/views.py deleted file mode 100644 index c529e0272..000000000 --- a/apps/opds/views.py +++ /dev/null @@ -1,436 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import os.path -from urlparse import urljoin - -from django.contrib.syndication.views import Feed -from django.core.urlresolvers import reverse -from django.shortcuts import get_object_or_404 -from django.utils.feedgenerator import Atom1Feed -from django.conf import settings -from django.http import Http404 -from django.contrib.sites.models import Site -from django.utils.functional import lazy - -from basicauth import logged_in_or_basicauth, factory_decorator -from catalogue.models import Book, Tag - -from search.views import Search -import operator -import logging -import re - -log = logging.getLogger('opds') - -from stats.utils import piwik_track - -_root_feeds = ( - { - u"category": u"", - u"link": u"opds_user", - u"link_args": [], - u"title": u"Moje póÅki", - u"description": u"PóÅki użytkownika dostÄpne po zalogowaniu" - }, - { - u"category": u"author", - u"link": u"opds_by_category", - u"link_args": [u"author"], - u"title": u"Autorzy", - u"description": u"Utwory wg autorów" - }, - { - u"category": u"kind", - u"link": u"opds_by_category", - u"link_args": [u"kind"], - u"title": u"Rodzaje", - u"description": u"Utwory wg rodzajów" - }, - { - u"category": u"genre", - u"link": u"opds_by_category", - u"link_args": [u"genre"], - u"title": u"Gatunki", - u"description": u"Utwory wg gatunków" - }, - { - u"category": u"epoch", - u"link": u"opds_by_category", - u"link_args": [u"epoch"], - u"title": u"Epoki", - u"description": u"Utwory wg epok" - }, -) - - -current_domain = lazy(lambda: Site.objects.get_current().domain, str)() -def full_url(url): - return urljoin("http://%s" % current_domain, url) - - -class OPDSFeed(Atom1Feed): - link_rel = u"subsection" - link_type = u"application/atom+xml" - - _book_parent_img = lazy(lambda: full_url(os.path.join(settings.STATIC_URL, "img/book-parent.png")), str)() - try: - _book_parent_img_size = unicode(os.path.getsize(os.path.join(settings.STATIC_ROOT, "img/book-parent.png"))) - except: - _book_parent_img_size = '' - - _book_img = lazy(lambda: full_url(os.path.join(settings.STATIC_URL, "img/book.png")), str)() - try: - _book_img_size = unicode(os.path.getsize(os.path.join(settings.STATIC_ROOT, "img/book.png"))) - except: - _book_img_size = '' - - - def add_root_elements(self, handler): - super(OPDSFeed, self).add_root_elements(handler) - handler.addQuickElement(u"link", None, - {u"href": reverse("opds_authors"), - u"rel": u"start", - u"type": u"application/atom+xml"}) - handler.addQuickElement(u"link", None, - {u"href": full_url(os.path.join(settings.STATIC_URL, "opensearch.xml")), - u"rel": u"search", - u"type": u"application/opensearchdescription+xml"}) - - - def add_item_elements(self, handler, item): - """ modified from Atom1Feed.add_item_elements """ - handler.addQuickElement(u"title", item['title']) - - # add a OPDS Navigation link if there's no enclosure - if item['enclosure'] is None: - handler.addQuickElement(u"link", u"", {u"href": item['link'], u"rel": u"subsection", u"type": u"application/atom+xml"}) - # add a "green book" icon - handler.addQuickElement(u"link", '', - {u"rel": u"http://opds-spec.org/thumbnail", - u"href": self._book_parent_img, - u"length": self._book_parent_img_size, - u"type": u"image/png"}) - if item['pubdate'] is not None: - # FIXME: rfc3339_date is undefined, is this ever run? - handler.addQuickElement(u"updated", rfc3339_date(item['pubdate']).decode('utf-8')) - - # Author information. - if item['author_name'] is not None: - handler.startElement(u"author", {}) - handler.addQuickElement(u"name", item['author_name']) - if item['author_email'] is not None: - handler.addQuickElement(u"email", item['author_email']) - if item['author_link'] is not None: - handler.addQuickElement(u"uri", item['author_link']) - handler.endElement(u"author") - - # Unique ID. - if item['unique_id'] is not None: - unique_id = item['unique_id'] - else: - # FIXME: get_tag_uri is undefined, is this ever run? - unique_id = get_tag_uri(item['link'], item['pubdate']) - handler.addQuickElement(u"id", unique_id) - - # Summary. - # OPDS needs type=text - if item['description'] is not None: - handler.addQuickElement(u"summary", item['description'], {u"type": u"text"}) - - # Enclosure as OPDS Acquisition Link - if item['enclosure'] is not None: - handler.addQuickElement(u"link", '', - {u"rel": u"http://opds-spec.org/acquisition", - u"href": item['enclosure'].url, - u"length": item['enclosure'].length, - u"type": item['enclosure'].mime_type}) - # add a "red book" icon - handler.addQuickElement(u"link", '', - {u"rel": u"http://opds-spec.org/thumbnail", - u"href": self._book_img, - u"length": self._book_img_size, - u"type": u"image/png"}) - - # Categories. - for cat in item['categories']: - handler.addQuickElement(u"category", u"", {u"term": cat}) - - # Rights. - if item['item_copyright'] is not None: - handler.addQuickElement(u"rights", item['item_copyright']) - - -class AcquisitionFeed(Feed): - feed_type = OPDSFeed - link = u'http://www.wolnelektury.pl/' - item_enclosure_mime_type = "application/epub+zip" - author_name = u"Wolne Lektury" - author_link = u"http://www.wolnelektury.pl/" - - def item_title(self, book): - return book.title - - def item_description(self): - return u'' - - def item_link(self, book): - return book.get_absolute_url() - - def item_author_name(self, book): - try: - return book.tags.filter(category='author')[0].name - except KeyError: - return u'' - - def item_author_link(self, book): - try: - return book.tags.filter(category='author')[0].get_absolute_url() - except KeyError: - return u'' - - def item_enclosure_url(self, book): - return full_url(book.epub_file.url) if book.epub_file else None - - def item_enclosure_length(self, book): - return book.epub_file.size if book.epub_file else None - -@piwik_track -class RootFeed(Feed): - feed_type = OPDSFeed - title = u'Wolne Lektury' - link = u'http://wolnelektury.pl/' - description = u"Spis utworów na stronie http://WolneLektury.pl" - author_name = u"Wolne Lektury" - author_link = u"http://wolnelektury.pl/" - - def items(self): - return _root_feeds - - def item_title(self, item): - return item['title'] - - def item_link(self, item): - return reverse(item['link'], args=item['link_args']) - - def item_description(self, item): - return item['description'] - -@piwik_track -class ByCategoryFeed(Feed): - feed_type = OPDSFeed - link = u'http://wolnelektury.pl/' - description = u"Spis utworów na stronie http://WolneLektury.pl" - author_name = u"Wolne Lektury" - author_link = u"http://wolnelektury.pl/" - - def get_object(self, request, category): - feed = [feed for feed in _root_feeds if feed['category'] == category] - if feed: - feed = feed[0] - else: - raise Http404 - - return feed - - def title(self, feed): - return feed['title'] - - def items(self, feed): - return Tag.objects.filter(category=feed['category']).exclude(items=None) - - def item_title(self, item): - return item.name - - def item_link(self, item): - return reverse("opds_by_tag", args=[item.category, item.slug]) - - def item_description(self): - return u'' - -@piwik_track -class ByTagFeed(AcquisitionFeed): - def link(self, tag): - return tag.get_absolute_url() - - def title(self, tag): - return tag.name - - def description(self, tag): - return u"Spis utworów na stronie http://WolneLektury.pl" - - def get_object(self, request, category, slug): - return get_object_or_404(Tag, category=category, slug=slug) - - def items(self, tag): - return Book.tagged_top_level([tag]) - - -@factory_decorator(logged_in_or_basicauth()) -@piwik_track -class UserFeed(Feed): - feed_type = OPDSFeed - link = u'http://www.wolnelektury.pl/' - description = u"PóÅki użytkownika na stronie http://WolneLektury.pl" - author_name = u"Wolne Lektury" - author_link = u"http://wolnelektury.pl/" - - def get_object(self, request): - return request.user - - def title(self, user): - return u"PóÅki użytkownika %s" % user.username - - def items(self, user): - return Tag.objects.filter(category='set', user=user).exclude(items=None) - - def item_title(self, item): - return item.name - - def item_link(self, item): - return reverse("opds_user_set", args=[item.slug]) - - def item_description(self): - return u'' - - -@factory_decorator(logged_in_or_basicauth()) -@piwik_track -class UserSetFeed(AcquisitionFeed): - def link(self, tag): - return tag.get_absolute_url() - - def title(self, tag): - return tag.name - - def description(self, tag): - return u"Spis utworów na stronie http://WolneLektury.pl" - - def get_object(self, request, slug): - return get_object_or_404(Tag, category='set', slug=slug, user=request.user) - - def items(self, tag): - return Book.tagged.with_any([tag]) - - -@piwik_track -class SearchFeed(AcquisitionFeed): - description = u"Wyniki wyszukiwania na stronie WolneLektury.pl" - title = u"Wyniki wyszukiwania" - - QUOTE_OR_NOT = r'(?:(?=["])"([^"]+)"|([^ ]+))' - INLINE_QUERY_RE = re.compile( - r"author:" + QUOTE_OR_NOT + - "|translator:" + QUOTE_OR_NOT + - "|title:" + QUOTE_OR_NOT + - "|categories:" + QUOTE_OR_NOT + - "|description:" + QUOTE_OR_NOT + - "|text:" + QUOTE_OR_NOT - ) - MATCHES = { - 'author': (0, 1), - 'translator': (2, 3), - 'title': (4, 5), - 'categories': (6, 7), - 'description': (8, 9), - 'text': (10, 11), - } - - PARAMS_TO_FIELDS = { - 'author': 'authors', - 'translator': 'translators', - # 'title': 'title', - 'categories': 'tag_name_pl', - 'description': 'text', - # 'text': 'text', - } - - ATOM_PLACEHOLDER = re.compile(r"^{(atom|opds):\w+}$") - - def get_object(self, request): - """ - For OPDS 1.1 We should handle a query for search terms - and criteria provided either as opensearch or 'inline' query. - OpenSearch defines fields: atom:author, atom:contributor (treated as translator), - atom:title. Inline query provides author, title, categories (treated as book tags), - description (treated as content search terms). - - if search terms are provided, we shall search for books - according to Hint information (from author & contributror & title). - - but if search terms are empty, we should do a different search - (perhaps for is_book=True) - - """ - - query = request.GET.get('q', '') - - inline_criteria = re.findall(self.INLINE_QUERY_RE, query) - if inline_criteria: - remains = re.sub(self.INLINE_QUERY_RE, '', query) - remains = re.sub(r'[ \t]+', ' ', remains) - - def get_criteria(criteria, name): - for c in criteria: - for p in self.MATCHES[name]: - if c[p]: - if p % 2 == 0: - return c[p].replace('+', ' ') - return c[p] - return None - - criteria = dict(map( - lambda cn: (cn, get_criteria(inline_criteria, cn)), - ['author', 'translator', 'title', 'categories', - 'description', 'text'])) - query = remains - # empty query and text set case? - log.debug("Inline query = [%s], criteria: %s" % (query, criteria)) - else: - def remove_dump_data(val): - """Some clients don't get opds placeholders and just send them.""" - if self.ATOM_PLACEHOLDER.match(val): - return '' - return val - - criteria = dict([(cn, remove_dump_data(request.GET.get(cn, ''))) - for cn in self.MATCHES.keys()]) - # query is set above. - log.debug("Inline query = [%s], criteria: %s" % (query, criteria)) - - srch = Search() - - book_hit_filter = srch.index.Q(book_id__any=True) - filters = [book_hit_filter] + [srch.index.Q( - **{self.PARAMS_TO_FIELDS.get(cn, cn): criteria[cn]} - ) for cn in self.MATCHES.keys() if cn in criteria - if criteria[cn]] - - if query: - q = srch.index.query( - reduce(operator.or_, - [srch.index.Q(**{self.PARAMS_TO_FIELDS.get(cn, cn): query}) - for cn in self.MATCHES.keys()], - srch.index.Q())) - else: - q = srch.index.query(srch.index.Q()) - - q = srch.apply_filters(q, filters).field_limit(score=True, fields=['book_id']) - results = q.execute() - - book_scores = dict([(r['book_id'], r['score']) for r in results]) - books = Book.objects.filter(id__in=set([r['book_id'] for r in results])) - books = list(books) - books.sort(reverse=True, key=lambda book: book_scores[book.id]) - return books - - def get_link(self, query): - return "%s?q=%s" % (reverse('search'), query) - - def items(self, books): - try: - return books - except ValueError: - # too short a query - return [] diff --git a/apps/pdcounter/__init__.py b/apps/pdcounter/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/pdcounter/admin.py b/apps/pdcounter/admin.py deleted file mode 100644 index e2e3fc310..000000000 --- a/apps/pdcounter/admin.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib import admin - -from pdcounter.models import BookStub, Author - - -class BookStubAdmin(admin.ModelAdmin): - list_display = ('title', 'author', 'slug', 'pd') - search_fields = ('title', 'author') - ordering = ('title',) - - prepopulated_fields = {'slug': ('title',)} - -class AuthorAdmin(admin.ModelAdmin): - list_display = ('name', 'slug', 'death') - search_fields = ('name',) - ordering = ('sort_key', 'name') - - prepopulated_fields = {'slug': ('name',), 'sort_key': ('name',),} - - -admin.site.register(BookStub, BookStubAdmin) -admin.site.register(Author, AuthorAdmin) diff --git a/apps/pdcounter/fixtures/lista.json b/apps/pdcounter/fixtures/lista.json deleted file mode 100644 index b73b5433e..000000000 --- a/apps/pdcounter/fixtures/lista.json +++ /dev/null @@ -1,9699 +0,0 @@ -[ - { - "pk": 1, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "amiel", - "slug": "irit-amiel", - "gazeta_link": "", - "name": "Irit Amiel" - } - }, - { - "pk": 2, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "anczyc", - "slug": "wladyslaw-anczyc", - "gazeta_link": "", - "name": "W\u0142adys\u0142aw Anczyc" - } - }, - { - "pk": 3, - "model": "pdcounter.author", - "fields": { - "death": 1944, - "description": "", - "wiki_link": "", - "sort_key": "baczynski", - "slug": "krzysztof-kamil-baczynski", - "gazeta_link": "", - "name": "Krzysztof Kamil Baczy\u0144ski" - } - }, - { - "pk": 4, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "balucki", - "slug": "michal-balucki", - "gazeta_link": "", - "name": "Micha\u0142 Ba\u0142ucki" - } - }, - { - "pk": 5, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "baranczak", - "slug": "stanislaw-baranczak", - "gazeta_link": "", - "name": "Stanis\u0142aw Bara\u0144czak" - } - }, - { - "pk": 6, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "bedier", - "slug": "joseph-bedier", - "gazeta_link": "", - "name": "Joseph B\u00e9dier" - } - }, - { - "pk": 7, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "belza", - "slug": "wladyslaw-belza", - "gazeta_link": "", - "name": "W\u0142adys\u0142aw Be\u0142za" - } - }, - { - "pk": 8, - "model": "pdcounter.author", - "fields": { - "death": 1983, - "description": "", - "wiki_link": "", - "sort_key": "bialoszewski", - "slug": "miron-bialoszewski", - "gazeta_link": "", - "name": "Miron Bia\u0142oszewski" - } - }, - { - "pk": 9, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "bielowski", - "slug": "august-bielowski", - "gazeta_link": "", - "name": "August Bielowski" - } - }, - { - "pk": 10, - "model": "pdcounter.author", - "fields": { - "death": 2009, - "description": "", - "wiki_link": "", - "sort_key": "blonski", - "slug": "jan-blonski", - "gazeta_link": "", - "name": "Jan B\u0142o\u0144ski" - } - }, - { - "pk": 11, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "bordkiewicz", - "slug": "stefan-bordkiewicz", - "gazeta_link": "", - "name": "Stefan Bordkiewicz" - } - }, - { - "pk": 12, - "model": "pdcounter.author", - "fields": { - "death": 1951, - "description": "", - "wiki_link": "", - "sort_key": "borowski", - "slug": "tadeusz-borowski", - "gazeta_link": "", - "name": "Tadeusz Borowski" - } - }, - { - "pk": 13, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "bracia", - "slug": "grimm-bracia", - "gazeta_link": "", - "name": "Grimm Bracia" - } - }, - { - "pk": 14, - "model": "pdcounter.author", - "fields": { - "death": 1966, - "description": "", - "wiki_link": "", - "sort_key": "brzechwa", - "slug": "jan-brzechwa", - "gazeta_link": "", - "name": "Jan Brzechwa" - } - }, - { - "pk": 15, - "model": "pdcounter.author", - "fields": { - "death": 1940, - "description": "", - "wiki_link": "", - "sort_key": "bulhakow", - "slug": "michal-bulhakow", - "gazeta_link": "", - "name": "Micha\u0142 Bu\u0142hakow" - } - }, - { - "pk": 16, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "burnett", - "slug": "frances-hodgson-burnett", - "gazeta_link": "", - "name": "Frances Hodgson Burnett" - } - }, - { - "pk": 17, - "model": "pdcounter.author", - "fields": { - "death": 1960, - "description": "", - "wiki_link": "", - "sort_key": "camus", - "slug": "albert-camus", - "gazeta_link": "", - "name": "Albert Camus" - } - }, - { - "pk": 18, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "cervantes", - "slug": "miguel-cervantes", - "gazeta_link": "", - "name": "Miguel Cervantes" - } - }, - { - "pk": 19, - "model": "pdcounter.author", - "fields": { - "death": 1976, - "description": "", - "wiki_link": "", - "sort_key": "christie", - "slug": "agatha-christie", - "gazeta_link": "", - "name": "Agatha Christie" - } - }, - { - "pk": 20, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "chwin", - "slug": "stefan-chwin", - "gazeta_link": "", - "name": "Stefan Chwin" - } - }, - { - "pk": 21, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "collodi", - "slug": "carlo-collodi", - "gazeta_link": "", - "name": "Carlo Collodi" - } - }, - { - "pk": 22, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "conrad", - "slug": "joseph-conrad", - "gazeta_link": "", - "name": "Joseph Conrad" - } - }, - { - "pk": 23, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "czechowicz", - "slug": "jozef-czechowicz", - "gazeta_link": "", - "name": "J\u00f3zef Czechowicz" - } - }, - { - "pk": 24, - "model": "pdcounter.author", - "fields": { - "death": 1965, - "description": "", - "wiki_link": "", - "sort_key": "dabrowska", - "slug": "maria-dabrowska", - "gazeta_link": "", - "name": "Maria D\u0105browska" - } - }, - { - "pk": 25, - "model": "pdcounter.author", - "fields": { - "death": 1990, - "description": "", - "wiki_link": "", - "sort_key": "dahl", - "slug": "ronald-dahl", - "gazeta_link": "", - "name": "Ronald Dahl" - } - }, - { - "pk": 26, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "dennhoff-czarnocki", - "slug": "waclaw-dennhoff-czarnocki", - "gazeta_link": "", - "name": "Wac\u0142aw Dennhoff-Czarnocki" - } - }, - { - "pk": 27, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "dmowski", - "slug": "roman-dmowski", - "gazeta_link": "", - "name": "Roman Dmowski" - } - }, - { - "pk": 28, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "dolega-mostowicz", - "slug": "tadeusz-dolega-mostowicz", - "gazeta_link": "", - "name": "Tadeusz Do\u0142\u0119ga-Mostowicz" - } - }, - { - "pk": 29, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "dostojewski", - "slug": "fiodor-dostojewski", - "gazeta_link": "", - "name": "Fiodor Dostojewski" - } - }, - { - "pk": 30, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "eco", - "slug": "umberto-eco", - "gazeta_link": "", - "name": "Umberto Eco" - } - }, - { - "pk": 31, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "erynbergh", - "slug": "gustawa-erynbergh", - "gazeta_link": "", - "name": "Gustawa Erynbergh" - } - }, - { - "pk": 32, - "model": "pdcounter.author", - "fields": { - "death": 1985, - "description": "", - "wiki_link": "", - "sort_key": "fiedler", - "slug": "arkady-fiedler", - "gazeta_link": "", - "name": "Arkady Fiedler" - } - }, - { - "pk": 33, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "fink", - "slug": "ida-fink", - "gazeta_link": "", - "name": "Ida Fink" - } - }, - { - "pk": 34, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "flaubert", - "slug": "gustaw-flaubert", - "gazeta_link": "", - "name": "Gustaw Flaubert" - } - }, - { - "pk": 35, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "fredro", - "slug": "aleksander-fredro", - "gazeta_link": "", - "name": "Aleksander Fredro" - } - }, - { - "pk": 36, - "model": "pdcounter.author", - "fields": { - "death": 1953, - "description": "", - "wiki_link": "", - "sort_key": "galczynski", - "slug": "konstanty-ildefons-galczynski", - "gazeta_link": "", - "name": "Konstanty Ildefons Ga\u0142czy\u0144ski" - } - }, - { - "pk": 37, - "model": "pdcounter.author", - "fields": { - "death": 1969, - "description": "", - "wiki_link": "", - "sort_key": "gombrowicz", - "slug": "witold-gombrowicz", - "gazeta_link": "", - "name": "Witold Gombrowicz" - } - }, - { - "pk": 38, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "gomulicki", - "slug": "wiktor-gomulicki", - "gazeta_link": "", - "name": "Wiktor Gomulicki" - } - }, - { - "pk": 39, - "model": "pdcounter.author", - "fields": { - "death": 1977, - "description": "", - "wiki_link": "", - "sort_key": "goscinny", - "slug": "rene-goscinny", - "gazeta_link": "", - "name": "Ren\u00e9 Goscinny" - } - }, - { - "pk": 40, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "grabinski", - "slug": "stefan-grabinski", - "gazeta_link": "", - "name": "Stefan Grabi\u0144ski" - } - }, - { - "pk": 41, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "grass", - "slug": "guenter-grass", - "gazeta_link": "", - "name": "G\u00fcnter Grass" - } - }, - { - "pk": 42, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "grynberg", - "slug": "henryk-grynberg", - "gazeta_link": "", - "name": "Henryk Grynberg" - } - }, - { - "pk": 43, - "model": "pdcounter.author", - "fields": { - "death": 1998, - "description": "", - "wiki_link": "", - "sort_key": "herbert", - "slug": "zbigniew-herbert", - "gazeta_link": "", - "name": "Zbigniew Herbert" - } - }, - { - "pk": 44, - "model": "pdcounter.author", - "fields": { - "death": 2000, - "description": "", - "wiki_link": "", - "sort_key": "herling-grudzinski", - "slug": "gustaw-herling-grudzinski", - "gazeta_link": "", - "name": "Gustaw Herling-Grudzi\u0144ski" - } - }, - { - "pk": 45, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "homer", - "slug": "homer", - "gazeta_link": "", - "name": "Homer" - } - }, - { - "pk": 46, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "horacy", - "slug": "horacy", - "gazeta_link": "", - "name": "Horacy" - } - }, - { - "pk": 47, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "huelle", - "slug": "pawel-huelle", - "gazeta_link": "", - "name": "Pawe\u0142 Huelle" - } - }, - { - "pk": 48, - "model": "pdcounter.author", - "fields": { - "death": 1980, - "description": "", - "wiki_link": "", - "sort_key": "iwaszkiewicz", - "slug": "jaroslaw-iwaszkiewicz", - "gazeta_link": "", - "name": "Jaros\u0142aw Iwaszkiewicz" - } - }, - { - "pk": 49, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "jachowicz", - "slug": "stanislaw-jachowicz", - "gazeta_link": "", - "name": "Stanis\u0142aw Jachowicz" - } - }, - { - "pk": 50, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "janion", - "slug": "maria-janion", - "gazeta_link": "", - "name": "Maria Janion" - } - }, - { - "pk": 51, - "model": "pdcounter.author", - "fields": { - "death": 1983, - "description": "", - "wiki_link": "", - "sort_key": "jastrun", - "slug": "mieczyslaw-jastrun", - "gazeta_link": "", - "name": "Mieczys\u0142aw Jastrun" - } - }, - { - "pk": 52, - "model": "pdcounter.author", - "fields": { - "death": 2003, - "description": "", - "wiki_link": "", - "sort_key": "jurgielewiczowa", - "slug": "irena-jurgielewiczowa", - "gazeta_link": "", - "name": "Irena Jurgielewiczowa" - } - }, - { - "pk": 53, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "kafka", - "slug": "franz-kafka", - "gazeta_link": "", - "name": "Franz Kafka" - } - }, - { - "pk": 54, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "kakolewski", - "slug": "krzysztof-kakolewski", - "gazeta_link": "", - "name": "Krzysztof K\u0105kolewski" - } - }, - { - "pk": 55, - "model": "pdcounter.author", - "fields": { - "death": 1978, - "description": "", - "wiki_link": "", - "sort_key": "kaminski", - "slug": "aleksander-kaminski", - "gazeta_link": "", - "name": "Aleksander Kami\u0144ski" - } - }, - { - "pk": 56, - "model": "pdcounter.author", - "fields": { - "death": 2007, - "description": "", - "wiki_link": "", - "sort_key": "kapuscinski", - "slug": "ryszard-kapuscinski", - "gazeta_link": "", - "name": "Ryszard Kapu\u015bci\u0144ski" - } - }, - { - "pk": 57, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "karpinski", - "slug": "franciszek-karpinski", - "gazeta_link": "", - "name": "Franciszek Karpi\u0144ski" - } - }, - { - "pk": 58, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "kasdepke", - "slug": "grzegorz-kasdepke", - "gazeta_link": "", - "name": "Grzegorz Kasdepke" - } - }, - { - "pk": 59, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "kasprowicz", - "slug": "jan-kasprowicz", - "gazeta_link": "", - "name": "Jan Kasprowicz" - } - }, - { - "pk": 60, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "kochanowski", - "slug": "jan-kochanowski", - "gazeta_link": "", - "name": "Jan Kochanowski" - } - }, - { - "pk": 61, - "model": "pdcounter.author", - "fields": { - "death": 2009, - "description": "", - "wiki_link": "", - "sort_key": "kolakowski", - "slug": "leszek-kolakowski", - "gazeta_link": "", - "name": "Leszek Ko\u0142akowski" - } - }, - { - "pk": 62, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "kolberg", - "slug": "oskar-kolberg", - "gazeta_link": "", - "name": "Oskar Kolberg" - } - }, - { - "pk": 63, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "konopnicka", - "slug": "maria-konopnicka", - "gazeta_link": "", - "name": "Maria Konopnicka" - } - }, - { - "pk": 64, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "konwicki", - "slug": "tadeusz-konwicki", - "gazeta_link": "", - "name": "Tadeusz Konwicki" - } - }, - { - "pk": 65, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "kowalski", - "slug": "franciszek-kowalski", - "gazeta_link": "", - "name": "Franciszek Kowalski" - } - }, - { - "pk": 66, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "kozakiewicz", - "slug": "jan-kozakiewicz", - "gazeta_link": "", - "name": "Jan Kozakiewicz" - } - }, - { - "pk": 67, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "krall", - "slug": "hanna-krall", - "gazeta_link": "", - "name": "Hanna Krall" - } - }, - { - "pk": 68, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "krasicki", - "slug": "ignacy-krasicki", - "gazeta_link": "", - "name": "Ignacy Krasicki" - } - }, - { - "pk": 69, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "krasinski", - "slug": "zygmunt-krasinski", - "gazeta_link": "", - "name": "Zygmunt Krasi\u0144ski" - } - }, - { - "pk": 70, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "kraszewski", - "slug": "ignacy-kraszewski", - "gazeta_link": "", - "name": "Ignacy Kraszewski" - } - }, - { - "pk": 71, - "model": "pdcounter.author", - "fields": { - "death": 2004, - "description": "", - "wiki_link": "", - "sort_key": "kubiak", - "slug": "zygmunt-kubiak", - "gazeta_link": "", - "name": "Zygmunt Kubiak" - } - }, - { - "pk": 72, - "model": "pdcounter.author", - "fields": { - "death": 1989, - "description": "", - "wiki_link": "", - "sort_key": "kuncewiczowa", - "slug": "maria-kuncewiczowa", - "gazeta_link": "", - "name": "Maria Kuncewiczowa" - } - }, - { - "pk": 73, - "model": "pdcounter.author", - "fields": { - "death": 1993, - "description": "", - "wiki_link": "", - "sort_key": "kusniewicz", - "slug": "andrzej-kusniewicz", - "gazeta_link": "", - "name": "Andrzej Ku\u015bniewicz" - } - }, - { - "pk": 74, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "le-guin", - "slug": "ursula-le-guin", - "gazeta_link": "", - "name": "Ursula Le Guin" - } - }, - { - "pk": 75, - "model": "pdcounter.author", - "fields": { - "death": 1956, - "description": "", - "wiki_link": "", - "sort_key": "lechon", - "slug": "jan-lechon", - "gazeta_link": "", - "name": "Jan Lecho\u0144" - } - }, - { - "pk": 76, - "model": "pdcounter.author", - "fields": { - "death": 2006, - "description": "", - "wiki_link": "", - "sort_key": "lem", - "slug": "stanislaw-lem", - "gazeta_link": "", - "name": "Stanis\u0142aw Lem" - } - }, - { - "pk": 77, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "lenartowicz", - "slug": "teofil-lenartowicz", - "gazeta_link": "", - "name": "Teofil Lenartowicz" - } - }, - { - "pk": 78, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "lesmian", - "slug": "boleslaw-lesmian", - "gazeta_link": "", - "name": "Boles\u0142aw Le\u015bmian" - } - }, - { - "pk": 79, - "model": "pdcounter.author", - "fields": { - "death": 1963, - "description": "", - "wiki_link": "", - "sort_key": "lewis", - "slug": "clive-staples-lewis", - "gazeta_link": "", - "name": "Clive Staples Lewis" - } - }, - { - "pk": 80, - "model": "pdcounter.author", - "fields": { - "death": 2002, - "description": "", - "wiki_link": "", - "sort_key": "lindgren", - "slug": "astrid-lindgren", - "gazeta_link": "", - "name": "Astrid Lindgren" - } - }, - { - "pk": 81, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "lipska", - "slug": "ewa-lipska", - "gazeta_link": "", - "name": "Ewa Lipska" - } - }, - { - "pk": 82, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "lubinski", - "slug": "ludwik-pomian-lubinski", - "gazeta_link": "", - "name": "Ludwik Pomian \u0141ubi\u0144ski" - } - }, - { - "pk": 83, - "model": "pdcounter.author", - "fields": { - "death": 1985, - "description": "", - "wiki_link": "", - "sort_key": "mackiewicz", - "slug": "jozef-mackiewicz", - "gazeta_link": "", - "name": "J\u00f3zef Mackiewicz" - } - }, - { - "pk": 84, - "model": "pdcounter.author", - "fields": { - "death": 1953, - "description": "", - "wiki_link": "", - "sort_key": "makuszynski", - "slug": "kornel-makuszynski", - "gazeta_link": "", - "name": "Kornel Makuszy\u0144ski" - } - }, - { - "pk": 85, - "model": "pdcounter.author", - "fields": { - "death": 1955, - "description": "", - "wiki_link": "", - "sort_key": "mann", - "slug": "thomas-mann", - "gazeta_link": "", - "name": "Thomas Mann" - } - }, - { - "pk": 86, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "marquez", - "slug": "gabriel-garcia-marquez", - "gazeta_link": "", - "name": "Gabriel Garcia Marquez" - } - }, - { - "pk": 87, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "mickiewicz", - "slug": "adam-mickiewicz", - "gazeta_link": "", - "name": "Adam Mickiewicz" - } - }, - { - "pk": 88, - "model": "pdcounter.author", - "fields": { - "death": 2004, - "description": "", - "wiki_link": "", - "sort_key": "milosz", - "slug": "czeslaw-milosz", - "gazeta_link": "", - "name": "Czes\u0142aw Mi\u0142osz" - } - }, - { - "pk": 89, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "minkowski", - "slug": "aleksander-minkowski", - "gazeta_link": "", - "name": "Aleksander Minkowski" - } - }, - { - "pk": 90, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "moliere", - "slug": "moliere", - "gazeta_link": "", - "name": "Moli\u00e8re" - } - }, - { - "pk": 91, - "model": "pdcounter.author", - "fields": { - "death": 1952, - "description": "", - "wiki_link": "", - "sort_key": "molnar", - "slug": "ferenc-molnar", - "gazeta_link": "", - "name": "Ferenc Moln\u00e1r" - } - }, - { - "pk": 92, - "model": "pdcounter.author", - "fields": { - "death": 1942, - "description": "", - "wiki_link": "", - "sort_key": "montgomery", - "slug": "lucy-maud-montgomery", - "gazeta_link": "", - "name": "Lucy Maud Montgomery" - } - }, - { - "pk": 93, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "morsztyn", - "slug": "jan-andrzej-morsztyn", - "gazeta_link": "", - "name": "Jan Andrzej Morsztyn" - } - }, - { - "pk": 94, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "morsztyn", - "slug": "zbigniew-morsztyn", - "gazeta_link": "", - "name": "Zbigniew Morsztyn" - } - }, - { - "pk": 95, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "mrozek", - "slug": "slawomir-mrozek", - "gazeta_link": "", - "name": "S\u0142awomir Mro\u017cek" - } - }, - { - "pk": 96, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "musierowicz", - "slug": "malgorzata-musierowicz", - "gazeta_link": "", - "name": "Ma\u0142gorzata Musierowicz" - } - }, - { - "pk": 97, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "mysliwski", - "slug": "wieslaw-mysliwski", - "gazeta_link": "", - "name": "Wies\u0142aw My\u015bliwski" - } - }, - { - "pk": 98, - "model": "pdcounter.author", - "fields": { - "death": 1977, - "description": "", - "wiki_link": "", - "sort_key": "nabokov", - "slug": "vladimir-nabokov", - "gazeta_link": "", - "name": "Vladimir Nabokov" - } - }, - { - "pk": 99, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "naborowski", - "slug": "daniel-naborowski", - "gazeta_link": "", - "name": "Daniel Naborowski" - } - }, - { - "pk": 100, - "model": "pdcounter.author", - "fields": { - "death": 1954, - "description": "", - "wiki_link": "", - "sort_key": "nalkowska", - "slug": "zofia-nalkowska", - "gazeta_link": "", - "name": "Zofia Na\u0142kowska" - } - }, - { - "pk": 101, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "niemcewicz", - "slug": "julian-ursyn-niemcewicz", - "gazeta_link": "", - "name": "Julian Ursyn Niemcewicz" - } - }, - { - "pk": 102, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "niziurski", - "slug": "edmund-niziurski", - "gazeta_link": "", - "name": "Edmund Niziurski" - } - }, - { - "pk": 103, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "norwid", - "slug": "cyprian-kamil-norwid", - "gazeta_link": "", - "name": "Cyprian Kamil Norwid" - } - }, - { - "pk": 104, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "nowakowski", - "slug": "marek-nowakowski", - "gazeta_link": "", - "name": "Marek Nowakowski" - } - }, - { - "pk": 105, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "olech", - "slug": "joanna-olech", - "gazeta_link": "", - "name": "Joanna Olech" - } - }, - { - "pk": 106, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "onichimowska", - "slug": "anna-onichimowska", - "gazeta_link": "", - "name": "Anna Onichimowska" - } - }, - { - "pk": 107, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "oppman", - "slug": "artur-oppman", - "gazeta_link": "", - "name": "Artur Oppman" - } - }, - { - "pk": 108, - "model": "pdcounter.author", - "fields": { - "death": 1950, - "description": "", - "wiki_link": "", - "sort_key": "orwell", - "slug": "george-orwell", - "gazeta_link": "", - "name": "George Orwell" - } - }, - { - "pk": 109, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "orzeszkowa", - "slug": "eliza-orzeszkowa", - "gazeta_link": "", - "name": "Eliza Orzeszkowa" - } - }, - { - "pk": 110, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "ostrowska", - "slug": "bronislawa-ostrowska", - "gazeta_link": "", - "name": "Bronis\u0142awa Ostrowska" - } - }, - { - "pk": 111, - "model": "pdcounter.author", - "fields": { - "death": 1978, - "description": "", - "wiki_link": "", - "sort_key": "parandowski", - "slug": "jan-parandowski", - "gazeta_link": "", - "name": "Jan Parandowski" - } - }, - { - "pk": 112, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "pasek", - "slug": "jan-chryzostom-pasek", - "gazeta_link": "", - "name": "Jan Chryzostom Pasek" - } - }, - { - "pk": 113, - "model": "pdcounter.author", - "fields": { - "death": 1945, - "description": "", - "wiki_link": "", - "sort_key": "pawlikowska-jasnorzewska", - "slug": "maria-pawlikowska-jasnorzewska", - "gazeta_link": "", - "name": "Maria Pawlikowska-Jasnorzewska" - } - }, - { - "pk": 114, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "pilch", - "slug": "jerzy-pilch", - "gazeta_link": "", - "name": "Jerzy Pilch" - } - }, - { - "pk": 115, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "platon", - "slug": "platon", - "gazeta_link": "", - "name": "Platon" - } - }, - { - "pk": 116, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "pol", - "slug": "wincenty-pol", - "gazeta_link": "", - "name": "Wincenty Pol" - } - }, - { - "pk": 117, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "potocki", - "slug": "waclaw-potocki", - "gazeta_link": "", - "name": "Wac\u0142aw Potocki" - } - }, - { - "pk": 118, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "prus", - "slug": "boleslaw-prus", - "gazeta_link": "", - "name": "Boles\u0142aw Prus" - } - }, - { - "pk": 119, - "model": "pdcounter.author", - "fields": { - "death": 1940, - "description": "", - "wiki_link": "", - "sort_key": "przerwa-tetmajer", - "slug": "kazimierz-przerwa-tetmajer", - "gazeta_link": "", - "name": "Kazimierz Przerwa-Tetmajer" - } - }, - { - "pk": 120, - "model": "pdcounter.author", - "fields": { - "death": 1970, - "description": "", - "wiki_link": "", - "sort_key": "przybos", - "slug": "julian-przybos", - "gazeta_link": "", - "name": "Julian Przybo\u015b" - } - }, - { - "pk": 121, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "rej", - "slug": "mikolaj-rej", - "gazeta_link": "", - "name": "Miko\u0142aj Rej" - } - }, - { - "pk": 122, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "reymont", - "slug": "wladyslaw-stanislaw-reymont", - "gazeta_link": "", - "name": "W\u0142adys\u0142aw Stanis\u0142aw Reymont" - } - }, - { - "pk": 123, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "rozewicz", - "slug": "tadeusz-rozewicz", - "gazeta_link": "", - "name": "Tadeusz R\u00f3\u017cewicz" - } - }, - { - "pk": 124, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "rymkiewicz", - "slug": "jaroslaw-rymkiewicz", - "gazeta_link": "", - "name": "Jaros\u0142aw Rymkiewicz" - } - }, - { - "pk": 125, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "rzewuski", - "slug": "henryk-rzewuski", - "gazeta_link": "", - "name": "Henryk Rzewuski" - } - }, - { - "pk": 126, - "model": "pdcounter.author", - "fields": { - "death": 1944, - "description": "", - "wiki_link": "", - "sort_key": "saint-exupery", - "slug": "antoine-de-saint-exupery", - "gazeta_link": "", - "name": "Antoine de Saint Exup\u00e9ry" - } - }, - { - "pk": 127, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "sapkowski", - "slug": "andrzej-sapkowski", - "gazeta_link": "", - "name": "Andrzej Sapkowski" - } - }, - { - "pk": 128, - "model": "pdcounter.author", - "fields": { - "death": 1942, - "description": "", - "wiki_link": "", - "sort_key": "schulz", - "slug": "bruno-schulz", - "gazeta_link": "", - "name": "Bruno Schulz" - } - }, - { - "pk": 129, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "sempe", - "slug": "jean-jacques-sempe", - "gazeta_link": "", - "name": "Jean-Jacques Semp\u00e9" - } - }, - { - "pk": 130, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "shakespeare", - "slug": "william-shakespeare", - "gazeta_link": "", - "name": "William Shakespeare" - } - }, - { - "pk": 131, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "sienkiewicz", - "slug": "henryk-sienkiewicz", - "gazeta_link": "", - "name": "Henryk Sienkiewicz" - } - }, - { - "pk": 132, - "model": "pdcounter.author", - "fields": { - "death": 1991, - "description": "", - "wiki_link": "", - "sort_key": "singer", - "slug": "isaac-bashevis-singer", - "gazeta_link": "", - "name": "Isaac Bashevis Singer" - } - }, - { - "pk": 133, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "skalkowski", - "slug": "marceli-skalkowski", - "gazeta_link": "", - "name": "Marceli Ska\u0142kowski" - } - }, - { - "pk": 134, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "skarga", - "slug": "piotr-skarga", - "gazeta_link": "", - "name": "Piotr Skarga" - } - }, - { - "pk": 135, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "slowacki", - "slug": "juliusz-slowacki", - "gazeta_link": "", - "name": "Juliusz S\u0142owacki" - } - }, - { - "pk": 136, - "model": "pdcounter.author", - "fields": { - "death": 1957, - "description": "", - "wiki_link": "", - "sort_key": "staff", - "slug": "leopold-staff", - "gazeta_link": "", - "name": "Leopold Staff" - } - }, - { - "pk": 137, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "staszic", - "slug": "stanislaw-staszic", - "gazeta_link": "", - "name": "Stanis\u0142aw Staszic" - } - }, - { - "pk": 138, - "model": "pdcounter.author", - "fields": { - "death": 1968, - "description": "", - "wiki_link": "", - "sort_key": "steinbeck", - "slug": "john-steinbeck", - "gazeta_link": "", - "name": "John Steinbeck" - } - }, - { - "pk": 139, - "model": "pdcounter.author", - "fields": { - "death": 1969, - "description": "", - "wiki_link": "", - "sort_key": "stempowski", - "slug": "jerzy-stempowski", - "gazeta_link": "", - "name": "Jerzy Stempowski" - } - }, - { - "pk": 140, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "stevenson", - "slug": "robert-louis-stevenson", - "gazeta_link": "", - "name": "Robert Louis Stevenson" - } - }, - { - "pk": 141, - "model": "pdcounter.author", - "fields": { - "death": 1966, - "description": "", - "wiki_link": "", - "sort_key": "stryjkowski", - "slug": "julian-stryjkowski", - "gazeta_link": "", - "name": "Julian Stryjkowski" - } - }, - { - "pk": 142, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "suchodolski", - "slug": "rajnold-suchodolski", - "gazeta_link": "", - "name": "Rajnold Suchodolski" - } - }, - { - "pk": 143, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "swietochowski", - "slug": "aleksander-swietochowski", - "gazeta_link": "", - "name": "Aleksander \u015awi\u0119tochowski" - } - }, - { - "pk": 144, - "model": "pdcounter.author", - "fields": { - "death": 1992, - "description": "", - "wiki_link": "", - "sort_key": "szklarski", - "slug": "alfred-szklarski", - "gazeta_link": "", - "name": "Alfred Szklarski" - } - }, - { - "pk": 145, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "szymborska", - "slug": "wislawa-szymborska", - "gazeta_link": "", - "name": "Wis\u0142awa Szymborska" - } - }, - { - "pk": 146, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "tarnowski", - "slug": "wladyslaw-tarnowski", - "gazeta_link": "", - "name": "W\u0142adys\u0142aw Tarnowski" - } - }, - { - "pk": 147, - "model": "pdcounter.author", - "fields": { - "death": 2004, - "description": "", - "wiki_link": "", - "sort_key": "terakowska", - "slug": "dorota-terakowska", - "gazeta_link": "", - "name": "Dorota Terakowska" - } - }, - { - "pk": 148, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "thackeray", - "slug": "william-makepeace-thackeray", - "gazeta_link": "", - "name": "William Makepeace Thackeray" - } - }, - { - "pk": 149, - "model": "pdcounter.author", - "fields": { - "death": 2000, - "description": "", - "wiki_link": "", - "sort_key": "tischner", - "slug": "jozef-tischner", - "gazeta_link": "", - "name": "J\u00f3zef Tischner" - } - }, - { - "pk": 150, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "tokarczuk", - "slug": "olga-tokarczuk", - "gazeta_link": "", - "name": "Olga Tokarczuk" - } - }, - { - "pk": 151, - "model": "pdcounter.author", - "fields": { - "death": 1973, - "description": "", - "wiki_link": "", - "sort_key": "tolkien", - "slug": "john-ronald-reuel-tolkien", - "gazeta_link": "", - "name": "John Ronald Reuel Tolkien" - } - }, - { - "pk": 152, - "model": "pdcounter.author", - "fields": { - "death": 1953, - "description": "", - "wiki_link": "", - "sort_key": "tuwim", - "slug": "julian-tuwim", - "gazeta_link": "", - "name": "Julian Tuwim" - } - }, - { - "pk": 153, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "twain", - "slug": "mark-twain", - "gazeta_link": "", - "name": "Mark Twain" - } - }, - { - "pk": 154, - "model": "pdcounter.author", - "fields": { - "death": 2006, - "description": "", - "wiki_link": "", - "sort_key": "twardowski", - "slug": "jan-twardowski", - "gazeta_link": "", - "name": "Jan Twardowski" - } - }, - { - "pk": 155, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "tyrtajos", - "slug": "tyrtajos", - "gazeta_link": "", - "name": "Tyrtajos" - } - }, - { - "pk": 156, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "verne", - "slug": "jules-gabriel-verne", - "gazeta_link": "", - "name": "Jules Gabriel Verne" - } - }, - { - "pk": 157, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "wasilewski", - "slug": "edmund-wasilewski", - "gazeta_link": "", - "name": "Edmund Wasilewski" - } - }, - { - "pk": 158, - "model": "pdcounter.author", - "fields": { - "death": 1969, - "description": "", - "wiki_link": "", - "sort_key": "wierzynski", - "slug": "kazimierz-wierzynski", - "gazeta_link": "", - "name": "Kazimierz Wierzy\u0144ski" - } - }, - { - "pk": 159, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "witcher", - "slug": "moony-witcher", - "gazeta_link": "", - "name": "Moony Witcher" - } - }, - { - "pk": 160, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "witkiewicz", - "slug": "stanislaw-ignacy-witkiewicz", - "gazeta_link": "", - "name": "Stanis\u0142aw Ignacy Witkiewicz" - } - }, - { - "pk": 161, - "model": "pdcounter.author", - "fields": { - "death": 1976, - "description": "", - "wiki_link": "", - "sort_key": "wittlin", - "slug": "jozef-wittlin", - "gazeta_link": "", - "name": "J\u00f3zef Wittlin" - } - }, - { - "pk": 162, - "model": "pdcounter.author", - "fields": { - "death": 2005, - "description": "", - "wiki_link": "", - "sort_key": "wojtyla", - "slug": "karol-wojtyla", - "gazeta_link": "", - "name": "Karol Wojty\u0142a" - } - }, - { - "pk": 163, - "model": "pdcounter.author", - "fields": { - "death": 1975, - "description": "", - "wiki_link": "", - "sort_key": "wyka", - "slug": "kazimierz-wyka", - "gazeta_link": "", - "name": "Kazimierz Wyka" - } - }, - { - "pk": 164, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "wyspianski", - "slug": "stanislaw-wyspianski", - "gazeta_link": "", - "name": "Stanis\u0142aw Wyspia\u0144ski" - } - }, - { - "pk": 165, - "model": "pdcounter.author", - "fields": { - "death": null, - "description": "", - "wiki_link": "", - "sort_key": "zagajewski", - "slug": "adam-zagajewski", - "gazeta_link": "", - "name": "Adam Zagajewski" - } - }, - { - "pk": 166, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "zeromski", - "slug": "stefan-zeromski", - "gazeta_link": "", - "name": "Stefan \u017beromski" - } - }, - { - "pk": 167, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "zola", - "slug": "emil-zola", - "gazeta_link": "", - "name": "Emil Zola" - } - }, - { - "pk": 168, - "model": "pdcounter.author", - "fields": { - "death": 0, - "description": "", - "wiki_link": "", - "sort_key": "zygmunt", - "slug": "gloger-zygmunt", - "gazeta_link": "", - "name": "Gloger Zygmunt" - } - }, - { - "pk": 622, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jules Gabriel Verne", - "slug": "20-000-mil-podmorskiej-zeglugi", - "pd": 0, - "title": "20 000 mil podmorskiej \u017ceglugi" - } - }, - { - "pk": 629, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "a-coz-z-ta-dziecina", - "pd": 0, - "title": "A c\u00f3\u017c z t\u0105 dziecin\u0105" - } - }, - { - "pk": 437, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "abc", - "pd": 0, - "title": "ABC" - } - }, - { - "pk": 356, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "ach-juz-w-mym-rodzicielskim-domu", - "pd": 0, - "title": "Ach, ju\u017c w mym rodzicielskim domu" - } - }, - { - "pk": 110, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jan Brzechwa", - "slug": "akademia-pana-kleksa", - "pd": 2037, - "title": "Akademia Pana Kleksa" - } - }, - { - "pk": 3, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "albatros", - "pd": 0, - "title": "Albatros" - } - }, - { - "pk": 388, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Lucy Maud Montgomery", - "slug": "ania-z-zielonego-wzgorza", - "pd": null, - "title": "Ania z Zielonego Wzg\u00f3rza" - } - }, - { - "pk": 528, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "aniol-ognisty-moj-aniol-lewy", - "pd": 0, - "title": "Anio\u0142 ognisty \u2014 m\u00f3j anio\u0142 lewy" - } - }, - { - "pk": 529, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "anioly-stoja-na-rodzinnych-polach", - "pd": 0, - "title": "Anio\u0142y stoj\u0105 na rodzinnych polach" - } - }, - { - "pk": 301, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ignacy Krasicki", - "slug": "antymonachomachia", - "pd": 0, - "title": "Antymonachomachia" - } - }, - { - "pk": 83, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "apokalipsa-sw-jana", - "pd": 0, - "title": "Apokalipsa \u015bw. Jana" - } - }, - { - "pk": 609, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Julian Stryjkowski", - "slug": "austeria", - "pd": 2037, - "title": "Austeria" - } - }, - { - "pk": 105, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "bajka-o-szesciu-slugach", - "pd": 0, - "title": "Bajka o sze\u015bciu s\u0142ugach" - } - }, - { - "pk": 309, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Lem", - "slug": "bajki-robotow", - "pd": 2077, - "title": "Bajki robot\u00f3w" - } - }, - { - "pk": 4, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "balkon", - "pd": 0, - "title": "Balkon" - } - }, - { - "pk": 649, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Marceli Ska\u0142kowski", - "slug": "bartoszu-bartoszu-czyli-krakowiak-kosciuszki", - "pd": 0, - "title": "Bartoszu, Bartoszu, czyli krakowiak Ko\u015bciuszki" - } - }, - { - "pk": 5, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "beatrycze", - "pd": 0, - "title": "Beatrycze" - } - }, - { - "pk": 530, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "beniowski", - "pd": 0, - "title": "Beniowski" - } - }, - { - "pk": 119, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "bieg-bez-nadziei", - "pd": 0, - "title": "Bieg bez nadziei" - } - }, - { - "pk": 120, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "bildur-baldur-i-czas", - "pd": 0, - "title": "Bildur, Baldur i czas" - } - }, - { - "pk": 189, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "G\u00fcnter Grass", - "slug": "blaszany-bebenek", - "pd": null, - "title": "Blaszany b\u0119benek" - } - }, - { - "pk": 106, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "blekitny-ognik", - "pd": 0, - "title": "B\u0142\u0119kitny ognik" - } - }, - { - "pk": 6, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "blogoslawienstwo", - "pd": 0, - "title": "B\u0142ogos\u0142awie\u0144stwo" - } - }, - { - "pk": 456, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Bronis\u0142awa Ostrowska", - "slug": "bohaterski-mis", - "pd": 0, - "title": "Bohaterski mi\u015b" - } - }, - { - "pk": 1, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Dante Alighieri", - "slug": "boska-komedia", - "pd": 0, - "title": "Boska komedia" - } - }, - { - "pk": 650, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Alojzy Feli\u0144ski, Antoni G\u00f3recki", - "slug": "boze-cos-polske", - "pd": 0, - "title": "Bo\u017ce, co\u015b Polsk\u0119" - } - }, - { - "pk": 313, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "boze-pelen-w-niebie-chwaly", - "pd": 0, - "title": "Bo\u017ce, pe\u0142en w niebie chwa\u0142y" - } - }, - { - "pk": 287, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Franciszek Karpi\u0144ski", - "slug": "bog-sie-rodzi", - "pd": 0, - "title": "B\u00f3g si\u0119 rodzi" - } - }, - { - "pk": 350, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Astrid Lindgren", - "slug": "bracia-lwie-serce", - "pd": 2081, - "title": "Bracia Lwie Serce" - } - }, - { - "pk": 630, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "bracia-patrzcie-jana", - "pd": 0, - "title": "Bracia, patrzcie Jana" - } - }, - { - "pk": 84, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "brat-i-siostra", - "pd": 0, - "title": "Brat i siostra" - } - }, - { - "pk": 397, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "brulion-bebe-b", - "pd": null, - "title": "Brulion Bebe B." - } - }, - { - "pk": 279, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jaros\u0142aw Iwaszkiewicz", - "slug": "brzezina", - "pd": 2051, - "title": "Brzezina" - } - }, - { - "pk": 488, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "burza", - "pd": 0, - "title": "Burza" - } - }, - { - "pk": 438, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "cham", - "pd": 0, - "title": "Cham" - } - }, - { - "pk": 172, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ronald Dahl", - "slug": "charlie-i-fabryka-czekolady", - "pd": null, - "title": "Charlie i fabryka czekolady" - } - }, - { - "pk": 611, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander \u015awi\u0119tochowski", - "slug": "chawa-rubin", - "pd": 0, - "title": "Chawa Rubin" - } - }, - { - "pk": 387, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ferenc Moln\u00e1r", - "slug": "chlopcy-z-placu-broni", - "pd": null, - "title": "Ch\u0142opcy z Placu Broni" - } - }, - { - "pk": 311, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Teofil Lenartowicz", - "slug": "chodzil-senek-i-drzemota", - "pd": 0, - "title": "Chodzi\u0142 Senek i Drzemota" - } - }, - { - "pk": 280, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Jachowicz", - "slug": "chory-kotek", - "pd": 0, - "title": "Chory kotek" - } - }, - { - "pk": 531, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "chor-duchow-izraelskich", - "pd": 0, - "title": "Ch\u00f3r duch\u00f3w izraelskich" - } - }, - { - "pk": 314, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "cialo-me-wyklete", - "pd": 0, - "title": "Cia\u0142o me, wykl\u0119te" - } - }, - { - "pk": 631, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "cicha-noc", - "pd": 0, - "title": "Cicha noc" - } - }, - { - "pk": 466, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "cienie", - "pd": 0, - "title": "Cienie" - } - }, - { - "pk": 7, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "co-powiesz-w-ten-zmierzch", - "pd": 0, - "title": "Co Powiesz W Ten Zmierzch" - } - }, - { - "pk": 532, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "corka-cerery", - "pd": 0, - "title": "C\u00f3rka Cerery" - } - }, - { - "pk": 402, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "corka-robrojka", - "pd": null, - "title": "C\u00f3rka Robrojka" - } - }, - { - "pk": 306, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Maria Kuncewiczowa", - "slug": "cudzoziemka", - "pd": 2060, - "title": "Cudzoziemka" - } - }, - { - "pk": 408, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "czarna-polewka", - "pd": null, - "title": "Czarna polewka" - } - }, - { - "pk": 353, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Thomas Mann", - "slug": "czarodziejska-gora", - "pd": 2026, - "title": "Czarodziejska g\u00f3ra" - } - }, - { - "pk": 357, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "czaty", - "pd": 0, - "title": "Czaty" - } - }, - { - "pk": 85, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "czerwony-kapturek", - "pd": 0, - "title": "Czerwony Kapturek" - } - }, - { - "pk": 8, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "czlowiek-i-morze", - "pd": 0, - "title": "Cz\u0142owiek I Morze" - } - }, - { - "pk": 432, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Anna Onichimowska", - "slug": "daleki-rejs", - "pd": null, - "title": "Daleki rejs" - } - }, - { - "pk": 612, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander \u015awi\u0119tochowski", - "slug": "damian-cepenko", - "pd": 0, - "title": "Damian Cepenko" - } - }, - { - "pk": 9, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "danse-macabre", - "pd": 0, - "title": "Danse Macabre" - } - }, - { - "pk": 10, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "de-profundis-clamavi", - "pd": 0, - "title": "De Profundis Clamavi" - } - }, - { - "pk": 205, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "djanie-i-apollinowi", - "pd": 0, - "title": "Djanie i Apollinowi" - } - }, - { - "pk": 578, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do", - "pd": 0, - "title": "Do ***" - } - }, - { - "pk": 206, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-albiusa-tibulla", - "pd": 0, - "title": "Do Albiusa Tibulla" - } - }, - { - "pk": 412, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Daniel Naborowski", - "slug": "do-anny", - "pd": 0, - "title": "Do Anny" - } - }, - { - "pk": 207, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-antoniusa", - "pd": 0, - "title": "Do Antoniusa" - } - }, - { - "pk": 208, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-apollina", - "pd": 0, - "title": "Do Apollina" - } - }, - { - "pk": 209, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-aristiusa-fuska", - "pd": 0, - "title": "Do Aristiusa Fuska" - } - }, - { - "pk": 210, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-asteryi", - "pd": 0, - "title": "Do Asteryi" - } - }, - { - "pk": 211, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-augusta", - "pd": 0, - "title": "Do Augusta" - } - }, - { - "pk": 212, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-bakchusa", - "pd": 0, - "title": "Do Bakchusa" - } - }, - { - "pk": 213, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-bariny", - "pd": 0, - "title": "Do Bariny" - } - }, - { - "pk": 214, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-cezara-augusta", - "pd": 0, - "title": "Do Cezara Augusta" - } - }, - { - "pk": 215, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-chciwych-na-pieniadz", - "pd": 0, - "title": "Do chciwych na pieni\u0105dz" - } - }, - { - "pk": 216, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-chloe", - "pd": 0, - "title": "Do Chloe" - } - }, - { - "pk": 217, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-chlorydy", - "pd": 0, - "title": "Do Chlorydy" - } - }, - { - "pk": 218, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-chorego-mecenasa", - "pd": 0, - "title": "Do chorego Mecenasa" - } - }, - { - "pk": 219, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-cilniusa-mecenasa", - "pd": 0, - "title": "Do Cilniusa Mecenasa" - } - }, - { - "pk": 33, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "do-czytelnika", - "pd": 0, - "title": "Do Czytelnika" - } - }, - { - "pk": 358, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "do-d-d", - "pd": 0, - "title": "Do D* D*" - } - }, - { - "pk": 276, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-djany", - "pd": 0, - "title": "Do Djany" - } - }, - { - "pk": 221, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-dzbanka", - "pd": 0, - "title": "Do dzbanka" - } - }, - { - "pk": 222, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-eliusa-lamii", - "pd": 0, - "title": "Do Eliusa Lamii" - } - }, - { - "pk": 220, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-elljusa", - "pd": 0, - "title": "Do Elljusa" - } - }, - { - "pk": 223, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-fauna", - "pd": 0, - "title": "Do Fauna" - } - }, - { - "pk": 224, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-festjusa", - "pd": 0, - "title": "Do Festjusa" - } - }, - { - "pk": 225, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-fihdyli", - "pd": 0, - "title": "Do Fihdyli" - } - }, - { - "pk": 226, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-fortuny", - "pd": 0, - "title": "Do Fortuny" - } - }, - { - "pk": 533, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do-franciszka-szemiotha", - "pd": 0, - "title": "Do Franciszka Szemiotha" - } - }, - { - "pk": 227, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-fyllidy", - "pd": 0, - "title": "Do Fyllidy" - } - }, - { - "pk": 228, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-galatei", - "pd": 0, - "title": "Do Galatei" - } - }, - { - "pk": 229, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-glycery", - "pd": 0, - "title": "Do Glycery" - } - }, - { - "pk": 534, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do-hrabiego-gustawa-podziekowanie", - "pd": 0, - "title": "Do hrabiego Gustawa podzi\u0119kowanie" - } - }, - { - "pk": 230, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-ikciusa", - "pd": 0, - "title": "Do Ikciusa" - } - }, - { - "pk": 231, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-kajusa-asiniusa-polliona", - "pd": 0, - "title": "Do Kajusa Asiniusa Polliona" - } - }, - { - "pk": 232, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-kalliopy", - "pd": 0, - "title": "Do Kalliopy" - } - }, - { - "pk": 194, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-kanidii-trucicielki", - "pd": 0, - "title": "Do Kanidii trucicielki" - } - }, - { - "pk": 233, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-kochanka-lalagi", - "pd": 0, - "title": "Do kochanka Lalagi" - } - }, - { - "pk": 11, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "do-kreolki", - "pd": 0, - "title": "Do Kreolki" - } - }, - { - "pk": 234, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-ksantiasa-focejczyka", - "pd": 0, - "title": "Do Ksantiasa Focejczyka" - } - }, - { - "pk": 235, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-kwinktiliusa-warusa", - "pd": 0, - "title": "Do Kwinktiliusa Warusa" - } - }, - { - "pk": 236, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-kwinktiusa-hirpina", - "pd": 0, - "title": "Do Kwinktiusa Hirpina" - } - }, - { - "pk": 568, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do-laury", - "pd": 0, - "title": "Do Laury" - } - }, - { - "pk": 237, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-leukonoe", - "pd": 0, - "title": "Do Leukonoe" - } - }, - { - "pk": 238, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-liciniusa-mureny", - "pd": 0, - "title": "Do Liciniusa Mureny" - } - }, - { - "pk": 239, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-ligurina", - "pd": 0, - "title": "Do Ligurina" - } - }, - { - "pk": 195, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-lubieznej-staruszki", - "pd": 0, - "title": "Do lubie\u017cnej staruszki" - } - }, - { - "pk": 196, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-ludu-rzymskiego", - "pd": 0, - "title": "Do ludu rzymskiego" - } - }, - { - "pk": 535, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do-ludwiki-bobrowny", - "pd": 0, - "title": "Do Ludwiki Bobr\u00f3wny" - } - }, - { - "pk": 240, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-lutni", - "pd": 0, - "title": "Do lutni" - } - }, - { - "pk": 241, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-lyce", - "pd": 0, - "title": "Do Lyce" - } - }, - { - "pk": 242, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-lyhdyi", - "pd": 0, - "title": "Do Lyhdyi" - } - }, - { - "pk": 12, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "do-madonny", - "pd": 0, - "title": "Do Madonny" - } - }, - { - "pk": 243, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-manliusa-torkwata", - "pd": 0, - "title": "Do Manliusa Torkwata" - } - }, - { - "pk": 244, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-marciusa-cenzorina", - "pd": 0, - "title": "Do Marciusa Cenzorina" - } - }, - { - "pk": 245, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-marka-lolljusa", - "pd": 0, - "title": "Do Marka Lolljusa" - } - }, - { - "pk": 246, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-marka-wipsaniusa-agrippy", - "pd": 0, - "title": "Do Marka Wipsaniusa Agrippy" - } - }, - { - "pk": 359, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "do-maryi-putkamerowej", - "pd": 0, - "title": "Do Maryi Putkamerowej" - } - }, - { - "pk": 536, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do-matki", - "pd": 0, - "title": "Do matki" - } - }, - { - "pk": 360, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "do-matki-polki", - "pd": 0, - "title": "Do Matki Polki" - } - }, - { - "pk": 197, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-mecenasa", - "pd": 0, - "title": "Do Mecenasa" - } - }, - { - "pk": 247, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-melpomeny", - "pd": 0, - "title": "Do Melpomeny" - } - }, - { - "pk": 248, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-merkuryusza", - "pd": 0, - "title": "Do Merkuryusza" - } - }, - { - "pk": 198, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-mewiusa-poety", - "pd": 0, - "title": "Do Mewiusa poety" - } - }, - { - "pk": 249, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-miasta-rzymu", - "pd": 0, - "title": "Do miasta Rzymu" - } - }, - { - "pk": 250, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-mlodego-slugi", - "pd": 0, - "title": "Do m\u0142odego s\u0142ugi" - } - }, - { - "pk": 251, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-mlodziezy", - "pd": 0, - "title": "Do m\u0142odzie\u017cy" - } - }, - { - "pk": 252, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-munaciusa-pianka", - "pd": 0, - "title": "Do Munaciusa Pianka" - } - }, - { - "pk": 199, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-neery", - "pd": 0, - "title": "Do Neery" - } - }, - { - "pk": 253, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-neobuli", - "pd": 0, - "title": "Do Neobuli" - } - }, - { - "pk": 361, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "do-niemna", - "pd": 0, - "title": "Do Niemna" - } - }, - { - "pk": 254, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-okretu-majacego-zawiesc-wirgiljusa-do-aten", - "pd": 0, - "title": "Do okr\u0119tu maj\u0105cego zawie\u015b\u0107 Wirgiljusa do Aten" - } - }, - { - "pk": 537, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do-pani-joanny-bobrowej", - "pd": 0, - "title": "Do pani Joanny Bobrowej" - } - }, - { - "pk": 538, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do-pastereczki", - "pd": 0, - "title": "Do pastereczki" - } - }, - { - "pk": 200, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-pettiusa", - "pd": 0, - "title": "Do Pettiusa" - } - }, - { - "pk": 256, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-pompejusa", - "pd": 0, - "title": "Do Pompejusa" - } - }, - { - "pk": 255, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-pompejusa-grosfa", - "pd": 0, - "title": "Do Pompejusa Grosfa" - } - }, - { - "pk": 257, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-postumiusa", - "pd": 0, - "title": "Do Postumiusa" - } - }, - { - "pk": 13, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "do-przechodzacej", - "pd": 0, - "title": "Do Przechodz\u0105cej" - } - }, - { - "pk": 201, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-przyjaciol", - "pd": 0, - "title": "Do przyjaci\u00f3\u0142" - } - }, - { - "pk": 258, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-przyjaciolki", - "pd": 0, - "title": "Do przyjaci\u00f3\u0142ki" - } - }, - { - "pk": 260, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-pyrry", - "pd": 0, - "title": "Do Pyrry" - } - }, - { - "pk": 261, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-rzeczypospolitej", - "pd": 0, - "title": "Do Rzeczypospolitej" - } - }, - { - "pk": 262, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-rzymian", - "pd": 0, - "title": "Do Rzymian" - } - }, - { - "pk": 263, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-sallustiusa-krispa", - "pd": 0, - "title": "Do Sallustiusa Krispa" - } - }, - { - "pk": 264, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-septimiusa", - "pd": 0, - "title": "Do Septimiusa" - } - }, - { - "pk": 265, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-siebie-samego", - "pd": 0, - "title": "Do siebie samego" - } - }, - { - "pk": 266, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-skapca", - "pd": 0, - "title": "Do sk\u0105pca" - } - }, - { - "pk": 202, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-starej-rozpustnicy", - "pd": 0, - "title": "Do starej rozpustnicy" - } - }, - { - "pk": 632, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "do-szopy-hej-pasterze", - "pd": 0, - "title": "Do szopy, hej pasterze" - } - }, - { - "pk": 267, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-taliarcha", - "pd": 0, - "title": "Do Taliarcha" - } - }, - { - "pk": 268, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-telefa", - "pd": 0, - "title": "Do Telefa" - } - }, - { - "pk": 539, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do-teofila-januszewskiego", - "pd": 0, - "title": "Do Teofila Januszewskiego" - } - }, - { - "pk": 269, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-tyndarydy", - "pd": 0, - "title": "Do Tyndarydy" - } - }, - { - "pk": 270, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-walgiusa-rufusa", - "pd": 0, - "title": "Do Walgiusa Rufusa" - } - }, - { - "pk": 271, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-wenery", - "pd": 0, - "title": "Do Wenery" - } - }, - { - "pk": 272, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-wergiliusa", - "pd": 0, - "title": "Do Wergiliusa" - } - }, - { - "pk": 273, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-wirgiliusa-marona", - "pd": 0, - "title": "Do Wirgiliusa Marona" - } - }, - { - "pk": 274, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-wspolbiesiadnikow", - "pd": 0, - "title": "Do wsp\u00f3\u0142biesiadnik\u00f3w" - } - }, - { - "pk": 203, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-zlosliwca", - "pd": 0, - "title": "Do z\u0142o\u015bliwca" - } - }, - { - "pk": 540, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "do-zygmunta", - "pd": 0, - "title": "Do Zygmunta" - } - }, - { - "pk": 275, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "do-zrodla-banduzyi", - "pd": 0, - "title": "Do \u017ar\u00f3d\u0142a Banduzyi" - } - }, - { - "pk": 439, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "dobra-pani", - "pd": 0, - "title": "Dobra Pani" - } - }, - { - "pk": 385, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander Minkowski", - "slug": "dolina-swiatla", - "pd": null, - "title": "Dolina \u015awiat\u0142a" - } - }, - { - "pk": 121, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "dom-swietego-kazimierza", - "pd": 0, - "title": "Dom \u015bwi\u0119tego Kazimierza" - } - }, - { - "pk": 14, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "don-juan-w-piekle", - "pd": 0, - "title": "Don Juan W Piekle" - } - }, - { - "pk": 114, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Miguel Cervantes", - "slug": "don-kichote", - "pd": 2045, - "title": "Don Kichote" - } - }, - { - "pk": 315, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "dreszcze-nasze-u-warg-sie-spotkaly", - "pd": 0, - "title": "Dreszcze nasze u warg si\u0119 spotka\u0142y" - } - }, - { - "pk": 351, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Mackiewicz", - "slug": "droga-donikad", - "pd": 2056, - "title": "Droga donik\u0105d" - } - }, - { - "pk": 431, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Anna Onichimowska", - "slug": "duch-starej-kamienicy", - "pd": null, - "title": "Duch starej kamienicy" - } - }, - { - "pk": 362, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "dudasz", - "pd": 0, - "title": "Dudasz" - } - }, - { - "pk": 541, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "duma-o-waclawie-rzewuskim", - "pd": 0, - "title": "Duma o Wac\u0142awie Rzewuskim" - } - }, - { - "pk": 613, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander \u015awi\u0119tochowski", - "slug": "dumania-pesymisty", - "pd": 0, - "title": "Dumania pesymisty" - } - }, - { - "pk": 542, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "dusza-sie-moja-zamysla-gleboko", - "pd": 0, - "title": "Dusza si\u0119 moja zamy\u015bla g\u0142\u0119boko" - } - }, - { - "pk": 15, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "dusza-wina", - "pd": 0, - "title": "Dusza Wina" - } - }, - { - "pk": 86, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "dwie-ksiezniczki", - "pd": 0, - "title": "Dwie ksi\u0119\u017cniczki" - } - }, - { - "pk": 430, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Joanna Olech", - "slug": "dynastia-miziolkow", - "pd": null, - "title": "Dynastia Mizio\u0142k\u00f3w" - } - }, - { - "pk": 180, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Arkady Fiedler", - "slug": "dywizjon-303", - "pd": 2056, - "title": "Dywizjon 303" - } - }, - { - "pk": 304, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ignacy Kraszewski", - "slug": "dziad-i-baba", - "pd": 0, - "title": "Dziad i baba" - } - }, - { - "pk": 400, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "dziecko-piatku", - "pd": null, - "title": "Dziecko pi\u0105tku" - } - }, - { - "pk": 316, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "dziejba-lesna", - "pd": 0, - "title": "Dziejba le\u015bna" - } - }, - { - "pk": 68, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Joseph B\u00e9dier", - "slug": "dzieje-tristana-i-izoldy", - "pd": 2012, - "title": "Dzieje Tristana i Izoldy" - } - }, - { - "pk": 625, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Moony Witcher", - "slug": "dziewczynka-z-szostego-ksiezyca", - "pd": null, - "title": "Dziewczynka z sz\u00f3stego ksi\u0119\u017cyca" - } - }, - { - "pk": 633, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "dzisiaj-w-betlejem", - "pd": 0, - "title": "Dzisiaj w Betlejem" - } - }, - { - "pk": 440, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "dziurdziowie", - "pd": 0, - "title": "Dziurdziowie" - } - }, - { - "pk": 489, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "dziwna-opowiesc", - "pd": 0, - "title": "Dziwna opowie\u015b\u0107" - } - }, - { - "pk": 113, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Albert Camus", - "slug": "dzuma", - "pd": 2080, - "title": "D\u017cuma" - } - }, - { - "pk": 480, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Kazimierz Przerwa-Tetmajer", - "slug": "e-viva-larte", - "pd": 2011, - "title": "E viva l'arte" - } - }, - { - "pk": 682, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stefan \u017beromski", - "slug": "echa-lesne", - "pd": 0, - "title": "Echa le\u015bne" - } - }, - { - "pk": 467, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "echa-muzyczne", - "pd": 0, - "title": "Echa muzyczne" - } - }, - { - "pk": 122, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "elegia-czwarta", - "pd": 0, - "title": "Elegia czwarta" - } - }, - { - "pk": 123, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "elegia-zalu", - "pd": 0, - "title": "Elegia \u017calu" - } - }, - { - "pk": 391, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Zbigniew Morsztyn", - "slug": "emblemata", - "pd": 0, - "title": "Emblemata" - } - }, - { - "pk": 193, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "epody", - "pd": 0, - "title": "Epody" - } - }, - { - "pk": 462, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Platon", - "slug": "fajdros", - "pd": 0, - "title": "Fajdros" - } - }, - { - "pk": 543, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "fantazy", - "pd": 0, - "title": "Fantazy" - } - }, - { - "pk": 363, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "farys", - "pd": 0, - "title": "Farys" - } - }, - { - "pk": 184, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Johann Goethe", - "slug": "faust", - "pd": 0, - "title": "Faust" - } - }, - { - "pk": 185, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Witold Gombrowicz", - "slug": "ferdydurke", - "pd": 2040, - "title": "Ferdydurke" - } - }, - { - "pk": 490, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "fermenty", - "pd": 0, - "title": "Fermenty" - } - }, - { - "pk": 468, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "filozof-i-prostak", - "pd": 0, - "title": "Filozof i prostak" - } - }, - { - "pk": 491, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "franek", - "pd": 0, - "title": "Franek" - } - }, - { - "pk": 124, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "front", - "pd": 0, - "title": "Front" - } - }, - { - "pk": 545, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "gdy-noc-gleboka-wszystko-uspi-i-oniemi", - "pd": 0, - "title": "Gdy noc g\u0142\u0119boka wszystko u\u015bpi i oniemi" - } - }, - { - "pk": 634, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "gdy-sie-chrystus-rodzi", - "pd": 0, - "title": "Gdy si\u0119 Chrystus rodzi" - } - }, - { - "pk": 635, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "gdy-sliczna-panna", - "pd": 0, - "title": "Gdy \u015bliczna panna" - } - }, - { - "pk": 364, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "gdy-tu-moj-trup", - "pd": 0, - "title": "Gdy tu m\u00f3j trup" - } - }, - { - "pk": 365, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "geby-za-lud-krzyczace", - "pd": 0, - "title": "G\u0119by za lud krzycz\u0105ce" - } - }, - { - "pk": 87, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "gesiareczka", - "pd": 0, - "title": "G\u0119siareczka" - } - }, - { - "pk": 16, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "glos", - "pd": 0, - "title": "G\u0142os" - } - }, - { - "pk": 546, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "godzina-mysli", - "pd": 0, - "title": "Godzina my\u015bli" - } - }, - { - "pk": 651, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Micha\u0142 Ba\u0142ucki", - "slug": "goralu-czy-ci-nie-zal", - "pd": 0, - "title": "G\u00f3ralu, czy ci nie \u017cal" - } - }, - { - "pk": 17, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "gra", - "pd": 0, - "title": "Gra" - } - }, - { - "pk": 416, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Zofia Na\u0142kowska", - "slug": "granica", - "pd": 2025, - "title": "Granica" - } - }, - { - "pk": 366, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "grazyna", - "pd": 0, - "title": "Gra\u017cyna" - } - }, - { - "pk": 522, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Henryk Sienkiewicz", - "slug": "hania", - "pd": 0, - "title": "Hania" - } - }, - { - "pk": 18, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "harmonia-wieczorna", - "pd": 0, - "title": "Harmonia Wieczorna" - } - }, - { - "pk": 19, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "heautonimoroumenos", - "pd": 0, - "title": "Heautonimoroumenos" - } - }, - { - "pk": 652, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "hej-hej-ulani", - "pd": 0, - "title": "Hej, hej, u\u0142ani" - } - }, - { - "pk": 653, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Anczyc", - "slug": "hej-strzelcy-w-las", - "pd": 0, - "title": "Hej, strzelcy w las" - } - }, - { - "pk": 636, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "hej-w-dzien-narodzenia", - "pd": 0, - "title": "Hej, w dzie\u0144 narodzenia" - } - }, - { - "pk": 619, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "John Ronald Reuel Tolkien", - "slug": "hobbit-czyli-tam-i-z-powrotem", - "pd": 2055, - "title": "Hobbit, czyli tam i z powrotem" - } - }, - { - "pk": 547, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "hymn-bogarodzico-dziewico", - "pd": 0, - "title": "Hymn (Bogarodzico, Dziewico!)" - } - }, - { - "pk": 654, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ignacy Krasicki", - "slug": "hymn-do-milosci-ojczyzny", - "pd": 0, - "title": "Hymn do mi\u0142o\u015bci ojczyzny" - } - }, - { - "pk": 481, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Kazimierz Przerwa-Tetmajer", - "slug": "hymn-do-nirwany", - "pd": 2011, - "title": "Hymn do nirwany" - } - }, - { - "pk": 656, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "hymn-narodowy", - "pd": 0, - "title": "Hymn narodowy" - } - }, - { - "pk": 71, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "hymn-sw-pawla-o-milosci", - "pd": 0, - "title": "Hymn \u015bw. Paw\u0142a o mi\u0142o\u015bci" - } - }, - { - "pk": 125, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "i-kompozycja", - "pd": 0, - "title": "I kompozycja" - } - }, - { - "pk": 126, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "i-wigilia-co-splywa-ku-nam", - "pd": 0, - "title": "I Wigilia co sp\u0142ywa ku nam" - } - }, - { - "pk": 395, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "ida-sierpniowa", - "pd": null, - "title": "Ida sierpniowa" - } - }, - { - "pk": 20, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "ideal", - "pd": 0, - "title": "Idea\u0142" - } - }, - { - "pk": 191, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Homer", - "slug": "iliada", - "pd": 0, - "title": "Iliada" - } - }, - { - "pk": 403, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "imieniny", - "pd": null, - "title": "Imieniny" - } - }, - { - "pk": 179, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Umberto Eco", - "slug": "imie-rozy", - "pd": null, - "title": "Imi\u0119 r\u00f3\u017cy" - } - }, - { - "pk": 190, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Gustaw Herling-Grudzi\u0144ski", - "slug": "inny-swiat", - "pd": 2071, - "title": "Inny \u015bwiat" - } - }, - { - "pk": 127, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "inwokacja", - "pd": 0, - "title": "Inwokacja" - } - }, - { - "pk": 128, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "jablko-zycia", - "pd": 0, - "title": "Jab\u0142ko \u017cycia" - } - }, - { - "pk": 317, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "jak-niewiele-ma-znakow", - "pd": 0, - "title": "Jak niewiele ma znak\u00f3w" - } - }, - { - "pk": 657, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Tarnowski", - "slug": "jak-to-na-wojence-ladnie", - "pd": 0, - "title": "Jak to na wojence \u0142adnie" - } - }, - { - "pk": 510, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "jak-wam-sie-podoba", - "pd": 0, - "title": "Jak wam sie podoba" - } - }, - { - "pk": 318, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "jam-nie-osjan", - "pd": 0, - "title": "Jam \u2014 nie osjan" - } - }, - { - "pk": 548, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "jan-bielecki", - "pd": 0, - "title": "Jan Bielecki" - } - }, - { - "pk": 88, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "jas-i-malgosia", - "pd": 0, - "title": "Ja\u015b i Ma\u0142gosia" - } - }, - { - "pk": 115, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Joseph Conrad", - "slug": "jadro-ciemnosci", - "pd": 2014, - "title": "J\u0105dro ciemno\u015bci" - } - }, - { - "pk": 129, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "je-le-sois", - "pd": 0, - "title": "Je le sois" - } - }, - { - "pk": 469, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "jeden-z-wielu", - "pd": 0, - "title": "Jeden z wielu" - } - }, - { - "pk": 130, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "jesienia", - "pd": 0, - "title": "Jesieni\u0105" - } - }, - { - "pk": 131, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "jeszcze-pejzaz-modlitwa-zalobna", - "pd": 0, - "title": "Jeszcze pejza\u017c modlitwa \u017ca\u0142obna" - } - }, - { - "pk": 637, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "jezus-malusienki", - "pd": 0, - "title": "Jezus malusie\u0144ki" - } - }, - { - "pk": 549, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "jezeli-ci-pan-nie-zbuduje-domu", - "pd": 0, - "title": "Je\u017celi ci Pan nie zbuduje domu" - } - }, - { - "pk": 550, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "jezeli-kiedy-w-tej-mojej-krainie", - "pd": 0, - "title": "Je\u017celi kiedy w tej mojej krainie" - } - }, - { - "pk": 406, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "jezyk-trolli", - "pd": null, - "title": "J\u0119zyk Trolli" - } - }, - { - "pk": 511, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "juliusz-cezar", - "pd": 0, - "title": "Juliusz Cezar" - } - }, - { - "pk": 405, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "kalamburka", - "pd": null, - "title": "Kalamburka" - } - }, - { - "pk": 285, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander Kami\u0144ski", - "slug": "kamienie-na-szaniec", - "pd": 2049, - "title": "Kamienie na szaniec" - } - }, - { - "pk": 173, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Tadeusz Do\u0142\u0119ga-Mostowicz", - "slug": "kariera-nikodema-dyzmy", - "pd": 0, - "title": "Kariera Nikodema Dyzmy" - } - }, - { - "pk": 312, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Teofil Lenartowicz", - "slug": "kasia", - "pd": 0, - "title": "Kasia" - } - }, - { - "pk": 69, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Be\u0142za", - "slug": "katechizm-polskiego-dziecka", - "pd": 0, - "title": "Katechizm polskiego dziecka" - } - }, - { - "pk": 526, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Piotr Skarga", - "slug": "kazania-sejmowe", - "pd": 0, - "title": "Kazania sejmowe" - } - }, - { - "pk": 551, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "kiedy-prawdziwie-polacy-powstana", - "pd": 0, - "title": "Kiedy prawdziwie Polacy powstan\u0105" - } - }, - { - "pk": 441, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "kilka-slow-o-kobietach", - "pd": 0, - "title": "Kilka s\u0142\u00f3w o kobietach" - } - }, - { - "pk": 442, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "kilka-uwag-nad-powiescia", - "pd": 0, - "title": "Kilka uwag nad powie\u015bci\u0105" - } - }, - { - "pk": 319, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "klechdy-polskie", - "pd": 0, - "title": "Klechdy polskie" - } - }, - { - "pk": 320, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "klechdy-sezamowe", - "pd": 0, - "title": "Klechdy sezamowe" - } - }, - { - "pk": 21, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "klejnoty", - "pd": 0, - "title": "Klejnoty" - } - }, - { - "pk": 420, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "kleopatra-i-cezar", - "pd": 0, - "title": "Kleopatra i Cezar" - } - }, - { - "pk": 614, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander \u015awi\u0119tochowski", - "slug": "klub-szachistow", - "pd": 0, - "title": "Klub szachist\u00f3w" - } - }, - { - "pk": 393, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "klamczucha", - "pd": null, - "title": "K\u0142amczucha" - } - }, - { - "pk": 132, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "knajpa", - "pd": 0, - "title": "Knajpa" - } - }, - { - "pk": 187, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stefan Grabi\u0144ski", - "slug": "kochanka-szamoty", - "pd": 0, - "title": "Kochanka Szamoty" - } - }, - { - "pk": 117, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "kolysanki", - "pd": 0, - "title": "Ko\u0142ysanki" - } - }, - { - "pk": 133, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "kolysanki-pedem", - "pd": 0, - "title": "Ko\u0142ysanki p\u0119dem" - } - }, - { - "pk": 421, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "komedia", - "pd": 0, - "title": "Komedia" - } - }, - { - "pk": 492, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "komediantka", - "pd": 0, - "title": "Komediantka" - } - }, - { - "pk": 493, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "komurasaki", - "pd": 0, - "title": "Komurasaki" - } - }, - { - "pk": 134, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "koniec-rewolucji", - "pd": 0, - "title": "Koniec rewolucji" - } - }, - { - "pk": 482, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Kazimierz Przerwa-Tetmajer", - "slug": "koniec-wieku", - "pd": 2011, - "title": "Koniec wieku" - } - }, - { - "pk": 107, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "kopciuszek", - "pd": 0, - "title": "Kopciuszek" - } - }, - { - "pk": 89, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "kot-w-butach", - "pd": 0, - "title": "Kot w butach" - } - }, - { - "pk": 22, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "koty", - "pd": 0, - "title": "Koty" - } - }, - { - "pk": 321, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "krajobraz-utracony", - "pd": 0, - "title": "Krajobraz utracony" - } - }, - { - "pk": 681, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Gloger Zygmunt", - "slug": "krakowiaczek-jeden", - "pd": 0, - "title": "Krakowiaczek jeden" - } - }, - { - "pk": 658, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jan Kozakiewicz", - "slug": "krew-nasza-dlugo-leja-katy", - "pd": 0, - "title": "Krew nasz\u0105 d\u0142ugo lej\u0105 katy" - } - }, - { - "pk": 299, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Tadeusz Konwicki", - "slug": "kronika-wypadkow-milosnych", - "pd": null, - "title": "Kronika wypadk\u00f3w mi\u0142osnych" - } - }, - { - "pk": 90, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "krol-drozdobrody", - "pd": 0, - "title": "Kr\u00f3l Drozdobrody" - } - }, - { - "pk": 512, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "krol-lear", - "pd": 0, - "title": "Kr\u00f3l Lear" - } - }, - { - "pk": 91, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "krolewna-sniezka", - "pd": 0, - "title": "Kr\u00f3lewna \u015anie\u017cka" - } - }, - { - "pk": 486, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Miko\u0142aj Rej", - "slug": "krotka-rozprawa-miedzy-panem-wojtem-i-plebanem", - "pd": 0, - "title": "Kr\u00f3tka rozprawa mi\u0119dzy panem, w\u00f3jtem i plebanem" - } - }, - { - "pk": 413, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Daniel Naborowski", - "slug": "krotkosc-zywota", - "pd": 0, - "title": "Kr\u00f3tko\u015b\u0107 \u017cywota" - } - }, - { - "pk": 108, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "krysztalowa-kula", - "pd": 0, - "title": "Kryszta\u0142owa kula" - } - }, - { - "pk": 494, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "krzyk", - "pd": 0, - "title": "Krzyk" - } - }, - { - "pk": 322, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "krzywda", - "pd": 0, - "title": "Krzywda" - } - }, - { - "pk": 521, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Henryk Sienkiewicz", - "slug": "krzyzacy", - "pd": 0, - "title": "Krzy\u017cacy" - } - }, - { - "pk": 82, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "ksiega-hioba", - "pd": 0, - "title": "Ksi\u0119ga Hioba" - } - }, - { - "pk": 73, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "ksiega-rodzaju", - "pd": 0, - "title": "Ksi\u0119ga Rodzaju" - } - }, - { - "pk": 291, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jan Kasprowicz", - "slug": "ksiega-ubogich", - "pd": 0, - "title": "Ksi\u0119ga ubogich" - } - }, - { - "pk": 552, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "ksiezyc", - "pd": 0, - "title": "Ksi\u0119\u017cyc" - } - }, - { - "pk": 464, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Wac\u0142aw Potocki", - "slug": "kto-mocniejszy-ten-lepszy", - "pd": 0, - "title": "Kto mocniejszy, ten lepszy" - } - }, - { - "pk": 553, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "kulik", - "pd": 0, - "title": "Kulik" - } - }, - { - "pk": 394, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "kwiat-kalafiora", - "pd": null, - "title": "Kwiat kalafiora" - } - }, - { - "pk": 135, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "kwiecien-tych-co-bez-troski", - "pd": 0, - "title": "Kwiecie\u0144 tych co bez troski" - } - }, - { - "pk": 554, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "lambro", - "pd": 0, - "title": "Lambro" - } - }, - { - "pk": 308, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "lament-swietokrzyski", - "pd": 0, - "title": "Lament \u015bwi\u0119tokrzyski" - } - }, - { - "pk": 659, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Wincenty Pol", - "slug": "lecieliscie-z-drzewa", - "pd": 0, - "title": "Lecieli\u015bcie z drzewa" - } - }, - { - "pk": 136, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "legie-der-trauer", - "pd": 0, - "title": "Legie der Trauer" - } - }, - { - "pk": 660, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "legun-na-wojence", - "pd": 0, - "title": "Legun na wojence" - } - }, - { - "pk": 23, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "leta", - "pd": 0, - "title": "Leta" - } - }, - { - "pk": 349, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Clive Staples Lewis", - "slug": "lew-czarownica-i-stara-szafa", - "pd": null, - "title": "Lew, czarownica i stara szafa" - } - }, - { - "pk": 544, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "lilia-weneda", - "pd": 0, - "title": "Lilia Weneda" - } - }, - { - "pk": 137, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "liryka", - "pd": 0, - "title": "Liryka" - } - }, - { - "pk": 435, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Artur Oppman", - "slug": "lis-i-kurka", - "pd": 0, - "title": "Lis i kurka" - } - }, - { - "pk": 204, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "listy", - "pd": 0, - "title": "Listy" - } - }, - { - "pk": 303, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Zygmunt Krasi\u0144ski", - "slug": "krasinski-listy", - "pd": 0, - "title": "Listy" - } - }, - { - "pk": 24, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "litanie-do-szatana", - "pd": 0, - "title": "Litanie Do Szatana" - } - }, - { - "pk": 25, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "lola-de-valence", - "pd": 0, - "title": "Lola De Valence" - } - }, - { - "pk": 411, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Vladimir Nabokov", - "slug": "lolita", - "pd": null, - "title": "Lolita" - } - }, - { - "pk": 555, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "los-mie-juz-zaden-nie-moze-zatrwozyc", - "pd": 0, - "title": "Los mi\u0119 ju\u017c \u017caden nie mo\u017ce zatrwo\u017cy\u0107" - } - }, - { - "pk": 483, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Kazimierz Przerwa-Tetmajer", - "slug": "ludzie-miotaja-sie", - "pd": 2011, - "title": "Ludzie miotaj\u0105 si\u0119" - } - }, - { - "pk": 638, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "lulajze-jezuniu", - "pd": 0, - "title": "Lulaj\u017ce Jezuniu" - } - }, - { - "pk": 26, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "labedz", - "pd": 0, - "title": "\u0141ab\u0119d\u017a" - } - }, - { - "pk": 177, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Fiodor Dostojewski", - "slug": "lagodna", - "pd": 2049, - "title": "\u0141agodna" - } - }, - { - "pk": 513, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "makbet", - "pd": 0, - "title": "Makbet" - } - }, - { - "pk": 182, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander Fredro", - "slug": "malpa-w-kapieli", - "pd": 0, - "title": "Ma\u0142pa w k\u0105pieli" - } - }, - { - "pk": 509, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Antoine de Saint Exup\u00e9ry", - "slug": "maly-ksiaze", - "pd": null, - "title": "Ma\u0142y ksi\u0105\u017c\u0119" - } - }, - { - "pk": 290, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grzegorz Kasdepke", - "slug": "mam-prawo-czyli-nieomal-wszystko-co-powinniscie-wiedziec-o-prawach-dziecka-a-nie-macie-kogo-zapytac", - "pd": null, - "title": "Mam prawo! Czyli nieomal wszystko, co powinni\u015bcie wiedzie\u0107 o prawach dziecka, a nie macie kogo zapyta\u0107" - } - }, - { - "pk": 443, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "maria", - "pd": 0, - "title": "Maria" - } - }, - { - "pk": 414, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Daniel Naborowski", - "slug": "marnosc", - "pd": 0, - "title": "Marno\u015b\u0107" - } - }, - { - "pk": 444, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "marta", - "pd": 0, - "title": "Marta" - } - }, - { - "pk": 27, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "marzenie-ciekawego", - "pd": 0, - "title": "Marzenie Ciekawego" - } - }, - { - "pk": 626, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Ignacy Witkiewicz", - "slug": "matka", - "pd": 0, - "title": "Matka" - } - }, - { - "pk": 661, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Wincenty Pol", - "slug": "mazur", - "pd": 0, - "title": "Mazur" - } - }, - { - "pk": 655, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "mazurek-dabrowskiego", - "pd": 0, - "title": "Mazurek D\u0105browskiego" - } - }, - { - "pk": 445, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "meir-ezofowicz", - "pd": 0, - "title": "Meir Ezofowicz" - } - }, - { - "pk": 639, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stefan Bordkiewicz", - "slug": "medrcy-swiata", - "pd": 0, - "title": "M\u0119drcy \u015bwiata" - } - }, - { - "pk": 433, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ren\u00e9 Goscinny, Jean-Jacques Semp\u00e9", - "slug": "mikolajek", - "pd": null, - "title": "Miko\u0142ajek" - } - }, - { - "pk": 470, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "milknace-glosy", - "pd": 0, - "title": "Milkn\u0105ce g\u0142osy" - } - }, - { - "pk": 323, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "milosc-stroskana", - "pd": 0, - "title": "Milo\u015b\u0107 stroskana" - } - }, - { - "pk": 297, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Maria Konopnicka", - "slug": "milosierdzie-gminy", - "pd": 0, - "title": "Mi\u0142osierdzie gminy" - } - }, - { - "pk": 28, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "milosc-klamstwa", - "pd": 0, - "title": "Mi\u0142o\u015b\u0107 K\u0142amstwa" - } - }, - { - "pk": 446, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "mirtala", - "pd": 0, - "title": "Mirtala" - } - }, - { - "pk": 111, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Micha\u0142 Bu\u0142hakow", - "slug": "mistrz-i-malgorzata", - "pd": null, - "title": "Mistrz i Ma\u0142gorzata" - } - }, - { - "pk": 640, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Teofil Lenartowicz", - "slug": "mizerna-cicha", - "pd": 0, - "title": "Mizerna, cicha" - } - }, - { - "pk": 29, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "modlitwa-do-szatana", - "pd": 0, - "title": "Modlitwa Do Szatana" - } - }, - { - "pk": 30, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "moesta-et-errabunda", - "pd": 0, - "title": "Moesta Et Errabunda" - } - }, - { - "pk": 422, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "moja-ojczyzna", - "pd": 0, - "title": "Moja ojczyzna" - } - }, - { - "pk": 138, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "moje-zaduszki", - "pd": 0, - "title": "Moje Zaduszki" - } - }, - { - "pk": 302, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ignacy Krasicki", - "slug": "monachomachia", - "pd": 0, - "title": "Monachomachia" - } - }, - { - "pk": 556, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "moj-adamito-widzisz-jak-to-trudne", - "pd": 0, - "title": "M\u00f3j Adamito \u2014 widzisz, jak to trudne" - } - }, - { - "pk": 31, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "muzyka", - "pd": 0, - "title": "Muzyka" - } - }, - { - "pk": 92, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "muzykanci-z-bremy", - "pd": 0, - "title": "Muzykanci z Bremy" - } - }, - { - "pk": 457, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Bronis\u0142awa Ostrowska", - "slug": "myszka", - "pd": 0, - "title": "Myszka" - } - }, - { - "pk": 507, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Roman Dmowski", - "slug": "mysli-nowoczesnego-polaka", - "pd": 0, - "title": "My\u015bli nowoczesnego Polaka" - } - }, - { - "pk": 557, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "na-drzewie-zawisl-waz", - "pd": 0, - "title": "Na drzewie zawis\u0142 w\u0105\u017c" - } - }, - { - "pk": 615, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander \u015awi\u0119tochowski", - "slug": "na-pogrzebie", - "pd": 0, - "title": "Na pogrzebie" - } - }, - { - "pk": 558, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "na-sprowadzenie-prochow-napoleona", - "pd": 0, - "title": "Na sprowadzenie proch\u00f3w Napoleona" - } - }, - { - "pk": 471, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "na-wakacjach", - "pd": 0, - "title": "Na wakacjach" - } - }, - { - "pk": 662, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Edmund Wasilewski", - "slug": "na-wawel-na-wawel", - "pd": 0, - "title": "Na Wawel, na Wawel" - } - }, - { - "pk": 607, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "John Steinbeck", - "slug": "na-wschod-od-edenu", - "pd": 2056, - "title": "Na wsch\u00f3d od Edenu" - } - }, - { - "pk": 139, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "na-wsi", - "pd": 0, - "title": "Na wsi" - } - }, - { - "pk": 367, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "nad-woda-wielka-i-czysta", - "pd": 0, - "title": "Nad wod\u0105 wielk\u0105 i czyst\u0105" - } - }, - { - "pk": 389, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jan Andrzej Morsztyn", - "slug": "nagrobek-kusiowi", - "pd": 0, - "title": "Nagrobek Kusiowi" - } - }, - { - "pk": 680, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Emil Zola", - "slug": "nana", - "pd": 2046, - "title": "Nana" - } - }, - { - "pk": 627, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Ignacy Witkiewicz", - "slug": "narkotyki", - "pd": 0, - "title": "Narkotyki" - } - }, - { - "pk": 559, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "narodzie-moj", - "pd": 0, - "title": "Narodzie m\u00f3j" - } - }, - { - "pk": 560, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "nastal-moj-mily-wiek-eschylesowy", - "pd": 0, - "title": "Nasta\u0142, m\u00f3j mi\u0142y, wiek Eschylesowy" - } - }, - { - "pk": 472, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "nawrocony", - "pd": 0, - "title": "Nawr\u00f3cony" - } - }, - { - "pk": 140, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "nic-wiecej", - "pd": 0, - "title": "Nic wi\u0119cej" - } - }, - { - "pk": 561, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "nie-wiadomo-co-czyli-romantycznosc", - "pd": 0, - "title": "Nie wiadomo co, czyli Romantyczno\u015b\u0107" - } - }, - { - "pk": 484, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Kazimierz Przerwa-Tetmajer", - "slug": "nie-wierze-w-nic", - "pd": 2011, - "title": "Nie wierz\u0119 w nic" - } - }, - { - "pk": 562, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "niedawno-jeszcze-kiedym-spoczywal-uspiony", - "pd": 0, - "title": "Niedawno jeszcze \u2014 kiedym spoczywa\u0142 u\u015bpiony" - } - }, - { - "pk": 563, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "niedawno-jeszcze-wasze-mogily", - "pd": 0, - "title": "Niedawno jeszcze wasze mogi\u0142y" - } - }, - { - "pk": 324, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "niegdys-dom-moj-ochoczy", - "pd": 0, - "title": "Niegdy\u015b dom m\u00f3j ochoczy" - } - }, - { - "pk": 281, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Jachowicz", - "slug": "niegrzeczna-andzia", - "pd": 0, - "title": "Niegrzeczna Andzia" - } - }, - { - "pk": 141, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "nienazwane-niejasne", - "pd": 0, - "title": "Nienazwane niejasne" - } - }, - { - "pk": 368, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "niepewnosc", - "pd": 0, - "title": "Niepewno\u015b\u0107" - } - }, - { - "pk": 32, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "niepowodzenie", - "pd": 0, - "title": "Niepowodzenie" - } - }, - { - "pk": 465, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Wac\u0142aw Potocki", - "slug": "nierzadem-polska-stoi", - "pd": 0, - "title": "Nierz\u0105dem Polska stoi" - } - }, - { - "pk": 418, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Edmund Niziurski", - "slug": "niewiarygodne-przygody-marka-piegusa", - "pd": null, - "title": "Niewiarygodne przygody Marka Piegusa" - } - }, - { - "pk": 485, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Kazimierz Przerwa-Tetmajer", - "slug": "niewierny", - "pd": 2011, - "title": "Niewierny" - } - }, - { - "pk": 458, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Bronis\u0142awa Ostrowska", - "slug": "niezapominajka", - "pd": 0, - "title": "Niezapominajka" - } - }, - { - "pk": 307, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Milan Kundera", - "slug": "nieznosna-lekkosc-bytu", - "pd": null, - "title": "Niezno\u015bna lekko\u015b\u0107 bytu" - } - }, - { - "pk": 676, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Wyspia\u0144ski", - "slug": "noc-listopadowa", - "pd": 0, - "title": "Noc listopadowa" - } - }, - { - "pk": 423, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "noc-tysiaczna-druga", - "pd": 0, - "title": "Noc tysi\u0105czna druga" - } - }, - { - "pk": 398, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "noelka", - "pd": null, - "title": "Noelka" - } - }, - { - "pk": 142, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "nuta-na-dzwony", - "pd": 0, - "title": "Nuta na dzwony" - } - }, - { - "pk": 401, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "nutria-i-nerwus", - "pd": null, - "title": "Nutria i Nerwus" - } - }, - { - "pk": 93, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "o-diable-z-trzema-zlotymi-wlosami", - "pd": 0, - "title": "O Diable z trzema z\u0142otymi w\u0142osami" - } - }, - { - "pk": 94, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "o-dzielnym-krawczyku", - "pd": 0, - "title": "O dzielnym krawczyku" - } - }, - { - "pk": 298, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Maria Konopnicka", - "slug": "o-krasnoludkach-i-sierotce-marysi", - "pd": 0, - "title": "O krasnoludkach i sierotce Marysi" - } - }, - { - "pk": 95, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "o-mlodziencu-ktory-nie-znal-strachu", - "pd": 0, - "title": "O m\u0142odzie\u0144cu, kt\u00f3ry nie zna\u0142 strachu" - } - }, - { - "pk": 355, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "o-morze-zjawisk", - "pd": 0, - "title": "O morze zjawisk" - } - }, - { - "pk": 663, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Wac\u0142aw Dennhoff-Czarnocki", - "slug": "o-moj-rozmarynie", - "pd": 0, - "title": "O m\u00f3j rozmarynie" - } - }, - { - "pk": 144, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "o-niebie", - "pd": 0, - "title": "O niebie" - } - }, - { - "pk": 447, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "o-powiesciach-t-t-jeza", - "pd": 0, - "title": "O powie\u015bciach T. T. Je\u017ca" - } - }, - { - "pk": 143, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "o-swierszczach", - "pd": 0, - "title": "O \u015bwierszczach" - } - }, - { - "pk": 434, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Artur Oppman", - "slug": "o-warsie-i-sawie", - "pd": 0, - "title": "O Warsie i Sawie" - } - }, - { - "pk": 96, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "o-wilku-i-siedmiu-kozlatkach", - "pd": 0, - "title": "O wilku i siedmiu ko\u017al\u0105tkach" - } - }, - { - "pk": 325, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "o-zmierzchu", - "pd": 0, - "title": "O zmierzchu" - } - }, - { - "pk": 564, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "o-nieszczesliwa-o-uciemiezona", - "pd": 0, - "title": "O! nieszcz\u0119\u015bliwa! o! uciemi\u0119\u017cona" - } - }, - { - "pk": 145, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "obloki", - "pd": 0, - "title": "Ob\u0142oki" - } - }, - { - "pk": 463, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Platon", - "slug": "obrona-sokratesa", - "pd": 0, - "title": "Obrona Sokratesa" - } - }, - { - "pk": 146, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "od-dnia-do-dna", - "pd": 0, - "title": "Od dnia do dna" - } - }, - { - "pk": 565, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "oda-do-wolnosci", - "pd": 0, - "title": "Oda do wolno\u015bci" - } - }, - { - "pk": 34, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "oddzwieki", - "pd": 0, - "title": "Odd\u017awi\u0119ki" - } - }, - { - "pk": 147, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "odpowiedz", - "pd": 0, - "title": "Odpowied\u017a" - } - }, - { - "pk": 192, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Homer", - "slug": "odyseja", - "pd": 0, - "title": "Odyseja" - } - }, - { - "pk": 641, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "oj-maluski-maluski", - "pd": 0, - "title": "Oj, maluski, malu\u015bki" - } - }, - { - "pk": 566, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "ojciec-zadzumionych", - "pd": 0, - "title": "Ojciec zad\u017cumionych" - } - }, - { - "pk": 35, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "olbrzymka", - "pd": 0, - "title": "Olbrzymka" - } - }, - { - "pk": 36, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "opetanie", - "pd": 0, - "title": "Op\u0119tanie" - } - }, - { - "pk": 72, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "opis-stworzenia-swiata-i-czlowieka", - "pd": 0, - "title": "Opis stworzenia \u015bwiata i cz\u0142owieka" - } - }, - { - "pk": 396, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "opium-w-rosole", - "pd": null, - "title": "Opium w rosole" - } - }, - { - "pk": 148, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "opowiadanie", - "pd": 0, - "title": "Opowiadanie" - } - }, - { - "pk": 2, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Irit Amiel", - "slug": "osmaleni", - "pd": null, - "title": "Osmaleni" - } - }, - { - "pk": 664, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ludwik Pomian \u0141ubi\u0144ski", - "slug": "ostatni-mazur", - "pd": 0, - "title": "Ostatni mazur" - } - }, - { - "pk": 567, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "ostatnie-wspomnienie", - "pd": 0, - "title": "Ostatnie wspomnienie" - } - }, - { - "pk": 37, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "otchlan", - "pd": 0, - "title": "Otch\u0142a\u0144" - } - }, - { - "pk": 514, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "otello", - "pd": 0, - "title": "Otello" - } - }, - { - "pk": 569, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "oto-bog-ktory-lona-tajemnic-odmyka", - "pd": 0, - "title": "Oto B\u00f3g, kt\u00f3ry \u0142ona tajemnic odmyka" - } - }, - { - "pk": 508, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Henryk Rzewuski", - "slug": "pamiatki-soplicy", - "pd": 0, - "title": "Pami\u0105tki Soplicy" - } - }, - { - "pk": 70, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Miron Bia\u0142oszewski", - "slug": "pamietnik-z-powstania-warszawskiego", - "pd": 2054, - "title": "Pami\u0119tnik z powstania warszawskiego" - } - }, - { - "pk": 460, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jan Chryzostom Pasek", - "slug": "pamietniki", - "pd": 0, - "title": "Pami\u0119tniki" - } - }, - { - "pk": 181, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Gustaw Flaubert", - "slug": "pani-bovary", - "pd": 2062, - "title": "Pani Bovary" - } - }, - { - "pk": 369, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "pani-czy-dziewczyna", - "pd": 0, - "title": "Pani czy dziewczyna" - } - }, - { - "pk": 448, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "pani-luiza", - "pd": 0, - "title": "Pani Luiza" - } - }, - { - "pk": 449, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "panna-antonina", - "pd": 0, - "title": "Panna Antonina" - } - }, - { - "pk": 450, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "panna-roza", - "pd": 0, - "title": "Panna R\u00f3\u017ca" - } - }, - { - "pk": 278, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jaros\u0142aw Iwaszkiewicz", - "slug": "panny-z-wilka", - "pd": 2051, - "title": "Panny z Wilka" - } - }, - { - "pk": 570, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "paryz", - "pd": 0, - "title": "Pary\u017c" - } - }, - { - "pk": 293, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jan Kochanowski", - "slug": "paslterz-dawidow", - "pd": 0, - "title": "Pas\u0142terz Dawid\u00f3w" - } - }, - { - "pk": 183, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander Fredro", - "slug": "pawel-i-gawel", - "pd": 0, - "title": "Pawe\u0142 i Gawe\u0142" - } - }, - { - "pk": 149, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "paysage-nocturne", - "pd": 0, - "title": "Paysage nocturne" - } - }, - { - "pk": 38, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "pekniety-dzwon", - "pd": 0, - "title": "P\u0119kni\u0119ty Dzwon" - } - }, - { - "pk": 618, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Makepeace Thackeray", - "slug": "pierscien-i-roza", - "pd": 0, - "title": "Pier\u015bcie\u0144 i r\u00f3\u017ca" - } - }, - { - "pk": 424, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "pierscien-wielkiej-damy-czyli-ex-machina-durejko", - "pd": 0, - "title": "Pier\u015bcie\u0144 Wielkiej Damy, czyli Ex-machina Durejko" - } - }, - { - "pk": 81, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "piesn-nad-piesniami", - "pd": 0, - "title": "Pie\u015b\u0144 nad pie\u015bniami" - } - }, - { - "pk": 150, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "piesn-o-niedobrej-burzy", - "pd": 0, - "title": "Pie\u015b\u0144 o niedobrej burzy" - } - }, - { - "pk": 461, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "piesn-o-rolandzie", - "pd": 2012, - "title": "Pie\u015b\u0144 o Rolandzie" - } - }, - { - "pk": 288, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Franciszek Karpi\u0144ski", - "slug": "piesn-poranna", - "pd": 0, - "title": "Pie\u015b\u0144 poranna" - } - }, - { - "pk": 390, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jan Andrzej Morsztyn", - "slug": "piesn-w-obozie-wojskowym-pod-zwancem", - "pd": 0, - "title": "Pie\u015b\u0144 w obozie wojskowym pod \u017bwa\u0144cem" - } - }, - { - "pk": 289, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Franciszek Karpi\u0144ski", - "slug": "piesn-wieczorna", - "pd": 0, - "title": "Pie\u015b\u0144 wieczorna" - } - }, - { - "pk": 39, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "piekno", - "pd": 0, - "title": "Pi\u0119kno" - } - }, - { - "pk": 40, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "piekny-statek", - "pd": 0, - "title": "Pi\u0119kny Statek" - } - }, - { - "pk": 116, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Carlo Collodi", - "slug": "pinokio", - "pd": null, - "title": "Pinokio" - } - }, - { - "pk": 151, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "piosenka-czeski-domek", - "pd": 0, - "title": "Piosenka czeski domek" - } - }, - { - "pk": 152, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "plan-akacji", - "pd": 0, - "title": "Plan akacji" - } - }, - { - "pk": 473, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "plesn-swiata", - "pd": 0, - "title": "Ple\u015b\u0144 \u015bwiata" - } - }, - { - "pk": 624, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Edmund Wasilewski", - "slug": "plynie-wisla-plynie", - "pd": 0, - "title": "P\u0142ynie Wis\u0142a, p\u0142ynie" - } - }, - { - "pk": 259, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "po-pyrrusa", - "pd": 0, - "title": "Po Pyrrusa" - } - }, - { - "pk": 665, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Wincenty Pol", - "slug": "pobudka", - "pd": 0, - "title": "Pobudka" - } - }, - { - "pk": 153, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "pod-dworcem-glownym-w-warszawie", - "pd": 0, - "title": "Pod Dworcem G\u0142\u00f3wnym w Warszawie" - } - }, - { - "pk": 41, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "podroz", - "pd": 0, - "title": "Podr\u00f3\u017c" - } - }, - { - "pk": 42, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "podroz-na-cytere", - "pd": 0, - "title": "Podr\u00f3\u017c Na Cyter\u0119" - } - }, - { - "pk": 286, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ryszard Kapu\u015bci\u0144ski", - "slug": "podroze-z-herodotem", - "pd": 2078, - "title": "Podr\u00f3\u017ce z Herodotem" - } - }, - { - "pk": 571, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "poeta-i-natchnienie", - "pd": 0, - "title": "Poeta i Natchnienie" - } - }, - { - "pk": 326, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "pogrzeb", - "pd": 0, - "title": "Pogrzeb" - } - }, - { - "pk": 327, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "pogrzeb-don-zuana", - "pd": 0, - "title": "Pogrzeb don \u017cuana" - } - }, - { - "pk": 572, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "pogrzeb-kapitana-meyznera", - "pd": 0, - "title": "Pogrzeb kapitana Meyznera" - } - }, - { - "pk": 154, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "polacy", - "pd": 0, - "title": "Polacy" - } - }, - { - "pk": 370, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "polaly-sie-lzy", - "pd": 0, - "title": "Pola\u0142y si\u0119 \u0142zy" - } - }, - { - "pk": 573, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "polska-polska-o-krolowa", - "pd": 0, - "title": "Polska! Polska! o! kr\u00f3lowa" - } - }, - { - "pk": 574, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "polsko-moja-tys-pierwsza-swiatu", - "pd": 0, - "title": "Polsko moja! ty\u015b pierwsza \u015bwiatu" - } - }, - { - "pk": 328, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "poludnie", - "pd": 0, - "title": "Po\u0142udnie" - } - }, - { - "pk": 371, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "popas-w-upicie", - "pd": 0, - "title": "Popas w Upicie" - } - }, - { - "pk": 451, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "porcelanka", - "pd": 0, - "title": "Porcelanka" - } - }, - { - "pk": 515, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "poskromienie-zlosnicy", - "pd": 0, - "title": "Poskromienie z\u0142o\u015bnicy" - } - }, - { - "pk": 43, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "poswiecam-ci-te-wiersze", - "pd": 0, - "title": "Po\u015bwi\u0119cam Ci Te Wiersze" - } - }, - { - "pk": 329, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "powrot", - "pd": 0, - "title": "Powr\u00f3t" - } - }, - { - "pk": 417, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Julian Ursyn Niemcewicz", - "slug": "powrot-posla", - "pd": 0, - "title": "Powr\u00f3t pos\u0142a" - } - }, - { - "pk": 666, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "pozegnanie", - "pd": 0, - "title": "Po\u017cegnanie" - } - }, - { - "pk": 628, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Ignacy Witkiewicz", - "slug": "pozegnanie-jesieni", - "pd": 0, - "title": "Po\u017cegnanie jesieni" - } - }, - { - "pk": 642, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "pojdzmy-wszyscy-do-stajenki", - "pd": 0, - "title": "P\u00f3jd\u017amy wszyscy do stajenki" - } - }, - { - "pk": 643, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "polnoc", - "pd": 0, - "title": "P\u00f3\u0142noc" - } - }, - { - "pk": 425, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "praca", - "pd": 0, - "title": "Praca" - } - }, - { - "pk": 284, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Franz Kafka", - "slug": "proces", - "pd": 2013, - "title": "Proces" - } - }, - { - "pk": 174, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Tadeusz Do\u0142\u0119ga-Mostowicz", - "slug": "profesor-wilczur", - "pd": 0, - "title": "Profesor Wilczur" - } - }, - { - "pk": 575, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "proroctwo", - "pd": 0, - "title": "Proroctwo" - } - }, - { - "pk": 330, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "prosba", - "pd": 0, - "title": "Pro\u015bba" - } - }, - { - "pk": 576, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "prowadzil-mnie-na-bardzo-ciemne-wezowisko", - "pd": 0, - "title": "Prowadzi\u0142 mnie na bardzo ciemne w\u0119\u017cowisko" - } - }, - { - "pk": 474, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "przed-kopernikiem", - "pd": 0, - "title": "Przed Kopernikiem" - } - }, - { - "pk": 495, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "przed-switem", - "pd": 0, - "title": "Przed \u015bwitem" - } - }, - { - "pk": 155, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "przedswit", - "pd": 0, - "title": "Przed\u015bwit" - } - }, - { - "pk": 577, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "przeklestwo", - "pd": 0, - "title": "Przekl\u0119stwo" - } - }, - { - "pk": 606, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Staszic", - "slug": "przestrogi-dla-polski", - "pd": 0, - "title": "Przestrogi dla Polski" - } - }, - { - "pk": 156, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "przez-kresy", - "pd": 0, - "title": "Przez kresy" - } - }, - { - "pk": 644, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "przybiezeli-do-betlejem", - "pd": 0, - "title": "Przybie\u017celi do Betlejem" - } - }, - { - "pk": 459, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jan Parandowski", - "slug": "przygody-odyseusza", - "pd": 2049, - "title": "Przygody Odyseusza" - } - }, - { - "pk": 331, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "przygody-sindbada-zeglarza", - "pd": 0, - "title": "Przygody Sindbada \u017beglarza" - } - }, - { - "pk": 620, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Mark Twain", - "slug": "przygody-tomka-sawyera", - "pd": 2054, - "title": "Przygody Tomka Sawyera" - } - }, - { - "pk": 74, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "przypowiesc-o-milosiernym-samarytaninie", - "pd": 0, - "title": "Przypowie\u015b\u0107 o mi\u0142osiernym Samarytaninie" - } - }, - { - "pk": 75, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "przypowiesc-o-pannach-roztropnych", - "pd": 0, - "title": "Przypowie\u015b\u0107 o pannach roztropnych" - } - }, - { - "pk": 76, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "przypowiesc-o-robotnikach-w-winnicy", - "pd": 0, - "title": "Przypowie\u015b\u0107 o robotnikach w winnicy" - } - }, - { - "pk": 77, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "przypowiesc-o-siewcy", - "pd": 0, - "title": "Przypowie\u015b\u0107 o siewcy" - } - }, - { - "pk": 78, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "przypowiesc-o-synu-marnotrawnym", - "pd": 0, - "title": "Przypowie\u015b\u0107 o synu marnotrawnym" - } - }, - { - "pk": 79, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "przypowiesc-o-talentach", - "pd": 0, - "title": "Przypowie\u015b\u0107 o talentach" - } - }, - { - "pk": 80, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "przypowiesc-o-ziarnku-gorczycy", - "pd": 0, - "title": "Przypowie\u015b\u0107 o ziarnku gorczycy" - } - }, - { - "pk": 399, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "pulpecja", - "pd": null, - "title": "Pulpecja" - } - }, - { - "pk": 332, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "puscila-po-stole-swawolacy-wianek", - "pd": 0, - "title": "Pu\u015bci\u0142a po stole swawol\u0105cy wianek" - } - }, - { - "pk": 372, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "renegat-ballada-turecka", - "pd": 0, - "title": "Renegat (ballada turecka)" - } - }, - { - "pk": 415, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Daniel Naborowski", - "slug": "respons-niespodziewany", - "pd": 0, - "title": "Respons niespodziewany" - } - }, - { - "pk": 436, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "George Orwell", - "slug": "rok-1984", - "pd": 2074, - "title": "Rok 1984" - } - }, - { - "pk": 44, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "romantyczny-zachod-slonca", - "pd": 0, - "title": "Romantyczny Zach\u00f3d S\u0142o\u0144ca" - } - }, - { - "pk": 109, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "roszpunka", - "pd": 0, - "title": "Roszpunka" - } - }, - { - "pk": 667, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Maria Konopnicka", - "slug": "rota", - "pd": 0, - "title": "Rota" - } - }, - { - "pk": 579, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "rozlaczenie", - "pd": 0, - "title": "Roz\u0142\u0105czenie" - } - }, - { - "pk": 668, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "August Bielowski", - "slug": "bielowski-rozlaczenie", - "pd": 0, - "title": "Roz\u0142\u0105czenie" - } - }, - { - "pk": 527, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "rozmowa-z-piramidami", - "pd": 0, - "title": "Rozmowa z piramidami" - } - }, - { - "pk": 157, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "rymy-pobozne", - "pd": 0, - "title": "Rymy pobo\u017cne" - } - }, - { - "pk": 516, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "ryszard-ii", - "pd": 0, - "title": "Ryszard II" - } - }, - { - "pk": 621, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Tyrtajos", - "slug": "rzecz-to-piekna", - "pd": 0, - "title": "Rzecz to pi\u0119kna" - } - }, - { - "pk": 580, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "rzym", - "pd": 0, - "title": "Rzym" - } - }, - { - "pk": 277, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Horacy", - "slug": "satyry", - "pd": 0, - "title": "Satyry" - } - }, - { - "pk": 496, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "seans", - "pd": 0, - "title": "Seans" - } - }, - { - "pk": 45, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "sed-non-satiata", - "pd": 0, - "title": "Sed Non Satiata" - } - }, - { - "pk": 523, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Henryk Sienkiewicz", - "slug": "selim-mirza", - "pd": 0, - "title": "Selim Mirza" - } - }, - { - "pk": 158, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "sen", - "pd": 0, - "title": "Sen" - } - }, - { - "pk": 475, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "prus-sen", - "pd": 0, - "title": "Sen" - } - }, - { - "pk": 517, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "sen-nocy-letniej", - "pd": 0, - "title": "Sen nocy letniej" - } - }, - { - "pk": 159, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "sen-sielski", - "pd": 0, - "title": "Sen sielski" - } - }, - { - "pk": 333, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "sen-wiejski", - "pd": 0, - "title": "Sen wiejski" - } - }, - { - "pk": 497, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "senne-dzieje", - "pd": 0, - "title": "Senne dzieje" - } - }, - { - "pk": 677, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Wyspia\u0144ski", - "slug": "sedziowie", - "pd": 0, - "title": "S\u0119dziowie" - } - }, - { - "pk": 46, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "skargi-jakiegos-ikara", - "pd": 0, - "title": "Skargi Jakiego\u015b Ikara" - } - }, - { - "pk": 386, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Moli\u00e8re", - "slug": "skapiec", - "pd": 0, - "title": "Sk\u0105piec" - } - }, - { - "pk": 520, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Bruno Schulz", - "slug": "sklepy-cynamonowe", - "pd": 2013, - "title": "Sklepy cynamonowe" - } - }, - { - "pk": 334, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "skonczonosc", - "pd": 0, - "title": "Sko\u0144czono\u015b\u0107" - } - }, - { - "pk": 335, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "skrzeble", - "pd": 0, - "title": "Skrzeble" - } - }, - { - "pk": 373, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "slowiczku-moj", - "pd": 0, - "title": "S\u0142owiczku m\u00f3j" - } - }, - { - "pk": 374, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "snuc-milosc", - "pd": 0, - "title": "Snu\u0107 mi\u0142o\u015b\u0107" - } - }, - { - "pk": 582, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "snycerz-byl-zatrudniony-dyjany-lepieniem", - "pd": 0, - "title": "Snycerz by\u0142 zatrudniony Dyjany lepieniem" - } - }, - { - "pk": 426, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "socjalizm", - "pd": 0, - "title": "Socjalizm" - } - }, - { - "pk": 310, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Lem", - "slug": "solaris", - "pd": 2077, - "title": "Solaris" - } - }, - { - "pk": 519, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "sonety", - "pd": 0, - "title": "Sonety" - } - }, - { - "pk": 375, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "sonety-odeskie", - "pd": 0, - "title": "Sonety odeskie" - } - }, - { - "pk": 583, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "sowinski-w-okopach-woli", - "pd": 0, - "title": "Sowi\u0144ski w okopach Woli" - } - }, - { - "pk": 47, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "spleen-i", - "pd": 0, - "title": "Spleen I" - } - }, - { - "pk": 48, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "spleen-ii", - "pd": 0, - "title": "Spleen II" - } - }, - { - "pk": 419, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Edmund Niziurski", - "slug": "sposob-na-alcybiadesa", - "pd": null, - "title": "Spos\u00f3b na Alcybiadesa" - } - }, - { - "pk": 336, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "spotykam-go-codziennie", - "pd": 0, - "title": "Spotykam go codziennie" - } - }, - { - "pk": 498, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "sprawiedliwie", - "pd": 0, - "title": "Sprawiedliwie" - } - }, - { - "pk": 409, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "sprezyna", - "pd": null, - "title": "Spr\u0119\u017cyna" - } - }, - { - "pk": 118, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "srebrne-nitki", - "pd": 0, - "title": "Srebrne nitki" - } - }, - { - "pk": 605, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "sroczka-kaszke-wazyla", - "pd": null, - "title": "Sroczka kaszk\u0119 wa\u017cy\u0142a" - } - }, - { - "pk": 305, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ignacy Kraszewski", - "slug": "stara-basn", - "pd": 0, - "title": "Stara Ba\u015b\u0144" - } - }, - { - "pk": 49, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "staruszeczki", - "pd": 0, - "title": "Staruszeczki" - } - }, - { - "pk": 294, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Oskar Kolberg", - "slug": "stary-niedzwiedz", - "pd": 0, - "title": "Stary nied\u017awied\u017a" - } - }, - { - "pk": 524, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Henryk Sienkiewicz", - "slug": "stary-sluga", - "pd": 0, - "title": "Stary s\u0142uga" - } - }, - { - "pk": 354, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Gabriel Garcia Marquez", - "slug": "sto-lat-samotnosci", - "pd": null, - "title": "Sto lat samotno\u015bci" - } - }, - { - "pk": 97, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "stoliczku-nakryj-sie", - "pd": 0, - "title": "Stoliczku nakryj si\u0119" - } - }, - { - "pk": 499, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "suka", - "pd": 0, - "title": "Suka" - } - }, - { - "pk": 50, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "sygnaly", - "pd": 0, - "title": "Sygna\u0142y" - } - }, - { - "pk": 160, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "synteza", - "pd": 0, - "title": "Synteza" - } - }, - { - "pk": 683, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stefan \u017beromski", - "slug": "syzyfowe-prace", - "pd": 0, - "title": "Syzyfowe prace" - } - }, - { - "pk": 352, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Kornel Makuszy\u0144ski", - "slug": "szatan-z-siodmej-klasy", - "pd": 2024, - "title": "Szatan z si\u00f3dmej klasy" - } - }, - { - "pk": 337, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "szczescie", - "pd": 0, - "title": "Szcz\u0119\u015bcie" - } - }, - { - "pk": 98, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "szesc-labedzi", - "pd": 0, - "title": "Sze\u015b\u0107 \u0142ab\u0119dzi" - } - }, - { - "pk": 669, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Gustawa Erynbergh", - "slug": "szlachta-w-roku-1831", - "pd": 0, - "title": "Szlachta w roku 1831" - } - }, - { - "pk": 392, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "szosta-klepka", - "pd": null, - "title": "Sz\u00f3sta klepka" - } - }, - { - "pk": 525, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Isaac Bashevis Singer", - "slug": "sztukmistrz-z-lublina", - "pd": null, - "title": "Sztukmistrz z Lublina" - } - }, - { - "pk": 161, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "smierc", - "pd": 0, - "title": "\u015amier\u0107" - } - }, - { - "pk": 500, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "reymont-smierc", - "pd": 0, - "title": "\u015amier\u0107" - } - }, - { - "pk": 338, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "smierc-buddy", - "pd": 0, - "title": "\u015amier\u0107 buddy" - } - }, - { - "pk": 51, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "smierc-kochankow", - "pd": 0, - "title": "\u015amier\u0107 Kochank\u00f3w" - } - }, - { - "pk": 52, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "smierc-nedzarzy", - "pd": 0, - "title": "\u015amier\u0107 N\u0119dzarzy" - } - }, - { - "pk": 339, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "smierc-wtora", - "pd": 0, - "title": "\u015amier\u0107 wt\u00f3ra" - } - }, - { - "pk": 584, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "smierc-co-trzynascie-lat-stala-kolo-mnie", - "pd": 0, - "title": "\u015amier\u0107, co trzyna\u015bcie \u0142at sta\u0142a ko\u0142o mnie" - } - }, - { - "pk": 581, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "sni-mi-sie-jakas-wielka-a-przez-wieki-idaca", - "pd": 0, - "title": "\u015ani mi si\u0119 jaka\u015b wielka a przez wieki id\u0105ca" - } - }, - { - "pk": 376, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "snila-sie-zima", - "pd": 0, - "title": "\u015ani\u0142a si\u0119 zima" - } - }, - { - "pk": 99, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "spiaca-krolewna", - "pd": 0, - "title": "\u015api\u0105ca kr\u00f3lewna" - } - }, - { - "pk": 670, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Rajnold Suchodolski", - "slug": "spiew", - "pd": 0, - "title": "\u015apiew" - } - }, - { - "pk": 162, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "spiewny-pocalunek", - "pd": 0, - "title": "\u015apiewny poca\u0142unek" - } - }, - { - "pk": 452, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "swiatlo-w-ruinach", - "pd": 0, - "title": "\u015awiat\u0142o w ruinach" - } - }, - { - "pk": 53, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "swit", - "pd": 0, - "title": "\u015awit" - } - }, - { - "pk": 163, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "ta-chwila", - "pd": 0, - "title": "Ta chwila" - } - }, - { - "pk": 178, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Artur Conan Doyle", - "slug": "tajemnica-baskervilleow", - "pd": 0, - "title": "Tajemnica Baskerville'\u00f3w" - } - }, - { - "pk": 112, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Frances Hodgson Burnett", - "slug": "tajemniczy-ogrod", - "pd": 2014, - "title": "Tajemniczy ogr\u00f3d" - } - }, - { - "pk": 585, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "tak-mi-boze-dopomoz", - "pd": 0, - "title": "Tak mi, Bo\u017ce, dopom\u00f3\u017c" - } - }, - { - "pk": 340, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "tango", - "pd": 0, - "title": "Tango" - } - }, - { - "pk": 283, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Irena Jurgielewiczowa", - "slug": "ten-obcy", - "pd": 2074, - "title": "Ten obcy" - } - }, - { - "pk": 586, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "ten-sam-duchowi-plomienny-szlak", - "pd": 0, - "title": "Ten sam duchowi p\u0142omienny szlak" - } - }, - { - "pk": 100, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "titelitury", - "pd": 0, - "title": "Titelitury" - } - }, - { - "pk": 164, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "to-wiem", - "pd": 0, - "title": "To wiem" - } - }, - { - "pk": 101, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "tomcio-paluszek", - "pd": 0, - "title": "Tomcio paluszek" - } - }, - { - "pk": 610, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Alfred Szklarski", - "slug": "tomek-w-krainie-kangurow", - "pd": 2063, - "title": "Tomek w krainie kangur\u00f3w" - } - }, - { - "pk": 165, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "torun", - "pd": 0, - "title": "Toru\u0144" - } - }, - { - "pk": 410, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Wies\u0142aw My\u015bliwski", - "slug": "traktat-o-luskaniu-fasoli", - "pd": null, - "title": "Traktat o \u0142uskaniu fasoli" - } - }, - { - "pk": 645, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "triumfy-krola-niebieskiego", - "pd": 0, - "title": "Triumfy Kr\u00f3la Niebieskiego" - } - }, - { - "pk": 282, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Karol Wojty\u0142a", - "slug": "tryptyk-rzymski", - "pd": 2076, - "title": "Tryptyk Rzymski" - } - }, - { - "pk": 377, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "trzech-budrysow", - "pd": 0, - "title": "Trzech Budrys\u00f3w" - } - }, - { - "pk": 671, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "trzeci-maj-litwina", - "pd": 0, - "title": "Trzeci Maj Litwina" - } - }, - { - "pk": 341, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "tu-jestem", - "pd": 0, - "title": "Tu jestem" - } - }, - { - "pk": 378, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "tukaj", - "pd": 0, - "title": "Tukaj" - } - }, - { - "pk": 616, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Aleksander \u015awi\u0119tochowski", - "slug": "twingo", - "pd": 0, - "title": "Twingo" - } - }, - { - "pk": 342, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "twoj-portret", - "pd": 0, - "title": "Tw\u00f3j portret" - } - }, - { - "pk": 587, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "ty-glos-cierpiacy-podnies-i-niech-w-tobie", - "pd": 0, - "title": "Ty g\u0142os cierpi\u0105cy podnie\u015b \u2014 i niech w tobie" - } - }, - { - "pk": 404, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "tygrys-i-roza", - "pd": null, - "title": "Tygrys i R\u00f3\u017ca" - } - }, - { - "pk": 379, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "uciec-z-dusza-na-listek", - "pd": 0, - "title": "Uciec z dusz\u0105 na listek" - } - }, - { - "pk": 380, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "ucieczka", - "pd": 0, - "title": "Ucieczka" - } - }, - { - "pk": 672, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Franciszek Kowalski", - "slug": "ulan-i-dziewczyna", - "pd": 0, - "title": "U\u0142an i dziewczyna" - } - }, - { - "pk": 588, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "uspokojenie", - "pd": 0, - "title": "Uspokojenie" - } - }, - { - "pk": 343, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "usta-i-oczy", - "pd": 0, - "title": "Usta i oczy" - } - }, - { - "pk": 623, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jules Gabriel Verne", - "slug": "w-80-dni-dokola-swiata", - "pd": 0, - "title": "W 80 dni doko\u0142a \u015bwiata" - } - }, - { - "pk": 590, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "w-albumie-e-hr-krasinskiej", - "pd": 0, - "title": "W albumie E. hr. Krasi\u0144skiej" - } - }, - { - "pk": 166, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "w-boju", - "pd": 0, - "title": "W boju" - } - }, - { - "pk": 188, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stefan Grabi\u0144ski", - "slug": "w-domu-sary", - "pd": 0, - "title": "W domu Sary" - } - }, - { - "pk": 591, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "w-dziecinne-moje-cudne-lata", - "pd": 0, - "title": "W dziecinne moje cudne lata" - } - }, - { - "pk": 381, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "w-imienniku-celiny-szymanowskiej", - "pd": 0, - "title": "W imienniku Celiny Szymanowskiej" - } - }, - { - "pk": 476, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "w-ogrodzie-saskim", - "pd": 0, - "title": "W Ogrodzie Saskim" - } - }, - { - "pk": 592, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "w-ostatni-dzien-w-ostatni-dzien", - "pd": 0, - "title": "W ostatni dzie\u0144 \u2014 w ostatni dzie\u0144" - } - }, - { - "pk": 501, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "w-palarni-opium", - "pd": 0, - "title": "W palarni opium" - } - }, - { - "pk": 593, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "w-pamietniku-zofii-bobrowny", - "pd": 0, - "title": "W pami\u0119tniku Zofii Bobr\u00f3wny" - } - }, - { - "pk": 594, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "w-sztambuchu-marii-wodzinskiej", - "pd": 0, - "title": "W sztambuchu Marii Wodzi\u0144skiej" - } - }, - { - "pk": 589, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "w-szwajcarii", - "pd": 0, - "title": "W Szwajcarii" - } - }, - { - "pk": 428, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "w-weronie", - "pd": 0, - "title": "W Weronie" - } - }, - { - "pk": 453, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "w-zimowy-wieczor", - "pd": 0, - "title": "W zimowy wiecz\u00f3r" - } - }, - { - "pk": 646, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Piotr Skarga", - "slug": "w-zlobie-lezy", - "pd": 0, - "title": "W \u017c\u0142obie le\u017cy" - } - }, - { - "pk": 595, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "waclaw", - "pd": 0, - "title": "Wac\u0142aw" - } - }, - { - "pk": 502, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "wampir", - "pd": 0, - "title": "Wampir" - } - }, - { - "pk": 427, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "wanda", - "pd": 0, - "title": "Wanda" - } - }, - { - "pk": 673, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "warszawianka", - "pd": 0, - "title": "Warszawianka" - } - }, - { - "pk": 678, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Wyspia\u0144ski", - "slug": "wyspianski-warszawianka", - "pd": 0, - "title": "Warszawianka" - } - }, - { - "pk": 674, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "warszawianka-1831", - "pd": 0, - "title": "Warszawianka 1831" - } - }, - { - "pk": 675, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "warszawianka-1905", - "pd": 0, - "title": "Warszawianka 1905" - } - }, - { - "pk": 344, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "wczesnym-rankiem", - "pd": 0, - "title": "Wczesnym rankiem" - } - }, - { - "pk": 503, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "we-mglach", - "pd": 0, - "title": "We mg\u0142ach" - } - }, - { - "pk": 518, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "William Shakespeare", - "slug": "wesole-kumoszki-z-windsoru", - "pd": 0, - "title": "Weso\u0142e kumoszki z Windsoru" - } - }, - { - "pk": 54, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "wesoly-zmarly", - "pd": 0, - "title": "Weso\u0142y Zmar\u0142y" - } - }, - { - "pk": 167, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "westchnienie", - "pd": 0, - "title": "Westchnienie" - } - }, - { - "pk": 55, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "widmo", - "pd": 0, - "title": "Widmo" - } - }, - { - "pk": 168, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "widzenie", - "pd": 0, - "title": "Widzenie" - } - }, - { - "pk": 477, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "widziadla", - "pd": 0, - "title": "Widziad\u0142a" - } - }, - { - "pk": 596, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "wielcysmy-byli-i-smiesznismy-byli", - "pd": 0, - "title": "Wielcy\u015bmy byli i \u015bmieszni\u015bmy byli" - } - }, - { - "pk": 102, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "wierny-jan", - "pd": 0, - "title": "Wierny Jan" - } - }, - { - "pk": 345, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "wiersz-konny", - "pd": 0, - "title": "Wiersz konny" - } - }, - { - "pk": 169, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "wiersz-o-smierci", - "pd": 0, - "title": "Wiersz o \u015bmierci" - } - }, - { - "pk": 597, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "wierze", - "pd": 0, - "title": "Wierz\u0119" - } - }, - { - "pk": 598, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "wiesz-panie-i-zem-zbiegal-swiat-szeroki", - "pd": 0, - "title": "Wiesz, Panie, i \u017cem zbiega\u0142 \u015bwiat szeroki" - } - }, - { - "pk": 170, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "wiezien-milosci", - "pd": 0, - "title": "Wi\u0119zie\u0144 mi\u0142o\u015bci" - } - }, - { - "pk": 56, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "wino-galganiarzy", - "pd": 0, - "title": "Wino Ga\u0142ganiarzy" - } - }, - { - "pk": 57, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "wino-mordercy", - "pd": 0, - "title": "Wino Mordercy" - } - }, - { - "pk": 58, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "wino-samotnika", - "pd": 0, - "title": "Wino Samotnika" - } - }, - { - "pk": 295, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Oskar Kolberg", - "slug": "wlazl-kotek-na-plotek", - "pd": 0, - "title": "Wlaz\u0142 kotek na p\u0142otek" - } - }, - { - "pk": 617, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Dorota Terakowska", - "slug": "wladca-lewawu", - "pd": 2075, - "title": "W\u0142adca Lewawu" - } - }, - { - "pk": 59, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "wrog", - "pd": 0, - "title": "Wr\u00f3g" - } - }, - { - "pk": 186, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Wiktor Gomulicki", - "slug": "wspomnienia-niebieskiego-mundurka", - "pd": 0, - "title": "Wspomnienia niebieskiego mundurka" - } - }, - { - "pk": 599, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "wspomnienie-pani-de-st-marcel-z-domu-chauveaux", - "pd": 0, - "title": "Wspomnienie pani de St Marcel z domu Chauveaux" - } - }, - { - "pk": 600, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "wstal-anhelli-z-grobu-za-nim-wszystkie-duchy", - "pd": 0, - "title": "Wsta\u0142 Anhelli z grobu \u2014 za nim wszystkie duchy" - } - }, - { - "pk": 647, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "wsrod-nocnej-ciszy", - "pd": 0, - "title": "W\u015br\u00f3d nocnej ciszy" - } - }, - { - "pk": 601, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "wyjdzie-stu-robotnikow", - "pd": 0, - "title": "Wyjdzie stu robotnik\u00f3w" - } - }, - { - "pk": 346, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "wyruszyla-dusza-w-droge", - "pd": 0, - "title": "Wyruszy\u0142a dusza w drog\u0119" - } - }, - { - "pk": 60, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "wyrzut-posmiertny", - "pd": 0, - "title": "Wyrzut Po\u015bmiertny" - } - }, - { - "pk": 608, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Robert Louis Stevenson", - "slug": "wyspa-skarbow", - "pd": 0, - "title": "Wyspa skarb\u00f3w" - } - }, - { - "pk": 679, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Stanis\u0142aw Wyspia\u0144ski", - "slug": "wyzwolenie", - "pd": 0, - "title": "Wyzwolenie" - } - }, - { - "pk": 61, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "wzlot", - "pd": 0, - "title": "Wzlot" - } - }, - { - "pk": 478, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "z-bielan", - "pd": 0, - "title": "Z Bielan" - } - }, - { - "pk": 292, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Jan Kasprowicz", - "slug": "z-chalupy", - "pd": 0, - "title": "Z cha\u0142upy" - } - }, - { - "pk": 602, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "z-listu-do-ksiegarza", - "pd": 0, - "title": "Z listu do ksi\u0119garza" - } - }, - { - "pk": 648, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "autor nieznany", - "slug": "z-narodzenia-pana", - "pd": 0, - "title": "Z narodzenia Pana" - } - }, - { - "pk": 504, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "z-pamietnika", - "pd": 0, - "title": "Z pami\u0119tnika" - } - }, - { - "pk": 505, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "z-wedrowek-haruna-al-reszyda", - "pd": 0, - "title": "Z w\u0119dr\u00f3wek Haruna al Reszyda" - } - }, - { - "pk": 479, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Prus", - "slug": "z-wypracowan-malego-frania", - "pd": 0, - "title": "Z wypracowa\u0144 ma\u0142ego Frania" - } - }, - { - "pk": 429, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Cyprian Kamil Norwid", - "slug": "za-kulisami", - "pd": 0, - "title": "Za kulisami" - } - }, - { - "pk": 506, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", - "slug": "zabilem", - "pd": 0, - "title": "Zabi\u0142em" - } - }, - { - "pk": 347, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "zachod", - "pd": 0, - "title": "Zach\u00f3d" - } - }, - { - "pk": 603, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "zachwycenie", - "pd": 0, - "title": "Zachwycenie" - } - }, - { - "pk": 62, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "zapach-egzotyczny", - "pd": 0, - "title": "Zapach Egzotyczny" - } - }, - { - "pk": 63, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "zaproszenie-do-podrozy", - "pd": 0, - "title": "Zaproszenie Do Podr\u00f3\u017cy" - } - }, - { - "pk": 296, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Oskar Kolberg", - "slug": "zasiali-gorale", - "pd": 0, - "title": "Zasiali g\u00f3rale" - } - }, - { - "pk": 348, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Boles\u0142aw Le\u015bmian", - "slug": "zboj", - "pd": 0, - "title": "Zb\u00f3j" - } - }, - { - "pk": 176, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Fiodor Dostojewski", - "slug": "zbrodnia-i-kara", - "pd": 2027, - "title": "Zbrodnia i kara" - } - }, - { - "pk": 382, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "zdania-i-uwagi", - "pd": 0, - "title": "Zdania i uwagi" - } - }, - { - "pk": 300, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Hanna Krall", - "slug": "zdazyc-przed-panem-bogiem", - "pd": null, - "title": "Zd\u0105\u017cy\u0107 przed Panem Bogiem" - } - }, - { - "pk": 454, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "zefirek", - "pd": 0, - "title": "Zefirek" - } - }, - { - "pk": 64, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "zegar", - "pd": 0, - "title": "Zegar" - } - }, - { - "pk": 383, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "zima-w-miescie", - "pd": 0, - "title": "Zima w mie\u015bcie" - } - }, - { - "pk": 103, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "zlodziej-nad-zlodziejami", - "pd": 0, - "title": "Z\u0142odziej nad z\u0142odziejami" - } - }, - { - "pk": 455, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Eliza Orzeszkowa", - "slug": "zlota-nitka", - "pd": 0, - "title": "Z\u0142ota nitka" - } - }, - { - "pk": 175, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Tadeusz Do\u0142\u0119ga-Mostowicz", - "slug": "znachor", - "pd": 0, - "title": "Znachor" - } - }, - { - "pk": 65, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "zniszczenie", - "pd": 0, - "title": "Zniszczenie" - } - }, - { - "pk": 66, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "zwloki", - "pd": 0, - "title": "Zw\u0142oki" - } - }, - { - "pk": 407, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Ma\u0142gorzata Musierowicz", - "slug": "zaba", - "pd": null, - "title": "\u017baba" - } - }, - { - "pk": 104, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Grimm Bracia", - "slug": "zabi-krol", - "pd": 0, - "title": "\u017babi kr\u00f3l" - } - }, - { - "pk": 171, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "J\u00f3zef Czechowicz", - "slug": "zal", - "pd": 0, - "title": "\u017bal" - } - }, - { - "pk": 384, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Adam Mickiewicz", - "slug": "zeglarz", - "pd": 0, - "title": "\u017beglarz" - } - }, - { - "pk": 604, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Juliusz S\u0142owacki", - "slug": "zmija", - "pd": 0, - "title": "\u017bmija" - } - }, - { - "pk": 67, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Charles Baudleaire", - "slug": "zywa-pochodnia", - "pd": 0, - "title": "\u017bywa Pochodnia" - } - }, - { - "pk": 487, - "model": "pdcounter.bookstub", - "fields": { - "translator": "", - "author": "Miko\u0142aj Rej", - "slug": "zywot-czlowieka-poczciwego", - "pd": 0, - "title": "\u017bywot cz\u0142owieka poczciwego" - } - } -] \ No newline at end of file diff --git a/apps/pdcounter/locale/de/LC_MESSAGES/django.mo b/apps/pdcounter/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index 690e38b09..000000000 Binary files a/apps/pdcounter/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/de/LC_MESSAGES/django.po b/apps/pdcounter/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index 89dcf4e0a..000000000 --- a/apps/pdcounter/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,144 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-04-15 13:43+0100\n" -"Last-Translator: Kamil <kjaklukowski@gmail.com>\n" -"Language-Team: \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" - -#: models.py:13 -msgid "name" -msgstr "Name" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "Slug" - -#: models.py:15 -msgid "sort key" -msgstr "Sortierschlüssel" - -#: models.py:16 models.py:42 -msgid "description" -msgstr "Beschreibung" - -#: models.py:17 -msgid "year of death" -msgstr "Todesjahr" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "Autor" - -#: models.py:24 -#, fuzzy -msgid "authors" -msgstr "Autoren" - -#: models.py:62 -msgid "title" -msgstr "Titel" - -#: models.py:64 -msgid "goes to public domain" -msgstr "Gehe zu Public Domain" - -#: models.py:66 -msgid "translator" -msgstr "Ãbersetzer" - -#: models.py:70 -msgid "book stub" -msgstr "Buchvorschau" - -#: models.py:71 -msgid "book stubs" -msgstr "Buchvorschauen" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "Lesen Sie mehr über diesem Werk bei Lektury.Gazeta.pl" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "Lesen Sie einen Artikel über diesem Autor in Wikipedia" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "Die Urheberrechte für dieses Werk werden geschützt." - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this author's works." -msgstr "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Erfahren " -"Sie</a> warum Internetbibliotheken die Werke dieses Autors nicht publizieren " -"dürfen." - -#: templates/pdcounter/author_detail.html:40 -#, fuzzy -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" -"Die Werke dieses Autors sind in Public Domain und werden in Internet-" -"Schulbibliothek von Wolne Lektury bald publiziert." - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" -"Die Werke des Autors werden in Public Domain sein und werden unbegrenzt " -"publeziert werden dürfen in" - -#: templates/pdcounter/book_stub_detail.html:17 -#, fuzzy -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" -"Dieses Werk ist in Public Domain und wird in Internet Schulbibliothek von " -"Wolne Lektury bald publiziert." - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" -"Die Werke des Autors werden in Public Domain sein und werden unbegrenzt " -"publeziert werden dürfen in" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this work." -msgstr "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Erfahren " -"Sie</a> warum Internetbibliotheken dieses Werk nicht publizieren dürfen." - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "Dieses Werk wird durch das Urheberrecht geschützt." - -#~ msgid "year of translator's death" -#~ msgstr "Todesjahr des Ãbersetzers" diff --git a/apps/pdcounter/locale/en/LC_MESSAGES/django.mo b/apps/pdcounter/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index 18f7c61b7..000000000 Binary files a/apps/pdcounter/locale/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/en/LC_MESSAGES/django.po b/apps/pdcounter/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index 7190a6c56..000000000 --- a/apps/pdcounter/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,130 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 20:05+0100\n" -"Last-Translator: xxx <xxx>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" -"Plural-Forms: nplurals=2; plural=n != 1\n" - -#: models.py:13 -msgid "name" -msgstr "name" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "Slug" - -#: models.py:15 -msgid "sort key" -msgstr "Sort key" - -#: models.py:16 models.py:42 -msgid "description" -msgstr "Description" - -#: models.py:17 -msgid "year of death" -msgstr "Year of death" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "author" - -#: models.py:24 -#, fuzzy -msgid "authors" -msgstr "author" - -#: models.py:62 -msgid "title" -msgstr "Title" - -#: models.py:64 -msgid "goes to public domain" -msgstr "Goes to public domain" - -#: models.py:66 -msgid "translator" -msgstr "Translator" - -#: models.py:70 -msgid "book stub" -msgstr "Book stub" - -#: models.py:71 -msgid "book stubs" -msgstr "Book stubs" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "" - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this author's works." -msgstr "" - -#: templates/pdcounter/author_detail.html:40 -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:17 -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this work." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "" - -#~ msgid "year of translator's death" -#~ msgstr "Year of translator's death" diff --git a/apps/pdcounter/locale/es/LC_MESSAGES/django.mo b/apps/pdcounter/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index 21f9745a7..000000000 Binary files a/apps/pdcounter/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/es/LC_MESSAGES/django.po b/apps/pdcounter/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index a04dc78b7..000000000 --- a/apps/pdcounter/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,143 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-05-17 22:05+0100\n" -"Last-Translator: KG <kamila.gawron87@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" - -#: models.py:13 -msgid "name" -msgstr "nombre" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "slug" - -#: models.py:15 -msgid "sort key" -msgstr "clave de clasificación" - -#: models.py:16 models.py:42 -msgid "description" -msgstr "descripción" - -#: models.py:17 -msgid "year of death" -msgstr "año de muerte" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "autor" - -#: models.py:24 -msgid "authors" -msgstr "autores" - -#: models.py:62 -msgid "title" -msgstr "tÃtulo" - -#: models.py:64 -msgid "goes to public domain" -msgstr "pasa al dominio público" - -#: models.py:66 -msgid "translator" -msgstr "traductor" - -#: models.py:70 -msgid "book stub" -msgstr "vista previa del libro" - -#: models.py:71 -msgid "book stubs" -msgstr "vista previa de libros" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "Lea el estudio sobre las obras de este autor en Lektury.Gazeta.pl" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "Lea el artÃculo sobre este autor en Wikipedia" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "Las obras de este autor tienen todos los derechos de autor reservados." - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this author's works." -msgstr "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> el porqué las bibliotecas virtuales no pueden publicar las obras de este " -"autor." - -#: templates/pdcounter/author_detail.html:40 -#, fuzzy -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" -"Las obras de este autor son de dominio público y pronto serán publicadas en " -"Biblioteca virtual de Wolne Lektury." - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" -"Las obras de este autor van a ser parte de dominio público y pronto serán " -"publicadas sin restricciones en" - -#: templates/pdcounter/book_stub_detail.html:17 -#, fuzzy -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" -"Esta obra es de dominio público y pronto será publicada en Biblioteca " -"virtual de Wolne Lektury." - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" -"Esta obra va a ser parte de dominio público y pronto será publicada sin " -"restricciones en" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this work." -msgstr "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> el porqué las bibliotecas virtuales no pueden publicar esta obra." - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "Esta obra tiene todos los derechos de autor reservados." - -#~ msgid "year of translator's death" -#~ msgstr "año de la muerte del traductor" diff --git a/apps/pdcounter/locale/fr/LC_MESSAGES/django.mo b/apps/pdcounter/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index c6e982cc8..000000000 Binary files a/apps/pdcounter/locale/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/fr/LC_MESSAGES/django.po b/apps/pdcounter/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index 6171e494f..000000000 --- a/apps/pdcounter/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,127 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-22 20:58+0100\n" -"Last-Translator: Ela Janota <amarillis5@wp.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:13 -msgid "name" -msgstr "nom" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "ébauche" - -#: models.py:15 -msgid "sort key" -msgstr "critère de tri" - -#: models.py:16 models.py:42 -msgid "description" -msgstr "description" - -#: models.py:17 -msgid "year of death" -msgstr "année de la mort" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "auteur" - -#: models.py:24 -msgid "authors" -msgstr "auteurs" - -#: models.py:62 -msgid "title" -msgstr "titre" - -#: models.py:64 -msgid "goes to public domain" -msgstr "entre dans le domaine public" - -#: models.py:66 -msgid "translator" -msgstr "traducteur" - -#: models.py:70 -msgid "book stub" -msgstr "ébauche du livre" - -#: models.py:71 -msgid "book stubs" -msgstr "ébauches des livres" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "" - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this author's works." -msgstr "" - -#: templates/pdcounter/author_detail.html:40 -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:17 -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this work." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "" - -#~ msgid "year of translator's death" -#~ msgstr "année de la mort du traducteur" diff --git a/apps/pdcounter/locale/it/LC_MESSAGES/django.mo b/apps/pdcounter/locale/it/LC_MESSAGES/django.mo deleted file mode 100644 index fc0347069..000000000 Binary files a/apps/pdcounter/locale/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/it/LC_MESSAGES/django.po b/apps/pdcounter/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index e7a083ee4..000000000 --- a/apps/pdcounter/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,152 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-21 17:06+0100\n" -"Last-Translator: xxx\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" - -#: models.py:13 -msgid "name" -msgstr "" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "" - -#: models.py:15 -msgid "sort key" -msgstr "" - -#: models.py:16 models.py:42 -msgid "description" -msgstr "" - -#: models.py:17 -msgid "year of death" -msgstr "" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "" - -#: models.py:24 -msgid "authors" -msgstr "" - -#: models.py:62 -msgid "title" -msgstr "" - -#: models.py:64 -msgid "goes to public domain" -msgstr "" - -#: models.py:66 -msgid "translator" -msgstr "" - -#: models.py:70 -msgid "book stub" -msgstr "" - -#: models.py:71 -msgid "book stubs" -msgstr "" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "" - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this author's works." -msgstr "" - -#: templates/pdcounter/author_detail.html:40 -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:17 -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this work." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "" - -#~ msgid "tags" -#~ msgstr "i tag" - -#~ msgid "tag" -#~ msgstr "tag" - -#~ msgid "content type" -#~ msgstr "tipo di contenuto" - -#~ msgid "object id" -#~ msgstr "oggetto id" - -#~ msgid "tagged_object_list must be called with a queryset or a model." -#~ msgstr "" -#~ "L'elenco degli oggetti taggati deve essere chiamato con un queryset o un " -#~ "modello." - -#~ msgid "tagged_object_list must be called with a tag model." -#~ msgstr "" -#~ "Lâelenco degli oggetti taggati deve essere chiamato con un modello tag." - -#~ msgid "tagged_object_list must be called with a tag." -#~ msgstr "Lâelenco degli oggetti taggati deve essere chiamato con un tag." - -#~ msgid "No tags found matching \"%s\"." -#~ msgstr "Non sono stati trovati tag corrispondenti \"%s\"." diff --git a/apps/pdcounter/locale/jp/LC_MESSAGES/django.mo b/apps/pdcounter/locale/jp/LC_MESSAGES/django.mo deleted file mode 100644 index c9739db34..000000000 Binary files a/apps/pdcounter/locale/jp/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/jp/LC_MESSAGES/django.po b/apps/pdcounter/locale/jp/LC_MESSAGES/django.po deleted file mode 100644 index 358d71aa2..000000000 --- a/apps/pdcounter/locale/jp/LC_MESSAGES/django.po +++ /dev/null @@ -1,125 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:13 -msgid "name" -msgstr "" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "" - -#: models.py:15 -msgid "sort key" -msgstr "" - -#: models.py:16 models.py:42 -msgid "description" -msgstr "" - -#: models.py:17 -msgid "year of death" -msgstr "" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "" - -#: models.py:24 -msgid "authors" -msgstr "" - -#: models.py:62 -msgid "title" -msgstr "" - -#: models.py:64 -msgid "goes to public domain" -msgstr "" - -#: models.py:66 -msgid "translator" -msgstr "" - -#: models.py:70 -msgid "book stub" -msgstr "" - -#: models.py:71 -msgid "book stubs" -msgstr "" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "" - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this author's works." -msgstr "" - -#: templates/pdcounter/author_detail.html:40 -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:17 -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this work." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "" diff --git a/apps/pdcounter/locale/lt/LC_MESSAGES/django.mo b/apps/pdcounter/locale/lt/LC_MESSAGES/django.mo deleted file mode 100644 index dc721cf69..000000000 Binary files a/apps/pdcounter/locale/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/lt/LC_MESSAGES/django.po b/apps/pdcounter/locale/lt/LC_MESSAGES/django.po deleted file mode 100644 index cedd34657..000000000 --- a/apps/pdcounter/locale/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,146 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-04-03 18:01+0100\n" -"Last-Translator: Karolina Zuber <suomija@o2.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" - -#: models.py:13 -msgid "name" -msgstr "pavadinimas" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "slug" - -#: models.py:15 -msgid "sort key" -msgstr "rikiavimo raktas" - -#: models.py:16 models.py:42 -msgid "description" -msgstr "apraÅ¡as" - -#: models.py:17 -msgid "year of death" -msgstr "mirties metai" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "autorius" - -#: models.py:24 -msgid "authors" -msgstr "autoriai" - -#: models.py:62 -msgid "title" -msgstr "pavadinimas" - -#: models.py:64 -msgid "goes to public domain" -msgstr "į vieÅ¡Ä jÄ sritį" - -#: models.py:66 -msgid "translator" -msgstr "vertÄjas" - -#: models.py:70 -msgid "book stub" -msgstr "book stub" - -#: models.py:71 -msgid "book stubs" -msgstr "book stubs" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "" -"Skaitykite Å¡io autoriaus kÅ«rinio apraÅ¡ymÄ interneto svetainÄje Lektury." -"Gazeta.pl" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "Skaitykite straipsnį apie šį autorių Vikipedijoje" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "Å io autoriaus kÅ«riniai yra autorinių teisių saugomi." - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this author's works." -msgstr "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-" -"publiczna/'>Sužinokite</a> kodÄl Å¡io autoriaus kÅ«riniai negali bÅ«ti " -"publikuojami internetinÄje bibliotekoje." - -#: templates/pdcounter/author_detail.html:40 -#, fuzzy -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" -"Å io autoriaus kÅ«riniai yra vieÅ¡ai prieinami ir netrukus bus publikuoti " -"interneto svetainÄs Wolne Lektury internetinÄje bibliotekoje. " - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" -"Å io autoriaus kÅ«riniai netrukus bus vieÅ¡ai prieinami ir galÄs bÅ«ti " -"publikuojami be apribojimų" - -#: templates/pdcounter/book_stub_detail.html:17 -#, fuzzy -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" -"Å is kÅ«rinys yra vieÅ¡ai prieinamas ir netrukus bus publikuotas interneto " -"svetainÄs Wolne Lektury internetinÄje bibliotekoje." - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" -"Å is kÅ«rinys netrukus bus vieÅ¡ai prieinamas ir galÄs bÅ«ti publikuojamas be " -"apribojimų" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this work." -msgstr "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-" -"publiczna/'>Sužinokite</a> kodÄl Å¡is kÅ«rinys negali bÅ«ti publikuojamas " -"internetinÄje bibliotekoje." - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "Å is kÅ«rinis yra autorinių teisių saugomas." - -#~ msgid "year of translator's death" -#~ msgstr "vertÄjo mirimo metai" diff --git a/apps/pdcounter/locale/pl/LC_MESSAGES/django.mo b/apps/pdcounter/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 8716191fe..000000000 Binary files a/apps/pdcounter/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/pl/LC_MESSAGES/django.po b/apps/pdcounter/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 18cd84d7a..000000000 --- a/apps/pdcounter/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,142 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-06-11 15:47+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" -"X-Generator: Poedit 1.5.4\n" - -#: models.py:13 -msgid "name" -msgstr "nazwa" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "slug" - -#: models.py:15 -msgid "sort key" -msgstr "klucz sortowania" - -#: models.py:16 models.py:42 -msgid "description" -msgstr "opis" - -#: models.py:17 -msgid "year of death" -msgstr "rok Åmierci" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "autor" - -#: models.py:24 -msgid "authors" -msgstr "autorzy" - -#: models.py:62 -msgid "title" -msgstr "tytuÅ" - -#: models.py:64 -msgid "goes to public domain" -msgstr "trafia do domeny publicznej" - -#: models.py:66 -msgid "translator" -msgstr "tÅumacz" - -#: models.py:70 -msgid "book stub" -msgstr "zapowiedź ksiÄ Å¼ki" - -#: models.py:71 -msgid "book stubs" -msgstr "zapowiedzi ksiÄ Å¼ek" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "Licznik domeny publicznej" - -#: templates/pdcounter/author_detail.html:26 -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/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "Przeczytaj artykuÅ o autorze w Wikipedii" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "DzieÅa tego autora objÄte sÄ prawem autorskim." - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this author's works." -msgstr "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Dowiedz " -"siÄ</a>, dlaczego biblioteki internetowe nie mogÄ udostÄpniaÄ dzieÅ tego " -"autora." - -#: templates/pdcounter/author_detail.html:40 -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" -"DzieÅa tego autora znajdujÄ siÄ w domenie publicznej i niedÅugo zostanÄ " -"opublikowane w bibliotece internetowej Wolne Lektury." - -#: templates/pdcounter/author_detail.html:43 -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:17 -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" -"Ten utwór znajduje siÄ w domenie publicznej i niedÅugo zostanie opublikowany " -"w bibliotece internetowej Wolne Lektury." - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" -"Ten utwór przejdzie do zasobów domeny publicznej i bÄdzie mógÅ byÄ " -"publikowany bez żadnych ograniczeÅ za" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this work." -msgstr "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Dowiedz " -"siÄ</a>, dlaczego biblioteki internetowe nie mogÄ udostÄpniaÄ tego utworu." - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "Ten utwór objÄty jest prawem autorskim." - -#~ msgid "year of translator's death" -#~ msgstr "rok Åmierci tÅumacza" diff --git a/apps/pdcounter/locale/ru/LC_MESSAGES/django.mo b/apps/pdcounter/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index 9e6a2e2a4..000000000 Binary files a/apps/pdcounter/locale/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/ru/LC_MESSAGES/django.po b/apps/pdcounter/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index e6ed8e13b..000000000 --- a/apps/pdcounter/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,128 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 22:11+0100\n" -"Last-Translator: xxx <xxx>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" - -#: models.py:13 -msgid "name" -msgstr "название" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "slug" - -#: models.py:15 -msgid "sort key" -msgstr "клÑÑ ÑоÑÑиÑовки " - -#: models.py:16 models.py:42 -msgid "description" -msgstr "опиÑание" - -#: models.py:17 -msgid "year of death" -msgstr "год ÑмеÑÑи" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "авÑоÑ" - -#: models.py:24 -msgid "authors" -msgstr "авÑоÑÑ" - -#: models.py:62 -msgid "title" -msgstr "заглавие" - -#: models.py:64 -msgid "goes to public domain" -msgstr "идÑÑ Ðº пÑблиÑной домене" - -#: models.py:66 -msgid "translator" -msgstr "пеÑеводÑик" - -#: models.py:70 -msgid "book stub" -msgstr "Ð°Ð½Ð¾Ð½Ñ ÐºÐ½Ð¸Ð³Ð¸" - -#: models.py:71 -msgid "book stubs" -msgstr "анонÑÑ ÐºÐ½Ð¸Ð³Ð¸" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "" - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this author's works." -msgstr "" - -#: templates/pdcounter/author_detail.html:40 -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:17 -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this work." -msgstr "" - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "" - -#~ msgid "year of translator's death" -#~ msgstr "год ÑмеÑÑи пеÑеводÑика" diff --git a/apps/pdcounter/locale/uk/LC_MESSAGES/django.mo b/apps/pdcounter/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index 539ff49a7..000000000 Binary files a/apps/pdcounter/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/pdcounter/locale/uk/LC_MESSAGES/django.po b/apps/pdcounter/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index bb7bd4f6c..000000000 --- a/apps/pdcounter/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,143 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-05-28 14:18+0100\n" -"Last-Translator: Natalia Kertyczak <natalczyk@o2.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:13 -msgid "name" -msgstr "назва" - -#: models.py:14 models.py:65 -msgid "slug" -msgstr "slug" - -#: models.py:15 -msgid "sort key" -msgstr "клÑÑ ÑоÑÑÑваннÑ" - -#: models.py:16 models.py:42 -msgid "description" -msgstr "опиÑ" - -#: models.py:17 -msgid "year of death" -msgstr "даÑа ÑмеÑÑÑ" - -#: models.py:23 models.py:63 -msgid "author" -msgstr "авÑоÑ" - -#: models.py:24 -msgid "authors" -msgstr "авÑоÑи" - -#: models.py:62 -msgid "title" -msgstr "заголовок" - -#: models.py:64 -msgid "goes to public domain" -msgstr "Ð²Ñ Ð¾Ð´Ð¸ÑÑ Ñ ÑÑÑпÑлÑне надбаннÑ" - -#: models.py:66 -msgid "translator" -msgstr "пеÑекладаÑ" - -#: models.py:70 -msgid "book stub" -msgstr "загоÑовка книжки" - -#: models.py:71 -msgid "book stubs" -msgstr "загоÑовки книжок" - -#: templates/pdcounter/author_detail.html:7 -#: templates/pdcounter/book_stub_detail.html:7 -msgid "Public domain counter" -msgstr "" - -#: templates/pdcounter/author_detail.html:26 -msgid "Read work's study of this author on Lektury.Gazeta.pl" -msgstr "ÐÑоÑиÑаÑи обговоÑÐµÐ½Ð½Ñ ÑвоÑÑ Ð°Ð²ÑоÑа на Lektury.Gazeta.pl" - -#: templates/pdcounter/author_detail.html:31 -msgid "Read article about this author on Wikipedia" -msgstr "ÐÑоÑиÑаÑи ÑÑаÑÑÑ Ð¿Ñо авÑоÑа Ñ ÐÑкÑпедÑÑ" - -#: templates/pdcounter/author_detail.html:36 -msgid "This author's works are copyrighted." -msgstr "ТвоÑи ÑÑого авÑоÑа Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом." - -#: templates/pdcounter/author_detail.html:37 -#: templates/pdcounter/author_detail.html:45 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this author's works." -msgstr "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-" -"publiczna/'>ÐÑзнайÑеÑÑ</a>, ÑÐ¾Ð¼Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ñ Ð±ÑблÑоÑеки не можÑÑÑ " -"опÑблÑкÑваÑи ÑвоÑÑв ÑÑого авÑоÑа." - -#: templates/pdcounter/author_detail.html:40 -#, fuzzy -msgid "" -"This author's works are in public domain and will be published on Internet " -"library of Wolne Lektury soon." -msgstr "" -"ТвоÑи ÑÑого авÑоÑа Ñ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного Ð½Ð°Ð´Ð±Ð°Ð½Ð½Ñ Ñ ÑкоÑо бÑдÑÑÑ " -"опÑблÑÐºÐ¾Ð²Ð°Ð½Ñ Ñ ÑкÑлÑнÑй елекÑÑоннÑй бÑблÑоÑеÑÑ Wolne Lektury." - -#: templates/pdcounter/author_detail.html:43 -msgid "" -"This author's works will become part of public domain and will be allowed to " -"be published without restrictions in" -msgstr "" -"ТвоÑи ÑÑого авÑоÑа ÑÑанÑÑÑ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного Ð½Ð°Ð´Ð±Ð°Ð½Ð½Ñ Ñ Ð¼Ð¾Ð¶Ð½Ð° бÑде ÑÑ " -"вÑлÑно пÑблÑкÑваÑи Ñ" - -#: templates/pdcounter/book_stub_detail.html:17 -#, fuzzy -msgid "" -"This work is in public domain and will be published on Internet library of " -"Wolne Lektury soon." -msgstr "" -"Цей ÑвÑÑ Ñ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного Ð½Ð°Ð´Ð±Ð°Ð½Ð½Ñ Ñ ÑкоÑо бÑде опÑблÑкований Ñ " -"ÑкÑлÑнÑй елекÑÑоннÑй бÑблÑоÑеÑÑ Wolne Lektury." - -#: templates/pdcounter/book_stub_detail.html:20 -msgid "" -"This work will become part of public domain and will be allowed to be " -"published without restrictions in" -msgstr "" -"Цей ÑвÑÑ ÑÑане ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного Ð½Ð°Ð´Ð±Ð°Ð½Ð½Ñ Ñ Ð¼Ð¾Ð¶Ð½Ð° бÑде його вÑлÑно " -"пÑблÑкÑваÑи Ñ" - -#: templates/pdcounter/book_stub_detail.html:22 -#: templates/pdcounter/book_stub_detail.html:25 -msgid "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" -"a> why Internet libraries can't publish this work." -msgstr "" -"<a href='http://domenapubliczna.org/co-to-jest-domena-" -"publiczna/'>ÐÑзнайÑеÑÑ</a>, ÑÐ¾Ð¼Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ñ Ð±ÑблÑоÑеки не можÑÑÑ " -"опÑблÑкÑваÑи ÑÑого ÑвоÑÑ." - -#: templates/pdcounter/book_stub_detail.html:24 -msgid "This work is copyrighted." -msgstr "Цей ÑвÑÑ Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом." - -#~ msgid "year of translator's death" -#~ msgstr "ÑÑк ÑмеÑÑÑ Ð¿ÐµÑекладаÑа" diff --git a/apps/pdcounter/migrations/0001_initial.py b/apps/pdcounter/migrations/0001_initial.py deleted file mode 100644 index fdd0a8e9b..000000000 --- a/apps/pdcounter/migrations/0001_initial.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Author', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=50, verbose_name='name', db_index=True)), - ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), - ('sort_key', models.CharField(max_length=120, verbose_name='Sort key', db_index=True)), - ('description', models.TextField(verbose_name='Description', blank=True)), - ('death', models.IntegerField(null=True, verbose_name='Year of death', blank=True)), - ('gazeta_link', models.CharField(max_length=240, blank=True)), - ('wiki_link', models.CharField(max_length=240, blank=True)), - ], - options={ - 'ordering': ('sort_key',), - 'verbose_name': 'author', - 'verbose_name_plural': 'authors', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='BookStub', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('title', models.CharField(max_length=120, verbose_name='Title')), - ('author', models.CharField(max_length=120, verbose_name='author')), - ('pd', models.IntegerField(null=True, verbose_name='Goes to public domain', blank=True)), - ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), - ('translator', models.TextField(verbose_name='Translator', blank=True)), - ], - options={ - 'ordering': ('title',), - 'verbose_name': 'Book stub', - 'verbose_name_plural': 'Book stubs', - }, - bases=(models.Model,), - ), - ] diff --git a/apps/pdcounter/migrations/0002_auto_20151221_1225.py b/apps/pdcounter/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index 6447cc1d4..000000000 --- a/apps/pdcounter/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('pdcounter', '0001_initial'), - ] - - operations = [ - migrations.AlterModelOptions( - name='bookstub', - options={'ordering': ('title',), 'verbose_name': 'book stub', 'verbose_name_plural': 'book stubs'}, - ), - migrations.AlterField( - model_name='author', - name='death', - field=models.IntegerField(null=True, verbose_name='year of death', blank=True), - ), - migrations.AlterField( - model_name='author', - name='description', - field=models.TextField(verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='author', - name='slug', - field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), - ), - migrations.AlterField( - model_name='author', - name='sort_key', - field=models.CharField(max_length=120, verbose_name='sort key', db_index=True), - ), - migrations.AlterField( - model_name='bookstub', - name='pd', - field=models.IntegerField(null=True, verbose_name='goes to public domain', blank=True), - ), - migrations.AlterField( - model_name='bookstub', - name='slug', - field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), - ), - migrations.AlterField( - model_name='bookstub', - name='title', - field=models.CharField(max_length=120, verbose_name='title'), - ), - migrations.AlterField( - model_name='bookstub', - name='translator', - field=models.TextField(verbose_name='translator', blank=True), - ), - ] diff --git a/apps/pdcounter/migrations/__init__.py b/apps/pdcounter/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/pdcounter/models.py b/apps/pdcounter/models.py deleted file mode 100644 index 7c10f1e59..000000000 --- a/apps/pdcounter/models.py +++ /dev/null @@ -1,100 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from django.db import models -from django.db.models import permalink -from django.utils.translation import ugettext_lazy as _ -from datetime import datetime -from django.db.models.signals import post_save, post_delete - -class Author(models.Model): - name = models.CharField(_('name'), max_length=50, db_index=True) - slug = models.SlugField(_('slug'), max_length=120, db_index=True, unique=True) - sort_key = models.CharField(_('sort key'), max_length=120, db_index=True) - description = models.TextField(_('description'), blank=True) - death = models.IntegerField(_(u'year of death'), blank=True, null=True) - gazeta_link = models.CharField(blank=True, max_length=240) - wiki_link = models.CharField(blank=True, max_length=240) - - class Meta: - ordering = ('sort_key',) - verbose_name = _('author') - verbose_name_plural = _('authors') - - @property - def category(self): - return "author" - - def __unicode__(self): - return self.name - - def __repr__(self): - return "Author(slug=%r)" % self.slug - - @permalink - def get_absolute_url(self): - return ('catalogue.views.tagged_object_list', [self.url_chunk]) - - def has_description(self): - return len(self.description) > 0 - has_description.short_description = _('description') - has_description.boolean = True - - def alive(self): - return self.death is None - - def in_pd(self): - """ tests whether an author is in public domain """ - return self.death is not None and self.goes_to_pd() <= datetime.now().year - - def goes_to_pd(self): - """ calculates the year of public domain entry for an author """ - return self.death + 71 if self.death is not None else None - - @property - def url_chunk(self): - return '/'.join(('autor', self.slug)) - - -class BookStub(models.Model): - title = models.CharField(_('title'), max_length=120) - author = models.CharField(_('author'), max_length=120) - pd = models.IntegerField(_('goes to public domain'), null=True, blank=True) - slug = models.SlugField(_('slug'), max_length=120, unique=True, db_index=True) - translator = models.TextField(_('translator'), blank=True) - - class Meta: - ordering = ('title',) - verbose_name = _('book stub') - verbose_name_plural = _('book stubs') - - def __unicode__(self): - return self.title - - @permalink - def get_absolute_url(self): - return ('catalogue.views.book_detail', [self.slug]) - - def in_pd(self): - return self.pd is not None and self.pd <= datetime.now().year - - @property - def name(self): - return self.title - - def pretty_title(self, html_links=False): - return ', '.join((self.author, self.title)) - - -if not settings.NO_SEARCH_INDEX: - def update_index(sender, instance, **kwargs): - from search.index import Index - idx = Index() - idx.index_tags(instance, remove_only=not 'created' in kwargs) - - post_delete.connect(update_index, Author) - post_delete.connect(update_index, BookStub) - post_save.connect(update_index, Author) - post_save.connect(update_index, BookStub) diff --git a/apps/pdcounter/static/pdcounter/pdcounter.js b/apps/pdcounter/static/pdcounter/pdcounter.js deleted file mode 100755 index a1ff53736..000000000 --- a/apps/pdcounter/static/pdcounter/pdcounter.js +++ /dev/null @@ -1,41 +0,0 @@ -(function($) { - $(function() { - - $('.countdown').each(function() { - var $this = $(this); - - var serverTime = function() { - var time = null; - $.ajax({url: '/zegar/', - async: false, dataType: 'text', - success: function(text) { - time = new Date(text); - }, error: function(http, message, exc) { - time = new Date(); - }}); - return time; - } - - if (LANGUAGE_CODE != 'en') { - $.countdown.setDefaults($.countdown.regional[LANGUAGE_CODE]); - } - else { - $.countdown.setDefaults($.countdown.regional['']); - } - - var options = { - until: new Date($this.attr('data-until')), - format: 'ydHMS', - serverSync: serverTime, - onExpiry: function(){location.reload()}, // TODO: no reload - }; - if ($this.hasClass('inline')) { - options.layout = '{d<}{dn} {dl} {d>}{hnn}{sep}{mnn}{sep}{snn}'; - } - - $this.countdown(options); - }); - - - }); -})(jQuery); diff --git a/apps/pdcounter/templates/pdcounter/author_detail.html b/apps/pdcounter/templates/pdcounter/author_detail.html deleted file mode 100644 index 50eef63fb..000000000 --- a/apps/pdcounter/templates/pdcounter/author_detail.html +++ /dev/null @@ -1,56 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load time_tags %} - -{% block titleextra %}{{ author.name }}{% endblock %} - -{% block metadescription %}{% trans "Public domain counter" %}: {{author.name}}.{% endblock %} - -{% block bodyid %}author-detail{% endblock %} - -{% block body %} - - <div class="left-column"> - <h1>{{ author.name }}</h1> - <div class="normal-text white-box"> - {% if author.has_description %} - <div id="description"> - <div id='description-long'>{{ author.description|safe }}</div> - <div id='description-short'>{{ author.description|safe|truncatewords_html:30 }}</div> - </div> - <div class="clearboth"></div> - <div id="toggle-description"><p></p></div> - {% endif %} - {% if author.gazeta_link %} - <p><a href="{{ author.gazeta_link }}"> - {% trans "Read work's study of this author on Lektury.Gazeta.pl" %} - </a></p> - {% endif %} - {% if author.wiki_link %} - <p><a href="{{ author.wiki_link }}"> - {% trans "Read article about this author on Wikipedia" %} - </a></p> - {% endif %} - - {% if author.alive %} - <p>{% trans "This author's works are copyrighted." %} - {% trans "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</a> why Internet libraries can't publish this author's works." %}</p> - {% else %} - {% if author.in_pd %} - <p>{% trans "This author's works are in public domain and will be published on Internet library of Wolne Lektury soon." %}</p> - {% else %} - <div> - <p>{% trans "This author's works will become part of public domain and will be allowed to be published without restrictions in" %}</p> - <div class='countdown' data-until='{{ pd_counter|date_to_utc|utc_for_js }}'></div> - <p>{% trans "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</a> why Internet libraries can't publish this author's works." %}</p> - </div> - {% endif %} - {% endif %} - {% include "info/join_us.html" %} - </div> - </div> - - <div class="right-column block-form"> - {% include "publishing_suggest.html" %} - </div> -{% endblock %} diff --git a/apps/pdcounter/templates/pdcounter/book_stub_detail.html b/apps/pdcounter/templates/pdcounter/book_stub_detail.html deleted file mode 100644 index 640d68ebe..000000000 --- a/apps/pdcounter/templates/pdcounter/book_stub_detail.html +++ /dev/null @@ -1,35 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load time_tags %} - -{% block titleextra %}{{ book.title }}{% endblock %} - -{% block metadescription %}{% trans "Public domain counter" %}: {{ book.title }}.{% endblock %} - -{% block bodyid %}book-stub-detail{% endblock %} - -{% block body %} - <div class="left-column"> - <h1>{{ book.author }}, {{ book.title }}</h1> - <div class="normal-text white-box"> - - {% if book.in_pd %} - <p>{% trans "This work is in public domain and will be published on Internet library of Wolne Lektury soon." %}</p> - {% else %} - {% if book.pd %} - <p>{% trans "This work will become part of public domain and will be allowed to be published without restrictions in" %}</p> - <div class='countdown' data-until='{{ pd_counter|date_to_utc|utc_for_js }}'></div> - <p>{% trans "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</a> why Internet libraries can't publish this work." %}</p> - {% else %} - <p>{% trans "This work is copyrighted." %} - {% trans "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</a> why Internet libraries can't publish this work." %}</p> - {% endif %} - {% endif %} - {% include "info/join_us.html" %} - </div> - </div> - - <div class="right-column block-form"> - {% include "publishing_suggest.html" %} - </div> -{% endblock %} diff --git a/apps/pdcounter/templatetags/__init__.py b/apps/pdcounter/templatetags/__init__.py deleted file mode 100755 index e69de29bb..000000000 diff --git a/apps/pdcounter/templatetags/time_tags.py b/apps/pdcounter/templatetags/time_tags.py deleted file mode 100755 index 7ea5c6055..000000000 --- a/apps/pdcounter/templatetags/time_tags.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import datetime -import pytz -from django.conf import settings -from django import template -from django.utils import timezone - - -register = template.Library() - -@register.filter -def date_to_utc(date, day_end=False): - """ Converts a datetime.date to UTC datetime. - - The datetime represents the start (or end) of the given day in - the server's timezone. - """ - if day_end: - date += datetime.timedelta(1) - localtime = datetime.datetime.combine(date, datetime.time(0, 0)) - return timezone.utc.normalize( - pytz.timezone(settings.TIME_ZONE).localize(localtime) - ) - - -@register.filter -def utc_for_js(dt): - return dt.strftime('%Y/%m/%d %H:%M:%S UTC') diff --git a/apps/pdcounter/views.py b/apps/pdcounter/views.py deleted file mode 100644 index e5b4421ce..000000000 --- a/apps/pdcounter/views.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from datetime import datetime -from django.template import RequestContext -from django.shortcuts import render_to_response, get_object_or_404 -from django.views.decorators import cache -from suggest.forms import PublishingSuggestForm -from . import models - - -@cache.never_cache -def book_stub_detail(request, slug): - book = get_object_or_404(models.BookStub, slug=slug) - if book.pd and not book.in_pd(): - pd_counter = datetime(book.pd, 1, 1) - - form = PublishingSuggestForm( - initial={"books": u"%s â %s, \n" % (book.author, book.title)}) - - return render_to_response('pdcounter/book_stub_detail.html', locals(), - context_instance=RequestContext(request)) - - -@cache.never_cache -def author_detail(request, slug): - author = get_object_or_404(models.Author, slug=slug) - if not author.alive(): - pd_counter = datetime(author.goes_to_pd(), 1, 1) - - form = PublishingSuggestForm(initial={"books": author.name + ", \n"}) - - return render_to_response('pdcounter/author_detail.html', locals(), - context_instance=RequestContext(request)) diff --git a/apps/picture/__init__.py b/apps/picture/__init__.py deleted file mode 100644 index 8b1378917..000000000 --- a/apps/picture/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/picture/admin.py b/apps/picture/admin.py deleted file mode 100644 index f107d3196..000000000 --- a/apps/picture/admin.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib import admin -from picture.models import Picture -from sorl.thumbnail.admin import AdminImageMixin - -class PictureAdmin(AdminImageMixin, admin.ModelAdmin): - pass - -admin.site.register(Picture, PictureAdmin) diff --git a/apps/picture/engine.py b/apps/picture/engine.py deleted file mode 100644 index 574e5a889..000000000 --- a/apps/picture/engine.py +++ /dev/null @@ -1,57 +0,0 @@ -from sorl.thumbnail.engines import pil_engine -from sorl.thumbnail import parsers - -# -# Class developed by -# http://timmyomahony.com/blog/custom-cropping-engine-sorl-thumbnail/ -# -class CustomCroppingEngine(pil_engine.Engine): - """ - A custom sorl.thumbnail engine (using PIL) that first crops an image - according to 4 pixel/percentage values in the source image, then scales - that crop down to the size specified in the geometry. This is in contrast - to sorl.thumbnails default engine which first scales the image down to the - specified geometry and applies the crop afterward. - """ - def create(self, image, geometry, options): - image = self.orientation(image, geometry, options) - image = self.colorspace(image, geometry, options) - image = self.crop(image, geometry, options) - image = self.scale(image, geometry, options) - return image - - def _crop_parse(self, crop, xy_image, xy_window): - """ - Conver the crop string passed by the user to accurate cropping values - (This is adapter from the default sorl.thumbnail.parsers.parse_crop) - """ - crops = crop.split(' ') - if len(crops) != 4: - raise parsers.ThumbnailParseError('Unrecognized crop option: %s' % crop) - x1, y1, x2, y2 = crops - - def get_offset(crop, epsilon): - m = parsers.bgpos_pat.match(crop) - if not m: - raise parsers.ThumbnailParseError('Unrecognized crop option: %s' % crop) - value = int(m.group('value')) # we only take ints in the regexp - unit = m.group('unit') - if unit == '%': - value = epsilon * value / 100.0 - return int(max(0, min(value, epsilon))) - x1 = get_offset(x1, xy_image[0]) - y1 = get_offset(y1, xy_image[1]) - x2 = get_offset(x2, xy_image[0]) - y2 = get_offset(y2, xy_image[1]) - return x1, y1, x2, y2 - - def crop(self, image, geometry, options): - crop = options['crop'] - if not crop or crop == 'noop': - return image - x_image, y_image = self.get_image_size(image) - x1,y1,x2,y2 = self._crop_parse(crop, (x_image, y_image), geometry) - return self._crop(image, x1, y1, x2, y2) - - def _crop(self, image, x1, y1, x2, y2): - return image.crop((x1, y1, x2, y2)) diff --git a/apps/picture/forms.py b/apps/picture/forms.py deleted file mode 100644 index 2ad47b0b8..000000000 --- a/apps/picture/forms.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import forms -from django.utils.translation import ugettext_lazy as _ -from picture.models import Picture - - -class PictureImportForm(forms.Form): - picture_xml_file = forms.FileField(required=False) - picture_xml = forms.CharField(required=False) - picture_image_file = forms.FileField(required=False) - picture_image_data = forms.CharField(required=False) - - def clean(self): - from base64 import b64decode - from django.core.files.base import ContentFile - - if not self.cleaned_data['picture_xml_file']: - if self.cleaned_data['picture_xml']: - self.cleaned_data['picture_xml_file'] = \ - ContentFile(self.cleaned_data['picture_xml'].encode('utf-8')) - else: - raise forms.ValidationError(_("Please supply an XML.")) - - if not self.cleaned_data['picture_image_file']: - if self.cleaned_data['picture_image_data']: - self.cleaned_data['picture_image_file'] = \ - ContentFile(b64decode( - self.cleaned_data['picture_image_data'])) - else: - raise forms.ValidationError(_("Please supply an image.")) - - return super(PictureImportForm, self).clean() - - def save(self, commit=True, **kwargs): - return Picture.from_xml_file(self.cleaned_data['picture_xml_file'], image_file=self.cleaned_data['picture_image_file'], - overwrite=True, **kwargs) diff --git a/apps/picture/locale/de/LC_MESSAGES/django.mo b/apps/picture/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index 2ac6a07fc..000000000 Binary files a/apps/picture/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/de/LC_MESSAGES/django.po b/apps/picture/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index 7ed1f2669..000000000 --- a/apps/picture/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,205 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: forms.py:21 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:29 -msgid "Please supply an image." -msgstr "" - -#: models.py:37 -msgid "area" -msgstr "" - -#: models.py:38 -msgid "kind" -msgstr "" - -#: models.py:40 -msgid "thing" -msgstr "" - -#: models.py:41 -msgid "theme" -msgstr "" - -#: models.py:66 -msgid "title" -msgstr "" - -#: models.py:67 -msgid "slug" -msgstr "" - -#: models.py:68 -msgid "sort key" -msgstr "" - -#: models.py:69 models.py:70 -msgid "creation date" -msgstr "" - -#: models.py:72 -msgid "image_file" -msgstr "" - -#: models.py:74 -msgid "picture areas JSON" -msgstr "" - -#: models.py:75 -msgid "extra information" -msgstr "" - -#: models.py:92 -msgid "picture" -msgstr "" - -#: models.py:93 -msgid "pictures" -msgstr "" - -#: views.py:79 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:80 -msgid "Picture imported successfully" -msgstr "" - -#: views.py:82 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:7 -msgid "Image" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Import picture" -msgstr "" - -#: templates/picture/picture_list_thumb.html:10 -#: templates/picture/picture_list_thumb.html:14 -msgid "Listing of all pictures" -msgstr "" - -#: templates/picture/picture_short.html:31 -msgid "Epoch" -msgstr "" - -#: templates/picture/picture_short.html:38 -msgid "Kind" -msgstr "" - -#: templates/picture/picture_short.html:45 -msgid "Genre" -msgstr "" - -#: templates/picture/picture_short.html:57 -msgid "View online" -msgstr "" - -#: templates/picture/picture_short.html:60 -msgid "download original" -msgstr "" - -#: templates/picture/picture_short.html:63 -#: templates/picture/picture_viewer.html:30 -msgid "Download" -msgstr "" - -#: templates/picture/picture_short.html:66 -msgid "original" -msgstr "" - -#: templates/picture/picture_viewer.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/picture/picture_viewer.html:23 -#: templates/picture/picture_viewer.html:50 -msgid "Themes" -msgstr "" - -#: templates/picture/picture_viewer.html:24 -#: templates/picture/picture_viewer.html:49 -#: templates/picture/picture_wide.html:31 -msgid "Objects" -msgstr "" - -#: templates/picture/picture_viewer.html:26 -msgid "Edit. note" -msgstr "" - -#: templates/picture/picture_viewer.html:27 -msgid "Infobox" -msgstr "" - -#: templates/picture/picture_viewer.html:28 -msgid "Picture's page" -msgstr "" - -#: templates/picture/picture_wide.html:20 -msgid "Motifs, themes and objects" -msgstr "" - -#: templates/picture/picture_wide.html:23 -msgid "Motifs and themes" -msgstr "" - -#: templates/picture/picture_wide.html:49 -msgid "See" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "Source" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "of the picture" -msgstr "" - -#: templates/picture/picture_wide.html:54 -msgid "Source XML file" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Picture on" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Editor's Platform" -msgstr "" - -#: templates/picture/picture_wide.html:59 -msgid "Picture description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/picture/picture_wide.html:62 -msgid "Picture description on Wikipedia" -msgstr "" diff --git a/apps/picture/locale/en/LC_MESSAGES/django.mo b/apps/picture/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index c9739db34..000000000 Binary files a/apps/picture/locale/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/en/LC_MESSAGES/django.po b/apps/picture/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index b62ffd4bb..000000000 --- a/apps/picture/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,204 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:21 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:29 -msgid "Please supply an image." -msgstr "" - -#: models.py:37 -msgid "area" -msgstr "" - -#: models.py:38 -msgid "kind" -msgstr "" - -#: models.py:40 -msgid "thing" -msgstr "" - -#: models.py:41 -msgid "theme" -msgstr "" - -#: models.py:66 -msgid "title" -msgstr "" - -#: models.py:67 -msgid "slug" -msgstr "" - -#: models.py:68 -msgid "sort key" -msgstr "" - -#: models.py:69 models.py:70 -msgid "creation date" -msgstr "" - -#: models.py:72 -msgid "image_file" -msgstr "" - -#: models.py:74 -msgid "picture areas JSON" -msgstr "" - -#: models.py:75 -msgid "extra information" -msgstr "" - -#: models.py:92 -msgid "picture" -msgstr "" - -#: models.py:93 -msgid "pictures" -msgstr "" - -#: views.py:79 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:80 -msgid "Picture imported successfully" -msgstr "" - -#: views.py:82 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:7 -msgid "Image" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Import picture" -msgstr "" - -#: templates/picture/picture_list_thumb.html:10 -#: templates/picture/picture_list_thumb.html:14 -msgid "Listing of all pictures" -msgstr "" - -#: templates/picture/picture_short.html:31 -msgid "Epoch" -msgstr "" - -#: templates/picture/picture_short.html:38 -msgid "Kind" -msgstr "" - -#: templates/picture/picture_short.html:45 -msgid "Genre" -msgstr "" - -#: templates/picture/picture_short.html:57 -msgid "View online" -msgstr "" - -#: templates/picture/picture_short.html:60 -msgid "download original" -msgstr "" - -#: templates/picture/picture_short.html:63 -#: templates/picture/picture_viewer.html:30 -msgid "Download" -msgstr "" - -#: templates/picture/picture_short.html:66 -msgid "original" -msgstr "" - -#: templates/picture/picture_viewer.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/picture/picture_viewer.html:23 -#: templates/picture/picture_viewer.html:50 -msgid "Themes" -msgstr "" - -#: templates/picture/picture_viewer.html:24 -#: templates/picture/picture_viewer.html:49 -#: templates/picture/picture_wide.html:31 -msgid "Objects" -msgstr "" - -#: templates/picture/picture_viewer.html:26 -msgid "Edit. note" -msgstr "" - -#: templates/picture/picture_viewer.html:27 -msgid "Infobox" -msgstr "" - -#: templates/picture/picture_viewer.html:28 -msgid "Picture's page" -msgstr "" - -#: templates/picture/picture_wide.html:20 -msgid "Motifs, themes and objects" -msgstr "" - -#: templates/picture/picture_wide.html:23 -msgid "Motifs and themes" -msgstr "" - -#: templates/picture/picture_wide.html:49 -msgid "See" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "Source" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "of the picture" -msgstr "" - -#: templates/picture/picture_wide.html:54 -msgid "Source XML file" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Picture on" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Editor's Platform" -msgstr "" - -#: templates/picture/picture_wide.html:59 -msgid "Picture description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/picture/picture_wide.html:62 -msgid "Picture description on Wikipedia" -msgstr "" diff --git a/apps/picture/locale/es/LC_MESSAGES/django.mo b/apps/picture/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index 2ac6a07fc..000000000 Binary files a/apps/picture/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/es/LC_MESSAGES/django.po b/apps/picture/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index 7ed1f2669..000000000 --- a/apps/picture/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,205 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: forms.py:21 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:29 -msgid "Please supply an image." -msgstr "" - -#: models.py:37 -msgid "area" -msgstr "" - -#: models.py:38 -msgid "kind" -msgstr "" - -#: models.py:40 -msgid "thing" -msgstr "" - -#: models.py:41 -msgid "theme" -msgstr "" - -#: models.py:66 -msgid "title" -msgstr "" - -#: models.py:67 -msgid "slug" -msgstr "" - -#: models.py:68 -msgid "sort key" -msgstr "" - -#: models.py:69 models.py:70 -msgid "creation date" -msgstr "" - -#: models.py:72 -msgid "image_file" -msgstr "" - -#: models.py:74 -msgid "picture areas JSON" -msgstr "" - -#: models.py:75 -msgid "extra information" -msgstr "" - -#: models.py:92 -msgid "picture" -msgstr "" - -#: models.py:93 -msgid "pictures" -msgstr "" - -#: views.py:79 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:80 -msgid "Picture imported successfully" -msgstr "" - -#: views.py:82 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:7 -msgid "Image" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Import picture" -msgstr "" - -#: templates/picture/picture_list_thumb.html:10 -#: templates/picture/picture_list_thumb.html:14 -msgid "Listing of all pictures" -msgstr "" - -#: templates/picture/picture_short.html:31 -msgid "Epoch" -msgstr "" - -#: templates/picture/picture_short.html:38 -msgid "Kind" -msgstr "" - -#: templates/picture/picture_short.html:45 -msgid "Genre" -msgstr "" - -#: templates/picture/picture_short.html:57 -msgid "View online" -msgstr "" - -#: templates/picture/picture_short.html:60 -msgid "download original" -msgstr "" - -#: templates/picture/picture_short.html:63 -#: templates/picture/picture_viewer.html:30 -msgid "Download" -msgstr "" - -#: templates/picture/picture_short.html:66 -msgid "original" -msgstr "" - -#: templates/picture/picture_viewer.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/picture/picture_viewer.html:23 -#: templates/picture/picture_viewer.html:50 -msgid "Themes" -msgstr "" - -#: templates/picture/picture_viewer.html:24 -#: templates/picture/picture_viewer.html:49 -#: templates/picture/picture_wide.html:31 -msgid "Objects" -msgstr "" - -#: templates/picture/picture_viewer.html:26 -msgid "Edit. note" -msgstr "" - -#: templates/picture/picture_viewer.html:27 -msgid "Infobox" -msgstr "" - -#: templates/picture/picture_viewer.html:28 -msgid "Picture's page" -msgstr "" - -#: templates/picture/picture_wide.html:20 -msgid "Motifs, themes and objects" -msgstr "" - -#: templates/picture/picture_wide.html:23 -msgid "Motifs and themes" -msgstr "" - -#: templates/picture/picture_wide.html:49 -msgid "See" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "Source" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "of the picture" -msgstr "" - -#: templates/picture/picture_wide.html:54 -msgid "Source XML file" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Picture on" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Editor's Platform" -msgstr "" - -#: templates/picture/picture_wide.html:59 -msgid "Picture description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/picture/picture_wide.html:62 -msgid "Picture description on Wikipedia" -msgstr "" diff --git a/apps/picture/locale/fr/LC_MESSAGES/django.mo b/apps/picture/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index 147f51a44..000000000 Binary files a/apps/picture/locale/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/fr/LC_MESSAGES/django.po b/apps/picture/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index d196b01da..000000000 --- a/apps/picture/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,205 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#: forms.py:21 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:29 -msgid "Please supply an image." -msgstr "" - -#: models.py:37 -msgid "area" -msgstr "" - -#: models.py:38 -msgid "kind" -msgstr "" - -#: models.py:40 -msgid "thing" -msgstr "" - -#: models.py:41 -msgid "theme" -msgstr "" - -#: models.py:66 -msgid "title" -msgstr "" - -#: models.py:67 -msgid "slug" -msgstr "" - -#: models.py:68 -msgid "sort key" -msgstr "" - -#: models.py:69 models.py:70 -msgid "creation date" -msgstr "" - -#: models.py:72 -msgid "image_file" -msgstr "" - -#: models.py:74 -msgid "picture areas JSON" -msgstr "" - -#: models.py:75 -msgid "extra information" -msgstr "" - -#: models.py:92 -msgid "picture" -msgstr "" - -#: models.py:93 -msgid "pictures" -msgstr "" - -#: views.py:79 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:80 -msgid "Picture imported successfully" -msgstr "" - -#: views.py:82 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:7 -msgid "Image" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Import picture" -msgstr "" - -#: templates/picture/picture_list_thumb.html:10 -#: templates/picture/picture_list_thumb.html:14 -msgid "Listing of all pictures" -msgstr "" - -#: templates/picture/picture_short.html:31 -msgid "Epoch" -msgstr "" - -#: templates/picture/picture_short.html:38 -msgid "Kind" -msgstr "" - -#: templates/picture/picture_short.html:45 -msgid "Genre" -msgstr "" - -#: templates/picture/picture_short.html:57 -msgid "View online" -msgstr "" - -#: templates/picture/picture_short.html:60 -msgid "download original" -msgstr "" - -#: templates/picture/picture_short.html:63 -#: templates/picture/picture_viewer.html:30 -msgid "Download" -msgstr "" - -#: templates/picture/picture_short.html:66 -msgid "original" -msgstr "" - -#: templates/picture/picture_viewer.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/picture/picture_viewer.html:23 -#: templates/picture/picture_viewer.html:50 -msgid "Themes" -msgstr "" - -#: templates/picture/picture_viewer.html:24 -#: templates/picture/picture_viewer.html:49 -#: templates/picture/picture_wide.html:31 -msgid "Objects" -msgstr "" - -#: templates/picture/picture_viewer.html:26 -msgid "Edit. note" -msgstr "" - -#: templates/picture/picture_viewer.html:27 -msgid "Infobox" -msgstr "" - -#: templates/picture/picture_viewer.html:28 -msgid "Picture's page" -msgstr "" - -#: templates/picture/picture_wide.html:20 -msgid "Motifs, themes and objects" -msgstr "" - -#: templates/picture/picture_wide.html:23 -msgid "Motifs and themes" -msgstr "" - -#: templates/picture/picture_wide.html:49 -msgid "See" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "Source" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "of the picture" -msgstr "" - -#: templates/picture/picture_wide.html:54 -msgid "Source XML file" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Picture on" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Editor's Platform" -msgstr "" - -#: templates/picture/picture_wide.html:59 -msgid "Picture description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/picture/picture_wide.html:62 -msgid "Picture description on Wikipedia" -msgstr "" diff --git a/apps/picture/locale/it/LC_MESSAGES/django.mo b/apps/picture/locale/it/LC_MESSAGES/django.mo deleted file mode 100644 index 2ac6a07fc..000000000 Binary files a/apps/picture/locale/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/it/LC_MESSAGES/django.po b/apps/picture/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index 7ed1f2669..000000000 --- a/apps/picture/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,205 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: forms.py:21 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:29 -msgid "Please supply an image." -msgstr "" - -#: models.py:37 -msgid "area" -msgstr "" - -#: models.py:38 -msgid "kind" -msgstr "" - -#: models.py:40 -msgid "thing" -msgstr "" - -#: models.py:41 -msgid "theme" -msgstr "" - -#: models.py:66 -msgid "title" -msgstr "" - -#: models.py:67 -msgid "slug" -msgstr "" - -#: models.py:68 -msgid "sort key" -msgstr "" - -#: models.py:69 models.py:70 -msgid "creation date" -msgstr "" - -#: models.py:72 -msgid "image_file" -msgstr "" - -#: models.py:74 -msgid "picture areas JSON" -msgstr "" - -#: models.py:75 -msgid "extra information" -msgstr "" - -#: models.py:92 -msgid "picture" -msgstr "" - -#: models.py:93 -msgid "pictures" -msgstr "" - -#: views.py:79 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:80 -msgid "Picture imported successfully" -msgstr "" - -#: views.py:82 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:7 -msgid "Image" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Import picture" -msgstr "" - -#: templates/picture/picture_list_thumb.html:10 -#: templates/picture/picture_list_thumb.html:14 -msgid "Listing of all pictures" -msgstr "" - -#: templates/picture/picture_short.html:31 -msgid "Epoch" -msgstr "" - -#: templates/picture/picture_short.html:38 -msgid "Kind" -msgstr "" - -#: templates/picture/picture_short.html:45 -msgid "Genre" -msgstr "" - -#: templates/picture/picture_short.html:57 -msgid "View online" -msgstr "" - -#: templates/picture/picture_short.html:60 -msgid "download original" -msgstr "" - -#: templates/picture/picture_short.html:63 -#: templates/picture/picture_viewer.html:30 -msgid "Download" -msgstr "" - -#: templates/picture/picture_short.html:66 -msgid "original" -msgstr "" - -#: templates/picture/picture_viewer.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/picture/picture_viewer.html:23 -#: templates/picture/picture_viewer.html:50 -msgid "Themes" -msgstr "" - -#: templates/picture/picture_viewer.html:24 -#: templates/picture/picture_viewer.html:49 -#: templates/picture/picture_wide.html:31 -msgid "Objects" -msgstr "" - -#: templates/picture/picture_viewer.html:26 -msgid "Edit. note" -msgstr "" - -#: templates/picture/picture_viewer.html:27 -msgid "Infobox" -msgstr "" - -#: templates/picture/picture_viewer.html:28 -msgid "Picture's page" -msgstr "" - -#: templates/picture/picture_wide.html:20 -msgid "Motifs, themes and objects" -msgstr "" - -#: templates/picture/picture_wide.html:23 -msgid "Motifs and themes" -msgstr "" - -#: templates/picture/picture_wide.html:49 -msgid "See" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "Source" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "of the picture" -msgstr "" - -#: templates/picture/picture_wide.html:54 -msgid "Source XML file" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Picture on" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Editor's Platform" -msgstr "" - -#: templates/picture/picture_wide.html:59 -msgid "Picture description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/picture/picture_wide.html:62 -msgid "Picture description on Wikipedia" -msgstr "" diff --git a/apps/picture/locale/jp/LC_MESSAGES/django.mo b/apps/picture/locale/jp/LC_MESSAGES/django.mo deleted file mode 100644 index c9739db34..000000000 Binary files a/apps/picture/locale/jp/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/jp/LC_MESSAGES/django.po b/apps/picture/locale/jp/LC_MESSAGES/django.po deleted file mode 100644 index b62ffd4bb..000000000 --- a/apps/picture/locale/jp/LC_MESSAGES/django.po +++ /dev/null @@ -1,204 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:21 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:29 -msgid "Please supply an image." -msgstr "" - -#: models.py:37 -msgid "area" -msgstr "" - -#: models.py:38 -msgid "kind" -msgstr "" - -#: models.py:40 -msgid "thing" -msgstr "" - -#: models.py:41 -msgid "theme" -msgstr "" - -#: models.py:66 -msgid "title" -msgstr "" - -#: models.py:67 -msgid "slug" -msgstr "" - -#: models.py:68 -msgid "sort key" -msgstr "" - -#: models.py:69 models.py:70 -msgid "creation date" -msgstr "" - -#: models.py:72 -msgid "image_file" -msgstr "" - -#: models.py:74 -msgid "picture areas JSON" -msgstr "" - -#: models.py:75 -msgid "extra information" -msgstr "" - -#: models.py:92 -msgid "picture" -msgstr "" - -#: models.py:93 -msgid "pictures" -msgstr "" - -#: views.py:79 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:80 -msgid "Picture imported successfully" -msgstr "" - -#: views.py:82 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:7 -msgid "Image" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Import picture" -msgstr "" - -#: templates/picture/picture_list_thumb.html:10 -#: templates/picture/picture_list_thumb.html:14 -msgid "Listing of all pictures" -msgstr "" - -#: templates/picture/picture_short.html:31 -msgid "Epoch" -msgstr "" - -#: templates/picture/picture_short.html:38 -msgid "Kind" -msgstr "" - -#: templates/picture/picture_short.html:45 -msgid "Genre" -msgstr "" - -#: templates/picture/picture_short.html:57 -msgid "View online" -msgstr "" - -#: templates/picture/picture_short.html:60 -msgid "download original" -msgstr "" - -#: templates/picture/picture_short.html:63 -#: templates/picture/picture_viewer.html:30 -msgid "Download" -msgstr "" - -#: templates/picture/picture_short.html:66 -msgid "original" -msgstr "" - -#: templates/picture/picture_viewer.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/picture/picture_viewer.html:23 -#: templates/picture/picture_viewer.html:50 -msgid "Themes" -msgstr "" - -#: templates/picture/picture_viewer.html:24 -#: templates/picture/picture_viewer.html:49 -#: templates/picture/picture_wide.html:31 -msgid "Objects" -msgstr "" - -#: templates/picture/picture_viewer.html:26 -msgid "Edit. note" -msgstr "" - -#: templates/picture/picture_viewer.html:27 -msgid "Infobox" -msgstr "" - -#: templates/picture/picture_viewer.html:28 -msgid "Picture's page" -msgstr "" - -#: templates/picture/picture_wide.html:20 -msgid "Motifs, themes and objects" -msgstr "" - -#: templates/picture/picture_wide.html:23 -msgid "Motifs and themes" -msgstr "" - -#: templates/picture/picture_wide.html:49 -msgid "See" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "Source" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "of the picture" -msgstr "" - -#: templates/picture/picture_wide.html:54 -msgid "Source XML file" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Picture on" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Editor's Platform" -msgstr "" - -#: templates/picture/picture_wide.html:59 -msgid "Picture description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/picture/picture_wide.html:62 -msgid "Picture description on Wikipedia" -msgstr "" diff --git a/apps/picture/locale/lt/LC_MESSAGES/django.mo b/apps/picture/locale/lt/LC_MESSAGES/django.mo deleted file mode 100644 index 0be4a8ced..000000000 Binary files a/apps/picture/locale/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/lt/LC_MESSAGES/django.po b/apps/picture/locale/lt/LC_MESSAGES/django.po deleted file mode 100644 index 4ef094735..000000000 --- a/apps/picture/locale/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,206 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" -"%100<10 || n%100>=20) ? 1 : 2);\n" - -#: forms.py:21 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:29 -msgid "Please supply an image." -msgstr "" - -#: models.py:37 -msgid "area" -msgstr "" - -#: models.py:38 -msgid "kind" -msgstr "" - -#: models.py:40 -msgid "thing" -msgstr "" - -#: models.py:41 -msgid "theme" -msgstr "" - -#: models.py:66 -msgid "title" -msgstr "" - -#: models.py:67 -msgid "slug" -msgstr "" - -#: models.py:68 -msgid "sort key" -msgstr "" - -#: models.py:69 models.py:70 -msgid "creation date" -msgstr "" - -#: models.py:72 -msgid "image_file" -msgstr "" - -#: models.py:74 -msgid "picture areas JSON" -msgstr "" - -#: models.py:75 -msgid "extra information" -msgstr "" - -#: models.py:92 -msgid "picture" -msgstr "" - -#: models.py:93 -msgid "pictures" -msgstr "" - -#: views.py:79 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:80 -msgid "Picture imported successfully" -msgstr "" - -#: views.py:82 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:7 -msgid "Image" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Import picture" -msgstr "" - -#: templates/picture/picture_list_thumb.html:10 -#: templates/picture/picture_list_thumb.html:14 -msgid "Listing of all pictures" -msgstr "" - -#: templates/picture/picture_short.html:31 -msgid "Epoch" -msgstr "" - -#: templates/picture/picture_short.html:38 -msgid "Kind" -msgstr "" - -#: templates/picture/picture_short.html:45 -msgid "Genre" -msgstr "" - -#: templates/picture/picture_short.html:57 -msgid "View online" -msgstr "" - -#: templates/picture/picture_short.html:60 -msgid "download original" -msgstr "" - -#: templates/picture/picture_short.html:63 -#: templates/picture/picture_viewer.html:30 -msgid "Download" -msgstr "" - -#: templates/picture/picture_short.html:66 -msgid "original" -msgstr "" - -#: templates/picture/picture_viewer.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/picture/picture_viewer.html:23 -#: templates/picture/picture_viewer.html:50 -msgid "Themes" -msgstr "" - -#: templates/picture/picture_viewer.html:24 -#: templates/picture/picture_viewer.html:49 -#: templates/picture/picture_wide.html:31 -msgid "Objects" -msgstr "" - -#: templates/picture/picture_viewer.html:26 -msgid "Edit. note" -msgstr "" - -#: templates/picture/picture_viewer.html:27 -msgid "Infobox" -msgstr "" - -#: templates/picture/picture_viewer.html:28 -msgid "Picture's page" -msgstr "" - -#: templates/picture/picture_wide.html:20 -msgid "Motifs, themes and objects" -msgstr "" - -#: templates/picture/picture_wide.html:23 -msgid "Motifs and themes" -msgstr "" - -#: templates/picture/picture_wide.html:49 -msgid "See" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "Source" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "of the picture" -msgstr "" - -#: templates/picture/picture_wide.html:54 -msgid "Source XML file" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Picture on" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Editor's Platform" -msgstr "" - -#: templates/picture/picture_wide.html:59 -msgid "Picture description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/picture/picture_wide.html:62 -msgid "Picture description on Wikipedia" -msgstr "" diff --git a/apps/picture/locale/pl/LC_MESSAGES/django.mo b/apps/picture/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index f3bc162ca..000000000 Binary files a/apps/picture/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/pl/LC_MESSAGES/django.po b/apps/picture/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 63546c20d..000000000 --- a/apps/picture/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,219 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-10-24 11:44+0200\n" -"PO-Revision-Date: 2014-10-24 11:48+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 1.5.4\n" - -#: forms.py:25 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:33 -msgid "Please supply an image." -msgstr "" - -#: models.py:35 -msgid "area" -msgstr "obszar" - -#: models.py:36 -msgid "kind" -msgstr "typ" - -#: models.py:38 -msgid "thing" -msgstr "przedmiot" - -#: models.py:39 -msgid "theme" -msgstr "motyw" - -#: models.py:75 -msgid "title" -msgstr "tytuÅ" - -#: models.py:76 -msgid "slug" -msgstr "slug" - -#: models.py:77 -msgid "sort key" -msgstr "klucz sortowania" - -#: models.py:78 -#, fuzzy -msgid "sort key by author" -msgstr "klucz sortowania" - -#: models.py:79 models.py:80 -msgid "creation date" -msgstr "data stworzenia" - -#: models.py:82 -msgid "image_file" -msgstr "" - -#: models.py:84 -msgid "picture areas JSON" -msgstr "obszary w JSON" - -#: models.py:85 -msgid "extra information" -msgstr "dodatkowa informacja" - -#: models.py:105 -msgid "picture" -msgstr "obraz" - -#: models.py:106 -msgid "pictures" -msgstr "obrazy" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Image" -msgstr "Obraz" - -#: templates/admin/picture/picture/change_list.html:9 -msgid "Import picture" -msgstr "Importuj obraz" - -#: templates/picture/picture_detail.html:21 -msgid "See also" -msgstr "Zobacz też" - -#: templates/picture/picture_list_thumb.html:9 -#: templates/picture/picture_list_thumb.html:13 -msgctxt "gallery" -msgid "Listing of all works" -msgstr "Spis wszystkich dzieÅ" - -#: templates/picture/picture_short.html:40 -msgid "Epoch" -msgstr "Rodzaj" - -#: templates/picture/picture_short.html:48 -msgid "Kind" -msgstr "Typ" - -#: templates/picture/picture_short.html:56 -msgid "Genre" -msgstr "Gatunek" - -#: templates/picture/picture_short.html:71 -msgid "View online" -msgstr "Zobacz online" - -#: templates/picture/picture_short.html:74 -msgid "download original" -msgstr "pobierz oryginaÅ" - -#: templates/picture/picture_viewer.html:36 -#: templates/picture/picture_wide.html:64 -msgid "Objects" -msgstr "Obiekty" - -#: templates/picture/picture_viewer.html:37 -msgid "Themes" -msgstr "Motywy" - -#: templates/picture/picture_viewer.html:41 -msgid "Infobox" -msgstr "Informacja" - -#: templates/picture/picture_wide.html:19 -msgid "Style" -msgstr "Styl" - -#: templates/picture/picture_wide.html:29 -msgid "Medium" -msgstr "Technika" - -#: templates/picture/picture_wide.html:36 -msgid "Dimensions" -msgstr "Wymiary pracy" - -#: templates/picture/picture_wide.html:42 -msgid "Date" -msgstr "Czas powstania" - -#: templates/picture/picture_wide.html:53 -msgid "Motifs, themes and objects" -msgstr "Motywy i obiekty" - -#: templates/picture/picture_wide.html:56 -msgid "Motifs and themes" -msgstr "Motywy" - -#: templates/picture/picture_wide.html:82 -msgid "See" -msgstr "Zobacz" - -#: templates/picture/picture_wide.html:85 -msgid "Source" -msgstr "ŹródÅo" - -#: templates/picture/picture_wide.html:85 -msgid "of the picture" -msgstr "obrazu" - -#: templates/picture/picture_wide.html:87 -msgid "Source XML file" -msgstr "ŹródÅo XML" - -#: templates/picture/picture_wide.html:89 -msgid "Picture on" -msgstr "Obraz na" - -#: templates/picture/picture_wide.html:89 -msgid "Editor's Platform" -msgstr "platformie edytorskiej" - -#: templates/picture/picture_wide.html:92 -msgid "Picture description on Wikipedia" -msgstr "Opis w Wikipedii" - -#: views.py:91 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:92 -msgid "Picture imported successfully" -msgstr "Obraz zostaÅ zimportowany" - -#: views.py:94 -#, python-format -msgid "Error importing file: %r" -msgstr "BÅÄ d importu pliku: %r" - -#~ msgid "Download" -#~ msgstr "Pobierz" - -#~ msgid "original" -#~ msgstr "oryginaÅ" - -#~ msgid "Edit. note" -#~ msgstr "Nota edytorska" - -#~ msgid "Picture's page" -#~ msgstr "Strona obrazu" - -#~ msgid "Picture description on Lektury.Gazeta.pl" -#~ msgstr "Opis na Lektury.Gazeta.pl" diff --git a/apps/picture/locale/ru/LC_MESSAGES/django.mo b/apps/picture/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index 714a042c1..000000000 Binary files a/apps/picture/locale/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/ru/LC_MESSAGES/django.po b/apps/picture/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index 0bb775710..000000000 --- a/apps/picture/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,206 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: forms.py:21 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:29 -msgid "Please supply an image." -msgstr "" - -#: models.py:37 -msgid "area" -msgstr "" - -#: models.py:38 -msgid "kind" -msgstr "" - -#: models.py:40 -msgid "thing" -msgstr "" - -#: models.py:41 -msgid "theme" -msgstr "" - -#: models.py:66 -msgid "title" -msgstr "" - -#: models.py:67 -msgid "slug" -msgstr "" - -#: models.py:68 -msgid "sort key" -msgstr "" - -#: models.py:69 models.py:70 -msgid "creation date" -msgstr "" - -#: models.py:72 -msgid "image_file" -msgstr "" - -#: models.py:74 -msgid "picture areas JSON" -msgstr "" - -#: models.py:75 -msgid "extra information" -msgstr "" - -#: models.py:92 -msgid "picture" -msgstr "" - -#: models.py:93 -msgid "pictures" -msgstr "" - -#: views.py:79 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:80 -msgid "Picture imported successfully" -msgstr "" - -#: views.py:82 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:7 -msgid "Image" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Import picture" -msgstr "" - -#: templates/picture/picture_list_thumb.html:10 -#: templates/picture/picture_list_thumb.html:14 -msgid "Listing of all pictures" -msgstr "" - -#: templates/picture/picture_short.html:31 -msgid "Epoch" -msgstr "" - -#: templates/picture/picture_short.html:38 -msgid "Kind" -msgstr "" - -#: templates/picture/picture_short.html:45 -msgid "Genre" -msgstr "" - -#: templates/picture/picture_short.html:57 -msgid "View online" -msgstr "" - -#: templates/picture/picture_short.html:60 -msgid "download original" -msgstr "" - -#: templates/picture/picture_short.html:63 -#: templates/picture/picture_viewer.html:30 -msgid "Download" -msgstr "" - -#: templates/picture/picture_short.html:66 -msgid "original" -msgstr "" - -#: templates/picture/picture_viewer.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/picture/picture_viewer.html:23 -#: templates/picture/picture_viewer.html:50 -msgid "Themes" -msgstr "" - -#: templates/picture/picture_viewer.html:24 -#: templates/picture/picture_viewer.html:49 -#: templates/picture/picture_wide.html:31 -msgid "Objects" -msgstr "" - -#: templates/picture/picture_viewer.html:26 -msgid "Edit. note" -msgstr "" - -#: templates/picture/picture_viewer.html:27 -msgid "Infobox" -msgstr "" - -#: templates/picture/picture_viewer.html:28 -msgid "Picture's page" -msgstr "" - -#: templates/picture/picture_wide.html:20 -msgid "Motifs, themes and objects" -msgstr "" - -#: templates/picture/picture_wide.html:23 -msgid "Motifs and themes" -msgstr "" - -#: templates/picture/picture_wide.html:49 -msgid "See" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "Source" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "of the picture" -msgstr "" - -#: templates/picture/picture_wide.html:54 -msgid "Source XML file" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Picture on" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Editor's Platform" -msgstr "" - -#: templates/picture/picture_wide.html:59 -msgid "Picture description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/picture/picture_wide.html:62 -msgid "Picture description on Wikipedia" -msgstr "" diff --git a/apps/picture/locale/uk/LC_MESSAGES/django.mo b/apps/picture/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index 714a042c1..000000000 Binary files a/apps/picture/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/picture/locale/uk/LC_MESSAGES/django.po b/apps/picture/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index 0bb775710..000000000 --- a/apps/picture/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,206 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: forms.py:21 -msgid "Please supply an XML." -msgstr "" - -#: forms.py:29 -msgid "Please supply an image." -msgstr "" - -#: models.py:37 -msgid "area" -msgstr "" - -#: models.py:38 -msgid "kind" -msgstr "" - -#: models.py:40 -msgid "thing" -msgstr "" - -#: models.py:41 -msgid "theme" -msgstr "" - -#: models.py:66 -msgid "title" -msgstr "" - -#: models.py:67 -msgid "slug" -msgstr "" - -#: models.py:68 -msgid "sort key" -msgstr "" - -#: models.py:69 models.py:70 -msgid "creation date" -msgstr "" - -#: models.py:72 -msgid "image_file" -msgstr "" - -#: models.py:74 -msgid "picture areas JSON" -msgstr "" - -#: models.py:75 -msgid "extra information" -msgstr "" - -#: models.py:92 -msgid "picture" -msgstr "" - -#: models.py:93 -msgid "pictures" -msgstr "" - -#: views.py:79 -#, python-format -msgid "" -"An error occurred: %(exception)s\n" -"\n" -"%(tb)s" -msgstr "" - -#: views.py:80 -msgid "Picture imported successfully" -msgstr "" - -#: views.py:82 -#, python-format -msgid "Error importing file: %r" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:7 -msgid "Image" -msgstr "" - -#: templates/admin/picture/picture/change_list.html:8 -msgid "Import picture" -msgstr "" - -#: templates/picture/picture_list_thumb.html:10 -#: templates/picture/picture_list_thumb.html:14 -msgid "Listing of all pictures" -msgstr "" - -#: templates/picture/picture_short.html:31 -msgid "Epoch" -msgstr "" - -#: templates/picture/picture_short.html:38 -msgid "Kind" -msgstr "" - -#: templates/picture/picture_short.html:45 -msgid "Genre" -msgstr "" - -#: templates/picture/picture_short.html:57 -msgid "View online" -msgstr "" - -#: templates/picture/picture_short.html:60 -msgid "download original" -msgstr "" - -#: templates/picture/picture_short.html:63 -#: templates/picture/picture_viewer.html:30 -msgid "Download" -msgstr "" - -#: templates/picture/picture_short.html:66 -msgid "original" -msgstr "" - -#: templates/picture/picture_viewer.html:11 -msgid "Wolne Lektury" -msgstr "" - -#: templates/picture/picture_viewer.html:23 -#: templates/picture/picture_viewer.html:50 -msgid "Themes" -msgstr "" - -#: templates/picture/picture_viewer.html:24 -#: templates/picture/picture_viewer.html:49 -#: templates/picture/picture_wide.html:31 -msgid "Objects" -msgstr "" - -#: templates/picture/picture_viewer.html:26 -msgid "Edit. note" -msgstr "" - -#: templates/picture/picture_viewer.html:27 -msgid "Infobox" -msgstr "" - -#: templates/picture/picture_viewer.html:28 -msgid "Picture's page" -msgstr "" - -#: templates/picture/picture_wide.html:20 -msgid "Motifs, themes and objects" -msgstr "" - -#: templates/picture/picture_wide.html:23 -msgid "Motifs and themes" -msgstr "" - -#: templates/picture/picture_wide.html:49 -msgid "See" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "Source" -msgstr "" - -#: templates/picture/picture_wide.html:52 -msgid "of the picture" -msgstr "" - -#: templates/picture/picture_wide.html:54 -msgid "Source XML file" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Picture on" -msgstr "" - -#: templates/picture/picture_wide.html:56 -msgid "Editor's Platform" -msgstr "" - -#: templates/picture/picture_wide.html:59 -msgid "Picture description on Lektury.Gazeta.pl" -msgstr "" - -#: templates/picture/picture_wide.html:62 -msgid "Picture description on Wikipedia" -msgstr "" diff --git a/apps/picture/migrations/0001_initial.py b/apps/picture/migrations/0001_initial.py deleted file mode 100644 index 59dbff64f..000000000 --- a/apps/picture/migrations/0001_initial.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from os.path import join -from django.conf import settings -from django.db import models, migrations -import sorl.thumbnail.fields -import jsonfield.fields -import django.core.files.storage -from django.utils.encoding import force_bytes - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Picture', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('title', models.CharField(max_length=120, verbose_name='Title')), - ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), - ('sort_key', models.CharField(verbose_name='Sort key', max_length=120, editable=False, db_index=True)), - ('sort_key_author', models.CharField(default='', verbose_name='sort key by author', max_length=120, editable=False, db_index=True)), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date', db_index=True)), - ('changed_at', models.DateTimeField(auto_now=True, verbose_name='creation date', db_index=True)), - ('xml_file', models.FileField(upload_to=b'xml', storage=django.core.files.storage.FileSystemStorage(base_url=b'/media/pictures/', location=join(force_bytes(settings.MEDIA_ROOT), b'pictures')), verbose_name=b'xml_file')), - ('image_file', sorl.thumbnail.fields.ImageField(upload_to=b'images', storage=django.core.files.storage.FileSystemStorage(base_url=b'/media/pictures/', location=join(force_bytes(settings.MEDIA_ROOT), b'pictures')), verbose_name='image_file')), - ('html_file', models.FileField(upload_to=b'html', storage=django.core.files.storage.FileSystemStorage(base_url=b'/media/pictures/', location=join(force_bytes(settings.MEDIA_ROOT), b'pictures')), verbose_name=b'html_file')), - ('areas_json', jsonfield.fields.JSONField(default={}, verbose_name='picture areas JSON', editable=False)), - ('extra_info', jsonfield.fields.JSONField(default={}, verbose_name='Additional information')), - ('culturepl_link', models.CharField(max_length=240, blank=True)), - ('wiki_link', models.CharField(max_length=240, blank=True)), - ('_related_info', jsonfield.fields.JSONField(null=True, editable=False, blank=True)), - ('width', models.IntegerField(null=True)), - ('height', models.IntegerField(null=True)), - ], - options={ - 'ordering': ('sort_key',), - 'verbose_name': 'picture', - 'verbose_name_plural': 'pictures', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='PictureArea', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('area', jsonfield.fields.JSONField(default={}, verbose_name='area', editable=False)), - ('kind', models.CharField(db_index=True, max_length=10, verbose_name='form', choices=[(b'thing', 'thing'), (b'theme', 'motif')])), - ('picture', models.ForeignKey(related_name=b'areas', to='picture.Picture')), - ], - options={ - }, - bases=(models.Model,), - ), - ] diff --git a/apps/picture/migrations/0002_remove_picture__related_info.py b/apps/picture/migrations/0002_remove_picture__related_info.py deleted file mode 100644 index 10542c85b..000000000 --- a/apps/picture/migrations/0002_remove_picture__related_info.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('picture', '0001_initial'), - ] - - operations = [ - migrations.RemoveField( - model_name='picture', - name='_related_info', - ), - ] diff --git a/apps/picture/migrations/0003_auto_20140924_1559.py b/apps/picture/migrations/0003_auto_20140924_1559.py deleted file mode 100644 index 4e257d809..000000000 --- a/apps/picture/migrations/0003_auto_20140924_1559.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('picture', '0002_remove_picture__related_info'), - ] - - operations = [ - migrations.AlterField( - model_name='picture', - name='title', - field=models.CharField(max_length=255, verbose_name='Title'), - ), - ] diff --git a/apps/picture/migrations/0004_auto_20141016_1337.py b/apps/picture/migrations/0004_auto_20141016_1337.py deleted file mode 100644 index 88d124934..000000000 --- a/apps/picture/migrations/0004_auto_20141016_1337.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('picture', '0003_auto_20140924_1559'), - ] - - operations = [ - migrations.AlterField( - model_name='picture', - name='title', - field=models.CharField(max_length=32767, verbose_name='Title'), - ), - ] diff --git a/apps/picture/migrations/0005_auto_20141022_1001.py b/apps/picture/migrations/0005_auto_20141022_1001.py deleted file mode 100644 index 677877eae..000000000 --- a/apps/picture/migrations/0005_auto_20141022_1001.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.core.files.base import ContentFile -from django.db import models, migrations -from django.template.loader import render_to_string - - -def rebuild_extra_info(apps, schema_editor): - Picture = apps.get_model("picture", "Picture") - from librarian.picture import PictureInfo - from librarian import dcparser - for pic in Picture.objects.all(): - info = dcparser.parse(pic.xml_file.path, PictureInfo) - pic.extra_info = info.to_dict() - areas_json = pic.areas_json - for field in areas_json[u'things'].values(): - field[u'object'] = field[u'object'].capitalize() - pic.areas_json = areas_json - html_text = unicode(render_to_string('picture/picture_info.html', { - 'things': pic.areas_json['things'], - 'themes': pic.areas_json['themes'], - })) - pic.html_file.save("%s.html" % pic.slug, ContentFile(html_text)) - pic.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('picture', '0004_auto_20141016_1337'), - ] - - operations = [ - migrations.RunPython(rebuild_extra_info), - ] diff --git a/apps/picture/migrations/0006_auto_20151221_1225.py b/apps/picture/migrations/0006_auto_20151221_1225.py deleted file mode 100644 index 2f03ce591..000000000 --- a/apps/picture/migrations/0006_auto_20151221_1225.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models -import jsonfield.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('picture', '0005_auto_20141022_1001'), - ] - - operations = [ - migrations.AlterField( - model_name='picture', - name='extra_info', - field=jsonfield.fields.JSONField(default={}, verbose_name='extra information'), - ), - migrations.AlterField( - model_name='picture', - name='slug', - field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), - ), - migrations.AlterField( - model_name='picture', - name='sort_key', - field=models.CharField(verbose_name='sort key', max_length=120, editable=False, db_index=True), - ), - migrations.AlterField( - model_name='picture', - name='title', - field=models.CharField(max_length=32767, verbose_name='title'), - ), - migrations.AlterField( - model_name='picturearea', - name='kind', - field=models.CharField(db_index=True, max_length=10, verbose_name='kind', choices=[(b'thing', 'thing'), (b'theme', 'theme')]), - ), - ] diff --git a/apps/picture/migrations/__init__.py b/apps/picture/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/picture/models.py b/apps/picture/models.py deleted file mode 100644 index 5aabe3c89..000000000 --- a/apps/picture/models.py +++ /dev/null @@ -1,342 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.db import models, transaction -import catalogue.models -from django.db.models import permalink -from sorl.thumbnail import ImageField -from django.conf import settings -from django.contrib.contenttypes.fields import GenericRelation -from django.core.files.storage import FileSystemStorage -from django.utils.datastructures import SortedDict -from fnpdjango.utils.text.slughifi import slughifi -from ssify import flush_ssi_includes -from picture import tasks -from StringIO import StringIO -import jsonfield -import itertools -import logging - -from PIL import Image - -from django.utils.translation import ugettext_lazy as _ -from newtagging import managers -from os import path - - -picture_storage = FileSystemStorage(location=path.join( - settings.MEDIA_ROOT, 'pictures'), - base_url=settings.MEDIA_URL + "pictures/") - - -class PictureArea(models.Model): - picture = models.ForeignKey('picture.Picture', related_name='areas') - area = jsonfield.JSONField(_('area'), default={}, editable=False) - kind = models.CharField(_('kind'), max_length=10, blank=False, - null=False, db_index=True, - choices=(('thing', _('thing')), - ('theme', _('theme')))) - - objects = models.Manager() - tagged = managers.ModelTaggedItemManager(catalogue.models.Tag) - tags = managers.TagDescriptor(catalogue.models.Tag) - tag_relations = GenericRelation(catalogue.models.Tag.intermediary_table_model) - - short_html_url_name = 'picture_area_short' - - @classmethod - def rectangle(cls, picture, kind, coords): - pa = PictureArea() - pa.picture = picture - pa.kind = kind - pa.area = coords - return pa - - def flush_includes(self, languages=True): - if not languages: - return - if languages is True: - languages = [lc for (lc, _ln) in settings.LANGUAGES] - flush_ssi_includes([ - template % (self.pk, lang) - for template in [ - '/katalog/pa/%d/short.%s.html', - ] - for lang in languages - ]) - - -class Picture(models.Model): - """ - Picture resource. - - """ - title = models.CharField(_('title'), max_length=32767) - slug = models.SlugField(_('slug'), max_length=120, db_index=True, unique=True) - sort_key = models.CharField(_('sort key'), max_length=120, db_index=True, editable=False) - sort_key_author = models.CharField(_('sort key by author'), max_length=120, db_index=True, editable=False, default=u'') - created_at = models.DateTimeField(_('creation date'), auto_now_add=True, db_index=True) - changed_at = models.DateTimeField(_('creation date'), auto_now=True, db_index=True) - xml_file = models.FileField('xml_file', upload_to="xml", storage=picture_storage) - image_file = ImageField(_('image_file'), upload_to="images", storage=picture_storage) - html_file = models.FileField('html_file', upload_to="html", storage=picture_storage) - areas_json = jsonfield.JSONField(_('picture areas JSON'), default={}, editable=False) - extra_info = jsonfield.JSONField(_('extra information'), default={}) - culturepl_link = models.CharField(blank=True, max_length=240) - wiki_link = models.CharField(blank=True, max_length=240) - - width = models.IntegerField(null=True) - height = models.IntegerField(null=True) - - objects = models.Manager() - tagged = managers.ModelTaggedItemManager(catalogue.models.Tag) - tags = managers.TagDescriptor(catalogue.models.Tag) - tag_relations = GenericRelation(catalogue.models.Tag.intermediary_table_model) - - short_html_url_name = 'picture_short' - - class AlreadyExists(Exception): - pass - - class Meta: - ordering = ('sort_key',) - - verbose_name = _('picture') - verbose_name_plural = _('pictures') - - def save(self, force_insert=False, force_update=False, **kwargs): - from sortify import sortify - - self.sort_key = sortify(self.title)[:120] - - try: - author = self.tags.filter(category='author')[0].sort_key - except IndexError: - author = u'' - self.sort_key_author = author - - ret = super(Picture, self).save(force_insert, force_update) - - return ret - - def __unicode__(self): - return self.title - - @permalink - def get_absolute_url(self): - return ('picture.views.picture_detail', [self.slug]) - - @classmethod - def from_xml_file(cls, xml_file, image_file=None, image_store=None, overwrite=False): - """ - Import xml and it's accompanying image file. - If image file is missing, it will be fetched by librarian.picture.ImageStore - which looks for an image file in the same directory the xml is, with extension matching - its mime type. - """ - from sortify import sortify - from django.core.files import File - from librarian.picture import WLPicture, ImageStore - close_xml_file = False - close_image_file = False - - - if image_file is not None and not isinstance(image_file, File): - image_file = File(open(image_file)) - close_image_file = True - - if not isinstance(xml_file, File): - xml_file = File(open(xml_file)) - close_xml_file = True - - with transaction.atomic(): - # use librarian to parse meta-data - if image_store is None: - image_store = ImageStore(picture_storage.path('images')) - picture_xml = WLPicture.from_file(xml_file, image_store=image_store) - - picture, created = Picture.objects.get_or_create(slug=picture_xml.slug[:120]) - if not created and not overwrite: - raise Picture.AlreadyExists('Picture %s already exists' % picture_xml.slug) - - picture.areas.all().delete() - picture.title = unicode(picture_xml.picture_info.title) - picture.extra_info = picture_xml.picture_info.to_dict() - - picture_tags = set(catalogue.models.Tag.tags_from_info(picture_xml.picture_info)) - motif_tags = set() - thing_tags = set() - - area_data = {'themes':{}, 'things':{}} - - # Treat all names in picture XML as in default language. - lang = settings.LANGUAGE_CODE - - for part in picture_xml.partiter(): - if picture_xml.frame: - c = picture_xml.frame[0] - part['coords'] = [[p[0] - c[0], p[1] - c[1]] for p in part['coords']] - if part.get('object', None) is not None: - _tags = set() - for objname in part['object'].split(','): - objname = objname.strip().capitalize() - tag, created = catalogue.models.Tag.objects.get_or_create(slug=slughifi(objname), category='thing') - if created: - tag.name = objname - setattr(tag, 'name_%s' % lang, tag.name) - tag.sort_key = sortify(tag.name) - tag.save() - #thing_tags.add(tag) - area_data['things'][tag.slug] = { - 'object': objname, - 'coords': part['coords'], - } - - _tags.add(tag) - area = PictureArea.rectangle(picture, 'thing', part['coords']) - area.save() - area.tags = _tags - else: - _tags = set() - for motifs in part['themes']: - for motif in motifs.split(','): - tag, created = catalogue.models.Tag.objects.get_or_create(slug=slughifi(motif), category='theme') - if created: - tag.name = motif - tag.sort_key = sortify(tag.name) - tag.save() - #motif_tags.add(tag) - _tags.add(tag) - area_data['themes'][tag.slug] = { - 'theme': motif, - 'coords': part['coords'] - } - - logging.debug("coords for theme: %s" % part['coords']) - area = PictureArea.rectangle(picture, 'theme', part['coords']) - area.save() - area.tags = _tags.union(picture_tags) - - picture.tags = picture_tags.union(motif_tags).union(thing_tags) - picture.areas_json = area_data - - if image_file is not None: - img = image_file - else: - img = picture_xml.image_file() - - modified = cls.crop_to_frame(picture_xml, img) - modified = cls.add_source_note(picture_xml, modified) - - picture.width, picture.height = modified.size - - modified_file = StringIO() - modified.save(modified_file, format='JPEG', quality=95) - # FIXME: hardcoded extension - detect from DC format or orginal filename - picture.image_file.save(path.basename(picture_xml.image_path), File(modified_file)) - - picture.xml_file.save("%s.xml" % picture.slug, File(xml_file)) - picture.save() - tasks.generate_picture_html(picture.id) - - if close_xml_file: - xml_file.close() - if close_image_file: - image_file.close() - - return picture - - @classmethod - def crop_to_frame(cls, wlpic, image_file): - img = Image.open(image_file) - if wlpic.frame is None or wlpic.frame == [[0, 0], [-1, -1]]: - return img - img = img.crop(itertools.chain(*wlpic.frame)) - return img - - @staticmethod - def add_source_note(wlpic, img): - from PIL import ImageDraw, ImageFont - from librarian import get_resource - - annotated = Image.new(img.mode, - (img.size[0], img.size[1] + 40), - (255, 255, 255) - ) - annotated.paste(img, (0, 0)) - annotation = Image.new('RGB', (img.size[0] * 3, 120), (255, 255, 255)) - ImageDraw.Draw(annotation).text( - (30, 15), - wlpic.picture_info.source_name, - (0, 0, 0), - font=ImageFont.truetype(get_resource("fonts/DejaVuSerif.ttf"), 75) - ) - annotated.paste(annotation.resize((img.size[0], 40), Image.ANTIALIAS), (0, img.size[1])) - return annotated - - @classmethod - def picture_list(cls, filter=None): - """Generates a hierarchical listing of all pictures - Pictures are optionally filtered with a test function. - """ - - pics = cls.objects.all().order_by('sort_key')\ - .only('title', 'slug', 'image_file') - - if filter: - pics = pics.filter(filter).distinct() - - pics_by_author = SortedDict() - orphans = [] - for tag in catalogue.models.Tag.objects.filter(category='author'): - pics_by_author[tag] = [] - - for pic in pics.iterator(): - authors = list(pic.tags.filter(category='author')) - if authors: - for author in authors: - pics_by_author[author].append(pic) - else: - orphans.append(pic) - - return pics_by_author, orphans - - @property - def info(self): - if not hasattr(self, '_info'): - from librarian import dcparser - from librarian import picture - info = dcparser.parse(self.xml_file.path, picture.PictureInfo) - self._info = info - return self._info - - def pretty_title(self, html_links=False): - picture = self - names = [(tag.name, tag.get_absolute_url()) - for tag in self.tags.filter(category='author')] - names.append((self.title, self.get_absolute_url())) - - if html_links: - names = ['<a href="%s">%s</a>' % (tag[1], tag[0]) for tag in names] - else: - names = [tag[0] for tag in names] - return ', '.join(names) - - def related_themes(self): - return catalogue.models.Tag.objects.usage_for_queryset( - self.areas.all(), counts=True).filter(category__in=('theme', 'thing')) - - def flush_includes(self, languages=True): - if not languages: - return - if languages is True: - languages = [lc for (lc, _ln) in settings.LANGUAGES] - flush_ssi_includes([ - template % (self.pk, lang) - for template in [ - '/katalog/p/%d/short.%s.html', - '/katalog/p/%d/mini.%s.html', - ] - for lang in languages - ]) diff --git a/apps/picture/tasks.py b/apps/picture/tasks.py deleted file mode 100644 index fc9eafa7a..000000000 --- a/apps/picture/tasks.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from celery.task import task -from django.core.files.base import ContentFile -from django.template.loader import render_to_string - - -@task -def generate_picture_html(picture_id): - import picture.models - pic = picture.models.Picture.objects.get(pk=picture_id) - - html_text = unicode(render_to_string('picture/picture_info.html', { - 'things': pic.areas_json['things'], - 'themes': pic.areas_json['themes'], - })) - pic.html_file.save("%s.html" % pic.slug, ContentFile(html_text)) - diff --git a/apps/picture/templates/admin/picture/picture/change_list.html b/apps/picture/templates/admin/picture/picture/change_list.html deleted file mode 100755 index 05566c0ab..000000000 --- a/apps/picture/templates/admin/picture/picture/change_list.html +++ /dev/null @@ -1,12 +0,0 @@ -{% extends "admin/change_list.html" %} -{% load i18n %} - -{% block content %} - <form action="{% url 'import_picture' %}" method="post" enctype="multipart/form-data"> - {% csrf_token %} - <p>XML: <input type="file" id="id_picture_xml_file" name="picture_xml_file" /><br/> - {% trans "Image" %}: <input type="file" id="id_picture_image_file" name="picture_image_file" /><br/> - <input type="submit" value="{% trans "Import picture" %}"/></p> - </form> - {{ block.super }} -{% endblock content %} diff --git a/apps/picture/templates/picture/collection.html b/apps/picture/templates/picture/collection.html deleted file mode 100644 index f794fbfeb..000000000 --- a/apps/picture/templates/picture/collection.html +++ /dev/null @@ -1,10 +0,0 @@ -{% extends "picture/picture_list_thumb.html" %} -{% load i18n %} - -{% block titleextra %}{{ context.collection.title }}{% endblock %} - -{% block book_list_header %}{{ context.collection.title }}{% endblock %} - -{% block book_list_info %} -{{ context.collection.description|safe }} -{% endblock %} diff --git a/apps/picture/templates/picture/picture_detail.html b/apps/picture/templates/picture/picture_detail.html deleted file mode 100644 index 514f8c3e8..000000000 --- a/apps/picture/templates/picture/picture_detail.html +++ /dev/null @@ -1,26 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load picture_tags catalogue_tags pagination_tags %} -{% load thumbnail %} -{% load build_absolute_uri from fnp_common %} - - -{% block ogimage %}{% thumbnail picture.image_file "535" upscale="false" as thumb %}{{ thumb.url|build_absolute_uri:request }}{% endthumbnail %}{% endblock %} - - -{% block titleextra %}{{ picture.title }}{% endblock %} - -{% block bodyid %}picture-detail{% endblock %} - -{% block body %} - {% picture_wide picture %} - -{% spaceless %} - -<section class="see-also" style="display: inline-block;"> -<h1>{% trans "See also" %}:</h1> -{% related_books picture %} -</section> -{% endspaceless %} - -{% endblock %} diff --git a/apps/picture/templates/picture/picture_info.html b/apps/picture/templates/picture/picture_info.html deleted file mode 100644 index c2d2c9aaa..000000000 --- a/apps/picture/templates/picture/picture_info.html +++ /dev/null @@ -1,17 +0,0 @@ - -<div id="picture-themes" class="dropdown-body"> - <ul> -{% for slug, theme in themes.items %} -<li><a href="#theme-{{slug}}" data-coords="{{theme.coords}}">{{theme.theme}}</a></li> -{% endfor %} - </ul> -</div> - -<div id="picture-objects" class="dropdown-body"> - <ul> -{% for slug, thing in things.items %} -<li><a href="#object-{{slug}}" data-coords="{{thing.coords}}">{{thing.object}}</a></li> -{% endfor %} - </ul> -</div> - diff --git a/apps/picture/templates/picture/picture_list_thumb.html b/apps/picture/templates/picture/picture_list_thumb.html deleted file mode 100644 index adfc25eb5..000000000 --- a/apps/picture/templates/picture/picture_list_thumb.html +++ /dev/null @@ -1,30 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} -{% load static %} -{% load ssi_include from ssify %} - -{% block bodyid %}picture-list{% endblock %} - -{% block titleextra %}{% trans "Listing of all works" context "gallery" %}{% endblock %} - - -{% block body %} - <h1>{% block book_list_header %}{% trans "Listing of all works" context "gallery" %}{% endblock %}</h1> - - <div class="left-column"><div class="normal-text"> - {% block book_list_info %} - {% ssi_include 'chunk' key='picture-list' %} - {% endblock %} - </div></div> - - <div class='clearboth'></div> - - - -{% work_list book_list %} - - - - -{% endblock %} diff --git a/apps/picture/templates/picture/picture_mini_box.html b/apps/picture/templates/picture/picture_mini_box.html deleted file mode 100644 index d8ebbf77b..000000000 --- a/apps/picture/templates/picture/picture_mini_box.html +++ /dev/null @@ -1,23 +0,0 @@ -{% spaceless %} - -{% load thumbnail %} -<div class="book-mini-box"> - <div class="book-mini-box-inner"> - {% if with_link %} - <a href="{{ picture.get_absolute_url }}"> - {% endif %} - {% if picture.image_file %} - <img src="{% thumbnail picture.image_file "139x193" crop="center" as thumb %}{{ thumb.url }}{% empty %}{{ picture.image_file.url }}{% endthumbnail %}" alt="{{ author_str }} â {{ picture.title }}" class="cover" /> - {% endif %} - <div class="desc"> - <span class="mono author">{{ author_str }}</span> - <span class="title">{{ picture.title }}</span> - </div> - {% if with_link %} - </a> - {% endif %} - </div> -</div> - - -{% endspaceless %} \ No newline at end of file diff --git a/apps/picture/templates/picture/picture_short.html b/apps/picture/templates/picture/picture_short.html deleted file mode 100644 index 1bd70a11b..000000000 --- a/apps/picture/templates/picture/picture_short.html +++ /dev/null @@ -1,84 +0,0 @@ -{% load i18n %} -{% load thumbnail %} -{% load catalogue_tags social_tags %} -{% load picture_tags %} -<div class="{% block box-class %}book-box{% endblock %} picture"> -<div class="book-box-inner"> - -<div class="book-box-body"> - - <div class="book-box-head"> - <div class="author"> - {% for tag in tags.author %} - <a href="{{ tag.get_absolute_url }}">{{ tag }}</a>{% if not forloop.last %}, - {% endif %}{% endfor %} - </div> - <div class="title"> - {% if main_link %}<a href="{{ main_link }}">{% endif %} - {{ picture.title }} - {% if main_link %}</a>{% endif %} - </div> - </div> - - - - <div class="cover-area"> - {% block picture-view %} - {% if main_link %}<a href="{{ main_link }}">{% endif %} - {% thumbnail picture.image_file "216x288" crop="center" as thumb %} - <img class="cover" src="{{thumb.url}}"/> - {% endthumbnail %} - {% if main_link %}</a>{% endif %} - {% endblock %} - {# what about licensing icons here #} - </div> - - <div class="tags"> - {% spaceless %} - - <span class="category"> - <span class="mono"> {% trans "Epoch" %}:</span> <span class="book-box-tag"> - {% for tag in tags.epoch %} - <a href="{{ tag.get_absolute_url }}">{{ tag }}</a> - {% if not forloop.last %}<span>, </span>{% endif %} - {% endfor %} - </span></span> - - <span class="category"> - <span class="mono"> {% trans "Kind" %}:</span> <span class="book-box-tag"> - {% for tag in tags.kind %} - <a href="{{ tag.get_absolute_url }}">{{ tag }}</a> - {% if not forloop.last %}<span>, </span>{% endif %} - {% endfor %} - </span></span> - - <span class="category"> - <span class="mono"> {% trans "Genre" %}:</span> <span class="book-box-tag"> - {% for tag in tags.genre %} - <a href="{{ tag.get_absolute_url }}">{{ tag }}</a> - {% if not forloop.last %}<span>, </span>{% endif %} - {% endfor %} - </span></span> - - {% block extra_categories %} - {% endblock %} - - {% endspaceless %} - </div> - </div> - <ul class="book-box-tools"> - <li class="book-box-read"> - <a href="{% url 'picture_viewer' picture.slug %}" class="downarrow">{% trans "View online" %}</a> - </li> - <li class="book-box-download"> - <a href="{{picture.image_file.url}}" class="downarrow">{% trans "download original" %}</a> - </li> - </ul> - {% block book-box-extra-info %}{% endblock %} - {% block box-append %} - {% endblock %} - {% block right-column %} - {% endblock %} - <div class="clearboth"></div> -</div> -</div> diff --git a/apps/picture/templates/picture/picture_viewer.html b/apps/picture/templates/picture/picture_viewer.html deleted file mode 100644 index e169dbe0f..000000000 --- a/apps/picture/templates/picture/picture_viewer.html +++ /dev/null @@ -1,88 +0,0 @@ -{% extends "catalogue/viewer_base.html" %} -{% load i18n %} -{% load static from staticfiles %} -{% load catalogue_tags %} -{% load thumbnail %} - - -{% block title %}{{ picture.pretty_title }}{% endblock %} - - -{% block body-id %}picture-viewer{% endblock %} - - -{% block js-dependencies %} - <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script> -{% endblock %} - - -{% block no-menu-extra %} -<li><a class="square button plus inactive" href="#">+<!--➕--><!-- heavy plus sign --></a></li><li><a class="square button minus inactive" href="#">-<!-- ➖--><!-- heavy minus sign --></a></li> -{% endblock %} - - -{% block menu %} -<li><a style="width: 50%;display: inline-block;" class="square button plus inactive" href="#">+<!--➕--><!-- heavy plus sign --></a><a style="width: 50%;display: inline-block;" class="square button minus inactive" href="#">-<!-- ➖--><!-- heavy minus sign --></a></li> - - -<li><a href="{{ picture.get_absolute_url }}" id="menu-book" data-box="book-short"> - <img src="{% thumbnail picture.image_file '80x200' as thumb %}{{ thumb.url }}{% empty %}{{ picture.image_file.url }}{% endthumbnail %}" - width="80" - alt="{{ picture.pretty_title }}" - title="{{ picture.pretty_title }}"> -</a></li> - - -<li><a href="#picture-objects" class="dropdown"><span class="label">{% trans "Objects" %}</span></a></li> -<li><a href="#picture-themes" class="dropdown"><span class="label">{% trans "Themes" %}</span></a></li> - - -<li id="menu-info"><a href="#info" data-box="info"> - <span class="label">{% trans "Infobox" %}</span> -</a></li> - -<li id="sponsors"> - {% for sponsor in sponsors %} - {% thumbnail sponsor.logo "80x200" as logo %} - <a href="{{ sponsor.url }}" target="_blank"><img src="{{ logo.url }}" alt="{{ sponsor.name }}" /></a> - {% endthumbnail %} - {% endfor %} -</li> - -{% endblock %} - -{% block main %} - <div id="picture-view"> - {% thumbnail picture.image_file "700x500" as pic %} - <div class="picture-wrap {% if picture.image_file|is_portrait %}portrait{% endif %}" - data-original-width="{{picture.width}}" data-original-height="{{picture.height}}" - data-original-url="{{ picture.image_file.url }}" - data-width="{{pic.width}}" data-height="{{pic.height}}" style="background-image: url('{{pic.url}}'); width: {{pic.width}}px; height: {{pic.height}}px;"> - </div> - {% endthumbnail %} - </div> -{% endblock %} - - -{% block footer %} -{{ picture.html_file.read|safe }} - -<div id="info" class="box"> - <div class="sponsors"> - <a href="/"><img src="{% static "img/logo-220.png" %}" alt="Wolne Lektury" ></img> - </a> - {% for sponsor in sponsors %} - {% thumbnail sponsor.logo "220x220" as logo %} - <a href="{{ sponsor.url }}" target="_blank"><img src="{{ logo.url }}" alt="{{ sponsor.name }}" /></a> - {% endthumbnail %} - {% endfor %} - </div> - - {% book_info picture %} -</div> - -<div class="box Picture-item" id="book-short"> - {{ picture.short_html }} -</div> - -{% endblock %} diff --git a/apps/picture/templates/picture/picture_wide.html b/apps/picture/templates/picture/picture_wide.html deleted file mode 100644 index 9f47c7baa..000000000 --- a/apps/picture/templates/picture/picture_wide.html +++ /dev/null @@ -1,112 +0,0 @@ -{% extends "picture/picture_short.html" %} -{% load i18n %} -{% load picture_tags thumbnail %} - - -{% block box-class %}book-wide-box{% endblock %} - -{% block picture-view %} -<a href="{{ main_link }}"> -{% thumbnail picture.image_file "535" upscale=0 as thumb %} -<img class="cover" src="{{thumb.url}}"/></a> -{% endthumbnail %} -{% endblock %} - - -{% block extra_categories %} -{% if picture.extra_info.styles %} -<span class="category"> -<span class="mono"> {% trans "Style" %}:</span> <span class="book-box-tag"> - {% for tag in picture.extra_info.styles %} - <a>{{ tag }}</a> - {% if not forloop.last %}<span>, </span>{% endif %} - {% endfor %} -</span></span> -{% endif %} - -{% if picture.extra_info.medium %} -<span class="category"> -<span class="mono"> {% trans "Medium" %}:</span> <span class="book-box-tag"> - <a>{{ picture.extra_info.medium }}</a> -</span></span> -{% endif %} - -{% if picture.extra_info.original_dimensions %} -<span class="category"> -<span class="mono"> {% trans "Dimensions" %}:</span> <span class="book-box-tag"> - <a>{{ picture.extra_info.original_dimensions }}</a> -</span></span> -{% endif %} - -<span class="category"> -<span class="mono"> {% trans "Date" %}:</span> <span class="book-box-tag"> - <a>{{ picture.extra_info.created_at }}</a> -</span></span> - -{% endblock %} - - -{% block book-box-extra-info %} -{% if themes or things%} - <div class="hidden-box-wrapper" id="theme-list-wrapper"> - <p><a class="hidden-box-trigger theme-list-link" - href="#">{% trans "Motifs, themes and objects" %}</a></p> - <div class="hidden-box"> - {% if themes %} - <p>{% trans "Motifs and themes" %}</p> - <ul> - {% for theme in themes %} - <li><a href="{% url 'picture_viewer' picture.slug %}#theme-{{theme.slug}}">{{ theme }}</a></li> - {% endfor %} - </ul> - {% endif %} - {% if things %} - <p>{% trans "Objects" %}</p> - <ul> - {% for thing in things %} - <li><a href="{% url 'picture_viewer' picture.slug %}#object-{{thing.slug}}">{{ thing }}</a></li> - {% endfor %} - </ul> - {% endif %} - </div> - </div> -{% else %} - <p> </p> -{% endif %} -{% endblock %} - - -{% block right-column %} -<div class="right-column"> - <div class="other-tools"> - <h2 class="mono">{% trans "See" %}</h2> - <ul class="plain"> - {% if extra_info.source_url %} - <li><a href="{{ extra_info.source_url }}">{% trans "Source" %}</a> {% trans "of the picture" %}</li> - {% endif %} - <li><a href="{{ picture.xml_file.url }}">{% trans "Source XML file" %}</a></li> - {% if extra_info.about and not hide_about %} - <li>{% trans "Picture on" %} <a href="{{ extra_info.about }}">{% trans "Editor's Platform" %}</a></li> - {% endif %} - {% if picture.wiki_link %} - <li><a href="{{ picture.wiki_link }}">{% trans "Picture description on Wikipedia" %}</a></li> - {% endif %} - </ul> - </div> - - {% comment %} - <div class="other-download"> - <h2 class="mono">{% trans "Download" %}</h2> - <ul class="plain"> - <li> - {% if related.media.mp3 or related.media.ogg or related.media.daisy %} - {% trans "Download all audiobooks for this book" %}: - {% download_audio book %}. - {% endif %} - </li> - {% custom_pdf_link_li book %} - </ul> - </div> - {% endcomment %} -</div> -{% endblock %} diff --git a/apps/picture/templates/picture/picturearea_short.html b/apps/picture/templates/picture/picturearea_short.html deleted file mode 100644 index 4fa97817d..000000000 --- a/apps/picture/templates/picture/picturearea_short.html +++ /dev/null @@ -1,17 +0,0 @@ -{% load i18n %} -{% load picture_tags %} -{% load catalogue_tags %} - -<div class="area"> - <div class="area-thumbnail"> - <a href="{% url 'picture_viewer' area.picture.slug %}{% if theme %}#theme-{{theme.slug}}{% else %}#object-{{thing.slug}}{% endif %}"><img src='{% area_thumbnail_url area "100x100" %}' /></a> - </div> - {% with area.picture as picture %} - <div class="area-description"> - <div class="mono source"> - {% book_title_html picture %} - </div> - </div> - <div style="clear:both"/> - {% endwith %} -</div> diff --git a/apps/picture/templatetags/__init__.py b/apps/picture/templatetags/__init__.py deleted file mode 100644 index 8b1378917..000000000 --- a/apps/picture/templatetags/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/picture/templatetags/picture_tags.py b/apps/picture/templatetags/picture_tags.py deleted file mode 100644 index 02d80b005..000000000 --- a/apps/picture/templatetags/picture_tags.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import logging -from random import randint -from django import template -from django.core.urlresolvers import reverse -from django.utils.cache import add_never_cache_headers -import sorl.thumbnail.default -from ssify import ssi_variable -from catalogue.utils import split_tags -from ..engine import CustomCroppingEngine -from ..models import Picture - - -register = template.Library() - -cropper = CustomCroppingEngine() - -@register.inclusion_tag('picture/picture_wide.html', takes_context=True) -def picture_wide(context, picture): - context.update({ - 'picture': picture, - 'main_link': reverse('picture_viewer', args=[picture.slug]), - 'request': context.get('request'), - 'tags': split_tags(picture.tags), - }) - return context - - -@register.simple_tag() -def area_thumbnail_url(area, geometry): - def to_square(coords): - w = coords[1][0] - coords[0][0] - h = coords[1][1] - coords[0][1] - if w == h: - return coords - elif w > h: - return [[coords[0][0] + w/2 - h/2, coords[0][1]], - [coords[1][0] - w/2 + h/2, coords[1][1]]] - else: - return [[coords[0][0], coords[0][1] + h/2 - w/2], - [coords[1][0], coords[1][1] - h/2 + w/2, ]] - - # so much for sorl extensibility. - # what to do about this? - _engine = sorl.thumbnail.default.engine - sorl.thumbnail.default.engine = cropper - coords = to_square(area.area) - - try: - th = sorl.thumbnail.default.backend.get_thumbnail( - area.picture.image_file, - geometry, - crop="%dpx %dpx %dpx %dpx" % tuple(map(lambda d: max(0, d), tuple(coords[0] + coords[1])))) - except Exception, e: - logging.exception("Error creating a thumbnail for PictureArea") - return '' - - sorl.thumbnail.default.engine = _engine - - return th.url - - -@ssi_variable(register, patch_response=[add_never_cache_headers]) -def picture_random_picture(request, exclude_ids, unless=None): - if unless: - return None - queryset = Picture.objects.exclude(pk__in=exclude_ids).exclude(image_file='') - count = queryset.count() - if count: - return queryset[randint(0, count - 1)].pk - else: - return None diff --git a/apps/picture/tests/__init__.py b/apps/picture/tests/__init__.py deleted file mode 100644 index b2e50b00f..000000000 --- a/apps/picture/tests/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from picture.tests.picture_import import * diff --git a/apps/picture/tests/files/kandinsky-composition-viii.png b/apps/picture/tests/files/kandinsky-composition-viii.png deleted file mode 100644 index a809eb5c4..000000000 Binary files a/apps/picture/tests/files/kandinsky-composition-viii.png and /dev/null differ diff --git a/apps/picture/tests/files/kandinsky-composition-viii.xml b/apps/picture/tests/files/kandinsky-composition-viii.xml deleted file mode 100644 index d9e79cbed..000000000 --- a/apps/picture/tests/files/kandinsky-composition-viii.xml +++ /dev/null @@ -1,36 +0,0 @@ -<picture> - <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> - <rdf:Description rdf:about="http://wiki.wolnepodreczniki.pl/Lektury:Andersen/Brzydkie_kaczÄ tko"> - <dc:creator xml:lang="pl">Kandinsky, Vasily</dc:creator> - <dc:title xml:lang="la">composition 8</dc:title> - <dc:publisher xml:lang="pl">Fundacja Nowoczesna Polska</dc:publisher> - <dc:contributor.editor xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">SekuÅa, Aleksandra</dc:contributor.editor> - <dc:contributor.editor xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Kwiatkowska, Katarzyna</dc:contributor.editor> - <dc:contributor.technical_editor xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Trzeciak, Weronika</dc:contributor.technical_editor> - <dc:subject.period xml:lang="pl">Modernizm</dc:subject.period> - <dc:subject.type xml:lang="pl">Obraz</dc:subject.type> - <dc:description xml:lang="pl">Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez BibliotekÄ NarodowÄ z egzemplarza pochodzÄ cego ze zbiorów BN.</dc:description> - <dc:description.dimensions xml:lang="pl">55 1/8 x 79 1/8 inches</dc:description.dimensions> - <dc:description.medium xml:lang="pl">Olej na pÅótnie</dc:description.medium> - <dc:identifier.url xml:lang="pl">http://wolnelektury.pl/katalog/obraz/kandinsky-composition-viii</dc:identifier.url> - <dc:source.URL xml:lang="pl">http://www.ibiblio.org/wm/paint/auth/kandinsky/kandinsky.comp-8.jpg</dc:source.URL> - <dc:source xml:lang="pl">Muzeum Narodowe, inw. 00000001.</dc:source> - <dc:rights xml:lang="pl">Domena publiczna - Vasily Kandinsky zm. ?</dc:rights> - <dc:date.pd xml:lang="pl">1940</dc:date.pd> - <dc:type>Image</dc:type> - <dc:format xml:lang="pl">image/png</dc:format> - <dc:format.dimensions xml:lang="pl">1090 x 755 px</dc:format.dimensions> - <dc:format.checksum.sha1 xml:lang="pl">122b590510ce70cc80e617557f82048ce20f1d7b</dc:format.checksum.sha1> - <dc:date xml:lang="pl">1923</dc:date> - <dc:language xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">eng</dc:language> - </rdf:Description> - </rdf:RDF> - - <sem type="object" object="kosmos"> - <div type="area" x1="17" y1="31" x2="275" y2="309"/> - </sem> - <sem type="theme" theme="nieporzÄ dek"> - <div type="area" x1="300" y1="138" x2="976" y2="514"/> - </sem> - -</picture> diff --git a/apps/picture/tests/picture_import.py b/apps/picture/tests/picture_import.py deleted file mode 100644 index 1e17289c3..000000000 --- a/apps/picture/tests/picture_import.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from __future__ import with_statement - -from os import path -from picture.models import Picture -from catalogue.test_utils import WLTestCase - - -class PictureTest(WLTestCase): - - def test_import(self): - picture = Picture.from_xml_file(path.join(path.dirname(__file__), "files/kandinsky-composition-viii.xml")) - - themes = set() - for area in picture.areas.all(): - themes.update([(tag.category, tag.name) - for tag in area.tags if tag.category in (u'theme', u'thing')]) - assert themes == set([(u'theme', u'nieporzÄ dek'), (u'thing', u'Kosmos')]), \ - 'Bad themes on Picture areas: %s' % themes - - pic_themes = set([tag.name for tag in picture.tags if tag.category in ('theme', 'thing')]) - assert not pic_themes, 'Unwanted themes set on Pictures: %s' % pic_themes - - picture.delete() - - def test_import_with_explicit_image(self): - picture = Picture.from_xml_file(path.join(path.dirname(__file__), "files/kandinsky-composition-viii.xml"), - path.join(path.dirname(__file__), "files/kandinsky-composition-viii.png")) - - picture.delete() - - - def test_import_2(self): - picture = Picture.from_xml_file(path.join(path.dirname(__file__), "files/kandinsky-composition-viii.xml"), - path.join(path.dirname(__file__), "files/kandinsky-composition-viii.png"), - overwrite=True) - cats = set([t.category for t in picture.tags]) - assert 'epoch' in cats - assert 'kind' in cats - diff --git a/apps/picture/views.py b/apps/picture/views.py deleted file mode 100644 index 1f8738650..000000000 --- a/apps/picture/views.py +++ /dev/null @@ -1,128 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from collections import OrderedDict -from django.contrib.auth.decorators import permission_required -from django.shortcuts import render_to_response, get_object_or_404, render -from django.template import RequestContext -from picture.models import Picture, PictureArea -from catalogue.utils import split_tags -from ssify import ssi_included -from sponsors.models import Sponsor - -# was picture/picture_list.html list (without thumbs) -def picture_list(request, filter=None, get_filter=None, template_name='catalogue/picture_list.html', cache_key=None, context=None): - """ generates a listing of all books, optionally filtered with a test function """ - - if get_filter: - filt = get_filter() - pictures_by_author, orphans = Picture.picture_list(filt) - books_nav = OrderedDict() - for tag in pictures_by_author: - if pictures_by_author[tag]: - books_nav.setdefault(tag.sort_key[0], []).append(tag) - - return render_to_response(template_name, locals(), - context_instance=RequestContext(request)) - - -def picture_list_thumb(request, filter=None, get_filter=None, template_name='picture/picture_list_thumb.html', cache_key=None, context=None): - book_list = Picture.objects.all() - if filter: - book_list = book_list.filter(filter) - if get_filter: - book_list = book_list.filter(get_filter()) - book_list = book_list.order_by('sort_key_author') - book_list = list(book_list) - return render_to_response(template_name, locals(), - context_instance=RequestContext(request)) - -def picture_detail(request, slug): - picture = get_object_or_404(Picture, slug=slug) - - theme_things = split_tags(picture.related_themes()) - - # categories = SortedDict() - # for tag in picture.tags.iterator(): - # categories.setdefault(tag.category, []).append(tag) - - themes = theme_things.get('theme', []) - things = theme_things.get('thing', []) - - extra_info = picture.extra_info - - return render_to_response("picture/picture_detail.html", locals(), - context_instance=RequestContext(request)) - - -def picture_viewer(request, slug): - picture = get_object_or_404(Picture, slug=slug) - sponsors = [] - for sponsor in picture.extra_info.get('sponsors', []): - have_sponsors = Sponsor.objects.filter(name=sponsor) - if have_sponsors.exists(): - sponsors.append(have_sponsors[0]) - return render_to_response("picture/picture_viewer.html", locals(), - context_instance=RequestContext(request)) - - -# ========= -# = Admin = -# ========= -@permission_required('picture.add_picture') -def import_picture(request): - """docstring for import_book""" - from django.http import HttpResponse - from picture.forms import PictureImportForm - from django.utils.translation import ugettext as _ - - import_form = PictureImportForm(request.POST, request.FILES) - if import_form.is_valid(): - try: - import_form.save() - except: - import sys - import pprint - import traceback - info = sys.exc_info() - exception = pprint.pformat(info[1]) - tb = '\n'.join(traceback.format_tb(info[2])) - return HttpResponse(_("An error occurred: %(exception)s\n\n%(tb)s") % {'exception':exception, 'tb':tb}, mimetype='text/plain') - return HttpResponse(_("Picture imported successfully")) - else: - return HttpResponse(_("Error importing file: %r") % import_form.errors) - - -@ssi_included -def picture_mini(request, pk, with_link=True): - picture = get_object_or_404(Picture, pk=pk) - author_str = ", ".join(tag.name - for tag in picture.tags.filter(category='author')) - return render(request, 'picture/picture_mini_box.html', { - 'picture': picture, - 'author_str': author_str, - 'with_link': with_link, - }) - - -@ssi_included -def picture_short(request, pk): - picture = get_object_or_404(Picture, pk=pk) - - return render(request, 'picture/picture_short.html', { - 'picture': picture, - 'main_link': picture.get_absolute_url(), - 'request': request, - 'tags': split_tags(picture.tags), - }) - - -@ssi_included -def picturearea_short(request, pk): - area = get_object_or_404(PictureArea, pk=pk) - theme = area.tags.filter(category='theme') - theme = theme and theme[0] or None - thing = area.tags.filter(category='thing') - thing = thing and thing[0] or None - return render(request, 'picture/picturearea_short.html', locals()) diff --git a/apps/polls/__init__.py b/apps/polls/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/polls/admin.py b/apps/polls/admin.py deleted file mode 100644 index 235e8f3c2..000000000 --- a/apps/polls/admin.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib import admin - -from .models import Poll, PollItem - - -class PollItemInline(admin.TabularInline): - model = PollItem - extra = 0 - readonly_fields = ('vote_count',) - - -class PollAdmin(admin.ModelAdmin): - inlines = [PollItemInline] - - -class PollItemAdmin(admin.ModelAdmin): - readonly_fields = ('vote_count',) - - -admin.site.register(Poll, PollAdmin) -admin.site.register(PollItem, PollItemAdmin) diff --git a/apps/polls/forms.py b/apps/polls/forms.py deleted file mode 100644 index 20d53fe33..000000000 --- a/apps/polls/forms.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import forms - - -class PollForm(forms.Form): - vote = forms.ChoiceField(widget=forms.RadioSelect) - - def __init__(self, *args, **kwargs): - poll = kwargs.pop('poll', None) - super(PollForm, self).__init__(*args, **kwargs) - self.fields['vote'].choices = [(item.id, item.content) for item in poll.items.all()] diff --git a/apps/polls/locale/pl/LC_MESSAGES/django.mo b/apps/polls/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index b4fa6ec6b..000000000 Binary files a/apps/polls/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/polls/locale/pl/LC_MESSAGES/django.po b/apps/polls/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 7334f63c4..000000000 --- a/apps/polls/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,69 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" - -#: models.py:12 -msgid "question" -msgstr "Pytanie" - -#: models.py:13 -msgid "slug" -msgstr "slug" - -#: models.py:14 -msgid "open" -msgstr "otwarta" - -#: models.py:17 -msgid "Poll" -msgstr "Ankieta" - -#: models.py:18 -msgid "Polls" -msgstr "Ankiety" - -#: models.py:22 -msgid "Slug of an open poll needs to be unique" -msgstr "Slug otwartej ankiety musi byÄ unikalny" - -#: models.py:42 -msgid "content" -msgstr "treÅÄ" - -#: models.py:43 -msgid "vote count" -msgstr "licznik gÅosów" - -#: models.py:46 -msgid "vote item" -msgstr "Pozycja ankiety" - -#: models.py:47 -msgid "vote items" -msgstr "Pozycje ankiety" - -#: templates/polls/poll.html:11 -msgid "Thanks for voting! You can see current results below." -msgstr "" -"DziÄkujemy za oddanie gÅosu w ankiecie! Poniżej znajdujÄ siÄ bieÅ¼Ä ce wyniki." - -#: templates/polls/tags/poll.html:23 -msgid "Submit" -msgstr "WyÅlij" diff --git a/apps/polls/migrations/0001_initial.py b/apps/polls/migrations/0001_initial.py deleted file mode 100644 index 91c68aa00..000000000 --- a/apps/polls/migrations/0001_initial.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Poll', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('question', models.TextField(verbose_name='question')), - ('slug', models.SlugField(verbose_name='Slug')), - ('open', models.BooleanField(default=False, verbose_name='open')), - ], - options={ - 'verbose_name': 'Poll', - 'verbose_name_plural': 'Polls', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='PollItem', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('content', models.TextField(verbose_name='content')), - ('vote_count', models.IntegerField(default=0, verbose_name='vote count')), - ('poll', models.ForeignKey(related_name=b'items', to='polls.Poll')), - ], - options={ - 'verbose_name': 'vote item', - 'verbose_name_plural': 'vote items', - }, - bases=(models.Model,), - ), - ] diff --git a/apps/polls/migrations/0002_auto_20151221_1225.py b/apps/polls/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index e75948893..000000000 --- a/apps/polls/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('polls', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='poll', - name='slug', - field=models.SlugField(verbose_name='slug'), - ), - ] diff --git a/apps/polls/migrations/__init__.py b/apps/polls/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/polls/models.py b/apps/polls/models.py deleted file mode 100644 index 8e356683e..000000000 --- a/apps/polls/models.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.db import models -from django.utils.translation import ugettext_lazy as _ -from django.core.exceptions import ValidationError -from django.core.urlresolvers import reverse - - -USED_POLLS_KEY = 'used_polls' - - -class Poll(models.Model): - - question = models.TextField(_('question')) - slug = models.SlugField(_('slug')) - open = models.BooleanField(_('open'), default=False) - - class Meta: - verbose_name = _('Poll') - verbose_name_plural = _('Polls') - - def clean(self): - if self.open and Poll.objects.exclude(pk=self.pk).filter(slug=self.slug).exists(): - raise ValidationError(_('Slug of an open poll needs to be unique')) - return super(Poll, self).clean() - - def __unicode__(self): - return self.question[:100] + ' (' + self.slug + ')' - - def get_absolute_url(self): - return reverse('poll', args=[self.slug]) - - @property - def vote_count(self): - return self.items.all().aggregate(models.Sum('vote_count'))['vote_count__sum'] - - def voted(self, session): - return self.id in session.get(USED_POLLS_KEY, []) - - -class PollItem(models.Model): - - poll = models.ForeignKey(Poll, related_name='items') - content = models.TextField(_('content')) - vote_count = models.IntegerField(_('vote count'), default=0) - - class Meta: - verbose_name = _('vote item') - verbose_name_plural = _('vote items') - - def __unicode__(self): - return self.content + ' @ ' + unicode(self.poll) - - @property - def vote_ratio(self): - return (float(self.vote_count) / self.poll.vote_count) * 100 if self.poll.vote_count else 0 - - def vote(self, session): - self.vote_count = self.vote_count + 1 - self.save() - session.setdefault(USED_POLLS_KEY, []).append(self.poll.id) - session.save() diff --git a/apps/polls/templates/polls/poll.html b/apps/polls/templates/polls/poll.html deleted file mode 100644 index edb14cf7b..000000000 --- a/apps/polls/templates/polls/poll.html +++ /dev/null @@ -1,15 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load polls_tags %} - -{% block titleextra %}{{poll.question}}{% endblock %} - - -{% block body %} - <div class="normal-text"> - {% if voted_already %} - <p class="poll-msg">{% trans "Thanks for voting! You can see current results below." %}</p> - {% endif %} - {% poll poll %} - </div> -{% endblock %} \ No newline at end of file diff --git a/apps/polls/templates/polls/tags/poll.html b/apps/polls/templates/polls/tags/poll.html deleted file mode 100644 index 4c4d2b50d..000000000 --- a/apps/polls/templates/polls/tags/poll.html +++ /dev/null @@ -1,28 +0,0 @@ -{% load i18n %} -{% load ssi_csrf_token from ssify %} - -{% if poll %} - {% if voted_already %} - {% if show_results %} - <div class="poll"> - <p>{{poll.question}}</p> - <ul> - {% for item in poll.items.all %} - <li> - {{item.content}} - <div class="poll-bar"><div class="poll-bar-inner" style="width:{{item.vote_ratio|stringformat:"f"}}%;"></div> - </li> - {% endfor %} - </ul> - </div> - {% endif %} - {% else %} - <div class="poll"> - <p>{{poll.question}}</p> - <form action="{{poll.get_absolute_url}}" method="post">{% ssi_csrf_token %} - {{ form.vote }} - <input type="submit" value="{% trans "Submit" %}" /> - </form> - </div> - {% endif %} -{% endif %} \ No newline at end of file diff --git a/apps/polls/templatetags/__init__.py b/apps/polls/templatetags/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/polls/templatetags/polls_tags.py b/apps/polls/templatetags/polls_tags.py deleted file mode 100644 index 38619c108..000000000 --- a/apps/polls/templatetags/polls_tags.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import template -from ..forms import PollForm - - -register = template.Library() - -@register.inclusion_tag('polls/tags/poll.html', takes_context=True) -def poll(context, poll, show_results=True, redirect_to=''): - form = None - voted_already = poll.voted(context.get('request').session) - if not voted_already: - form = PollForm(poll=poll, initial=dict(redirect_to=redirect_to)) - return dict(poll=poll, - form=form, - voted_already=voted_already, - vote_count=poll.vote_count, - show_results=show_results, - request=context.get('request'), - ) diff --git a/apps/polls/urls.py b/apps/polls/urls.py deleted file mode 100644 index fcd0ac6b7..000000000 --- a/apps/polls/urls.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url - - -urlpatterns = patterns('polls.views', - url(r'^(?P<slug>[^/]+)$', 'poll', name='poll'), -) diff --git a/apps/polls/views.py b/apps/polls/views.py deleted file mode 100644 index 79540c66a..000000000 --- a/apps/polls/views.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.core.urlresolvers import reverse -from django.shortcuts import get_object_or_404, redirect, render_to_response -from django.template import RequestContext -from django.views.decorators import cache -from django.views.decorators.http import require_http_methods - -from .models import Poll, PollItem -from .forms import PollForm - - -@cache.never_cache -@require_http_methods(['GET', 'POST']) -def poll(request, slug): - - poll = get_object_or_404(Poll, slug=slug, open=True) - - if request.method == 'POST': - redirect_to = reverse('poll', args = [slug]) - form = PollForm(request.POST, poll = poll) - if form.is_valid(): - if not poll.voted(request.session): - try: - poll_item = PollItem.objects.filter(pk=form.cleaned_data['vote'], poll=poll).get() - except PollItem.DoesNotExist: - pass - else: - poll_item.vote(request.session) - return redirect(redirect_to) - elif request.method == 'GET': - context = RequestContext(request) - context['poll'] = poll - context['voted_already'] = poll.voted(request.session) - return render_to_response('polls/poll.html', context) diff --git a/apps/reporting/__init__.py b/apps/reporting/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/reporting/locale/pl/LC_MESSAGES/django.mo b/apps/reporting/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index c09f3f0f1..000000000 Binary files a/apps/reporting/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/reporting/locale/pl/LC_MESSAGES/django.po b/apps/reporting/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index b811e0d91..000000000 --- a/apps/reporting/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,23 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-01-27 16:40+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2)\n" - -#: templates/reporting/main.html:5 -msgid "Reports" -msgstr "Raporty" diff --git a/apps/reporting/models.py b/apps/reporting/models.py deleted file mode 100644 index 740b9276e..000000000 --- a/apps/reporting/models.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# - - -# import views here, so that signals are attached correctly -from reporting.views import catalogue_pdf diff --git a/apps/reporting/templates/reporting/catalogue.csv b/apps/reporting/templates/reporting/catalogue.csv deleted file mode 100755 index eb2ebd982..000000000 --- a/apps/reporting/templates/reporting/catalogue.csv +++ /dev/null @@ -1 +0,0 @@ -{% load catalogue_tags %}{% book_tree_texml "" orphans books_by_parent %}{% for author, group in books_by_author.items %}{% if group %}{% book_tree_csv author group books_by_parent %}{% endif %}{% endfor %} diff --git a/apps/reporting/templates/reporting/catalogue.texml b/apps/reporting/templates/reporting/catalogue.texml deleted file mode 100755 index cb4a78f23..000000000 --- a/apps/reporting/templates/reporting/catalogue.texml +++ /dev/null @@ -1,118 +0,0 @@ -{% load catalogue_tags %} -<TeXML xmlns="http://getfo.sourceforge.net/texml/ns1"> - <TeXML escape="0"> - \documentclass[a4paper, oneside, 11pt]{book} - -\usepackage[MeX]{polski} - -\usepackage[xetex]{graphicx} -\usepackage{xltxtra} -\usepackage{xunicode} - -\usepackage{scalefnt} -\usepackage[colorlinks=true,linkcolor=black,setpagesize=false,urlcolor=black,xetex]{hyperref} - -\usepackage{longtable} - -\setmainfont [ -%ExternalLocation, -UprightFont = JunicodeWL-Regular, -ItalicFont = JunicodeWL-Italic, -BoldFont = JunicodeWL-Regular, -BoldItalicFont = JunicodeWL-Italic, -SmallCapsFont = JunicodeWL-Regular, -SmallCapsFeatures = {Letters={SmallCaps,UppercaseSmallCaps}}, -Numbers=OldStyle, -Scale=1.04, -LetterSpace=-1.0 -] {JunicodeWL} - -\pagestyle{plain} -\usepackage{fancyhdr} - -\makeatletter - -\usepackage{color} -\definecolor{note}{gray}{.3} - -\setlength{\hoffset}{-1cm} -\setlength{\oddsidemargin}{0pt} -\setlength{\marginparsep}{0pt} -\setlength{\marginparwidth}{0pt} - -\setlength{\voffset}{0pt} -\setlength{\topmargin}{0pt} -\setlength{\headheight}{0pt} -\setlength{\headsep}{0pt} -\setlength{\leftmargin}{0em} -\setlength{\rightmargin}{0em} -\setlength{\textheight}{24cm} -\setlength{\textwidth}{17.5cm} - - -\pagestyle{fancy} -\fancyhf{} -\renewcommand{\headrulewidth}{0pt} -\renewcommand{\footrulewidth}{0pt} -\lfoot{\footnotesize Katalog biblioteki internetowej WolneLektury.pl, \today} -\cfoot{} -\rfoot{\footnotesize \thepage} - -\clubpenalty=100000 -\widowpenalty=100000 - - -% see http://osdir.com/ml/tex.xetex/2005-10/msg00003.html -\newsavebox{\ximagebox}\newlength{\ximageheight} -\newsavebox{\xglyphbox}\newlength{\xglyphheight} -\newcommand{\xbox}[1] -{\savebox{\ximagebox}{#1}\settoheight{\ximageheight}{\usebox {\ximagebox}}% -\savebox{\xglyphbox}{\char32}\settoheight{\xglyphheight}{\usebox {\xglyphbox}}% -\raisebox{\ximageheight}[0pt][0pt]{%\raisebox{-\xglyphheight}[0pt] [0pt]{% -\makebox[0pt][l]{\usebox{\xglyphbox}}}%}% -\usebox{\ximagebox}% -\raisebox{0pt}[0pt][0pt]{\makebox[0pt][r]{\usebox{\xglyphbox}}}} - - -\newcommand{\name}[1]{% -\\ -\Large{#1}% -} - -\newcommand{\note}[1]{% -\small{\color{note}{#1}}% -} - - -\begin{document} - - \noindent \begin{minipage}[t]{.35\textwidth}\vspace{0pt} - \href{http://www.wolnelektury.pl}{\xbox{\includegraphics[width=\textwidth]{wl-logo.png}}} - \end{minipage} - - \begin{minipage}[t]{.65\textwidth}\vspace{0pt} - \begin{flushright} - \section*{Katalog biblioteki internetowej - \href{http://www.wolnelektury.pl/}{WolneLektury.pl}.} - stan na \today - \end{flushright} - \end{minipage} - - \begin{longtable}{p{9.5cm} p{5.5cm}r p{2cm}} - - <TeXML escape="1"> - {% book_tree_texml orphans books_by_parent %} - {% for author, group in books_by_author.items %} - {% if group %} - <cmd name="name"><parm>{{ author }}</parm></cmd> - <ctrl ch='\' /> - - {% book_tree_texml group books_by_parent %} - {% endif %} - {% endfor %} - </TeXML> - - \end{longtable} - \end{document} - </TeXML> -</TeXML> \ No newline at end of file diff --git a/apps/reporting/templates/reporting/main.html b/apps/reporting/templates/reporting/main.html deleted file mode 100755 index 46d49c9ea..000000000 --- a/apps/reporting/templates/reporting/main.html +++ /dev/null @@ -1,48 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load reporting_stats catalogue_tags %} - -{% block titleextra %}{% trans "Reports" %}{% endblock %} - -{% block bodyid %}reports-stats{% endblock %} - - -{% block body %} - <h1>Statystyka</h1> - - <div class="normal-text"> - - <h3>Audiobooki</h3> - - <table class="stats"> - <tr><th>Utwory</th></tr> - <tr><td>Utwory:</td><td>{% count_books %}</td></tr> - <tr><td>Niezależne ksiÄ Å¼ki:</td><td>{% count_books_root %}</td></tr> - <tr><td>Utwory nadrzÄdne:</td><td>{% count_books_parent %}</td></tr> - <tr><td>Wszystkie utwory:</td><td>{% count_books_all %}</td></tr> - - <tr><th>Media</th><th>Liczba</th><th>Rozmiar</th><th>Do wymiany</th></tr> - {% for mt in media_types %} - <tr><td>{{ mt.type }}:</td> - <td>{{ mt.count }}</td> - <td>{{ mt.size|filesizeformat }}</td> - <td>{{ mt.deprecated }} - {% for m in mt.deprecated_files %} - <br/><a href="{{ m.book.get_absolute_url }}">{% book_title m.book %}: {{ m }}</a> - {% endfor %} - </td> - </tr> - {% endfor %} - </table> - - <h3>Licencje</h3> - <ul> - {% for license, license_description in licenses %} - <li>{{ license }} ({{ license_description }})</li> - {% endfor %} - </ul> - - - </div> - -{% endblock %} diff --git a/apps/reporting/templatetags/__init__.py b/apps/reporting/templatetags/__init__.py deleted file mode 100755 index e69de29bb..000000000 diff --git a/apps/reporting/templatetags/reporting_stats.py b/apps/reporting/templatetags/reporting_stats.py deleted file mode 100755 index 7bbe23d03..000000000 --- a/apps/reporting/templatetags/reporting_stats.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from functools import wraps -from django import template -from catalogue.models import Book - - -register = template.Library() - -class StatsNode(template.Node): - def __init__(self, value, varname=None): - self.value = value - self.varname = varname - - def render(self, context): - if self.varname: - context[self.varname] = self.value - return '' - else: - return self.value - - -def register_counter(f): - """Turns a simple counting function into a registered counter tag. - - You can run a counter tag as a simple {% tag_name %} tag, or - as {% tag_name var_name %} to store the result in a variable. - - """ - @wraps(f) - def wrapped(parser, token): - try: - tag_name, args = token.contents.split(None, 1) - except ValueError: - args = None - return StatsNode(f(), args) - - return register.tag(wrapped) - - -@register_counter -def count_books_all(): - return Book.objects.all().count() - -@register_counter -def count_books(): - return Book.objects.filter(children=None).count() - -@register_counter -def count_books_parent(): - return Book.objects.exclude(children=None).count() - -@register_counter -def count_books_root(): - return Book.objects.filter(parent=None).count() diff --git a/apps/reporting/urls.py b/apps/reporting/urls.py deleted file mode 100755 index e78f961b2..000000000 --- a/apps/reporting/urls.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url - - -urlpatterns = patterns('reporting.views', - url(r'^$', 'stats_page', name='reporting_stats'), - url(r'^katalog.pdf$', 'catalogue_pdf', name='reporting_catalogue_pdf'), - url(r'^katalog.csv$', 'catalogue_csv', name='reporting_catalogue_csv'), -) - diff --git a/apps/reporting/utils.py b/apps/reporting/utils.py deleted file mode 100755 index 8ecb9b045..000000000 --- a/apps/reporting/utils.py +++ /dev/null @@ -1,123 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from errno import ENOENT -import os -import os.path -from django.conf import settings -import logging -from django.http import HttpResponse - -logger = logging.getLogger(__name__) - - -def render_to_pdf(output_path, template, context=None, add_files=None): - """Renders a TeXML document into a PDF file. - - :param str output_path: is where the PDF file should go - :param str template: is a TeXML template path - :param context: is context for rendering the template - :param dict add_files: a dictionary of additional files XeTeX will need - """ - - from StringIO import StringIO - import shutil - from tempfile import mkdtemp - import subprocess - import Texml.processor - from django.template.loader import render_to_string - - rendered = render_to_string(template, context) - texml = StringIO(rendered.encode('utf-8')) - tempdir = mkdtemp(prefix="render_to_pdf-") - tex_path = os.path.join(tempdir, "doc.tex") - with open(tex_path, 'w') as tex_file: - Texml.processor.process(texml, tex_file, encoding="utf-8") - - if add_files: - for add_name, src_file in add_files.items(): - add_path = os.path.join(tempdir, add_name) - if hasattr(src_file, "read"): - with open(add_path, 'w') as add_file: - add_file.write(add_file.read()) - else: - shutil.copy(src_file, add_path) - - cwd = os.getcwd() - os.chdir(tempdir) - try: - subprocess.check_call(['xelatex', '-interaction=batchmode', tex_path], - stdout=subprocess.PIPE, stderr=subprocess.PIPE) - try: - os.makedirs(os.path.dirname(output_path)) - except: - pass - shutil.move(os.path.join(tempdir, "doc.pdf"), output_path) - finally: - os.chdir(cwd) - shutil.rmtree(tempdir) - - -def render_to_csv(output_path, template, context=None, add_files=None): - """Renders a TeXML document into a PDF file. - - :param str output_path: is where the PDF file should go - :param str template: is a TeXML template path - :param context: is context for rendering the template - :param dict add_files: a dictionary of additional files XeTeX will need - """ - - from django.template.loader import render_to_string - - try: - os.makedirs(os.path.dirname(output_path)) - except: - pass - - rendered = render_to_string(template, context) - with open(output_path, 'w') as csv_file: - csv_file.write(rendered.encode('utf-8')) - - -def read_chunks(f, size=8192): - chunk = f.read(size) - while chunk: - yield chunk - chunk = f.read(size) - - -def generated_file_view(file_name, mime_type, send_name=None, signals=None): - file_path = os.path.join(settings.MEDIA_ROOT, file_name) - if send_name is None: - send_name = os.path.basename(file_name) - - def signal_handler(*args, **kwargs): - try: - os.unlink(file_path) - except OSError as oe: - if oe.errno != ENOENT: - raise oe - - if signals: - for signal in signals: - signal.connect(signal_handler, weak=False) - - def decorator(func): - def view(request, *args, **kwargs): - if not os.path.exists(file_path): - func(file_path, *args, **kwargs) - - if hasattr(send_name, "__call__"): - name = send_name() - else: - name = send_name - - response = HttpResponse(content_type=mime_type) - response['Content-Disposition'] = 'attachment; filename=%s' % name - with open(file_path) as f: - for chunk in read_chunks(f): - response.write(chunk) - return response - return view - return decorator diff --git a/apps/reporting/views.py b/apps/reporting/views.py deleted file mode 100644 index 8cb2715d5..000000000 --- a/apps/reporting/views.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import os.path -from datetime import date -from django.conf import settings -from django.contrib.admin.views.decorators import staff_member_required -from django.db.models import Count -from django.shortcuts import render_to_response -from django.template import RequestContext - -from catalogue.models import Book, BookMedia -from reporting.utils import render_to_pdf, render_to_csv, generated_file_view - - -@staff_member_required -def stats_page(request): - media = BookMedia.objects.count() - media_types = BookMedia.objects.values('type').\ - annotate(count=Count('type')).\ - order_by('type') - for mt in media_types: - mt['size'] = sum(b.file.size for b in BookMedia.objects.filter(type=mt['type']).iterator()) - if mt['type'] in ('mp3', 'ogg'): - deprecated = BookMedia.objects.filter( - type=mt['type'], source_sha1=None) - mt['deprecated'] = deprecated.count() - mt['deprecated_files'] = deprecated.order_by('book', 'name') - else: - mt['deprecated'] = '-' - - licenses = set(((b.extra_info.get('license'), b.extra_info.get('license_description')) - for b in Book.objects.all().iterator() if b.extra_info.get('license'))) - - return render_to_response('reporting/main.html', - locals(), context_instance=RequestContext(request)) - - -@generated_file_view('reports/katalog.pdf', 'application/pdf', - send_name=lambda: 'wolnelektury_%s.pdf' % date.today(), - signals=[Book.published]) -def catalogue_pdf(path): - books_by_author, orphans, books_by_parent = Book.book_list() - render_to_pdf(path, 'reporting/catalogue.texml', locals(), { - "wl-logo.png": os.path.join(settings.STATIC_ROOT, "img/logo-big.png"), - }) - - -@generated_file_view('reports/katalog.csv', 'application/csv', - send_name=lambda: 'wolnelektury_%s.csv' % date.today(), - signals=[Book.published]) -def catalogue_csv(path): - books_by_author, orphans, books_by_parent = Book.book_list() - render_to_csv(path, 'reporting/catalogue.csv', locals()) diff --git a/apps/search/__init__.py b/apps/search/__init__.py deleted file mode 100644 index d38412449..000000000 --- a/apps/search/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# diff --git a/apps/search/context_processors.py b/apps/search/context_processors.py deleted file mode 100644 index 3cb9256c6..000000000 --- a/apps/search/context_processors.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.core.urlresolvers import reverse -from search.forms import SearchForm - - -def search_form(request): - return { 'search_form': SearchForm(reverse('search.views.hint'), request.GET) } diff --git a/apps/search/custom.py b/apps/search/custom.py deleted file mode 100644 index b3b704d0b..000000000 --- a/apps/search/custom.py +++ /dev/null @@ -1,191 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from sunburnt import sunburnt -from lxml import etree -import urllib -import warnings -from sunburnt import search -import copy -from httplib2 import socket -import re - - -class TermVectorOptions(search.Options): - def __init__(self, schema, original=None): - self.schema = schema - if original is None: - self.fields = set() - self.positions = False - else: - self.fields = copy.copy(original.fields) - self.positions = copy.copy(original.positions) - - def update(self, positions=False, fields=None): - if fields is None: - fields = [] - if isinstance(fields, basestring): - fields = [fields] - self.schema.check_fields(fields, {"stored": True}) - self.fields.update(fields) - self.positions = positions - - def options(self): - opts = {} - if self.positions or self.fields: - opts['tv'] = 'true' - if self.positions: - opts['tv.positions'] = 'true' - if self.fields: - opts['tv.fl'] = ','.join(sorted(self.fields)) - return opts - - -class CustomSolrConnection(sunburnt.SolrConnection): - def __init__(self, *args, **kw): - super(CustomSolrConnection, self).__init__(*args, **kw) - self.analysis_url = self.url + "analysis/field/" - - def analyze(self, params): - qs = urllib.urlencode(params) - url = "%s?%s" % (self.analysis_url, qs) - if len(url) > self.max_length_get_url: - warnings.warn("Long query URL encountered - POSTing instead of " - "GETting. This query will not be cached at the HTTP layer") - url = self.analysis_url - kwargs = dict( - method="POST", - body=qs, - headers={"Content-Type": "application/x-www-form-urlencoded"}, - ) - else: - kwargs = dict(method="GET") - r, c = self.request(url, **kwargs) - if r.status != 200: - raise sunburnt.SolrError(r, c) - return c - - -# monkey patching sunburnt SolrSearch -search.SolrSearch.option_modules += ('term_vectorer',) - - -def __term_vector(self, positions=False, fields=None): - newself = self.clone() - newself.term_vectorer.update(positions, fields) - return newself -setattr(search.SolrSearch, 'term_vector', __term_vector) - - -def __patched__init_common_modules(self): - __original__init_common_modules(self) - self.term_vectorer = TermVectorOptions(self.schema) -__original__init_common_modules = search.SolrSearch._init_common_modules -setattr(search.SolrSearch, '_init_common_modules', __patched__init_common_modules) - - -class CustomSolrInterface(sunburnt.SolrInterface): - # just copied from parent and SolrConnection -> CustomSolrConnection - def __init__(self, url, schemadoc=None, http_connection=None, mode='', retry_timeout=-1, max_length_get_url=sunburnt.MAX_LENGTH_GET_URL): - self.conn = CustomSolrConnection(url, http_connection, retry_timeout, max_length_get_url) - self.schemadoc = schemadoc - if 'w' not in mode: - self.writeable = False - elif 'r' not in mode: - self.readable = False - try: - self.init_schema() - except socket.error, e: - raise socket.error, "Cannot connect to Solr server, and search indexing is enabled (%s)" % str(e) - - def _analyze(self, **kwargs): - if not self.readable: - raise TypeError("This Solr instance is only for writing") - args = { - 'analysis_showmatch': True - } - if 'field' in kwargs: args['analysis_fieldname'] = kwargs['field'] - if 'text' in kwargs: args['analysis_fieldvalue'] = kwargs['text'] - if 'q' in kwargs: args['q'] = kwargs['q'] - if 'query' in kwargs: args['q'] = kwargs['q'] - - params = map(lambda (k, v): (k.replace('_', '.'), v), sunburnt.params_from_dict(**args)) - - content = self.conn.analyze(params) - doc = etree.fromstring(content) - return doc - - def highlight(self, **kwargs): - doc = self._analyze(**kwargs) - analyzed = doc.xpath("//lst[@name='index']/arr[last()]/lst[bool/@name='match']") - matches = set() - for wrd in analyzed: - start = int(wrd.xpath("int[@name='start']")[0].text) - end = int(wrd.xpath("int[@name='end']")[0].text) - matches.add((start, end)) - - if matches: - return self.substring(kwargs['text'], matches, - margins=kwargs.get('margins', 30), - mark=kwargs.get('mark', ("<b>", "</b>"))) - else: - return None - - def analyze(self, **kwargs): - doc = self._analyze(**kwargs) - terms = doc.xpath("//lst[@name='index']/arr[last()]/lst/str[1]") - terms = map(lambda n: unicode(n.text), terms) - return terms - - def expand_margins(self, text, start, end): - totlen = len(text) - - def is_boundary(x): - ws = re.compile(r"\W", re.UNICODE) - return bool(ws.match(x)) - - while start > 0: - if is_boundary(text[start - 1]): - break - start -= 1 - - while end < totlen - 1: - if is_boundary(text[end + 1]): - break - end += 1 - - return (start, end) - - def substring(self, text, matches, margins=30, mark=("<b>", "</b>")): - start = None - end = None - totlen = len(text) - matches_margins = map(lambda (s, e): - ((s, e), - (max(0, s - margins), min(totlen, e + margins))), - matches) - matches_margins = map(lambda (m, (s, e)): - (m, self.expand_margins(text, s, e)), - matches_margins) - - # lets start with first match - (start, end) = matches_margins[0][1] - matches = [matches_margins[0][0]] - - for (m, (s, e)) in matches_margins[1:]: - if end < s or start > e: - continue - start = min(start, s) - end = max(end, e) - matches.append(m) - - snip = text[start:end] - matches.sort(lambda a, b: cmp(b[0], a[0])) - - for (s, e) in matches: - off = - start - snip = snip[:e + off] + mark[1] + snip[e + off:] - snip = snip[:s + off] + mark[0] + snip[s + off:] - - return snip diff --git a/apps/search/fields.py b/apps/search/fields.py deleted file mode 100755 index 45d8b7ecf..000000000 --- a/apps/search/fields.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import forms -from django.forms.widgets import flatatt -from django.utils.encoding import smart_unicode -from django.utils.safestring import mark_safe -from json import dumps - - -class JQueryAutoCompleteWidget(forms.TextInput): - def __init__(self, options, *args, **kwargs): - self.options = dumps(options) - super(JQueryAutoCompleteWidget, self).__init__(*args, **kwargs) - - def render_js(self, field_id, options): - return u'$(\'#%s\').autocomplete(%s).result(autocomplete_result_handler);' % (field_id, options) - - def render(self, name, value=None, attrs=None): - final_attrs = self.build_attrs(attrs, name=name) - if value: - final_attrs['value'] = smart_unicode(value) - - if not self.attrs.has_key('id'): - final_attrs['id'] = 'id_%s' % name - - html = u'''<input type="text" %(attrs)s/> - <script type="text/javascript">//<!-- - %(js)s//--></script> - ''' % { - 'attrs': flatatt(final_attrs), - 'js' : self.render_js(final_attrs['id'], self.options), - } - - return mark_safe(html) - - -class JQueryAutoCompleteSearchWidget(JQueryAutoCompleteWidget): - def __init__(self, *args, **kwargs): - super(JQueryAutoCompleteSearchWidget, self).__init__(*args, **kwargs) - - def render_js(self, field_id, options): - return u"" - - -class JQueryAutoCompleteField(forms.CharField): - def __init__(self, source, options={}, *args, **kwargs): - if 'widget' not in kwargs: - options['source'] = source - kwargs['widget'] = JQueryAutoCompleteWidget(options) - - super(JQueryAutoCompleteField, self).__init__(*args, **kwargs) - - -class JQueryAutoCompleteSearchField(forms.CharField): - def __init__(self, options={}, *args, **kwargs): - if 'widget' not in kwargs: - kwargs['widget'] = JQueryAutoCompleteSearchWidget(options) - - super(JQueryAutoCompleteSearchField, self).__init__(*args, **kwargs) diff --git a/apps/search/forms.py b/apps/search/forms.py deleted file mode 100755 index 9e0a07880..000000000 --- a/apps/search/forms.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import forms -from django.utils.translation import ugettext_lazy as _ - -from search.fields import JQueryAutoCompleteSearchField - - -class SearchForm(forms.Form): - q = JQueryAutoCompleteSearchField(label=_('Search')) # {'minChars': 2, 'selectFirst': True, 'cacheLength': 50, 'matchContains': "word"}) - - def __init__(self, source, *args, **kwargs): - kwargs['auto_id'] = False - super(SearchForm, self).__init__(*args, **kwargs) - self.fields['q'].widget.attrs['id'] = 'search' - self.fields['q'].widget.attrs['autocomplete'] = 'off' - self.fields['q'].widget.attrs['data-source'] = source - if not 'q' in self.data: - self.fields['q'].widget.attrs['placeholder'] = _('title, author, theme/topic, epoch, kind, genre, phrase') diff --git a/apps/search/index.py b/apps/search/index.py deleted file mode 100644 index 31417ca87..000000000 --- a/apps/search/index.py +++ /dev/null @@ -1,946 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings - -import os -import re -import errno -from librarian import dcparser -from librarian.parser import WLDocument -from lxml import etree -import catalogue.models -from pdcounter.models import Author as PDCounterAuthor, BookStub as PDCounterBook -from itertools import chain -import traceback -import logging -log = logging.getLogger('search') -import sunburnt -import custom -import operator - -log = logging.getLogger('search') - -class SolrIndex(object): - def __init__(self, mode=None): - self.index = custom.CustomSolrInterface(settings.SOLR, mode=mode) - - -class Snippets(object): - """ - This class manages snippet files for indexed object (book) - the snippets are concatenated together, and their positions and - lengths are kept in lucene index fields. - """ - SNIPPET_DIR = "snippets" - - def __init__(self, book_id, revision=None): - try: - os.makedirs(os.path.join(settings.SEARCH_INDEX, self.SNIPPET_DIR)) - except OSError as exc: - if exc.errno == errno.EEXIST: - pass - else: raise - self.book_id = book_id - self.revision = revision - self.file = None - - @property - def path(self): - if self.revision: fn = "%d.%d" % (self.book_id, self.revision) - else: fn = "%d" % self.book_id - - return os.path.join(settings.SEARCH_INDEX, self.SNIPPET_DIR, fn) - - def open(self, mode='r'): - """ - Open the snippet file. Call .close() afterwards. - """ - if not 'b' in mode: - mode += 'b' - - if 'w' in mode: - if os.path.exists(self.path): - self.revision = 1 - while True: - if not os.path.exists(self.path): - break - self.revision += 1 - - self.file = open(self.path, mode) - self.position = 0 - return self - - def add(self, snippet): - """ - Append a snippet (unicode) to the snippet file. - Return a (position, length) tuple - """ - txt = snippet.encode('utf-8') - l = len(txt) - self.file.write(txt) - pos = (self.position, l) - self.position += l - return pos - - def get(self, pos): - """ - Given a tuple of (position, length) return an unicode - of the snippet stored there. - """ - self.file.seek(pos[0], 0) - txt = self.file.read(pos[1]).decode('utf-8') - return txt - - def close(self): - """Close snippet file""" - if self.file: - self.file.close() - - def remove(self): - self.revision = None - try: - os.unlink(self.path) - self.revision = 0 - while True: - self.revision += 1 - os.unlink(self.path) - except OSError: - pass - - -class Index(SolrIndex): - """ - Class indexing books. - """ - def __init__(self): - super(Index, self).__init__(mode='rw') - - def delete_query(self, *queries): - """ - index.delete(queries=...) doesn't work, so let's reimplement it - using deletion of list of uids. - """ - uids = set() - for q in queries: - if isinstance(q, sunburnt.search.LuceneQuery): - q = self.index.query(q) - q.field_limiter.update(['uid']) - st = 0 - rows = 100 - while True: - ids = q.paginate(start=st, rows=rows).execute() - if not len(ids): - break - for res in ids: - uids.add(res['uid']) - st += rows - if uids: - self.index.delete(uids) - return True - else: - return False - - def index_tags(self, *tags, **kw): - """ - Re-index global tag list. - Removes all tags from index, then index them again. - Indexed fields include: id, name (with and without polish stems), category - """ - log.debug("Indexing tags") - remove_only = kw.get('remove_only', False) - # first, remove tags from index. - if tags: - tag_qs = [] - for tag in tags: - q_id = self.index.Q(tag_id=tag.id) - - if isinstance(tag, PDCounterAuthor): - q_cat = self.index.Q(tag_category='pd_author') - elif isinstance(tag, PDCounterBook): - q_cat = self.index.Q(tag_category='pd_book') - else: - q_cat = self.index.Q(tag_category=tag.category) - - q_id_cat = self.index.Q(q_id & q_cat) - tag_qs.append(q_id_cat) - self.delete_query(*tag_qs) - else: # all - q = self.index.Q(tag_id__any=True) - self.delete_query(q) - - if not remove_only: - # then add them [all or just one passed] - if not tags: - tags = chain(catalogue.models.Tag.objects.exclude(category='set'), \ - PDCounterAuthor.objects.all(), \ - PDCounterBook.objects.all()) - - for tag in tags: - if isinstance(tag, PDCounterAuthor): - doc = { - "tag_id": int(tag.id), - "tag_name": tag.name, - "tag_name_pl": tag.name, - "tag_category": 'pd_author', - "is_pdcounter": True, - "uid": "tag%d_pd_a" % tag.id - } - elif isinstance(tag, PDCounterBook): - doc = { - "tag_id": int(tag.id), - "tag_name": tag.title, - "tag_name_pl": tag.title, - "tag_category": 'pd_book', - "is_pdcounter": True, - "uid": "tag%d_pd_b" % tag.id - } - else: - doc = { - "tag_id": int(tag.id), - "tag_name": tag.name, - "tag_name_pl": tag.name, - "tag_category": tag.category, - "is_pdcounter": False, - "uid": "tag%d" % tag.id - } - self.index.add(doc) - - def create_book_doc(self, book): - """ - Create a lucene document referring book id. - """ - doc = { - 'book_id': int(book.id), - } - if book.parent is not None: - doc["parent_id"] = int(book.parent.id) - return doc - - def remove_book(self, book_or_id, remove_snippets=True): - """Removes a book from search index. - book - Book instance.""" - if isinstance(book_or_id, catalogue.models.Book): - book_id = book_or_id.id - else: - book_id = book_or_id - - self.delete_query(self.index.Q(book_id=book_id)) - - if remove_snippets: - snippets = Snippets(book_id) - snippets.remove() - - def index_book(self, book, book_info=None, overwrite=True): - """ - Indexes the book. - Creates a lucene document for extracted metadata - and calls self.index_content() to index the contents of the book. - """ - if overwrite: - # we don't remove snippets, since they might be still needed by - # threads using not reopened index - self.remove_book(book, remove_snippets=False) - - book_doc = self.create_book_doc(book) - meta_fields = self.extract_metadata(book, book_info, dc_only=['source_name', 'authors', 'translators', 'title']) - # let's not index it - it's only used for extracting publish date - if 'source_name' in meta_fields: - del meta_fields['source_name'] - - for n, f in meta_fields.items(): - book_doc[n] = f - - book_doc['uid'] = "book%s" % book_doc['book_id'] - self.index.add(book_doc) - del book_doc - book_fields = { - 'title': meta_fields['title'], - 'authors': meta_fields['authors'], - 'published_date': meta_fields['published_date'] - } - - if 'translators' in meta_fields: - book_fields['translators'] = meta_fields['translators'] - - self.index_content(book, book_fields=book_fields) - - master_tags = [ - 'opowiadanie', - 'powiesc', - 'dramat_wierszowany_l', - 'dramat_wierszowany_lp', - 'dramat_wspolczesny', 'liryka_l', 'liryka_lp', - 'wywiad', - ] - - ignore_content_tags = [ - 'uwaga', 'extra', - 'zastepnik_tekstu', 'sekcja_asterysk', 'separator_linia', 'zastepnik_wersu', - 'didaskalia', - 'naglowek_aktu', 'naglowek_sceny', 'naglowek_czesc', - ] - - footnote_tags = ['pa', 'pt', 'pr', 'pe'] - - skip_header_tags = ['autor_utworu', 'nazwa_utworu', 'dzielo_nadrzedne', '{http://www.w3.org/1999/02/22-rdf-syntax-ns#}RDF'] - - published_date_re = re.compile("([0-9]+)[\]. ]*$") - - def extract_metadata(self, book, book_info=None, dc_only=None): - """ - Extract metadata from book and returns a map of fields keyed by fieldname - """ - fields = {} - - if book_info is None: - book_info = dcparser.parse(open(book.xml_file.path)) - - fields['slug'] = book.slug - fields['tags'] = [t.name for t in book.tags] - fields['is_book'] = True - - # validator, name - for field in dcparser.BookInfo.FIELDS: - if dc_only and field.name not in dc_only: - continue - if hasattr(book_info, field.name): - if not getattr(book_info, field.name): - continue - # since no type information is available, we use validator - type_indicator = field.validator - if type_indicator == dcparser.as_unicode: - s = getattr(book_info, field.name) - if field.multiple: - s = ', '.join(s) - fields[field.name] = s - elif type_indicator == dcparser.as_person: - p = getattr(book_info, field.name) - if isinstance(p, dcparser.Person): - persons = unicode(p) - else: - persons = ', '.join(map(unicode, p)) - fields[field.name] = persons - elif type_indicator == dcparser.as_date: - dt = getattr(book_info, field.name) - fields[field.name] = dt - - # get published date - pd = None - if hasattr(book_info, 'source_name') and book_info.source_name: - match = self.published_date_re.search(book_info.source_name) - if match is not None: - pd = str(match.groups()[0]) - if not pd: pd = "" - fields["published_date"] = pd - - return fields - - # def add_gaps(self, fields, fieldname): - # """ - # Interposes a list of fields with gap-fields, which are indexed spaces and returns it. - # This allows for doing phrase queries which do not overlap the gaps (when slop is 0). - # """ - # def gap(): - # while True: - # yield Field(fieldname, ' ', Field.Store.NO, Field.Index.NOT_ANALYZED) - # return reduce(lambda a, b: a + b, zip(fields, gap()))[0:-1] - - def get_master(self, root): - """ - Returns the first master tag from an etree. - """ - for master in root.iter(): - if master.tag in self.master_tags: - return master - - def index_content(self, book, book_fields={}): - """ - Walks the book XML and extract content from it. - Adds parts for each header tag and for each fragment. - """ - wld = WLDocument.from_file(book.xml_file.path, parse_dublincore=False) - root = wld.edoc.getroot() - - master = self.get_master(root) - if master is None: - return [] - - def walker(node, ignore_tags=[]): - - if node.tag not in ignore_tags: - yield node, None, None - if node.text is not None: - yield None, node.text, None - for child in list(node): - for b, t, e in walker(child): - yield b, t, e - yield None, None, node - - if node.tail is not None: - yield None, node.tail, None - return - - def fix_format(text): - # separator = [u" ", u"\t", u".", u";", u","] - if isinstance(text, list): - # need to join it first - text = filter(lambda s: s is not None, content) - text = u' '.join(text) - # for i in range(len(text)): - # if i > 0: - # if text[i][0] not in separator\ - # and text[i - 1][-1] not in separator: - # text.insert(i, u" ") - - return re.sub("(?m)/$", "", text) - - def add_part(snippets, **fields): - doc = self.create_book_doc(book) - for n, v in book_fields.items(): - doc[n] = v - - doc['header_index'] = fields["header_index"] - doc['header_span'] = 'header_span' in fields and fields['header_span'] or 1 - doc['header_type'] = fields['header_type'] - - doc['text'] = fields['text'] - - # snippets - snip_pos = snippets.add(fields["text"]) - - doc['snippets_position'] = snip_pos[0] - doc['snippets_length'] = snip_pos[1] - if snippets.revision: - doc["snippets_revision"] = snippets.revision - - if 'fragment_anchor' in fields: - doc["fragment_anchor"] = fields['fragment_anchor'] - - if 'themes' in fields: - doc['themes'] = fields['themes'] - doc['uid'] = "part%s%s%s" % (doc['header_index'], - doc['header_span'], - doc.get('fragment_anchor', '')) - return doc - - def give_me_utf8(s): - if isinstance(s, unicode): - return s.encode('utf-8') - else: - return s - - fragments = {} - snippets = Snippets(book.id).open('w') - try: - for header, position in zip(list(master), range(len(master))): - - if header.tag in self.skip_header_tags: - continue - if header.tag is etree.Comment: - continue - - # section content - content = [] - footnote = [] - - def all_content(text): - for frag in fragments.values(): - frag['text'].append(text) - content.append(text) - handle_text = [all_content] - - for start, text, end in walker(header, ignore_tags=self.ignore_content_tags): - # handle footnotes - if start is not None and start.tag in self.footnote_tags: - footnote = [] - - def collect_footnote(t): - footnote.append(t) - - handle_text.append(collect_footnote) - elif end is not None and footnote is not [] and end.tag in self.footnote_tags: - handle_text.pop() - doc = add_part(snippets, header_index=position, header_type=header.tag, - text=u''.join(footnote), - is_footnote=True) - self.index.add(doc) - footnote = [] - - # handle fragments and themes. - if start is not None and start.tag == 'begin': - fid = start.attrib['id'][1:] - fragments[fid] = {'text': [], 'themes': [], 'start_section': position, 'start_header': header.tag} - - # themes for this fragment - elif start is not None and start.tag == 'motyw': - fid = start.attrib['id'][1:] - handle_text.append(None) - if start.text is not None: - fragments[fid]['themes'] += map(unicode.strip, map(unicode, (start.text.split(',')))) - elif end is not None and end.tag == 'motyw': - handle_text.pop() - - elif start is not None and start.tag == 'end': - fid = start.attrib['id'][1:] - if fid not in fragments: - continue # a broken <end> node, skip it - frag = fragments[fid] - if frag['themes'] == []: - continue # empty themes list. - del fragments[fid] - - doc = add_part(snippets, - header_type=frag['start_header'], - header_index=frag['start_section'], - header_span=position - frag['start_section'] + 1, - fragment_anchor=fid, - text=fix_format(frag['text']), - themes=frag['themes']) - self.index.add(doc) - - # Collect content. - - if text is not None and handle_text is not []: - hdl = handle_text[-1] - if hdl is not None: - hdl(text) - - # in the end, add a section text. - doc = add_part(snippets, header_index=position, - header_type=header.tag, text=fix_format(content)) - - self.index.add(doc) - - finally: - snippets.close() - - -class SearchResult(object): - def __init__(self, doc, how_found=None, query=None, query_terms=None): - # self.search = search - self.boost = 1.0 - self._hits = [] - self._processed_hits = None # processed hits - self.snippets = [] - self.query_terms = query_terms - - if 'score' in doc: - self._score = doc['score'] - else: - self._score = 0 - - self.book_id = int(doc["book_id"]) - - try: - self.published_date = int(doc.get("published_date")) - except ValueError: - self.published_date = 0 - - # content hits - header_type = doc.get("header_type", None) - # we have a content hit in some header of fragment - if header_type is not None: - sec = (header_type, int(doc["header_index"])) - header_span = doc['header_span'] - header_span = header_span is not None and int(header_span) or 1 - fragment = doc.get("fragment_anchor", None) - snippets_pos = (doc['snippets_position'], doc['snippets_length']) - snippets_rev = doc.get('snippets_revision', None) - - hit = (sec + (header_span,), fragment, self._score, { - 'how_found': how_found, - 'snippets_pos': snippets_pos, - 'snippets_revision': snippets_rev, - 'themes': doc.get('themes', []), - 'themes_pl': doc.get('themes_pl', []) - }) - - self._hits.append(hit) - - def __unicode__(self): - return u"<SR id=%d %d(%d) hits score=%f %d snippets>" % \ - (self.book_id, len(self._hits), self._processed_hits and len(self._processed_hits) or -1, self._score, len(self.snippets)) - - def __str__(self): - return unicode(self).encode('utf-8') - - @property - def score(self): - return self._score * self.boost - - def merge(self, other): - if self.book_id != other.book_id: - raise ValueError("this search result is or book %d; tried to merge with %d" % (self.book_id, other.book_id)) - self._hits += other._hits - if other.score > self.score: - self._score = other._score - return self - - def get_book(self): - if hasattr(self, '_book'): - return self._book - self._book = catalogue.models.Book.objects.get(id=self.book_id) - return self._book - - book = property(get_book) - - POSITION = 0 - FRAGMENT = 1 - POSITION_INDEX = 1 - POSITION_SPAN = 2 - SCORE = 2 - OTHER = 3 - - @property - def hits(self): - if self._processed_hits is not None: - return self._processed_hits - - # to sections and fragments - frags = filter(lambda r: r[self.FRAGMENT] is not None, self._hits) - - sect = filter(lambda r: r[self.FRAGMENT] is None, self._hits) - - # sections not covered by fragments - sect = filter(lambda s: 0 == len(filter( - lambda f: s[self.POSITION][self.POSITION_INDEX] >= f[self.POSITION][self.POSITION_INDEX] - and s[self.POSITION][self.POSITION_INDEX] < f[self.POSITION][self.POSITION_INDEX] + f[self.POSITION][self.POSITION_SPAN], - frags)), sect) - - hits = [] - - def remove_duplicates(lst, keyfn, compare): - els = {} - for e in lst: - eif = keyfn(e) - if eif in els: - if compare(els[eif], e) >= 1: - continue - els[eif] = e - return els.values() - - # remove fragments with duplicated fid's and duplicated snippets - frags = remove_duplicates(frags, lambda f: f[self.FRAGMENT], lambda a, b: cmp(a[self.SCORE], b[self.SCORE])) - # frags = remove_duplicates(frags, lambda f: f[OTHER]['snippet_pos'] and f[OTHER]['snippet_pos'] or f[FRAGMENT], - # lambda a, b: cmp(a[SCORE], b[SCORE])) - - # remove duplicate sections - sections = {} - - for s in sect: - si = s[self.POSITION][self.POSITION_INDEX] - # skip existing - if si in sections: - if sections[si]['score'] >= s[self.SCORE]: - continue - - m = {'score': s[self.SCORE], - 'section_number': s[self.POSITION][self.POSITION_INDEX] + 1, - } - m.update(s[self.OTHER]) - sections[si] = m - - hits = sections.values() - - for f in frags: - try: - frag = catalogue.models.Fragment.objects.get(anchor=f[self.FRAGMENT], book__id=self.book_id) - except catalogue.models.Fragment.DoesNotExist: - # stale index - continue - # Figure out if we were searching for a token matching some word in theme name. - themes = frag.tags.filter(category='theme') - themes_hit = set() - if self.query_terms is not None: - for i in range(0, len(f[self.OTHER]['themes'])): - tms = f[self.OTHER]['themes'][i].split(r' +') + f[self.OTHER]['themes_pl'][i].split(' ') - tms = map(unicode.lower, tms) - for qt in self.query_terms: - if qt in tms: - themes_hit.add(f[self.OTHER]['themes'][i]) - break - - def theme_by_name(n): - th = filter(lambda t: t.name == n, themes) - if th: - return th[0] - else: - return None - themes_hit = filter(lambda a: a is not None, map(theme_by_name, themes_hit)) - - m = {'score': f[self.SCORE], - 'fragment': frag, - 'section_number': f[self.POSITION][self.POSITION_INDEX] + 1, - 'themes': themes, - 'themes_hit': themes_hit - } - m.update(f[self.OTHER]) - hits.append(m) - - hits.sort(lambda a, b: cmp(a['score'], b['score']), reverse=True) - - self._processed_hits = hits - - return hits - - @staticmethod - def aggregate(*result_lists): - books = {} - for rl in result_lists: - for r in rl: - if r.book_id in books: - books[r.book_id].merge(r) - else: - books[r.book_id] = r - return books.values() - - def __cmp__(self, other): - c = cmp(self.score, other.score) - if c == 0: - # this is inverted, because earlier date is better - return cmp(other.published_date, self.published_date) - else: - return c - - def __len__(self): - return len(self.hits) - - def snippet_pos(self, idx=0): - return self.hits[idx]['snippets_pos'] - - def snippet_revision(self, idx=0): - try: - return self.hits[idx]['snippets_revision'] - except: - return None - - -class Search(SolrIndex): - """ - Search facilities. - """ - def __init__(self, default_field="text"): - super(Search, self).__init__(mode='r') - - - def make_term_query(self, query, field='text', modal=operator.or_): - """ - Returns term queries joined by boolean query. - modal - applies to boolean query - fuzzy - should the query by fuzzy. - """ - if query is None: query = '' - q = self.index.Q() - q = reduce(modal, map(lambda s: self.index.Q(**{field: s}), - query.split(r" ")), q) - - return q - - def search_phrase(self, searched, field='text', book=False, - filters=None, - snippets=False): - if filters is None: filters = [] - if book: filters.append(self.index.Q(is_book=True)) - - q = self.index.query(**{field: searched}) - q = self.apply_filters(q, filters).field_limit(score=True, all_fields=True) - res = q.execute() - return [SearchResult(found, how_found=u'search_phrase') for found in res] - - def search_some(self, searched, fields, book=True, - filters=None, snippets=True, query_terms=None): - assert isinstance(fields, list) - if filters is None: filters = [] - if book: filters.append(self.index.Q(is_book=True)) - - query = self.index.Q() - - for fld in fields: - query = self.index.Q(query | self.make_term_query(searched, fld)) - - query = self.index.query(query) - query = self.apply_filters(query, filters).field_limit(score=True, all_fields=True) - res = query.execute() - return [SearchResult(found, how_found='search_some', query_terms=query_terms) for found in res] - - - def search_everywhere(self, searched, query_terms=None): - """ - Tries to use search terms to match different fields of book (or its parts). - E.g. one word can be an author survey, another be a part of the title, and the rest - are some words from third chapter. - """ - books = [] - # content only query : themes x content - q = self.make_term_query(searched, 'text') - q_themes = self.make_term_query(searched, 'themes_pl') - - query = self.index.query(q).query(q_themes).field_limit(score=True, all_fields=True) - res = query.execute() - - for found in res: - books.append(SearchResult(found, how_found='search_everywhere_themesXcontent', query_terms=query_terms)) - - # query themes/content x author/title/tags - in_content = self.index.Q() - in_meta = self.index.Q() - - for fld in ['themes_pl', 'text']: - in_content |= self.make_term_query(searched, field=fld) - - for fld in ['tags', 'authors', 'title']: - in_meta |= self.make_term_query(searched, field=fld) - - q = in_content & in_meta - res = self.index.query(q).field_limit(score=True, all_fields=True).execute() - - for found in res: - books.append(SearchResult(found, how_found='search_everywhere', query_terms=query_terms)) - - return books - - def get_snippets(self, searchresult, query, field='text', num=1): - """ - Returns a snippet for found scoreDoc. - """ - maxnum = len(searchresult) - if num is None or num < 0 or num > maxnum: - num = maxnum - book_id = searchresult.book_id - revision = searchresult.snippet_revision() - snippets = Snippets(book_id, revision=revision) - snips = [None] * maxnum - try: - snippets.open() - idx = 0 - while idx < maxnum and num > 0: - position, length = searchresult.snippet_pos(idx) - if position is None or length is None: - continue - text = snippets.get((int(position), - int(length))) - snip = self.index.highlight(text=text, field=field, q=query) - snips[idx] = snip - if snip: - num -= 1 - idx += 1 - - except IOError, e: - log.error("Cannot open snippet file for book id = %d [rev=%s], %s" % (book_id, revision, e)) - return [] - finally: - snippets.close() - - # remove verse end markers.. - snips = map(lambda s: s and s.replace("/\n", "\n"), snips) - - searchresult.snippets = snips - - return snips - - def hint_tags(self, query, pdcounter=True, prefix=True): - """ - Return auto-complete hints for tags - using prefix search. - """ - q = self.index.Q() - query = query.strip() - for field in ['tag_name', 'tag_name_pl']: - if prefix: - q |= self.index.Q(**{field: query + "*"}) - else: - q |= self.make_term_query(query, field=field) - qu = self.index.query(q) - - return self.search_tags(qu, pdcounter=pdcounter) - - def search_tags(self, query, filters=None, pdcounter=False): - """ - Search for Tag objects using query. - """ - if not filters: filters = [] - if not pdcounter: - filters.append(~self.index.Q(is_pdcounter=True)) - res = self.apply_filters(query, filters).execute() - - tags = [] - pd_tags = [] - - for doc in res: - is_pdcounter = doc.get('is_pdcounter', False) - category = doc.get('tag_category') - try: - if is_pdcounter == True: - if category == 'pd_author': - tag = PDCounterAuthor.objects.get(id=doc.get('tag_id')) - elif category == 'pd_book': - tag = PDCounterBook.objects.get(id=doc.get('tag_id')) - tag.category = 'pd_book' # make it look more lik a tag. - else: - print ("Warning. cannot get pdcounter tag_id=%d from db; cat=%s" % (int(doc.get('tag_id')), category)).encode('utf-8') - pd_tags.append(tag) - else: - tag = catalogue.models.Tag.objects.get(id=doc.get("tag_id")) - tags.append(tag) - - except catalogue.models.Tag.DoesNotExist: pass - except PDCounterAuthor.DoesNotExist: pass - except PDCounterBook.DoesNotExist: pass - - tags_slugs = set(map(lambda t: t.slug, tags)) - tags = tags + filter(lambda t: not t.slug in tags_slugs, pd_tags) - - log.debug('search_tags: %s' % tags) - - return tags - - def hint_books(self, query, prefix=True): - """ - Returns auto-complete hints for book titles - Because we do not index 'pseudo' title-tags. - Prefix search. - """ - q = self.index.Q() - query = query.strip() - if prefix: - q |= self.index.Q(title=query + "*") - else: - q |= self.make_term_query(query, field='title') - qu = self.index.query(q) - only_books = self.index.Q(is_book=True) - return self.search_books(qu, [only_books]) - - def search_books(self, query, filters=None, max_results=10): - """ - Searches for Book objects using query - """ - bks = [] - bks_found = set() - query = query.query(is_book=True) - res = self.apply_filters(query, filters).field_limit(['book_id']) - for r in res: - try: - bid = r['book_id'] - if not bid in bks_found: - bks.append(catalogue.models.Book.objects.get(id=bid)) - bks_found.add(bid) - except catalogue.models.Book.DoesNotExist: pass - return bks - - - @staticmethod - def apply_filters(query, filters): - """ - Apply filters to a query - """ - if filters is None: filters = [] - filters = filter(lambda x: x is not None, filters) - for f in filters: - query = query.query(f) - return query - - -if getattr(settings, 'SEARCH_MOCK', False): - from .mock_search import Search diff --git a/apps/search/locale/de/LC_MESSAGES/django.mo b/apps/search/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index 831e52ac6..000000000 Binary files a/apps/search/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/de/LC_MESSAGES/django.po b/apps/search/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index 6e98c6275..000000000 --- a/apps/search/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,30 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-09 11:35+0100\n" -"Last-Translator: xxx <xxx>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" - -#: forms.py:12 templates/newsearch/search.html:16 -msgid "Search" -msgstr "Suchen" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "Titel, Autor, Thema, Epoche, Art, Gattung, Satz" - -#: views.py:100 -msgid "book" -msgstr "Buch" diff --git a/apps/search/locale/en/LC_MESSAGES/django.mo b/apps/search/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index 30dabdcd3..000000000 Binary files a/apps/search/locale/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/en/LC_MESSAGES/django.po b/apps/search/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index 05b74586c..000000000 --- a/apps/search/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,29 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-10 13:31+0100\n" -"Last-Translator: Kamil <kjaklukowski@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:12 templates/newsearch/search.html:16 -msgid "Search" -msgstr "Search" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "title, author, theme/topic, period, form, genre, phrase" - -#: views.py:100 -msgid "book" -msgstr "book" diff --git a/apps/search/locale/es/LC_MESSAGES/django.mo b/apps/search/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index 6b996266e..000000000 Binary files a/apps/search/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/es/LC_MESSAGES/django.po b/apps/search/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index c08ead943..000000000 --- a/apps/search/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,30 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-05-17 23:20+0100\n" -"Last-Translator: KG <kamila.gawron87@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" - -#: forms.py:12 templates/newsearch/search.html:16 -msgid "Search" -msgstr "Buscar" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "tÃtulo, autor, tema, época , género, subgénero, frase" - -#: views.py:100 -msgid "book" -msgstr "libro" diff --git a/apps/search/locale/fr/LC_MESSAGES/django.mo b/apps/search/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index 96e747616..000000000 Binary files a/apps/search/locale/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/fr/LC_MESSAGES/django.po b/apps/search/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index 70b0d42dd..000000000 --- a/apps/search/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,30 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: 2\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 20:25+0100\n" -"Last-Translator: xxx <xxx>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1)\n" - -#: forms.py:12 templates/newsearch/search.html:16 -msgid "Search" -msgstr "Rechercher" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "titre, auteur, thème/sujet, époque, type, genre" - -#: views.py:100 -msgid "book" -msgstr "le livre" diff --git a/apps/search/locale/it/LC_MESSAGES/django.mo b/apps/search/locale/it/LC_MESSAGES/django.mo deleted file mode 100644 index 348bf827a..000000000 Binary files a/apps/search/locale/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/it/LC_MESSAGES/django.po b/apps/search/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index 07c8c7a17..000000000 --- a/apps/search/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,31 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" - -#: forms.py:12 templates/newsearch/search.html:16 -msgid "Search" -msgstr "" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "" - -#: views.py:100 -msgid "book" -msgstr "" diff --git a/apps/search/locale/jp/LC_MESSAGES/django.mo b/apps/search/locale/jp/LC_MESSAGES/django.mo deleted file mode 100644 index c9739db34..000000000 Binary files a/apps/search/locale/jp/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/jp/LC_MESSAGES/django.po b/apps/search/locale/jp/LC_MESSAGES/django.po deleted file mode 100644 index d991f75d4..000000000 --- a/apps/search/locale/jp/LC_MESSAGES/django.po +++ /dev/null @@ -1,30 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:12 templates/newsearch/search.html:16 -msgid "Search" -msgstr "" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "" - -#: views.py:100 -msgid "book" -msgstr "" diff --git a/apps/search/locale/lt/LC_MESSAGES/django.mo b/apps/search/locale/lt/LC_MESSAGES/django.mo deleted file mode 100644 index d012e915a..000000000 Binary files a/apps/search/locale/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/lt/LC_MESSAGES/django.po b/apps/search/locale/lt/LC_MESSAGES/django.po deleted file mode 100644 index 8b9b64e3d..000000000 --- a/apps/search/locale/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,31 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-02 18:24+0100\n" -"Last-Translator: Karolina Zuber <suomija@o2.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" -"%100<10 || n%100>=20) ? 1 : 2)\n" - -#: forms.py:12 templates/newsearch/search.html:16 -msgid "Search" -msgstr "IeÅ¡koti" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "pavadinimas, autorius, motyvas/tema, epocha, rÅ«Å¡is, žanras, citata" - -#: views.py:100 -msgid "book" -msgstr "knyga" diff --git a/apps/search/locale/pl/LC_MESSAGES/django.mo b/apps/search/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 208692a08..000000000 Binary files a/apps/search/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/pl/LC_MESSAGES/django.po b/apps/search/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 1d89f7ca9..000000000 --- a/apps/search/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,35 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-01-27 16:41+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2)\n" - -#: forms.py:12 templates/newsearch/search.html:16 -#, fuzzy -msgid "Search" -msgstr "szukaj" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "tytuÅ, autor, motyw/temat, epoka, rodzaj, gatunek, cytat" - -#: views.py:100 -msgid "book" -msgstr "utwór" - -#~ msgid "off" -#~ msgstr "wyÅ." diff --git a/apps/search/locale/ru/LC_MESSAGES/django.mo b/apps/search/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index 1f7051309..000000000 Binary files a/apps/search/locale/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/ru/LC_MESSAGES/django.po b/apps/search/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index 868db0581..000000000 --- a/apps/search/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,30 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 22:11+0100\n" -"Last-Translator: xxx <xxx>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" - -#: forms.py:12 templates/newsearch/search.html:16 -msgid "Search" -msgstr "ÐоиÑк" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "название, авÑоÑ, Ñема/ÑÑжеÑ, ÐµÐ¿Ð¾Ñ Ð°, вид, жанÑ, ÑÑаза" - -#: views.py:100 -msgid "book" -msgstr "книга" diff --git a/apps/search/locale/uk/LC_MESSAGES/django.mo b/apps/search/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index 8e2b10c72..000000000 Binary files a/apps/search/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/search/locale/uk/LC_MESSAGES/django.po b/apps/search/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index b24b885b7..000000000 --- a/apps/search/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,31 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-04-10 22:12+0100\n" -"Last-Translator: Natalia Kertyczak <natalczyk@o2.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" - -#: forms.py:12 templates/newsearch/search.html:16 -msgid "Search" -msgstr "ÐоÑÑк" - -#: forms.py:21 -msgid "title, author, theme/topic, epoch, kind, genre, phrase" -msgstr "назва, авÑоÑ, Ñема/моÑив, ÐµÐ¿Ð¾Ñ Ð°, ÑÑд, жанÑ, ÑÑаза" - -#: views.py:100 -msgid "book" -msgstr "книжка" diff --git a/apps/search/management/__init__.py b/apps/search/management/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/search/management/commands/__init__.py b/apps/search/management/commands/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/search/management/commands/reindex.py b/apps/search/management/commands/reindex.py deleted file mode 100755 index 4941354ce..000000000 --- a/apps/search/management/commands/reindex.py +++ /dev/null @@ -1,88 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import sys -from django.core.management.base import BaseCommand - -from optparse import make_option - -def query_yes_no(question, default="yes"): - """Ask a yes/no question via raw_input() and return their answer. - - "question" is a string that is presented to the user. - "default" is the presumed answer if the user just hits <Enter>. - It must be "yes" (the default), "no" or None (meaning - an answer is required of the user). - - The "answer" return value is one of "yes" or "no". - """ - valid = {"yes":True, "y":True, "ye":True, - "no":False, "n":False} - if default == None: - prompt = " [y/n] " - elif default == "yes": - prompt = " [Y/n] " - elif default == "no": - prompt = " [y/N] " - else: - raise ValueError("invalid default answer: '%s'" % default) - - while True: - sys.stdout.write(question + prompt) - choice = raw_input().lower() - if default is not None and choice == '': - return valid[default] - elif choice in valid: - return valid[choice] - else: - sys.stdout.write("Please respond with 'yes' or 'no' "\ - "(or 'y' or 'n').\n") - -class Command(BaseCommand): - help = 'Reindex everything.' - args = '' - - option_list = BaseCommand.option_list + ( - make_option('-n', '--book-id', action='store_true', dest='book_id', default=False, - help='book id instead of slugs'), - make_option('-t', '--just-tags', action='store_true', dest='just_tags', default=False, - help='just reindex tags'), - ) - def handle(self, *args, **opts): - from catalogue.models import Book - from search.index import Index - idx = Index() - - if not opts['just_tags']: - if args: - books = [] - for a in args: - if opts['book_id']: - books += Book.objects.filter(id=int(a)).all() - else: - books += Book.objects.filter(slug=a).all() - else: - books = list(Book.objects.all()) - - while books: - try: - b = books[0] - print b.title - idx.index_book(b) - idx.index.commit() - books.pop(0) - except Exception, e: - print "Error occured: %s" % e - try: - # we might not be able to rollback - idx.index.rollback() - except: - pass - retry = query_yes_no("Retry?") - if not retry: - break - - print 'Reindexing tags.' - idx.index_tags() - idx.index.commit() diff --git a/apps/search/management/commands/snippets.py b/apps/search/management/commands/snippets.py deleted file mode 100755 index 40310eda1..000000000 --- a/apps/search/management/commands/snippets.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.core.management.base import BaseCommand - -from glob import glob -from optparse import make_option -from os import path -from sys import stdout -from django.conf import settings - -class Command(BaseCommand): - help = 'Reindex everything.' - args = '' - - option_list = BaseCommand.option_list + ( - make_option('-C', '--check-just-read', action='store_true', dest='check', default=False, - help='Check snippets utf-8'), - make_option('-c', '--check', action='store_true', dest='check2', default=False, - help='Check snippets utf-8 by walking through index'), - ) - - - def handle(self, *args, **opts): - from catalogue.models import Book - from search.index import Search - - if opts['check']: - sfn = glob(settings.SEARCH_INDEX+'snippets/*') - print sfn - for fn in sfn: - print fn - bkid = int(path.basename(fn)) - with open(fn) as f: - cont = f.read() - try: - uc = cont.decode('utf-8') - except UnicodeDecodeError, ude: - print "error in snippets %d" % bkid - if opts['check2']: - s = Search() - reader = s.searcher.getIndexReader() - numdocs = reader.numDocs() - for did in range(numdocs): - doc = reader.document(did) - if doc and doc.get('book_id'): - bkid = int(doc.get('book_id')) - #import pdb; pdb.set_trace() - stdout.write("\r%d / %d" % (did, numdocs)) - stdout.flush() - ss = doc.get('snippet_position') - sl = doc.get('snippet_length') - if ss and sl: - snips = Snippets(bkid) - try: - txt = snips.get((ss,sl)) - assert len(txt) == sl - except UnicodeDecodeError, ude: - stdout.write("\nerror in snippets %d\n" % bkid) - raise ude - - stdout.write("\ndone.\n") - diff --git a/apps/search/mock_search.py b/apps/search/mock_search.py deleted file mode 100644 index 253c277a8..000000000 --- a/apps/search/mock_search.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from mock import Mock -from catalogue.models import Book, Tag -from random import randint, choice - - -class Search(Mock): - """ - Search mock for development without setting up Solr. - - Instead of connecting to an actual search server, it returns - some random results for any query. - """ - class MockIndex(Mock): - def analyze(*args, **kwargs): - return [] - - index = MockIndex() - - @staticmethod - def _find_some_books(snippets=False, query_terms=None, max_results=20): - from .index import SearchResult - - qs = Book.objects.order_by('?') - if snippets: - qs = qs.exclude(fragments=None) - results = [] - for book in qs[:randint(1, max_results)]: - doc = { - 'score': randint(0, 100), - 'book_id': book.pk, - 'published_date': randint(1000, 1920), - } - if snippets: - fragment = book.fragments.order_by('?')[0] - doc.update({ - 'header_type': choice(['strofa', 'akap']), - 'header_index': randint(100, 200), - 'header_span': randint(100, 200), - 'fragment_anchor': fragment.anchor, - 'snippets_position': randint(100, 200), - 'snippets_length': randint(100, 200), - 'snippets_revision': randint(1, 100), - 'themes_pl': fragment.tags.filter(category='theme'), - }) - res = SearchResult(doc, how_found='mock', query_terms=query_terms) - if snippets: - res.snippets = [fragment.short_text] - results.append(res) - return results - - def search_phrase(self, searched, field='text', book=False, - filters=None, snippets=False): - return self._find_some_books(snippets) - - def search_some(self, searched, fields, book=True, filters=None, snippets=True, query_terms=None): - return self._find_some_books(snippets, query_terms) - - def search_books(self, query, filters=None, max_results=10): - return self._find_some_books(snippets, max_results=max_results) - - def search_everywhere(self, searched, query_terms=None): - return [] - - def hint_tags(self, query, pdcounter=True, prefix=True): - return Tag.objects.exclude(category='set').order_by('?')[:randint(1, 10)] - - def hint_books(self, prefix): - return Book.objects.order_by('?')[:randint(1, 10)] diff --git a/apps/search/templates/newsearch/search.html b/apps/search/templates/newsearch/search.html deleted file mode 100644 index 0b0fad49d..000000000 --- a/apps/search/templates/newsearch/search.html +++ /dev/null @@ -1,58 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} - -{% block title %}Search{% endblock %} - -{% block metadescription %}{% endblock %} - -{% block bodyid %}newsearch{% endblock %} - -{% block body %} - <h1>Search</h1> - <form action="{% url 'search' %}" method="get" accept-charset="utf-8" id="search-form-x"> - <p> - <input type="text" name="q" value="{{request.GET.q}}" style="width:250px; font-size: 1.2em;"> - <input type="submit" value="{% trans "Search" %}" /> - <br /> - <input type="checkbox" value="true" name="fuzzy" {% if fuzzy %}checked{% endif %}/> fuzzy. - </p> - </form> - {% if did_you_mean %} - Czy miaÅeÅ na mysli <a href="?q={{did_you_mean|urlencode}}">{{did_you_mean}}</a>? - {% endif %} - - - <div id="results"> - <ol> - {% for result in results %} - <li> - <p><a href="{{result.book.get_absolute_url}}">{{result.book.pretty_title}}</a> (id: {{result.book_id}}, score: {{result.score}})</p> - <ul> - {% for snip in hit.snippets %} - <li> - {{snip|safe}}<br/> - </li> - {% endfor %} - - {% for part in result.parts %} - {% if part.header %} - <li>W {{part.header}} nr {{part.position}}</li> - {% else %} - {% if part.fragment %} - <li> - <div style="">Tagi/Motywy: {% for tag in part.fragment.tags %}{{tag.name}} {% endfor %}</div> - {{part.fragment.short_html|safe}} - </li> - {% endif %} - {% endif %} - {% endfor %} - </ul> - </li> - {% empty %} - <p>No results.</p> - {% endfor %} - </ol> - </div> - -{% endblock %} diff --git a/apps/search/templatetags/__init__.py b/apps/search/templatetags/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/search/templatetags/search_tags.py b/apps/search/templatetags/search_tags.py deleted file mode 100644 index 8dbad9dae..000000000 --- a/apps/search/templatetags/search_tags.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -# import feedparser -# import datetime - -from django import template -# from django.contrib.auth.forms import UserCreationForm, AuthenticationForm -# from django.db.models import Q -# from django.utils.translation import ugettext as _ -from catalogue.models import Book -import re -# from catalogue.forms import SearchForm -# from catalogue.utils import split_tags - - -register = template.Library() - - -@register.inclusion_tag('catalogue/book_searched.html', takes_context=True) -def book_searched(context, result): - book = Book.objects.get(pk=result.book_id) - - # snippets = [] - # for hit in result.hits: - # if hit['snippets']: - # snippets.append(hit['snippets']) - # elif hit['fragment']: - # snippets.append(hit['fragment'].short_text) - - # We don't need hits which lead to sections but do not have - # snippets. - hits = filter(lambda (idx, h): - result.snippets[idx] is not None - or 'fragment' in h, enumerate(result.hits)) - # print "[tmpl: from %d hits selected %d]" % (len(result.hits), len(hits)) - - for (idx, hit) in hits: - # currently we generate one snipper per hit though. - if result.snippets[idx] is None: - continue - snip = result.snippets[idx] - # fix some formattting - snip = re.subn(r"(^[ \t\n]+|[ \t\n]+$)", u"", - re.subn(r"[ \t\n]*\n[ \t\n]*", u"\n", snip)[0])[0] - - snip = snip.replace("\n", "<br />").replace('---', '—') - hit['snippet'] = snip - - return { - 'request': context['request'], - 'book': book, - 'hits': hits and zip(*hits)[1] or [] - } diff --git a/apps/search/tests/__init__.py b/apps/search/tests/__init__.py deleted file mode 100644 index 80c974e58..000000000 --- a/apps/search/tests/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from search.tests.index import * diff --git a/apps/search/tests/index.py b/apps/search/tests/index.py deleted file mode 100644 index b8d44726f..000000000 --- a/apps/search/tests/index.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from unittest import skipIf -from django.conf import settings -from django.test.utils import override_settings -from catalogue.test_utils import WLTestCase, get_fixture -from os import path -import tempfile -from catalogue.models import Book, Tag -from search.index import Index, Search, SearchResult -import catalogue -import opds - - -@override_settings( - SEARCH_INDEX = tempfile.mkdtemp(prefix='djangotest_search_'), -) -@skipIf(getattr(settings, 'NO_SEARCH_INDEX', False), - u'Requires search server and NO_SEARCH_INDEX=False.') -class BookSearchTests(WLTestCase): - def setUp(self): - WLTestCase.setUp(self) - - index = Index() - self.search = Search() - index.delete_query(self.search.index.query(uid="*")) - index.index.commit() - - self.do_doktora = Book.from_xml_file( - get_fixture('do-doktora.xml', opds)) - self.do_anusie = Book.from_xml_file( - get_fixture('fraszka-do-anusie.xml', catalogue)) - - def test_search_perfect_book_author(self): - books = self.search.search_books(self.search.index.query(authors=u"sÄp szarzyÅski")) - assert len(books) == 1 - assert books[0].id == self.do_anusie.id - - # here we lack slop functionality as well - def test_search_perfect_book_title(self): - books = self.search.search_books(self.search.index.query(title=u"fraszka do anusie")) - assert len(books) == 1 - assert books[0].id == self.do_anusie.id - - # TODO: Add slop option to sunburnt - # def test_search_perfect_parts(self): - # books = self.search.search_phrase(u"Jakoż hamowaÄ") - # assert len(books) == 2 - # for b in books: - # b.book_id == self.book.id - # a = SearchResult.aggregate(books) - # # just one fragment hit. - # assert len(a[0].hits) == 1 - diff --git a/apps/search/urls.py b/apps/search/urls.py deleted file mode 100644 index d77d7220a..000000000 --- a/apps/search/urls.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url - -urlpatterns = patterns('search.views', - url(r'^$', 'main', name='search'), - url(r'^hint/$', 'hint', name='search_hint'), -) - diff --git a/apps/search/views.py b/apps/search/views.py deleted file mode 100644 index f7aa77cd9..000000000 --- a/apps/search/views.py +++ /dev/null @@ -1,255 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from django.shortcuts import render_to_response, get_object_or_404 -from django.template import RequestContext -from django.views.decorators import cache -from django.http import HttpResponse, HttpResponseRedirect, Http404, HttpResponsePermanentRedirect, JsonResponse -from django.utils.translation import ugettext as _ - -from catalogue.utils import split_tags -from catalogue.models import Book, Tag, Fragment -from pdcounter.models import Author as PDCounterAuthor, BookStub as PDCounterBook -from search.index import Search, SearchResult -from suggest.forms import PublishingSuggestForm -import re -#import enchant -import json - - -def match_word_re(word): - if 'sqlite' in settings.DATABASES['default']['ENGINE']: - return r"\b%s\b" % word - elif 'mysql' in settings.DATABASES['default']['ENGINE']: - return "[[:<:]]%s[[:>:]]" % word - - -query_syntax_chars = re.compile(r"[\\/*:(){}]") - - -def remove_query_syntax_chars(query, replace=' '): - return query_syntax_chars.sub(' ', query) - - -def did_you_mean(query, tokens): - return query - # change = {} - # for t in tokens: - # authors = Tag.objects.filter(category='author', name__iregex=match_word_re(t)) - # if len(authors) > 0: - # continue - - # if False: - # if not dictionary.check(t): - # try: - # change_to = dictionary.suggest(t)[0].lower() - # if change_to != t.lower(): - # change[t] = change_to - # except IndexError: - # pass - - # if change == {}: - # return None - - # for frm, to in change.items(): - # query = query.replace(frm, to) - - # return query - - -@cache.never_cache -def hint(request): - prefix = request.GET.get('term', '') - if len(prefix) < 2: - return JsonResponse([], safe=False) - - prefix = remove_query_syntax_chars(prefix) - - search = Search() - # tagi beda ograniczac tutaj - # ale tagi moga byc na ksiazce i na fragmentach - # jezeli tagi dot tylko ksiazki, to wazne zeby te nowe byly w tej samej ksiazce - # jesli zas dotycza themes, to wazne, zeby byly w tym samym fragmencie. - - def is_dupe(tag): - if isinstance(tag, PDCounterAuthor): - if filter(lambda t: t.slug == tag.slug and t != tag, tags): - return True - elif isinstance(tag, PDCounterBook): - if filter(lambda b: b.slug == tag.slug, tags): - return True - return False - - def category_name(c): - if c.startswith('pd_'): - c = c[len('pd_'):] - return _(c) - - try: - limit = int(request.GET.get('max', '')) - except ValueError: - limit = -1 - else: - if limit < 1: - limit = -1 - - data = [] - - tags = search.hint_tags(prefix, pdcounter=True) - tags = filter(lambda t: not is_dupe(t), tags) - for t in tags: - if not limit: - break - limit -= 1 - data.append({ - 'label': t.name, - 'category': category_name(t.category), - 'id': t.id, - 'url': t.get_absolute_url() - }) - if limit: - books = search.hint_books(prefix) - for b in books: - if not limit: - break - limit -= 1 - data.append({ - 'label': b.title, - 'category': _('book'), - 'id': b.id, - 'url': b.get_absolute_url() - }) - - callback = request.GET.get('callback', None) - if callback: - return HttpResponse("%s(%s);" % (callback, json.dumps(data)), - content_type="application/json; charset=utf-8") - else: - return JsonResponse(data, safe=False) - - -@cache.never_cache -def main(request): - results = {} - - results = None - query = None - - query = request.GET.get('q', '') - - if len(query) < 2: - return render_to_response('catalogue/search_too_short.html', - {'prefix': query}, - context_instance=RequestContext(request)) - - query = remove_query_syntax_chars(query) - - search = Search() - - theme_terms = search.index.analyze(text=query, field="themes_pl") \ - + search.index.analyze(text=query, field="themes") - - # change hints - tags = search.hint_tags(query, pdcounter=True, prefix=False) - tags = split_tags(tags) - - author_results = search.search_phrase(query, 'authors', book=True) - translator_results = search.search_phrase(query, 'translators', book=True) - - title_results = search.search_phrase(query, 'title', book=True) - - # Boost main author/title results with mixed search, and save some of its results for end of list. - # boost author, title results - author_title_mixed = search.search_some(query, ['authors', 'translators', 'title', 'tags'], query_terms=theme_terms) - author_title_rest = [] - - for b in author_title_mixed: - also_in_mixed = filter(lambda ba: ba.book_id == b.book_id, author_results + translator_results + title_results) - for b2 in also_in_mixed: - b2.boost *= 1.1 - if also_in_mixed is []: - author_title_rest.append(b) - - # Do a phrase search but a term search as well - this can give us better snippets then search_everywhere, - # Because the query is using only one field. - text_phrase = SearchResult.aggregate( - search.search_phrase(query, 'text', snippets=True, book=False), - search.search_some(query, ['text'], snippets=True, book=False, query_terms=theme_terms)) - - everywhere = search.search_everywhere(query, query_terms=theme_terms) - - def already_found(results): - def f(e): - for r in results: - if e.book_id == r.book_id: - e.boost = 0.9 - results.append(e) - return True - return False - return f - f = already_found(author_results + translator_results + title_results + text_phrase) - everywhere = filter(lambda x: not f(x), everywhere) - - author_results = SearchResult.aggregate(author_results) - translator_results = SearchResult.aggregate(translator_results) - title_results = SearchResult.aggregate(title_results) - - everywhere = SearchResult.aggregate(everywhere, author_title_rest) - - for field, res in [('authors', author_results), - ('translators', translator_results), - ('title', title_results), - ('text', text_phrase), - ('text', everywhere)]: - res.sort(reverse=True) - for r in res: - search.get_snippets(r, query, field, 3) - - suggestion = u'' - - def ensure_exists(r): - try: - return r.book - except Book.DoesNotExist: - return False - - author_results = filter(ensure_exists, author_results) - translator_results = filter(ensure_exists, translator_results) - title_results = filter(ensure_exists, title_results) - text_phrase = filter(ensure_exists, text_phrase) - everywhere = filter(ensure_exists, everywhere) - - results = author_results + translator_results + title_results + text_phrase + everywhere - # ensure books do exists & sort them - for res in (author_results, translator_results, title_results, text_phrase, everywhere): - res.sort(reverse=True) - - # We don't want to redirect to book text, but rather display result page even with one result. - # if len(results) == 1: - # fragment_hits = filter(lambda h: 'fragment' in h, results[0].hits) - # if len(fragment_hits) == 1: - # #anchor = fragment_hits[0]['fragment'] - # #frag = Fragment.objects.get(anchor=anchor) - # return HttpResponseRedirect(fragment_hits[0]['fragment'].get_absolute_url()) - # return HttpResponseRedirect(results[0].book.get_absolute_url()) - if len(results) == 0: - form = PublishingSuggestForm(initial={"books": query + ", "}) - return render_to_response('catalogue/search_no_hits.html', - {'tags': tags, - 'prefix': query, - "form": form, - 'did_you_mean': suggestion}, - context_instance=RequestContext(request)) - - return render_to_response('catalogue/search_multiple_hits.html', - {'tags': tags, - 'prefix': query, - 'results': {'author': author_results, - 'translator': translator_results, - 'title': title_results, - 'content': text_phrase, - 'other': everywhere}, - 'did_you_mean': suggestion}, - context_instance=RequestContext(request)) diff --git a/apps/social/__init__.py b/apps/social/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/social/admin.py b/apps/social/admin.py deleted file mode 100755 index 3da4ae8c0..000000000 --- a/apps/social/admin.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib import admin -from django.utils.translation import ugettext_lazy as _ - -from social.models import Cite - - -class CiteAdmin(admin.ModelAdmin): - list_display = ['nonempty_text', 'sticky', 'vip', 'small', 'has_image'] - fieldsets = ( - (None, {'fields': ('book', 'text', 'small', 'vip', 'link', 'sticky')}), - ( - _('Background'), - {'fields': ('image', 'image_shift', 'image_title', 'image_author', - 'image_link', 'image_license', 'image_license_link') - } - ) - ) - - def nonempty_text(self, cite): - if cite.text.strip(): - return cite.text - return "(%s)" % (cite.image_title.strip() or cite.link) - nonempty_text.short_description = _('text') - - def has_image(self, cite): - return bool(cite.image) - has_image.short_description = _('image') - has_image.boolean = True - - -admin.site.register(Cite, CiteAdmin) diff --git a/apps/social/forms.py b/apps/social/forms.py deleted file mode 100755 index 5834ffa24..000000000 --- a/apps/social/forms.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import forms -from django.utils.translation import ugettext_lazy as _ - -from catalogue.models import Tag -from catalogue import utils -from social.utils import get_set, set_sets - - -class UserSetsForm(forms.Form): - def __init__(self, book, user, *args, **kwargs): - super(UserSetsForm, self).__init__(*args, **kwargs) - self.fields['set_ids'] = forms.ChoiceField( - choices=[(tag.id, tag.name) for tag in - Tag.objects.filter(category='set', user=user).iterator()], - ) - - -class ObjectSetsForm(forms.Form): - tags = forms.CharField(label=_('Tags (comma-separated)'), required=False, - widget=forms.Textarea()) - - def __init__(self, obj, user, *args, **kwargs): - self._obj = obj - self._user = user - data = kwargs.setdefault('data', {}) - if 'tags' not in data and user.is_authenticated(): - data['tags'] = ', '.join(t.name - for t in obj.tags.filter(category='set', user=user).iterator() if t.name) - super(ObjectSetsForm, self).__init__(*args, **kwargs) - - def save(self, request): - tags = [get_set(self._user, tag_name.strip()) - for tag_name in self.cleaned_data['tags'].split(',')] - set_sets(self._user, self._obj, tags) - return {"like": True} - - -class NewSetForm(forms.Form): - name = forms.CharField(max_length=50, required=True) - - def __init__(self, *args, **kwargs): - super(NewSetForm, self).__init__(*args, **kwargs) - self.fields['name'].widget.attrs['title'] = _('Name of the new shelf') - - def save(self, user, commit=True): - name = self.cleaned_data['name'] - new_set = Tag(name=name, slug=utils.get_random_hash(name), sort_key=name.lower(), - category='set', user=user) - - new_set.save() - return new_set diff --git a/apps/social/locale/pl/LC_MESSAGES/django.mo b/apps/social/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 8b72b7b4c..000000000 Binary files a/apps/social/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/social/locale/pl/LC_MESSAGES/django.po b/apps/social/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index a3053f7fe..000000000 --- a/apps/social/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,127 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-01-24 10:06+0100\n" -"PO-Revision-Date: 2014-01-24 10:06+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 1.5.4\n" - -#: admin.py:16 -msgid "Background" -msgstr "Obraz tÅa" - -#: admin.py:25 models.py:22 -msgid "image" -msgstr "obraz" - -#: forms.py:23 -msgid "Tags (comma-separated)" -msgstr "Tagi (rozdzielone przecinkami)" - -#: forms.py:47 -msgid "Name of the new shelf" -msgstr "Nazwa nowej póÅki" - -#: models.py:13 -msgid "book" -msgstr "ksiÄ Å¼ka" - -#: models.py:14 -msgid "text" -msgstr "tekst" - -#: models.py:15 -msgid "small" -msgstr "maÅy" - -#: models.py:16 -msgid "Make this cite display smaller." -msgstr "Sprawia, że cytat wyÅwietla siÄ mniejszym fontem." - -#: models.py:17 -msgid "VIP" -msgstr "VIP" - -#: models.py:18 models.py:31 -msgid "link" -msgstr "odnoÅnik" - -#: models.py:19 -msgid "sticky" -msgstr "przyklejony" - -#: models.py:20 -msgid "Sticky cites will take precedense." -msgstr "Przyklejone cytaty majÄ pierwszeÅstwo." - -#: models.py:24 -msgid "Best image is exactly 975px wide and weights under 100kB." -msgstr "Najlepszy obraz ma szerokoÅÄ 975px i waży poniżej 100kB." - -#: models.py:25 -msgid "shift" -msgstr "przesuniÄcie" - -#: models.py:26 -msgid "" -"Vertical shift, in percents. 0 means top, 100 is bottom. Default is 50%." -msgstr "" -"PrzesuniÄcie w pionie, w procentach. 0 to wyrównanie do górnej krawÄdzi, 100 " -"do dolnej. DomyÅlne jest 50%." - -#: models.py:27 -msgid "title" -msgstr "tytuÅ" - -#: models.py:29 -msgid "author" -msgstr "autor" - -#: models.py:32 -msgid "license name" -msgstr "nazwa licencji" - -#: models.py:34 -msgid "license link" -msgstr "adres licencji" - -#: models.py:38 -msgid "cite" -msgstr "cytat" - -#: models.py:39 -msgid "cites" -msgstr "cytaty" - -#: templates/social/cite_promo.html:6 -msgid "recommends" -msgstr "poleca" - -#: templates/social/my_shelf.html:5 templates/social/my_shelf.html.py:11 -msgid "My shelf" -msgstr "Moja póÅka" - -#: templates/social/my_shelf.html:16 -msgid "" -"Add works to your shelf by clicking on the star on the page of the work. The " -"work will then show up on My shelf page." -msgstr "" -"Aby dodaÄ pozycjÄ do swojej póÅki, należy zaznaczyÄ gwiazdkÄ znajdujÄ cÄ siÄ " -"na stronie utworu. Po jej zaznaczeniu publikacja pojawi siÄ w zakÅadce Moja " -"póÅka." - -#: templates/social/sets_form.html:7 -msgid "Remove from my shelf" -msgstr "UsuÅ z mojej póÅki" diff --git a/apps/social/migrations/0001_initial.py b/apps/social/migrations/0001_initial.py deleted file mode 100644 index 2ad4a681d..000000000 --- a/apps/social/migrations/0001_initial.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('catalogue', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Cite', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('text', models.TextField(verbose_name='text')), - ('small', models.BooleanField(default=False, help_text='Make this cite display smaller.', verbose_name='small')), - ('vip', models.CharField(max_length=128, null=True, verbose_name='VIP', blank=True)), - ('link', models.URLField(verbose_name='link')), - ('sticky', models.BooleanField(default=False, help_text='Sticky cites will take precedense.', db_index=True, verbose_name='sticky')), - ('image', models.ImageField(help_text='Best image is exactly 975px wide and weights under 100kB.', upload_to=b'social/cite', null=True, verbose_name='image', blank=True)), - ('image_shift', models.IntegerField(help_text='Vertical shift, in percents. 0 means top, 100 is bottom. Default is 50%.', null=True, verbose_name='shift', blank=True)), - ('image_title', models.CharField(max_length=255, null=True, verbose_name='Title', blank=True)), - ('image_author', models.CharField(max_length=255, null=True, verbose_name='author', blank=True)), - ('image_link', models.URLField(null=True, verbose_name='link', blank=True)), - ('image_license', models.CharField(max_length=255, null=True, verbose_name='license name', blank=True)), - ('image_license_link', models.URLField(null=True, verbose_name='license link', blank=True)), - ('book', models.ForeignKey(verbose_name='book', blank=True, to='catalogue.Book', null=True)), - ], - options={ - 'ordering': ('vip', 'text'), - 'verbose_name': 'cite', - 'verbose_name_plural': 'cites', - }, - bases=(models.Model,), - ), - ] diff --git a/apps/social/migrations/0002_auto_20151221_1225.py b/apps/social/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index f26e4f8fc..000000000 --- a/apps/social/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('social', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='cite', - name='image_title', - field=models.CharField(max_length=255, null=True, verbose_name='title', blank=True), - ), - ] diff --git a/apps/social/migrations/__init__.py b/apps/social/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/social/models.py b/apps/social/models.py deleted file mode 100644 index 890280774..000000000 --- a/apps/social/models.py +++ /dev/null @@ -1,62 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.db import models -from django.utils.translation import ugettext_lazy as _ -from django.conf import settings -from django.core.urlresolvers import reverse -from ssify import flush_ssi_includes -from catalogue.models import Book - - -class Cite(models.Model): - book = models.ForeignKey(Book, verbose_name=_('book'), null=True, blank=True) - text = models.TextField(_('text')) - small = models.BooleanField(_('small'), default=False, - help_text=_('Make this cite display smaller.')) - vip = models.CharField(_('VIP'), max_length=128, null=True, blank=True) - link = models.URLField(_('link')) - sticky = models.BooleanField(_('sticky'), default=False, db_index=True, - help_text=_('Sticky cites will take precedense.')) - - image = models.ImageField(_('image'), upload_to='social/cite', - null=True, blank=True, - help_text=_('Best image is exactly 975px wide and weights under 100kB.')) - image_shift = models.IntegerField(_('shift'), null=True, blank=True, - help_text=_(u'Vertical shift, in percents. 0 means top, 100 is bottom. Default is 50%.')) - image_title = models.CharField(_('title'), max_length=255, - null=True, blank=True) - image_author = models.CharField(_('author'), - max_length=255, blank=True, null=True) - image_link = models.URLField(_('link'), blank=True, null=True) - image_license = models.CharField(_('license name'), - max_length=255, blank=True, null=True) - image_license_link = models.URLField(_('license link'), blank=True, null=True) - - class Meta: - ordering = ('vip', 'text') - verbose_name = _('cite') - verbose_name_plural = _('cites') - - def __unicode__(self): - return u"%s: %sâ¦" % (self.vip, self.text[:60]) - - def get_absolute_url(self): - """This is used for testing.""" - return "%s?choose_cite=%d" % (reverse('main_page'), self.id) - - def save(self, *args, **kwargs): - ret = super(Cite, self).save(*args, **kwargs) - self.flush_includes() - return ret - - def flush_includes(self): - flush_ssi_includes([ - template % (self.pk, lang) - for template in [ - '/ludzie/cite/%s.%s.html', - '/ludzie/cite_main/%s.%s.html', - ] - for lang in [lc for (lc, _ln) in settings.LANGUAGES]] + - ['/ludzie/cite_info/%s.html' % self.pk]) diff --git a/apps/social/templates/social/cite_info.html b/apps/social/templates/social/cite_info.html deleted file mode 100644 index 8f8e16d11..000000000 --- a/apps/social/templates/social/cite_info.html +++ /dev/null @@ -1,19 +0,0 @@ -{% spaceless %} - -{% if cite.image %} - {% if cite.image_link %}<a href="{{ cite.image_link }}">{% endif %} - {% if cite.image_title %} - {{ cite.image_title }}{% else %} - untitled{% endif %}{% if cite.image_link %}</a>{% endif %}{% if cite.image_author %}, - {{ cite.image_author }}{% endif %}{% if cite.image_license %}, - {% if cite.image_license_link %}<a href="{{ cite.image_license_link }}">{% endif %} - {{ cite.image_license }} - {% if cite.image_license_link %}</a>{% endif %} - {% endif %} -{% else %} - <a href="http://www.flickr.com/photos/lou/430980641/">books about architecture</a>, - saikofish@Flickr, - <a href="http://creativecommons.org/licenses/by-nc-sa/2.0/">CC BY NC SA</a>. -{% endif %} - -{% endspaceless %} diff --git a/apps/social/templates/social/cite_promo.html b/apps/social/templates/social/cite_promo.html deleted file mode 100755 index 15786cf3b..000000000 --- a/apps/social/templates/social/cite_promo.html +++ /dev/null @@ -1,30 +0,0 @@ -{% spaceless %} - -{% load i18n %} - -{% if main %} - <section id="big-cite"{% if cite.image %} style="background-image: url('{{ cite.image.url }}'); background-position: 50% {{ cite.image_shift|default_if_none:50 }}%;"{% endif %} > -{% endif %} - -{% if cite %} - -<a href="{{ cite.link }}" class="cite{% if cite.small %} cite-small{% endif %}"> - {% if cite.vip %} - <p class='vip mono'><span>{{ cite.vip }} {% trans "recommends" %}:</span></p> - {% endif %} - <blockquote class="cite-body"> - <span>{{ cite.text|linebreaksbr|safe }}</span> - </blockquote> - {% if cite.book %} - <p class="source mono"><span>{{ cite.book.pretty_title }}</span></p> - {% endif %} -</a> - -{% endif %} - - -{% if main %} - </section> -{% endif %} - -{% endspaceless %} \ No newline at end of file diff --git a/apps/social/templates/social/my_shelf.html b/apps/social/templates/social/my_shelf.html deleted file mode 100755 index f448ad220..000000000 --- a/apps/social/templates/social/my_shelf.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load catalogue_tags %} - -{% block titleextra %}{% trans "My shelf" %}{% endblock %} - -{% block logout %}/{% endblock %} - -{% block body %} - - <h1>{% trans "My shelf" %}</h1> - - {% work_list books %} - - {% if not books %} - {% trans "Add works to your shelf by clicking on the star on the page of the work. The work will then show up on My shelf page." %} - {# trans "Aby dodaÄ pozycjÄ do swojej póÅki, należy zaznaczyÄ gwiazdkÄ znajdujÄ cÄ siÄ na stronie utworu. Po jej zaznaczeniu publikacja pojawi siÄ w zakÅadce Moja póÅka" #} - {% endif %} -{% endblock %} diff --git a/apps/social/templates/social/sets_form.html b/apps/social/templates/social/sets_form.html deleted file mode 100755 index 5974a2a71..000000000 --- a/apps/social/templates/social/sets_form.html +++ /dev/null @@ -1,19 +0,0 @@ -{% load i18n %} -{% load ssi_csrf_token from ssify %} -<h1>{{ title }}</h1> - -<form action="{% url 'social_unlike_book' view_kwargs.slug %}" method="post" accept-charset="utf-8" - class="cuteform{% if placeholdize %} hidelabels{% endif %}"> -{% ssi_csrf_token %} - <input type="submit" value="{% trans "Remove from my shelf" %}"/> -</form> - -<form action="{{ request.get_full_path }}" method="post" accept-charset="utf-8" - class="cuteform{% if placeholdize %} hidelabels{% endif %}"> -{% ssi_csrf_token %} -<ol> - <div id="id___all__"></div> - {{ form.as_ul }} - <li><input type="submit" value="{{ submit }}"/></li> -</ol> -</form> diff --git a/apps/social/templates/social/shelf_tags.html b/apps/social/templates/social/shelf_tags.html deleted file mode 100755 index 2baa0f007..000000000 --- a/apps/social/templates/social/shelf_tags.html +++ /dev/null @@ -1,9 +0,0 @@ -{% spaceless %} - -<ul class='social-shelf-tags'> - {% for tag in tags %} - <li><a href="{{ tag.get_absolute_url }}">{{ tag.name }}</a></li> - {% endfor %} -</ul> - -{% endspaceless %} \ No newline at end of file diff --git a/apps/social/templatetags/__init__.py b/apps/social/templatetags/__init__.py deleted file mode 100755 index e69de29bb..000000000 diff --git a/apps/social/templatetags/social_tags.py b/apps/social/templatetags/social_tags.py deleted file mode 100755 index 7065467b4..000000000 --- a/apps/social/templatetags/social_tags.py +++ /dev/null @@ -1,78 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from random import randint -from django.db.models import Q -from django import template -from django.utils.functional import lazy -from django.utils.cache import add_never_cache_headers -from catalogue.models import Book, Tag -from ssify import ssi_variable -from ssify.utils import ssi_vary_on_cookie -from social.models import Cite -from social.utils import likes, cites_for_tags - -register = template.Library() - - -@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) -def likes_book(request, book_id): - return likes(request.user, Book.objects.get(pk=book_id), request) - - -def choose_cite(request, book_id=None, tag_ids=None): - """Choose a cite for main page, for book or for set of tags.""" - try: - assert request.user.is_staff - assert 'choose_cite' in request.GET - cite = Cite.objects.get(pk=request.GET['choose_cite']) - except (AssertionError, Cite.DoesNotExist): - if book_id is not None: - cites = Cite.objects.filter(Q(book=book_id) | Q(book__ancestor=book_id)) - elif tag_ids is not None: - tags = Tag.objects.filter(pk__in=tag_ids) - cites = cites_for_tags(tags) - else: - cites = Cite.objects.all() - stickies = cites.filter(sticky=True) - count = stickies.count() - if count: - cite = stickies[randint(0, count - 1)] - else: - count = cites.count() - if count: - cite = cites[randint(0, count - 1)] - else: - cite = None - return cite - - -@ssi_variable(register, name='choose_cite', patch_response=[add_never_cache_headers]) -def choose_cite_tag(request, book_id=None, tag_ids=None): - cite = choose_cite(request, book_id, tag_ids) - return cite.pk if cite is not None else None - - -@register.inclusion_tag('social/cite_promo.html') -def render_cite(cite): - return { - 'cite': cite, - } - - -@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) -def book_shelf_tags(request, book_id): - if not request.user.is_authenticated(): - return None - book = Book.objects.get(pk=book_id) - lks = likes(request.user, book, request) - def get_value(): - if not lks: - return '' - tags = book.tags.filter(category='set', user=request.user).exclude(name='') - if not tags: - return '' - ctx = {'tags': tags} - return template.loader.render_to_string('social/shelf_tags.html', ctx) - return lazy(get_value, unicode)() diff --git a/apps/social/urls.py b/apps/social/urls.py deleted file mode 100755 index 3642d91da..000000000 --- a/apps/social/urls.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url -from django.views.decorators.cache import never_cache -from social.views import ObjectSetsFormView - -urlpatterns = patterns('social.views', - url(r'^lektura/(?P<slug>[a-z0-9-]+)/lubie/$', 'like_book', name='social_like_book'), - url(r'^lektura/(?P<slug>[a-z0-9-]+)/nie_lubie/$', 'unlike_book', name='social_unlike_book'), - url(r'^lektura/(?P<slug>[a-z0-9-]+)/polki/$', never_cache(ObjectSetsFormView()), name='social_book_sets'), - url(r'^polka/$', 'my_shelf', name='social_my_shelf'), - - # Includes - url(r'^cite/(?P<pk>\d+)\.(?P<lang>.+)\.html$', 'cite', name='social_cite'), - url(r'^cite_main/(?P<pk>\d+)\.(?P<lang>.+)\.html$', 'cite', {'main': True}, name='social_cite_main'), - url(r'^cite_info/(?P<pk>\d+).html$', 'cite_info', name='social_cite_info'), - - #~ url(r'^polki/(?P<shelf>[a-zA-Z0-9-]+)/formaty/$', 'shelf_book_formats', name='shelf_book_formats'), - #~ url(r'^polki/(?P<shelf>[a-zA-Z0-9-]+)/(?P<slug>%s)/usun$' % SLUG, 'remove_from_shelf', name='remove_from_shelf'), - #~ url(r'^polki/$', 'user_shelves', name='user_shelves'), - #~ url(r'^polki/(?P<slug>[a-zA-Z0-9-]+)/usun/$', 'delete_shelf', name='delete_shelf'), - #~ url(r'^polki/(?P<slug>[a-zA-Z0-9-]+)\.zip$', 'download_shelf', name='download_shelf'), - #~ url(r'^polki/nowa/$', 'new_set', name='new_set'), -) diff --git a/apps/social/utils.py b/apps/social/utils.py deleted file mode 100755 index bf1c24229..000000000 --- a/apps/social/utils.py +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from collections import defaultdict -from django.contrib.contenttypes.models import ContentType -from django.db.models import Q -from django.utils.functional import lazy -from catalogue.models import Book, Tag -from catalogue import utils -from catalogue.tasks import touch_tag -from social.models import Cite - - -def likes(user, work, request=None): - if not user.is_authenticated(): - return False - - if request is None: - return work.tags.filter(category='set', user=user).exists() - - if not hasattr(request, 'social_likes'): - # tuple: unchecked, checked, liked - request.social_likes = defaultdict(lambda:(set(), set(), set())) - - ct = ContentType.objects.get_for_model(type(work)) - likes_t = request.social_likes[ct.pk] - if work.pk in likes_t[1]: - return work.pk in likes_t[2] - else: - likes_t[0].add(work.pk) - def _likes(): - if likes_t[0]: - ids = tuple(likes_t[0]) - likes_t[0].clear() - likes_t[2].update(Tag.intermediary_table_model.objects.filter( - content_type_id=ct.pk, tag__user_id=user.pk, - object_id__in=ids - ).distinct().values_list('object_id', flat=True)) - likes_t[1].update(ids) - return work.pk in likes_t[2] - return lazy(_likes, bool)() - - -def get_set(user, name): - """Returns a tag for use by the user. Creates it, if necessary.""" - try: - tag = Tag.objects.get(category='set', user=user, name=name) - except Tag.DoesNotExist: - tag = Tag.objects.create(category='set', user=user, name=name, - slug=utils.get_random_hash(name), sort_key=name.lower()) - return tag - - -def set_sets(user, work, sets): - """Set tags used for given work by a given user.""" - - old_sets = list(work.tags.filter(category='set', user=user)) - - work.tags = sets + list( - work.tags.filter(~Q(category='set') | ~Q(user=user))) - - for shelf in [shelf for shelf in old_sets if shelf not in sets]: - touch_tag(shelf) - for shelf in [shelf for shelf in sets if shelf not in old_sets]: - touch_tag(shelf) - - # delete empty tags - Tag.objects.filter(category='set', user=user, items=None).delete() - - -def cites_for_tags(tags): - """Returns a QuerySet with all Cites for books with given tags.""" - return Cite.objects.filter(book__in=Book.tagged.with_all(tags)) diff --git a/apps/social/views.py b/apps/social/views.py deleted file mode 100644 index 49c9b708a..000000000 --- a/apps/social/views.py +++ /dev/null @@ -1,90 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.shortcuts import render, get_object_or_404, redirect -from django.http import HttpResponseForbidden, JsonResponse -from django.contrib.auth.decorators import login_required -from django.views.decorators.http import require_POST - -from ajaxable.utils import AjaxableFormView - -from catalogue.models import Book -from ssify import ssi_included -from social import forms -from .models import Cite -from social.utils import get_set, likes, set_sets - - -# ==================== -# = Shelf management = -# ==================== - - -@require_POST -def like_book(request, slug): - if not request.user.is_authenticated(): - return HttpResponseForbidden('Login required.') - book = get_object_or_404(Book, slug=slug) - if not likes(request.user, book): - tag = get_set(request.user, '') - set_sets(request.user, book, [tag]) - - if request.is_ajax(): - return JsonResponse({"success": True, "msg": "ok", "like": True}) - else: - return redirect(book) - - -@login_required -def my_shelf(request): - books = Book.tagged.with_any(request.user.tag_set.all()) - return render(request, 'social/my_shelf.html', locals()) - - -class ObjectSetsFormView(AjaxableFormView): - form_class = forms.ObjectSetsForm - placeholdize = True - template = 'social/sets_form.html' - ajax_redirect = True - POST_login = True - - def get_object(self, request, slug): - return get_object_or_404(Book, slug=slug) - - def context_description(self, request, obj): - return obj.pretty_title() - - def form_args(self, request, obj): - return (obj, request.user), {} - - -@require_POST -def unlike_book(request, slug): - if not request.user.is_authenticated(): - return HttpResponseForbidden('Login required.') - book = get_object_or_404(Book, slug=slug) - if likes(request.user, book): - set_sets(request.user, book, []) - - if request.is_ajax(): - return JsonResponse({"success": True, "msg": "ok", "like": False}) - else: - return redirect(book) - - -@ssi_included -def cite(request, pk, main=False): - cite = get_object_or_404(Cite, pk=pk) - return render(request, 'social/cite_promo.html', { - 'main': main, - 'cite': cite, - }) - - -@ssi_included(use_lang=False) -def cite_info(request, pk): - cite = get_object_or_404(Cite, pk=pk) - return render(request, 'social/cite_info.html', { - 'cite': cite, - }) diff --git a/apps/sponsors/__init__.py b/apps/sponsors/__init__.py deleted file mode 100644 index f6a851dc5..000000000 --- a/apps/sponsors/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -__author__ = u'Marek StÄpniowski, <marek@stepniowski.com>' -__version__ = '0.1' diff --git a/apps/sponsors/admin.py b/apps/sponsors/admin.py deleted file mode 100644 index 274fe901e..000000000 --- a/apps/sponsors/admin.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib import admin -from jsonfield import JSONField -from sponsors import models -from sponsors import widgets - - -class SponsorAdmin(admin.ModelAdmin): - list_display = ('name',) - search_fields = ('name',) - ordering = ('name',) - - -class SponsorPageAdmin(admin.ModelAdmin): - formfield_overrides = { - JSONField: {'widget': widgets.SponsorPageWidget}, - } - list_display = ('name',) - search_fields = ('name',) - ordering = ('name',) - - -admin.site.register(models.Sponsor, SponsorAdmin) -admin.site.register(models.SponsorPage, SponsorPageAdmin) diff --git a/apps/sponsors/locale/de/LC_MESSAGES/django.mo b/apps/sponsors/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index f6cebe39b..000000000 Binary files a/apps/sponsors/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/de/LC_MESSAGES/django.po b/apps/sponsors/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index 1b8dc02d9..000000000 --- a/apps/sponsors/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,37 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2010-06-23 11:48+0100\n" -"Last-Translator: Iwona FiaÅkowska <ifialkowska@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "Name" - -#: models.py:22 -msgid "description" -msgstr "Beschreibung" - -#: models.py:23 -msgid "logo" -msgstr "Logo" - -#: models.py:24 -msgid "url" -msgstr "URL" - -#: models.py:38 -msgid "sponsors" -msgstr "Sponsoren" diff --git a/apps/sponsors/locale/en/LC_MESSAGES/django.mo b/apps/sponsors/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index 158ec2c73..000000000 Binary files a/apps/sponsors/locale/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/en/LC_MESSAGES/django.po b/apps/sponsors/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index 48676958f..000000000 --- a/apps/sponsors/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,37 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 20:05+0100\n" -"Last-Translator: xxx <xxx>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "name" - -#: models.py:22 -msgid "description" -msgstr "description" - -#: models.py:23 -msgid "logo" -msgstr "logo" - -#: models.py:24 -msgid "url" -msgstr "url" - -#: models.py:38 -msgid "sponsors" -msgstr "sponsors" diff --git a/apps/sponsors/locale/es/LC_MESSAGES/django.mo b/apps/sponsors/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index 3e9d45667..000000000 Binary files a/apps/sponsors/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/es/LC_MESSAGES/django.po b/apps/sponsors/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index 624e3f620..000000000 --- a/apps/sponsors/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,37 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-28 12:01+0100\n" -"Last-Translator: Aneta <afroneta@wp.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "nombre" - -#: models.py:22 -msgid "description" -msgstr "descripción" - -#: models.py:23 -msgid "logo" -msgstr "logotipo" - -#: models.py:24 -msgid "url" -msgstr "url" - -#: models.py:38 -msgid "sponsors" -msgstr "patrocinadores" diff --git a/apps/sponsors/locale/fr/LC_MESSAGES/django.mo b/apps/sponsors/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index 640e20521..000000000 Binary files a/apps/sponsors/locale/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/fr/LC_MESSAGES/django.po b/apps/sponsors/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index d30e7605a..000000000 --- a/apps/sponsors/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,37 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-22 21:00+0100\n" -"Last-Translator: Ela Janota <amarillis5@wp.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "nom" - -#: models.py:22 -msgid "description" -msgstr "description" - -#: models.py:23 -msgid "logo" -msgstr "logo" - -#: models.py:24 -msgid "url" -msgstr "url" - -#: models.py:38 -msgid "sponsors" -msgstr "sponsors" diff --git a/apps/sponsors/locale/it/LC_MESSAGES/django.mo b/apps/sponsors/locale/it/LC_MESSAGES/django.mo deleted file mode 100644 index 1f8c95660..000000000 Binary files a/apps/sponsors/locale/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/it/LC_MESSAGES/django.po b/apps/sponsors/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index d93d9fe79..000000000 --- a/apps/sponsors/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,38 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-21 17:43+0100\n" -"Last-Translator: xxxx\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "nome" - -#: models.py:22 -msgid "description" -msgstr "descrizione" - -#: models.py:23 -msgid "logo" -msgstr "logo" - -#: models.py:24 -msgid "url" -msgstr "url" - -#: models.py:38 -msgid "sponsors" -msgstr "gli sponsor" diff --git a/apps/sponsors/locale/jp/LC_MESSAGES/django.mo b/apps/sponsors/locale/jp/LC_MESSAGES/django.mo deleted file mode 100644 index c9739db34..000000000 Binary files a/apps/sponsors/locale/jp/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/jp/LC_MESSAGES/django.po b/apps/sponsors/locale/jp/LC_MESSAGES/django.po deleted file mode 100644 index 9ecfa8db2..000000000 --- a/apps/sponsors/locale/jp/LC_MESSAGES/django.po +++ /dev/null @@ -1,38 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "" - -#: models.py:22 -msgid "description" -msgstr "" - -#: models.py:23 -msgid "logo" -msgstr "" - -#: models.py:24 -msgid "url" -msgstr "" - -#: models.py:38 -msgid "sponsors" -msgstr "" diff --git a/apps/sponsors/locale/lt/LC_MESSAGES/django.mo b/apps/sponsors/locale/lt/LC_MESSAGES/django.mo deleted file mode 100644 index d6b7271df..000000000 Binary files a/apps/sponsors/locale/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/lt/LC_MESSAGES/django.po b/apps/sponsors/locale/lt/LC_MESSAGES/django.po deleted file mode 100644 index cf009fe85..000000000 --- a/apps/sponsors/locale/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,38 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-01 16:13+0100\n" -"Last-Translator: Aneta\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "pavadinimas" - -#: models.py:22 -msgid "description" -msgstr "apraÅ¡ymas" - -#: models.py:23 -msgid "logo" -msgstr "logotipas" - -#: models.py:24 -msgid "url" -msgstr "url" - -#: models.py:38 -msgid "sponsors" -msgstr "rÄmÄjai" diff --git a/apps/sponsors/locale/pl/LC_MESSAGES/django.mo b/apps/sponsors/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 7776cb4e1..000000000 Binary files a/apps/sponsors/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/pl/LC_MESSAGES/django.po b/apps/sponsors/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 54ae8ca3c..000000000 --- a/apps/sponsors/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,38 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2010-05-19 16:18\n" -"Last-Translator: <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "nazwa" - -#: models.py:22 -msgid "description" -msgstr "opis" - -#: models.py:23 -msgid "logo" -msgstr "logo" - -#: models.py:24 -msgid "url" -msgstr "url" - -#: models.py:38 -msgid "sponsors" -msgstr "sponsorzy" diff --git a/apps/sponsors/locale/ru/LC_MESSAGES/django.mo b/apps/sponsors/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index 0a1946f76..000000000 Binary files a/apps/sponsors/locale/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/ru/LC_MESSAGES/django.po b/apps/sponsors/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index cd162751b..000000000 --- a/apps/sponsors/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,37 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 22:11+0100\n" -"Last-Translator: xxx <xxx>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "Ф.Ð.Ð./название" - -#: models.py:22 -msgid "description" -msgstr "опиÑание" - -#: models.py:23 -msgid "logo" -msgstr "логоÑип" - -#: models.py:24 -msgid "url" -msgstr "url" - -#: models.py:38 -msgid "sponsors" -msgstr "покÑовиÑели" diff --git a/apps/sponsors/locale/uk/LC_MESSAGES/django.mo b/apps/sponsors/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index 8236e6024..000000000 Binary files a/apps/sponsors/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/sponsors/locale/uk/LC_MESSAGES/django.po b/apps/sponsors/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index aaf57266b..000000000 --- a/apps/sponsors/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,37 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 17:30+0100\n" -"Last-Translator: xxx <xxx>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: models.py:21 models.py:37 -msgid "name" -msgstr "назва" - -#: models.py:22 -msgid "description" -msgstr "опиÑ" - -#: models.py:23 -msgid "logo" -msgstr "логоÑип" - -#: models.py:24 -msgid "url" -msgstr "url" - -#: models.py:38 -msgid "sponsors" -msgstr "ÑпонÑоÑи" diff --git a/apps/sponsors/migrations/0001_initial.py b/apps/sponsors/migrations/0001_initial.py deleted file mode 100644 index d672e846a..000000000 --- a/apps/sponsors/migrations/0001_initial.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import jsonfield.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Sponsor', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=120, verbose_name='name')), - ('_description', models.CharField(max_length=255, verbose_name='Description', blank=True)), - ('logo', models.ImageField(upload_to=b'sponsorzy/sponsor/logo', verbose_name='logo')), - ('url', models.URLField(verbose_name='url', blank=True)), - ], - options={ - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='SponsorPage', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=120, verbose_name='name')), - ('sponsors', jsonfield.fields.JSONField(default={}, verbose_name='sponsors')), - ('_html', models.TextField(editable=False, blank=True)), - ('sprite', models.ImageField(upload_to=b'sponsorzy/sprite', blank=True)), - ], - options={ - }, - bases=(models.Model,), - ), - ] diff --git a/apps/sponsors/migrations/0002_auto_20151221_1225.py b/apps/sponsors/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index 0110a8896..000000000 --- a/apps/sponsors/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('sponsors', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='sponsor', - name='_description', - field=models.CharField(max_length=255, verbose_name='description', blank=True), - ), - ] diff --git a/apps/sponsors/migrations/__init__.py b/apps/sponsors/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/sponsors/models.py b/apps/sponsors/models.py deleted file mode 100644 index 0565b9744..000000000 --- a/apps/sponsors/models.py +++ /dev/null @@ -1,107 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import json -import time -from StringIO import StringIO -from django.db import models -from django.utils.translation import ugettext_lazy as _ -from django.template.loader import render_to_string -from PIL import Image - -from jsonfield import JSONField -from django.core.files.base import ContentFile -from ssify import flush_ssi_includes - -THUMB_WIDTH = 120 -THUMB_HEIGHT = 120 - - -class Sponsor(models.Model): - name = models.CharField(_('name'), max_length=120) - _description = models.CharField(_('description'), blank=True, max_length=255) - logo = models.ImageField(_('logo'), upload_to='sponsorzy/sponsor/logo') - url = models.URLField(_('url'), blank=True) - - def __unicode__(self): - return self.name - - def description(self): - if len(self._description): - return self._description - else: - return self.name - - -class SponsorPage(models.Model): - name = models.CharField(_('name'), max_length=120) - sponsors = JSONField(_('sponsors'), default={}) - _html = models.TextField(blank=True, editable=False) - sprite = models.ImageField(upload_to='sponsorzy/sprite', blank=True) - - def populated_sponsors(self): - result = [] - offset = 0 - for column in self.sponsors: - result_group = {'name': column['name'], 'sponsors': []} - sponsor_objects = Sponsor.objects.in_bulk(column['sponsors']) - for sponsor_pk in column['sponsors']: - try: - result_group['sponsors'].append((offset, sponsor_objects[sponsor_pk])) - offset -= THUMB_HEIGHT - except KeyError: - pass - result.append(result_group) - return result - - def render_sprite(self): - sponsor_ids = [] - for column in self.sponsors: - sponsor_ids.extend(column['sponsors']) - sponsors = Sponsor.objects.in_bulk(sponsor_ids) - sprite = Image.new('RGBA', (THUMB_WIDTH, len(sponsors) * THUMB_HEIGHT)) - for i, sponsor_id in enumerate(sponsor_ids): - simg = Image.open(sponsors[sponsor_id].logo.path) - if simg.size[0] > THUMB_WIDTH or simg.size[1] > THUMB_HEIGHT: - size = ( - min(THUMB_WIDTH, - simg.size[0] * THUMB_HEIGHT / simg.size[1]), - min(THUMB_HEIGHT, - simg.size[1] * THUMB_WIDTH / simg.size[0]) - ) - simg = simg.resize(size, Image.ANTIALIAS) - sprite.paste(simg, ( - (THUMB_WIDTH - simg.size[0]) / 2, - i * THUMB_HEIGHT + (THUMB_HEIGHT - simg.size[1]) / 2, - )) - imgstr = StringIO() - sprite.save(imgstr, 'png') - - if self.sprite: - self.sprite.delete(save=False) - self.sprite.save('sponsorzy/sprite/%s-%d.png' % (self.name, time.time()), ContentFile(imgstr.getvalue()), save=False) - - def html(self): - return self._html - html = property(fget=html) - - def save(self, *args, **kwargs): - if isinstance(self.sponsors, basestring): - # Walkaround for weird jsonfield 'no-decode' optimization. - self.sponsors = json.loads(self.sponsors) - self.render_sprite() - self._html = render_to_string('sponsors/page.html', { - 'sponsors': self.populated_sponsors(), - 'page': self - }) - ret = super(SponsorPage, self).save(*args, **kwargs) - self.flush_includes() - return ret - - def flush_includes(self): - flush_ssi_includes(['/sponsors/page/%s.html' % self.name]) - - def __unicode__(self): - return self.name - diff --git a/apps/sponsors/static/sponsors/css/footer_admin.css b/apps/sponsors/static/sponsors/css/footer_admin.css deleted file mode 100644 index fe19d30c9..000000000 --- a/apps/sponsors/static/sponsors/css/footer_admin.css +++ /dev/null @@ -1,73 +0,0 @@ -.sponsors { - display: block; - clear: both; - margin-top: 5px; -} - -.sponsors .sponsors-sponsor-group { - float: left; - width: 180px; - border: 1px solid #CCC; - margin: 2px 2px 0 0; -} - -.sponsors .sponsors-sponsor-group-name { - border-bottom: 1px solid #CCC; - padding: 2px 2px 2px 4px; - margin: 0; - color: #FFF; - background-color: #7CA0C7; - font-weight: bold; - height: 15px; -} - -.sponsors .sponsors-sponsor-group-name input { - margin: -2px -2px -2px -4px; - padding: 0; - height: 15px; - width: 160px; -} - -.sponsors .sponsors-remove-sponsor-group { - float: right; - background-color: #CC3434; - color: #FFF; - width: 10px; - height: 15px; - padding: 2px; - text-align: center; - font-weight: bold; - display: block; - cursor: default; -} - -.sponsors .sponsors-remove-sponsor-group:hover { - color: #CC3434; - background-color: white; -} - -.sponsors .sponsors-unused-sponsor-group-name { - background-color: #FFF; - color: #666; -} - -.sponsors .sponsors-sponsor-group-list { - margin: 0; - padding: 2px; - list-style: none; - min-height: 400px; -} - -.sponsors-sponsor { - margin: 0 40px 2px 0; - width: 120px; - height: 120px; - border: 1px solid #CCC; - background-color: #EEE; - cursor: default; -} - -.sponsors-sponsor img { - max-width: 120px; - max-height: 120px; -} diff --git a/apps/sponsors/static/sponsors/css/sponsors.css b/apps/sponsors/static/sponsors/css/sponsors.css deleted file mode 100644 index f35e56dd7..000000000 --- a/apps/sponsors/static/sponsors/css/sponsors.css +++ /dev/null @@ -1,24 +0,0 @@ -.sponsors-page { - background: white; - margin-top: 1em; -} - -.sponsors-column { - float: left; - width: 150px; -} - -.sponsor-logos { - height: 130px; -} - -.sponsors-page img { - float: left; -} - -.sponsors-page a { - display: block; - width: 120px; - height: 120px; - background-repeat: no-repeat; -} diff --git a/apps/sponsors/static/sponsors/js/footer_admin.js b/apps/sponsors/static/sponsors/js/footer_admin.js deleted file mode 100644 index 33c794a3d..000000000 --- a/apps/sponsors/static/sponsors/js/footer_admin.js +++ /dev/null @@ -1,131 +0,0 @@ -(function($) { - $.fn.sponsorsFooter = function(options) { - var settings = { - sponsors: [] - }; - $.extend(settings, options); - - var input = $(this).hide(); - - var container = $('<div class="sponsors"></div>').appendTo(input.parent()); - var groups = $.evalJSON(input.val()); - - var unusedDiv = $('<div class="sponsors-sponsor-group sponsors-unused-sponsor-group"></div>') - .appendTo(container) - .append('<p class="sponsors-sponsor-group-name sponsors-unused-sponsor-group-name">dostÄpni sponsorzy</p>'); - var unusedList = $('<ol class="sponsors-sponsor-group-list sponsors-unused-group-list"></ol>') - .appendTo(unusedDiv) - .sortable({ - connectWith: '.sponsors-sponsor-group-list' - }); - - // Edit group name inline - function editNameInline(name) { - name.unbind('click.sponsorsFooter'); - var inlineInput = $('<input></input>').val(name.html()); - name.html(''); - - function endEditing() { - name.html(inlineInput.val()); - inlineInput.remove(); - name.bind('click.sponsorsFooter', function() { - editNameInline($(this)); - }); - input.parents('form').unbind('submit.sponsorsFooter', endEditing); - return false; - } - - inlineInput.appendTo(name).focus().blur(endEditing); - input.parents('form').bind('submit.sponsorsFooter', endEditing); - } - - // Remove sponsor with passed id from sponsors array and return it - function popSponsor(id) { - for (var i=0; i < settings.sponsors.length; i++) { - if (settings.sponsors[i].id == id) { - var s = settings.sponsors[i]; - settings.sponsors.splice(i, 1); - return s; - } - } - return null; - } - - // Create sponsor group and bind events - function createGroup(name, sponsors) { - if (!sponsors) { - sponsors = []; - } - - var groupDiv = $('<div class="sponsors-sponsor-group"></div>'); - - $('<a class="sponsors-remove-sponsor-group">X</a>') - .click(function() { - groupDiv.fadeOut('slow', function() { - $('.sponsors-sponsor', groupDiv).hide().appendTo(unusedList).fadeIn(); - groupDiv.remove(); - }); - }).appendTo(groupDiv); - - $('<p class="sponsors-sponsor-group-name">' + name + '</p>') - .bind('click.sponsorsFooter', function() { - editNameInline($(this)); - }).appendTo(groupDiv); - - var groupList = $('<ol class="sponsors-sponsor-group-list"></ol>') - .appendTo(groupDiv) - .sortable({ - connectWith: '.sponsors-sponsor-group-list' - }); - - - for (var i = 0; i < sponsors.length; i++) { - $('<li class="sponsors-sponsor"><img src="' + sponsors[i].image + '" alt="' + sponsors[i].name + '"/></li>') - .data('obj_id', sponsors[i].id) - .appendTo(groupList); - } - return groupDiv; - } - - // Create groups from data in input value - for (var i = 0; i < groups.length; i++) { - var group = groups[i]; - var sponsors = []; - - for (var j = 0; j < group.sponsors.length; j++) { - var s = popSponsor(group.sponsors[j]); - if (s) { - sponsors.push(s); - } - } - createGroup(group.name, sponsors).appendTo(container); - } - - // Serialize input value before submiting form - input.parents('form').submit(function(event) { - var groups = []; - $('.sponsors-sponsor-group', container).not('.sponsors-unused-sponsor-group').each(function() { - var group = {name: $('.sponsors-sponsor-group-name', this).html(), sponsors: []}; - $('.sponsors-sponsor', this).each(function() { - group.sponsors.push($(this).data('obj_id')); - }); - groups.push(group); - }); - input.val($.toJSON(groups)); - }); - - for (i = 0; i < settings.sponsors.length; i++) { - $('<li class="sponsors-sponsor"><img src="' + settings.sponsors[i].image + '" alt="' + settings.sponsors[i].name + '"/></li>') - .data('obj_id', settings.sponsors[i].id) - .appendTo(unusedList); - } - - $('<button type="button">Dodaj nowÄ grupÄ</button>') - .click(function() { - var newGroup = createGroup('').appendTo(container); - editNameInline($('.sponsors-sponsor-group-name', newGroup)); - }).prependTo(input.parent()); - - input.parent().append('<div style="clear: both"></div>'); - }; -})(jQuery); diff --git a/apps/sponsors/static/sponsors/js/jquery.json.min.js b/apps/sponsors/static/sponsors/js/jquery.json.min.js deleted file mode 100644 index bad4a0afa..000000000 --- a/apps/sponsors/static/sponsors/js/jquery.json.min.js +++ /dev/null @@ -1,31 +0,0 @@ - -(function($){$.toJSON=function(o) -{if(typeof(JSON)=='object'&&JSON.stringify) -return JSON.stringify(o);var type=typeof(o);if(o===null) -return"null";if(type=="undefined") -return undefined;if(type=="number"||type=="boolean") -return o+"";if(type=="string") -return $.quoteString(o);if(type=='object') -{if(typeof o.toJSON=="function") -return $.toJSON(o.toJSON());if(o.constructor===Date) -{var month=o.getUTCMonth()+1;if(month<10)month='0'+month;var day=o.getUTCDate();if(day<10)day='0'+day;var year=o.getUTCFullYear();var hours=o.getUTCHours();if(hours<10)hours='0'+hours;var minutes=o.getUTCMinutes();if(minutes<10)minutes='0'+minutes;var seconds=o.getUTCSeconds();if(seconds<10)seconds='0'+seconds;var milli=o.getUTCMilliseconds();if(milli<100)milli='0'+milli;if(milli<10)milli='0'+milli;return'"'+year+'-'+month+'-'+day+'T'+ -hours+':'+minutes+':'+seconds+'.'+milli+'Z"';} -if(o.constructor===Array) -{var ret=[];for(var i=0;i<o.length;i++) -ret.push($.toJSON(o[i])||"null");return"["+ret.join(",")+"]";} -var pairs=[];for(var k in o){var name;var type=typeof k;if(type=="number") -name='"'+k+'"';else if(type=="string") -name=$.quoteString(k);else -continue;if(typeof o[k]=="function") -continue;var val=$.toJSON(o[k]);pairs.push(name+":"+val);} -return"{"+pairs.join(", ")+"}";}};$.evalJSON=function(src) -{if(typeof(JSON)=='object'&&JSON.parse) -return JSON.parse(src);return eval("("+src+")");};$.secureEvalJSON=function(src) -{if(typeof(JSON)=='object'&&JSON.parse) -return JSON.parse(src);var filtered=src;filtered=filtered.replace(/\\["\\\/bfnrtu]/g,'@');filtered=filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']');filtered=filtered.replace(/(?:^|:|,)(?:\s*\[)+/g,'');if(/^[\],:{}\s]*$/.test(filtered)) -return eval("("+src+")");else -throw new SyntaxError("Error parsing JSON, source is not valid.");};$.quoteString=function(string) -{if(string.match(_escapeable)) -{return'"'+string.replace(_escapeable,function(a) -{var c=_meta[a];if(typeof c==='string')return c;c=a.charCodeAt();return'\\u00'+Math.floor(c/16).toString(16)+(c%16).toString(16);})+'"';} -return'"'+string+'"';};var _escapeable=/["\\\x00-\x1f\x7f-\x9f]/g;var _meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'};})(jQuery); \ No newline at end of file diff --git a/apps/sponsors/static/sponsors/js/sponsors.js b/apps/sponsors/static/sponsors/js/sponsors.js deleted file mode 100755 index fbfbaebb3..000000000 --- a/apps/sponsors/static/sponsors/js/sponsors.js +++ /dev/null @@ -1,8 +0,0 @@ -(function($) { - $(function() { - - $('.sponsor-logos').cycle({timeout: 3000}); - - }); -})(jQuery); - diff --git a/apps/sponsors/templates/sponsors/page.html b/apps/sponsors/templates/sponsors/page.html deleted file mode 100644 index 5a3b38ec2..000000000 --- a/apps/sponsors/templates/sponsors/page.html +++ /dev/null @@ -1,16 +0,0 @@ -{% spaceless %} -<style type="text/css">.sponsors-page a{background-image:url({{ page.sprite.url }});}</style> -<div class="sponsors-page"> - {% for column in sponsors %} - <div class="sponsors-column"> - <p class="sponsors-column-name">{{ column.name|default:" " }}</p> - <div class='sponsor-logos'> - {% for offset, sponsor in column.sponsors %} - <a href="{{ sponsor.url }}" title="{{ sponsor.description }}" style='background-position: 0px {{ offset }}px;'></a> - {% endfor %} - </div> - </div> - {% endfor %} - <div style="clear: both"></div> -</div> -{% endspaceless %} diff --git a/apps/sponsors/urls.py b/apps/sponsors/urls.py deleted file mode 100644 index 6da6186c3..000000000 --- a/apps/sponsors/urls.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url - -urlpatterns = patterns('sponsors.views', - url(r'^page/(?P<name>.+)\.html$', 'page', name='sponsor_page'), -) diff --git a/apps/sponsors/views.py b/apps/sponsors/views.py deleted file mode 100644 index 9a340895c..000000000 --- a/apps/sponsors/views.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.http import HttpResponse -from ssify import ssi_included -from .models import SponsorPage - - -@ssi_included(use_lang=False) -def page(request, name): - try: - page = SponsorPage.objects.get(name=name) - except SponsorPage.DoesNotExist: - return HttpResponse(u'') - return HttpResponse(page.html) diff --git a/apps/sponsors/widgets.py b/apps/sponsors/widgets.py deleted file mode 100644 index 0ddab3809..000000000 --- a/apps/sponsors/widgets.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from django import forms -from django.utils.safestring import mark_safe - -from sponsors import models - - -class SponsorPageWidget(forms.Textarea): - class Media: - js = ( - 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js', - 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.1/jquery-ui.min.js', - settings.STATIC_URL + 'sponsors/js/jquery.json.min.js', - settings.STATIC_URL + 'sponsors/js/footer_admin.js', - ) - css = { - 'all': (settings.STATIC_URL + 'sponsors/css/footer_admin.css',), - } - - def render(self, name, value, attrs=None): - output = [super(SponsorPageWidget, self).render(name, value, attrs)] - sponsors = [(unicode(obj), obj.pk, obj.logo.url) for obj in models.Sponsor.objects.all().iterator()] - sponsors_js = ', '.join('{name: "%s", id: %d, image: "%s"}' % sponsor for sponsor in sponsors) - output.append(u'<script type="text/javascript">addEvent(window, "load", function(e) {') - # TODO: "id_" is hard-coded here. This should instead use the correct - # API to determine the ID dynamically. - output.append(u'$("#id_%s").sponsorsFooter({sponsors: [%s]}); });</script>\n' % - (name, sponsors_js)) - return mark_safe(u''.join(output)) diff --git a/apps/stats/__init__.py b/apps/stats/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/stats/models.py b/apps/stats/models.py deleted file mode 100644 index 8b1378917..000000000 --- a/apps/stats/models.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/stats/tasks.py b/apps/stats/tasks.py deleted file mode 100644 index dcd0a4bd7..000000000 --- a/apps/stats/tasks.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from celery.task import task -from django.conf import settings -import httplib -import logging -import urlparse - -logger = logging.getLogger(__name__) - - -PIWIK_API_VERSION = 1 - -# Retrieve piwik information -try: - _host = urlparse.urlsplit(settings.PIWIK_URL).netloc -except AttributeError: - logger.debug("PIWIK_URL not configured.") - _host = None - - -@task(ignore_result=True) -def track_request(piwik_args): - piwik_url = "%s%s%s" % (settings.PIWIK_URL, u"/piwik.php?", piwik_args) - conn = httplib.HTTPConnection(_host) - conn.request('GET', piwik_url) - conn.close() diff --git a/apps/stats/utils.py b/apps/stats/utils.py deleted file mode 100644 index 474d1b59a..000000000 --- a/apps/stats/utils.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from datetime import datetime -import logging -from functools import update_wrapper -import urllib -from random import random -from inspect import isclass -from .tasks import track_request - -logger = logging.getLogger(__name__) - - -def piwik_url(request): - return urllib.urlencode(dict( - idsite=getattr(settings, 'PIWIK_SITE_ID', '0'), - rec=1, - url='http://%s%s' % (request.META['HTTP_HOST'], request.path), - rand=int(random() * 0x10000), - apiv=PIWIK_API_VERSION, - urlref=request.META.get('HTTP_REFERER', ''), - ua=request.META.get('HTTP_USER_AGENT', ''), - lang=request.META.get('HTTP_ACCEPT_LANGUAGE', ''), - token_auth=getattr(settings, 'PIWIK_TOKEN', ''), - cip=request.META['REMOTE_ADDR'], - cdt=datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S") - )) - -PIWIK_API_VERSION = 1 - - -def piwik_track(klass_or_method): - """Track decorated class or method using Piwik (according to configuration in settings and django-piwik) - Works for handler classes (executed by __call__) or handler methods. Expects request to be the first parameter - """ - if not getattr(settings, 'PIWIK_SITE_ID', 0): - return klass_or_method - - # get target method - if isclass(klass_or_method): - klass = klass_or_method - call_func = klass.__call__ - else: - call_func = klass_or_method - - def wrap(self, request, *args, **kw): - if getattr(request, 'piwik_track', True): - track_request.delay(piwik_url(request)) - return call_func(self, request, *args, **kw) - - # and wrap it - update_wrapper(wrap, call_func) - - if isclass(klass_or_method): - klass.__call__ = wrap - return klass - else: - return wrap diff --git a/apps/suggest/__init__.py b/apps/suggest/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/suggest/admin.py b/apps/suggest/admin.py deleted file mode 100644 index b5fcb5cf2..000000000 --- a/apps/suggest/admin.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.contrib import admin - -from suggest.models import Suggestion, PublishingSuggestion - -class SuggestionAdmin(admin.ModelAdmin): - list_display = ('created_at', 'contact', 'user', 'description') - -admin.site.register(Suggestion, SuggestionAdmin) - - -class PublishingSuggestionAdmin(admin.ModelAdmin): - list_display = ('created_at', 'contact', 'user', 'books', 'audiobooks') - -admin.site.register(PublishingSuggestion, PublishingSuggestionAdmin) diff --git a/apps/suggest/forms.py b/apps/suggest/forms.py deleted file mode 100644 index b98e0ae4a..000000000 --- a/apps/suggest/forms.py +++ /dev/null @@ -1,118 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import forms -from django.contrib.sites.models import Site -from django.core.exceptions import ValidationError -from django.core.mail import send_mail, mail_managers -from django.core.urlresolvers import reverse -from django.core.validators import validate_email -from django.utils.translation import ugettext_lazy as _ -from django.utils.translation import ugettext -from suggest.models import PublishingSuggestion, Suggestion - - -class SuggestForm(forms.Form): - contact = forms.CharField(label=_('Contact'), max_length=120, required=False) - description = forms.CharField(label=_('Description'), widget=forms.Textarea, required=True) - - def save(self, request): - contact = self.cleaned_data['contact'] - description = self.cleaned_data['description'] - - suggestion = Suggestion(contact=contact, - description=description, ip=request.META['REMOTE_ADDR']) - if request.user.is_authenticated(): - suggestion.user = request.user - suggestion.save() - - mail_managers(u'Nowa sugestia na stronie WolneLektury.pl', u'''\ -ZgÅoszono nowÄ sugestiÄ w serwisie WolneLektury.pl. -http://%(site)s%(url)s - -Użytkownik: %(user)s -Kontakt: %(contact)s - -%(description)s''' % { - 'site': Site.objects.get_current().domain, - 'url': reverse('admin:suggest_suggestion_change', args=[suggestion.id]), - 'user': str(request.user) if request.user.is_authenticated() else '', - 'contact': contact, - 'description': description, - }, fail_silently=True) - - try: - validate_email(contact) - except ValidationError: - pass - else: - send_mail(u'[WolneLektury] ' + - ugettext(u'Thank you for your suggestion.'), - ugettext(u"""\ -Thank you for your comment on WolneLektury.pl. -The suggestion has been referred to the project coordinator.""") + -u""" - --- -""" + ugettext(u'''Message sent automatically. Please do not reply.'''), - 'no-reply@wolnelektury.pl', [contact], fail_silently=True) - - -class PublishingSuggestForm(forms.Form): - contact = forms.CharField(label=_('Contact'), max_length=120, required=False) - books = forms.CharField(label=_('books'), widget=forms.Textarea, required=False) - audiobooks = forms.CharField(label=_('audiobooks'), widget=forms.Textarea, required=False) - - def clean(self, *args, **kwargs): - if not self.cleaned_data['books'] and not self.cleaned_data['audiobooks']: - msg = ugettext(u"One of these fields is required.") - self._errors["books"] = self.error_class([msg]) - self._errors["audiobooks"] = self.error_class([msg]) - return super(PublishingSuggestForm, self).clean(*args, **kwargs) - - def save(self, request): - contact = self.cleaned_data['contact'] - books = self.cleaned_data['books'] - audiobooks = self.cleaned_data['audiobooks'] - - suggestion = PublishingSuggestion(contact=contact, books=books, - audiobooks=audiobooks, ip=request.META['REMOTE_ADDR']) - if request.user.is_authenticated(): - suggestion.user = request.user - suggestion.save() - - mail_managers(u'Konsultacja planu wydawniczego na WolneLektury.pl', u'''\ -ZgÅoszono nowÄ sugestiÄ nt. planu wydawniczego w serwisie WolneLektury.pl. -%(url)s - -Użytkownik: %(user)s -Kontakt: %(contact)s - -KsiÄ Å¼ki: -%(books)s - -Audiobooki: -%(audiobooks)s''' % { - 'url': request.build_absolute_uri(reverse('admin:suggest_suggestion_change', args=[suggestion.id])), - 'user': str(request.user) if request.user.is_authenticated() else '', - 'contact': contact, - 'books': books, - 'audiobooks': audiobooks, - }, fail_silently=True) - - try: - validate_email(contact) - except ValidationError: - pass - else: - send_mail(u'[WolneLektury] ' + - ugettext(u'Thank you for your suggestion.'), - ugettext(u"""\ -Thank you for your comment on WolneLektury.pl. -The suggestion has been referred to the project coordinator.""") + -u""" - --- -""" + ugettext(u'''Message sent automatically. Please do not reply.'''), - 'no-reply@wolnelektury.pl', [contact], fail_silently=True) diff --git a/apps/suggest/locale/de/LC_MESSAGES/django.mo b/apps/suggest/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index 2531a86b7..000000000 Binary files a/apps/suggest/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/de/LC_MESSAGES/django.po b/apps/suggest/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index e96c86b0e..000000000 --- a/apps/suggest/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,106 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-08 11:33+0100\n" -"Last-Translator: \n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "Kontakt" - -#: forms.py:17 -msgid "Description" -msgstr "Beschreibung" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "Vielen Dank für Ihren Vorschlag." - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" -"Vielen Dank für Ihren Kommentar zu WolneLekturz.pl\n" -"Ihr Kommentar ist an den Projekt - Koordinator weitergeleitet worden. " - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "" -"Diese Nachricht wird automatisch generiert. Bitte sie nicht beantworten." - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "Bücher" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "Audiobücher" - -#: forms.py:64 -msgid "One of these fields is required." -msgstr "Erfüllen Sie bitte ein von diesen Feldern. " - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "Kontakt" - -#: models.py:11 -msgid "description" -msgstr "Beschreibung" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "Erstellungsdatum" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "IP-Adresse" - -#: models.py:18 -msgid "suggestion" -msgstr "Vorschlag" - -#: models.py:19 -msgid "suggestions" -msgstr "Vorschläge" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "Vorschlag publizieren" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "Vorschläge publizieren" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr "Melden Sie einen Bug oder einen Vorschlag" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "Der Bericht wurde erfolgreich gesendet." - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "Bericht senden" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "Hast Du kein Buch gefunden? Mach einen Vorschlag." - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl theseâ¦" -msgstr "Ich würde gerne auf WolneLektury ... finden." diff --git a/apps/suggest/locale/en/LC_MESSAGES/django.mo b/apps/suggest/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index 69b20d038..000000000 Binary files a/apps/suggest/locale/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/en/LC_MESSAGES/django.po b/apps/suggest/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index 20bd3bb0a..000000000 --- a/apps/suggest/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,106 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-10 13:06+0100\n" -"Last-Translator: Kamil <kjaklukowski@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1\n" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "Contact" - -#: forms.py:17 -msgid "Description" -msgstr "Description" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "Thank you for your suggestion." - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" -"Thank you for your suggestion concerning WolneLektury.pl \n" -"Your suggestion was sent to the project coordinator." - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "This message was sent automatically. Please do not reply." - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "books" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "audiobooks" - -#: forms.py:64 -msgid "One of these fields is required." -msgstr "One of these fields is required." - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "Contact" - -#: models.py:11 -msgid "description" -msgstr "description" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "creation date" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "IP address" - -#: models.py:18 -msgid "suggestion" -msgstr "suggestion" - -#: models.py:19 -msgid "suggestions" -msgstr "suggestions" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "publishing suggestion" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "publishing suggestions" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr "Report an error or make a suggestion" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "publishing suggestion" - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "send a suggestion" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "Didn't find a book? Make a suggestion." - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl theseâ¦" -msgstr "I would like to find the following items on WolneLektury.pl:" diff --git a/apps/suggest/locale/es/LC_MESSAGES/django.mo b/apps/suggest/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index 11f8aa62a..000000000 Binary files a/apps/suggest/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/es/LC_MESSAGES/django.po b/apps/suggest/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index 67e142599..000000000 --- a/apps/suggest/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,105 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-18 13:20+0100\n" -"Last-Translator: Anna Jopp <aniajopp@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "Contacto" - -#: forms.py:17 -msgid "Description" -msgstr "Descripción" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "Gracias por tu sugerencia" - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" -"Gracias por tu comentario en WolneLektury.pl La sugerencia ha sido remitida " -"a el coordinador del proyecto" - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "La mensaje enviado automaticamente. No conteste por favor." - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "libros" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "audiolibros" - -#: forms.py:64 -msgid "One of these fields is required." -msgstr "Uno de estos campos es requerido" - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "Contacto" - -#: models.py:11 -msgid "description" -msgstr "Descripción" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "Fecha de creación" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "Dirección IP" - -#: models.py:18 -msgid "suggestion" -msgstr "sugerencia" - -#: models.py:19 -msgid "suggestions" -msgstr "sugerencias" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "Sugerencia de publicación" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "Sugerencias de publicación" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr "Reporta un error o una sugerencia" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "la noticia ha sido enviada con éxito " - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "Envia un report" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "No encontraste un libro? Haz una sugerencia." - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl theseâ¦" -msgstr "Me gustarÃa encontrar estos en WolneLektury.pl" diff --git a/apps/suggest/locale/fr/LC_MESSAGES/django.mo b/apps/suggest/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index 04716bcac..000000000 Binary files a/apps/suggest/locale/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/fr/LC_MESSAGES/django.po b/apps/suggest/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index 3b95f4739..000000000 --- a/apps/suggest/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,105 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-23 17:55+0100\n" -"Last-Translator: Ela Janota <amarillis5@wp.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "Contact" - -#: forms.py:17 -msgid "Description" -msgstr "Description" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "Merci pour votre suggestion." - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" -"Merci pour votre commentaire sur Wolne Lektury.pl.\n" -"Votre suggestion a été adressée au coordinateur du projet." - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "Message envoyé automatiquement. Merci de n'y pas répondre." - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "livres" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "livres audio" - -#: forms.py:64 -msgid "One of these fields is required." -msgstr "L'une des ces rubriques est obligatoire." - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "contact" - -#: models.py:11 -msgid "description" -msgstr "description" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "date de création" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "adresse IP" - -#: models.py:18 -msgid "suggestion" -msgstr "suggestion" - -#: models.py:19 -msgid "suggestions" -msgstr "suggestions" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "suggestion sur publication" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "suggestions sur publication" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr "Rapportez une erreur ou faites une suggestion" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "Votre rapport a été envoyé" - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "Envoyez un rapport" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "Vous n'avez pas trouvé un livre? Faites une suggestion." - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl theseâ¦" -msgstr "J'aimerais trouver dans Wolne Lektury.pl:..." diff --git a/apps/suggest/locale/it/LC_MESSAGES/django.mo b/apps/suggest/locale/it/LC_MESSAGES/django.mo deleted file mode 100644 index 38cbcb47f..000000000 Binary files a/apps/suggest/locale/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/it/LC_MESSAGES/django.po b/apps/suggest/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index 70f0c346b..000000000 --- a/apps/suggest/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,107 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-21 17:57+0100\n" -"Last-Translator: xxx\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "Contatto" - -#: forms.py:17 -msgid "Description" -msgstr "Descrizione" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "Grazie per la sua proposta" - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" -"Grazie per il commento su WolneLektury.pl. La sua proposta è stata inviata " -"al coordinatore del progetto. // " - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "" -"Il messaggio è stato inviato automaticamente. Si prega di non rispondere." - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "libri" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "audiolibri" - -#: forms.py:64 -msgid "One of these fields is required." -msgstr "E' richiesto uno di questi campi. " - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "contatto" - -#: models.py:11 -msgid "description" -msgstr "descrizione" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "data di creazione" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "Indirizzo IP" - -#: models.py:18 -msgid "suggestion" -msgstr "proposta" - -#: models.py:19 -msgid "suggestions" -msgstr "proposte" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "pubblica la proposta" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "pubblica le proposte" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr " Segnala un'errore o un proposta" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "La notifica è stata inviata con successo." - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "Invia una notifica" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "Non hai trovato il libro?Fai una proposta." - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl theseâ¦" -msgstr "Vorrei trovare in WolneLektury.pl questo..." diff --git a/apps/suggest/locale/jp/LC_MESSAGES/django.mo b/apps/suggest/locale/jp/LC_MESSAGES/django.mo deleted file mode 100644 index c9739db34..000000000 Binary files a/apps/suggest/locale/jp/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/jp/LC_MESSAGES/django.po b/apps/suggest/locale/jp/LC_MESSAGES/django.po deleted file mode 100644 index b02e371d3..000000000 --- a/apps/suggest/locale/jp/LC_MESSAGES/django.po +++ /dev/null @@ -1,104 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "" - -#: forms.py:17 -msgid "Description" -msgstr "" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "" - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "" - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "" - -#: forms.py:64 -msgid "One of these fields is required." -msgstr "" - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "" - -#: models.py:11 -msgid "description" -msgstr "" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "" - -#: models.py:18 -msgid "suggestion" -msgstr "" - -#: models.py:19 -msgid "suggestions" -msgstr "" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr "" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "" - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "" - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl theseâ¦" -msgstr "" diff --git a/apps/suggest/locale/lt/LC_MESSAGES/django.mo b/apps/suggest/locale/lt/LC_MESSAGES/django.mo deleted file mode 100644 index 0dbad8e48..000000000 Binary files a/apps/suggest/locale/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/lt/LC_MESSAGES/django.po b/apps/suggest/locale/lt/LC_MESSAGES/django.po deleted file mode 100644 index 25759b3d7..000000000 --- a/apps/suggest/locale/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,105 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-02 18:19+0100\n" -"Last-Translator: Karolina Zuber <suomija@o2.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "Kontaktas" - -#: forms.py:17 -msgid "Description" -msgstr "ApraÅ¡ymas" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "AÄiÅ« už jÅ«sų pasiÅ«lymÄ ." - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" -"AÄiÅ« už jÅ«sų komentarÄ WolneLektury.pl interneto svetainÄje \n" -"PasiÅ«lymas buvo pateiktas projekto koordinatoriui." - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "Tai automatiÅ¡kai sugeneruotas laiÅ¡kas. PraÅ¡ome į jį neatsakyti." - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "knygas" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "audio knygas" - -#: forms.py:64 -msgid "One of these fields is required." -msgstr "Vienas iÅ¡ Å¡ių laukelių yra reikalaujamas." - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "kontaktas" - -#: models.py:11 -msgid "description" -msgstr "apraÅ¡ymas" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "sukÅ«rimo data" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "IP adresas" - -#: models.py:18 -msgid "suggestion" -msgstr "pasiÅ«lymas" - -#: models.py:19 -msgid "suggestions" -msgstr "pasiÅ«lymai" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "publikavimo pasiÅ«lymas" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "publikavimo pasiÅ«lymai" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr "PraneÅ¡kite apie klaidÄ arba teikite pasiÅ«lymus" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "PraneÅ¡imas sÄkmingai iÅ¡siųstas." - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "Siųsti praneÅ¡imÄ " - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "Neradote knygos? Teikite pasiÅ«lymus." - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl theseâ¦" -msgstr "Interneto svetainÄje WolneLektury.pl norÄÄiau rasti Å¡ias..." diff --git a/apps/suggest/locale/pl/LC_MESSAGES/django.mo b/apps/suggest/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index b2dcabd83..000000000 Binary files a/apps/suggest/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/pl/LC_MESSAGES/django.po b/apps/suggest/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index b5bfc9eae..000000000 --- a/apps/suggest/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,106 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2011-06-09 13:06+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "Kontakt" - -#: forms.py:17 -msgid "Description" -msgstr "Opis" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "DziÄkujemy za zgÅoszenie." - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" -"DziÄkujemy za zgÅoszenie uwag do serwisu Wolne Lektury.\n" -"Sugestia zostaÅa przekazana koordynatorce projektu." - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "WiadomoÅÄ wysÅana automatycznie. ProszÄ nie odpowiadaÄ." - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "ksiÄ Å¼ki" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "audiobooki" - -#: forms.py:64 -msgid "One of these fields is required." -msgstr "ProszÄ wypeÅniÄ co najmniej jedno z tych pól." - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "kontakt" - -#: models.py:11 -msgid "description" -msgstr "opis" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "data utworzenia" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "adres IP" - -#: models.py:18 -msgid "suggestion" -msgstr "sugestia" - -#: models.py:19 -msgid "suggestions" -msgstr "sugestie" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "sugestia publikacji" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "sugestie publikacji" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr "ZgÅoÅ bÅÄ d lub sugestiÄ" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "ZgÅoszenie zostaÅo wysÅane." - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "WyÅlij zgÅoszenie" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "Nie znalazÅeÅ utworu na stronie? ZgÅoÅ sugestiÄ." - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl theseâ¦" -msgstr "ChciaÅabym/chciaÅbym znaleÅºÄ w bibliotece Wolne Lektury nastÄpujÄ ce" diff --git a/apps/suggest/locale/ru/LC_MESSAGES/django.mo b/apps/suggest/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index 0b7fe0c82..000000000 Binary files a/apps/suggest/locale/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/ru/LC_MESSAGES/django.po b/apps/suggest/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index b6ba0f15e..000000000 --- a/apps/suggest/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,105 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 22:11+0100\n" -"Last-Translator: xxx <xxx>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "ÐонÑакÑ" - -#: forms.py:17 -msgid "Description" -msgstr "ÐпиÑание" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "СпаÑибо за ÐаÑе пÑедложение." - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" -"СпаÑибо за ÐÐ°Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑий на WolneLektury.pl. \n" -"ÐÑедложение бÑло пеÑедано кооÑдинаÑоÑÑ Ð¿ÑоекÑа." - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "СообÑение оÑпÑавлено авÑомаÑиÑеÑки. ÐожалÑйÑÑа, не оÑвеÑайÑе." - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "книги" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "аÑдиокниги" - -#: forms.py:64 -msgid "One of these fields is required." -msgstr "ТÑебÑеÑÑÑ Ð¾Ð´Ð½Ð¾ из ÑÑÐ¸Ñ Ð¿Ð¾Ð»ÐµÐ¹." - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "конÑакÑ" - -#: models.py:11 -msgid "description" -msgstr "опиÑание" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "даÑа ÑозданиÑ" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "IP-адÑеÑ" - -#: models.py:18 -msgid "suggestion" -msgstr "пÑедложение" - -#: models.py:19 -msgid "suggestions" -msgstr "пÑедложениÑ" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "издаÑелÑÑкое пÑедложение" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "издаÑелÑÑкие пÑедложениÑ" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr "СообÑиÑe об оÑибке или пÑедложении" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "ÐÑÑÐµÑ Ð¾ÑпÑавлен ÑÑпеÑно." - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "ÐÑпÑавиÑÑ Ð¾ÑÑеÑ" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "ÐÑ Ð½Ðµ наÑли книгÑ? СделайÑе пÑедложение." - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl theseâ¦" -msgstr "Я Ñ Ð¾Ñел/а Ð±Ñ Ð½Ð°Ð¹Ñи на ÑайÑе WolneLektury.pl ÑÑÐ¸Ñ ..." diff --git a/apps/suggest/locale/uk/LC_MESSAGES/django.mo b/apps/suggest/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index 8e7f71016..000000000 Binary files a/apps/suggest/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/suggest/locale/uk/LC_MESSAGES/django.po b/apps/suggest/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index 5aaed2577..000000000 --- a/apps/suggest/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,106 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-04 17:31+0100\n" -"Last-Translator: xxx <xxx>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: forms.py:16 forms.py:58 -msgid "Contact" -msgstr "ÐонÑакÑ" - -#: forms.py:17 -msgid "Description" -msgstr "ÐпиÑ" - -#: forms.py:46 forms.py:101 -msgid "Thank you for your suggestion." -msgstr "ÐÑкÑÑмо за ÐаÑÑ Ð¿ÑопозиÑÑÑ." - -#: forms.py:47 forms.py:102 -msgid "" -"Thank you for your comment on WolneLektury.pl.\n" -"The suggestion has been referred to the project coordinator." -msgstr "" -"ÐÑкÑÑмо за ÐÐ°Ñ ÐºÐ¾Ð¼ÐµÐ½ÑÐ°Ñ Ð½Ð° WolneLektury.pl.\n" -"ÐаÑÑ Ð¿ÑопозиÑÑÑ Ð¿ÐµÑедано кооÑдинаÑоÑÑ Ð¿ÑоекÑÑ." - -#: forms.py:53 forms.py:108 -msgid "Message sent automatically. Please do not reply." -msgstr "ÐовÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð°Ð´ÑÑлано авÑомаÑиÑно. ÐÑоÑимо не вÑдповÑдаÑи." - -#: forms.py:59 models.py:27 -msgid "books" -msgstr "книжки" - -#: forms.py:60 models.py:28 -msgid "audiobooks" -msgstr "аÑдÑокниги" - -#: forms.py:64 -#, fuzzy -msgid "One of these fields is required." -msgstr "Ðдне з ÑÐ¸Ñ Ð¿Ð¾Ð»Ñв Ñ Ð¾Ð±Ð¾Ð²'Ñзковим." - -#: models.py:10 models.py:26 -msgid "contact" -msgstr "конÑакÑ" - -#: models.py:11 -msgid "description" -msgstr "опиÑ" - -#: models.py:12 models.py:29 -msgid "creation date" -msgstr "даÑа ÑÑвоÑеннÑ" - -#: models.py:13 models.py:30 -msgid "IP address" -msgstr "IP-адÑеÑа" - -#: models.py:18 -msgid "suggestion" -msgstr "пÑопозиÑÑÑ" - -#: models.py:19 -msgid "suggestions" -msgstr "пÑопозиÑÑÑ" - -#: models.py:35 -msgid "publishing suggestion" -msgstr "пÑопозиÑÑÑ Ð¿ÑблÑкаÑÑÑ" - -#: models.py:36 -msgid "publishing suggestions" -msgstr "пÑопозиÑÑÑ Ð¿ÑблÑкаÑÑй" - -#: views.py:13 views.py:21 -msgid "Report a bug or suggestion" -msgstr "ÐовÑдомиÑи пÑо Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑ Ð°Ð±Ð¾ надÑÑлаÑи пÑопозиÑÑÑ" - -#: views.py:15 views.py:23 -msgid "Report was sent successfully." -msgstr "ÐаÑе повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð°Ð´ÑÑлано ÑÑпÑÑно." - -#: views.py:22 templates/publishing_suggest.html:18 -msgid "Send report" -msgstr "ÐиÑлаÑи повÑдомленнÑ" - -#: templates/publishing_suggest.html:4 -msgid "Didn't find a book? Make a suggestion." -msgstr "Ðе знайÑли книжки, ÑÐºÐ¾Ñ ÑÑкали? ÐиÑлÑÑÑ ÑÐ²Ð¾Ñ Ð¿ÑопозиÑÑÑ." - -#: templates/publishing_suggest.html:12 -msgid "I'd like to find in WolneLektury.pl theseâ¦" -msgstr "Я Ñ Ð¾ÑÑв би/Ñ Ð¾ÑÑла би знайÑи на ÑайÑÑ WolneLektury.pl наÑÑÑпнÑ..." diff --git a/apps/suggest/migrations/0001_initial.py b/apps/suggest/migrations/0001_initial.py deleted file mode 100644 index b02889762..000000000 --- a/apps/suggest/migrations/0001_initial.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -from django.conf import settings - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='PublishingSuggestion', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('contact', models.CharField(max_length=120, verbose_name='Contact', blank=True)), - ('books', models.TextField(null=True, verbose_name='Books', blank=True)), - ('audiobooks', models.TextField(null=True, verbose_name='audiobooks', blank=True)), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date')), - ('ip', models.GenericIPAddressField(verbose_name='IP address')), - ('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)), - ], - options={ - 'ordering': ('-created_at',), - 'verbose_name': 'publishing suggestion', - 'verbose_name_plural': 'publishing suggestions', - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Suggestion', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('contact', models.CharField(max_length=120, verbose_name='Contact', blank=True)), - ('description', models.TextField(verbose_name='Description', blank=True)), - ('created_at', models.DateTimeField(auto_now=True, verbose_name='creation date')), - ('ip', models.GenericIPAddressField(verbose_name='IP address')), - ('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)), - ], - options={ - 'ordering': ('-created_at',), - 'verbose_name': 'suggestion', - 'verbose_name_plural': 'suggestions', - }, - bases=(models.Model,), - ), - ] diff --git a/apps/suggest/migrations/0002_auto_20151221_1225.py b/apps/suggest/migrations/0002_auto_20151221_1225.py deleted file mode 100644 index 126808b68..000000000 --- a/apps/suggest/migrations/0002_auto_20151221_1225.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('suggest', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='publishingsuggestion', - name='books', - field=models.TextField(null=True, verbose_name='books', blank=True), - ), - migrations.AlterField( - model_name='publishingsuggestion', - name='contact', - field=models.CharField(max_length=120, verbose_name='contact', blank=True), - ), - migrations.AlterField( - model_name='suggestion', - name='contact', - field=models.CharField(max_length=120, verbose_name='contact', blank=True), - ), - migrations.AlterField( - model_name='suggestion', - name='description', - field=models.TextField(verbose_name='description', blank=True), - ), - ] diff --git a/apps/suggest/migrations/__init__.py b/apps/suggest/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/suggest/models.py b/apps/suggest/models.py deleted file mode 100644 index c0f8658f5..000000000 --- a/apps/suggest/models.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.db import models -from django.contrib.auth.models import User -from django.utils.translation import ugettext_lazy as _ - -class Suggestion(models.Model): - contact = models.CharField(_('contact'), blank=True, max_length=120) - description = models.TextField(_('description'), blank=True) - created_at = models.DateTimeField(_('creation date'), auto_now=True) - ip = models.GenericIPAddressField(_('IP address')) - user = models.ForeignKey(User, blank=True, null=True) - - class Meta: - ordering = ('-created_at',) - verbose_name = _('suggestion') - verbose_name_plural = _('suggestions') - - def __unicode__(self): - return unicode(self.created_at) - - -class PublishingSuggestion(models.Model): - contact = models.CharField(_('contact'), blank=True, max_length=120) - books = models.TextField(_('books'), null=True, blank=True) - audiobooks = models.TextField(_('audiobooks'), null=True, blank=True) - created_at = models.DateTimeField(_('creation date'), auto_now_add=True) - ip = models.GenericIPAddressField(_('IP address')) - user = models.ForeignKey(User, blank=True, null=True) - - class Meta: - ordering = ('-created_at',) - verbose_name = _('publishing suggestion') - verbose_name_plural = _('publishing suggestions') - - def __unicode__(self): - return unicode(self.created_at) diff --git a/apps/suggest/templates/publishing_suggest.html b/apps/suggest/templates/publishing_suggest.html deleted file mode 100755 index 2ac0ec245..000000000 --- a/apps/suggest/templates/publishing_suggest.html +++ /dev/null @@ -1,21 +0,0 @@ -{% load i18n %} -{% load honeypot %} -{% load ssi_csrf_token from ssify %} - -<h1>{% trans "Didn't find a book? Make a suggestion." %}</h1> - -<form id='suggest-publishing-form' action="{% url 'suggest_publishing' %}" method="post" accept-charset="utf-8" class="cuteform"> -{% ssi_csrf_token %} -{% render_honeypot_field %} -<ol> - <li><span class="error">{{ form.contact.errors }}</span><label for="id_contact">{{ form.contact.label }}</label> {{ form.contact }}</li> - - <li>{% trans "I'd like to find in WolneLektury.pl theseâ¦" %}</li> - - <li><span class="error">{{ form.books.errors }}</span><label for="id_books">{{ form.books.label }}:</label> {{ form.books }}</li> - - <li><span class="error">{{ form.audiobooks.errors }}</span><label for="id_audiobooks">{{ form.audiobooks.label }}:</label> {{ form.audiobooks }}</li> - - <li><input type="submit" value="{% trans "Send report" %}"/></li> -</ol> -</form> diff --git a/apps/suggest/urls.py b/apps/suggest/urls.py deleted file mode 100644 index 2f7017213..000000000 --- a/apps/suggest/urls.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url -from suggest import views - -urlpatterns = patterns('', - url(r'^$', views.SuggestionFormView(), name='suggest'), - url(r'^plan/$', views.PublishingSuggestionFormView(), name='suggest_publishing'), -) - diff --git a/apps/suggest/views.py b/apps/suggest/views.py deleted file mode 100644 index 035074d0a..000000000 --- a/apps/suggest/views.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.utils.translation import ugettext_lazy as _ - -from ajaxable.utils import AjaxableFormView -from suggest import forms - - -class PublishingSuggestionFormView(AjaxableFormView): - form_class = forms.PublishingSuggestForm - title = _('Report a bug or suggestion') - template = "publishing_suggest.html" - success_message = _('Report was sent successfully.') - honeypot = True - - -class SuggestionFormView(AjaxableFormView): - form_class = forms.SuggestForm - title = _('Report a bug or suggestion') - submit = _('Send report') - success_message = _('Report was sent successfully.') - honeypot = True diff --git a/apps/waiter/__init__.py b/apps/waiter/__init__.py deleted file mode 100644 index 9c83ee36e..000000000 --- a/apps/waiter/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -""" -Celery waiter. - -Takes orders for files generated by async Celery tasks. -Serves the file when ready. Kindly asks the user to wait if not. - -Author: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl> -""" diff --git a/apps/waiter/locale/pl/LC_MESSAGES/django.mo b/apps/waiter/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index dc750957f..000000000 Binary files a/apps/waiter/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/waiter/locale/pl/LC_MESSAGES/django.po b/apps/waiter/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 28008ee37..000000000 --- a/apps/waiter/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,70 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-22 15:54+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2)\n" - -#: templates/waiter/wait.html:7 templates/waiter/wait.html.py:33 -msgid "The file is ready for download!" -msgstr "Plik jest gotowy do pobrania!" - -#: templates/waiter/wait.html:10 templates/waiter/wait.html.py:43 -msgid "Your file is being prepared, please wait." -msgstr "Plik jest generowany, proszÄ czekaÄ." - -#: templates/waiter/wait.html:12 templates/waiter/wait.html.py:52 -msgid "Something went wrong." -msgstr "CoÅ poszÅo nie tak." - -#: templates/waiter/wait.html:36 -#, python-format -msgid "" -"Your file is ready!\n" -" If the download doesn't start in a few seconds,\n" -" feel free to use this <a href=\"%(file_url)s\">direct link</a>." -msgstr "" -"Twój plik jest gotowy!\n" -"JeÅli pobieranie nie zacznie siÄ w ciÄ gu kilku sekund,\n" -"skorzystaj z tego <a href=\"%(file_url)s\">bezpoÅredniego linku</a>." - -#: templates/waiter/wait.html:42 -msgid "Please wait" -msgstr "" - -#: templates/waiter/wait.html:46 -#, python-format -msgid "The file you requested was: <em>%(d)s</em>." -msgstr "Zamówiony plik to: <em>%(d)s</em>." - -#: templates/waiter/wait.html:48 -msgid "" -"<strong>Be aware:</strong> Generating the file can take a while.\n" -" Please be patient, or bookmark this page and come back later.</p>" -msgstr "" -"<strong>Uwaga:</strong> Generowanie pliku może trwaÄ dÅuższÄ chwilÄ.\n" -"Poczekaj cierpliwie, albo dodaj tÄ stronÄ do zakÅadek i wrÃ³Ä później.</p>" - -#: templates/waiter/wait.html:56 -#, python-format -msgid "" -"Something seems to have gone wrong while generating your file.\n" -" Please order it again or <a id='suggest' class='ajaxable' href=" -"\"%(s)s\">complain to us</a> about it." -msgstr "" -"WyglÄ da na to, że coÅ poszÅo źle podczas generowania Twojego pliku.\n" -"Spróbuj zamówiÄ go jeszcze raz albo <a id='suggest' class='ajaxable' href=" -"\"%(s)s\">napisz do nas</a>." diff --git a/apps/waiter/migrations/0001_initial.py b/apps/waiter/migrations/0001_initial.py deleted file mode 100644 index a579d6efb..000000000 --- a/apps/waiter/migrations/0001_initial.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import picklefield.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='WaitedFile', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('path', models.CharField(unique=True, max_length=255, db_index=True)), - ('task_id', models.CharField(db_index=True, max_length=128, null=True, blank=True)), - ('task', picklefield.fields.PickledObjectField(null=True, editable=False)), - ('description', models.CharField(max_length=255, null=True, blank=True)), - ], - options={ - }, - bases=(models.Model,), - ), - ] diff --git a/apps/waiter/migrations/__init__.py b/apps/waiter/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/waiter/models.py b/apps/waiter/models.py deleted file mode 100644 index bffaf7f8a..000000000 --- a/apps/waiter/models.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from os.path import join, isfile -from django.core.urlresolvers import reverse -from django.db import models -from waiter.settings import WAITER_URL, WAITER_MAX_QUEUE -from waiter.utils import check_abspath -from picklefield import PickledObjectField - - -class WaitedFile(models.Model): - path = models.CharField(max_length=255, unique=True, db_index=True) - task_id = models.CharField(max_length=128, db_index=True, null=True, blank=True) - task = PickledObjectField(null=True, editable=False) - description = models.CharField(max_length=255, null=True, blank=True) - - @classmethod - def exists(cls, path): - """Returns opened file or None. - - `path` is relative to WAITER_ROOT. - Won't open a path leading outside of WAITER_ROOT. - """ - abs_path = check_abspath(path) - # Pre-fetch objects for deletion to avoid minor race condition - relevant = [o.id for o in cls.objects.filter(path=path)] - if isfile(abs_path): - cls.objects.filter(id__in=relevant).delete() - return True - else: - return False - - @classmethod - def can_order(cls, path): - return (cls.objects.filter(path=path).exists() or - cls.exists(path) or - cls.objects.count() < WAITER_MAX_QUEUE - ) - - @classmethod - def order(cls, path, task_creator, description=None): - """ - Returns an URL for the user to follow. - If the file is ready, returns download URL. - If not, starts preparing it and returns waiting URL. - - task_creator: function taking a path and generating the file; - description: a string or string proxy with a description for user; - """ - already = cls.exists(path) - if not already: - waited, created = cls.objects.get_or_create(path=path) - if created or waited.is_stale(): - waited.task = task_creator(check_abspath(path), waited.pk) - waited.task_id = waited.task.task_id - waited.description = description - waited.save() - return reverse("waiter", args=[path]) - return join(WAITER_URL, path) diff --git a/apps/waiter/settings.py b/apps/waiter/settings.py deleted file mode 100644 index aaa9f03b3..000000000 --- a/apps/waiter/settings.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from os.path import abspath, join -from django.conf import settings - -try: - WAITER_ROOT = abspath(settings.WAITER_ROOT) -except AttributeError: - WAITER_ROOT = abspath(join(settings.MEDIA_ROOT, 'waiter')) - -try: - WAITER_URL = settings.WAITER_URL -except AttributeError: - WAITER_URL = join(settings.MEDIA_URL, 'waiter') - -try: - WAITER_MAX_QUEUE = settings.WAITER_MAX_QUEUE -except AttributeError: - WAITER_MAX_QUEUE = 20 - diff --git a/apps/waiter/tasks.py b/apps/waiter/tasks.py deleted file mode 100644 index 89db402a3..000000000 --- a/apps/waiter/tasks.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from celery.signals import task_postrun -from waiter.models import WaitedFile - - -def task_delete_after(task_id=None, **kwargs): - WaitedFile.objects.filter(task_id=task_id).delete() -task_postrun.connect(task_delete_after) diff --git a/apps/waiter/templates/waiter/wait.html b/apps/waiter/templates/waiter/wait.html deleted file mode 100644 index 6ef1b7751..000000000 --- a/apps/waiter/templates/waiter/wait.html +++ /dev/null @@ -1,93 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load static from staticfiles %} - -{% block titleextra %} -{% if file_url %} - {% trans "The file is ready for download!" %} -{% else %} - {% if waiting %} - {% trans "Your file is being prepared, please wait." %} - {% else %} - {% trans "Something went wrong." %} - {% endif %} -{% endif %} -{% endblock %} - - -{% block extrahead %} -{% if file_url %} - <meta http-equiv="refresh" content="3; url={{ file_url }}" /> -{% else %} - {% if waiting %} - <noscript> - <meta http-equiv="refresh" content="10" /> - </noscript> - {% endif %} -{% endif %} -{% endblock %} - - -{% block body %} -{% if file_url %} - <h1>{% trans "The file is ready for download!" %}</h1> - - <div class="normal-text white-box"> - <p>{% blocktrans %}Your file is ready! - If the download doesn't start in a few seconds, - feel free to use this <a href="{{ file_url }}">direct link</a>.{% endblocktrans %}</p> - </div> -{% else %} - {% if waiting %} - <h1><img src="{% static "img/indicator.gif" %}" alt="{% trans 'Please wait' %}"/> - {% trans "Your file is being prepared, please wait." %}</h1> - - <div class="normal-text"> - <p>{% blocktrans with d=waiting.description %}The file you requested was: <em>{{d}}</em>.{% endblocktrans %}</p> - - <p>{% blocktrans %}<strong>Be aware:</strong> Generating the file can take a while. - Please be patient, or bookmark this page and come back later.</p>{% endblocktrans %} - </div> - {% else %} - <h1>{% trans "Something went wrong." %}</h1> - - <div class="normal-text"> - {% url 'suggest' as s %} - <p>{% blocktrans %}Something seems to have gone wrong while generating your file. - Please order it again or <a id='suggest' class='ajaxable' href="{{s}}">complain to us</a> about it.{% endblocktrans %}</p> - </div> - {% endif %} -{% endif %} - -{% endblock %} - -{% block extrabody %} -{% if waiting %} -<script language="JavaScript"> -<!-- -(function($) { - $(function(){ - -function wait() { - $.ajax({ - href: '', - success: function(data) { - if (data) { - location.reload(); - } - else - setTimeout(wait, 10*1000); - }, - error: function(xhr) { - location.reload(); - } - }); -} -setTimeout(wait, 10*1000); - - }); -})(jQuery); -//--> -</script> -{% endif %} -{% endblock %} diff --git a/apps/waiter/urls.py b/apps/waiter/urls.py deleted file mode 100644 index 21352c786..000000000 --- a/apps/waiter/urls.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import patterns, url - -urlpatterns = patterns('waiter.views', - url(r'^(?P<path>.*)$', 'wait', name='waiter'), -) diff --git a/apps/waiter/utils.py b/apps/waiter/utils.py deleted file mode 100644 index 68d21bd79..000000000 --- a/apps/waiter/utils.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from os.path import abspath, join, exists -from shutil import rmtree -from waiter.settings import WAITER_ROOT - - -def check_abspath(path): - abs_path = abspath(join(WAITER_ROOT, path)) - if not abs_path.startswith(WAITER_ROOT): - raise ValueError('Path not inside WAITER_ROOT.') - return abs_path - - -def clear_cache(path): - abs_path = check_abspath(path) - if exists(abs_path): - rmtree(abs_path) diff --git a/apps/waiter/views.py b/apps/waiter/views.py deleted file mode 100644 index b951cc4c8..000000000 --- a/apps/waiter/views.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from os.path import join -from waiter.models import WaitedFile -from waiter.settings import WAITER_URL -from django.shortcuts import render, get_object_or_404 -from django.http import HttpResponse -from django.views.decorators.cache import never_cache - - -@never_cache -def wait(request, path): - if WaitedFile.exists(path): - file_url = join(WAITER_URL, path) - else: - file_url = "" - waiting = get_object_or_404(WaitedFile, path=path) - - if request.is_ajax(): - return HttpResponse(file_url) - else: - return render(request, "waiter/wait.html", locals()) diff --git a/apps/wolnelektury_core/__init__.py b/apps/wolnelektury_core/__init__.py deleted file mode 100644 index 56037a03e..000000000 --- a/apps/wolnelektury_core/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -default_app_config = 'wolnelektury_core.apps.WLCoreConfig' diff --git a/apps/wolnelektury_core/apps.py b/apps/wolnelektury_core/apps.py deleted file mode 100644 index 996ccaec6..000000000 --- a/apps/wolnelektury_core/apps.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.apps import AppConfig - -class WLCoreConfig(AppConfig): - name = 'wolnelektury_core' - - def ready(self): - from . import signals diff --git a/apps/wolnelektury_core/context_processors.py b/apps/wolnelektury_core/context_processors.py deleted file mode 100644 index 5885e039b..000000000 --- a/apps/wolnelektury_core/context_processors.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf 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/apps/wolnelektury_core/locale/de/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index 2a83addfe..000000000 Binary files a/apps/wolnelektury_core/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/de/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index df2e21286..000000000 --- a/apps/wolnelektury_core/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,1126 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:43+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" - -#: views.py:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "Einloggen" - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "Eingeloggt als User %(user)s" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "Registrieren" - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr "Sie müssen eingeloggt sein, um fortzusetzen." - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "Die gewünschte Webseite existiert nicht" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "Seite nicht gefunden." - -#: 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 "" -"Die gesuchte Seite existiert leider nicht mehr. Ãberprüfen Sie bitte, ob Sie " -"sich bei der Eingabe der URL in der Adresszeile des Browsers vertippt haben " -"oder gehen Sie zur Startseite" - -#: templates/404.html:14 -msgid "main page" -msgstr "Startseite" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "Serverfehler" - -#: templates/500.html:19 -msgid "" -"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " -"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " -"error.</p>" -msgstr "" -"<p> Wolnelektury.pl ist zurzeit nicht verfügbar. Besuchen Sie unsere " -"Startseite <a href='http://nowoczesnapolska.org.pl'> Blog </ a>. </ P> " -"Informieren Sie uns <a href = \"mailto: fundacja@nowoczesnapolska.org.pl\" > " -"Administratoren </ a> über den Fehler. </ p>" - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "Service nicht verfügbar" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "Wolnelektury.pl wegen Wartungsarbeiten momentan nicht verfügbar." - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "Internetbibliothek WolneLektury.pl" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "Was Neues?" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "Letzte Publikationen" - -#: templates/main_page.html:41 -msgid "News" -msgstr "News" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "Leistungen" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "Melden Sie einen Bug oder Vorschlag." - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "Der Katalog als PDF-Datei herunterladen." - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "Widget" - -#: templates/main_page.html:59 -#, fuzzy -msgid "Missing a book?" -msgstr "Brauchen Sie ein Buch?" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "Plan der Veröffentlichung" - -#: templates/main_page.html:71 -#, fuzzy -msgid "Information" -msgstr "Format öffnen" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "das genutzte Bild" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "in WolneLektury.pl" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" <a href='%(b)s'>%(c)s</a> free reading you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgid_plural "" -"\n" -" <a href='%(b)s'>%(c)s</a> free readings you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgstr[0] "" -"\n" -"Sie haben <a href='%(b)s'>%(c)s</a> freies Werk <a href='%(r)s'>zur " -"Verfügung</a>\n" -" " -msgstr[1] "" -"\n" -"Sie haben <a href='%(b)s'>%(c)s</a> freie Werke <a href='%(r)s'>zur " -"Verfügung</a>\n" -" " - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "Willkommen" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "Password" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "E-Mail" - -#: templates/superbase.html:74 templates/user.html:14 -#, fuzzy -msgid "Social accounts" -msgstr "oder melde dich an:" - -#: templates/superbase.html:77 -#, fuzzy -msgid "My shelf" -msgstr "Mein Bücherregal" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "Administration" - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "Ausloggen" - -#: templates/superbase.html:111 -msgid "Search" -msgstr "Suchen" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "Sprachversionen" - -#: templates/superbase.html:165 -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." -"org.pl/\">Modern Poland Foundation</a>.\n" -"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" -"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" -"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" -"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" -"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tWolne Lektury ist das Projekt der<a href=\"http://nowoczesnapolska." -"org.pl/\">Stiftung Modernes Polen</a>.\n" -"\t\t\t\tDigitalisierung wird von der <a href=\"http://www.bn.org.pl/" -"\">Natonalbibliothek</a> ausgeführt, Exemplare aus dem Bücherbestand der " -"NB. \n" -"\t\t\t\tHosting <a href=\"http://eo.pl/\">EO Networks</a>.\n" -"\t\t\t\t" - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" -"\">fundacja@nowoczesnapolska.org.pl</a>\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\t Stiftung Modernes Polen, 00-514 Warschau, MarszaÅkowska 84/92, " -"Wohnungsnummer 125, Telefon/Fax: +48 (22) 621-30-17\n" -" E-Mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" -"\">fundacja@nowoczesnapolska.org.pl</a>\n" -"\t\t\t\t" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "SchlieÃen" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "Laden" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "User" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "Webseite-Administration" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "Ãbersetzungen" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "fortgeschritten" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "vereinfacht " - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "Buch importieren" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "Password vergessen?" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -#, fuzzy -msgid "Sign in using:" -msgstr "Einloggen" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "oder Registrieren" - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgstr[0] "" -"\n" -"Wir haben eine Arbeit in Wolne Lektury veröffentlicht!\n" -"Hilfen Sie uns bei der Entwicklung der Bibliothek und bereite neue Titel " -"frei von\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">Ãnterstütze uns " -"vor\n" -"oder mit einer Ãberweisung 1% Ihrer Einkommensteuer </a>.\n" -msgstr[1] "" -"\n" -"Wir haben %(c)s Arbeiten in Wolne Lektury veröffentlicht!\n" -"Hilfen Sie uns bei der Entwicklung der Bibliothek und bereite neue Titel " -"frei von\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">Ãnterstütze uns " -"vor\n" -"oder mit einer Ãberweisung 1% Ihrer Einkommensteuer </a>.\n" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -msgstr "" -"Werde Redakteur/in bei Wolne Lektury! Schau, ob wir gerade an der " -"Veröffentlichung der Schullektüre arbeiten, die du ausgesucht hast. Um " -"eigene Texte zu veröffentlichen, musst du vorher auf unserer redaktionellen " -"Online-Plattform eingeloggt sein. " - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "Mehr..." - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "OpenID registrieren" - -#: templates/openid/login.html:27 -#, fuzzy -msgid "Sign In" -msgstr "Einloggen" - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "zurück" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "weiter" - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "Den Zugang zu Wolne Lektury authorisieren" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" -"strong>." -msgstr "" -"Bitte bestätigen Sie den Zugang zu Wolne Lektury <strong>%(user)s</strong>." - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Konto-Beziehungen" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "Sie können mithilfe folgenden fremden Accounts registrieren." - -#: templates/socialaccount/connections.html:36 -#, fuzzy -msgid "Remove" -msgstr "löschen" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "Sie haben noch kein Social-Networt-Konto mit diesem Konto verbunden." - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "Füge ein fremdes Konto hinzu" - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "Login annulliert" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" -"\">sign in</a>." -msgstr "" -"Sie haben entschieden, sich in dieser Seite nicht mit erschafftn Kontos " -"einzuloggen. Wenn es aus Versehen passiert ist, gehen Sie bitte <a href=" -"\"%(login_url)s\">Registrieren</a> voran." - -#~ msgid "Listing of all audiobooks" -#~ msgstr "Audiobücherverzeichnis" - -#~ msgid "Latest MP3 audiobooks" -#~ msgstr "MP3-Werkverzeichnis" - -#, fuzzy -#~ msgid "Latest Ogg Vorbis audiobooks" -#~ msgstr "Werkverzeichnis" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." -#~ msgstr "" -#~ "Die Audiothek der Schulbücher der Stiftung Nowoczesna Polska.\n" -#~ "Sie können diese Audiothek kostenlos und unbeschränkt nutzen.\n" -#~ "Die Audiobücher werden von bekannten Schauspielerinnen und Schauspielern, " -#~ "u. a. von Danuta Stenka und Jan Peszek, aufgenommen." - -#~ msgid "See also" -#~ msgstr "Sehe auch" - -#~ msgid "Theme" -#~ msgstr "Motiv" - -#~ msgid "in work " -#~ msgstr "im Werk" - -#~ msgid "This work is licensed under:" -#~ msgstr "Das Werk ist unter der Lizenz verfügbar" - -#~ msgid "" -#~ "This work isn't covered by copyright and is part of the\n" -#~ " public domain, which means it can be freely used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" -#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" -#~ " license." -#~ msgstr "" -#~ "Dieses Werk ist nicht urheberrechtlich geschützt, dass sie frei benutzt " -#~ "werden kann, vervielfältigt und veröffentlicht. Wenn es irgendwelche " -#~ "zusätzlichen ürheberrechtlich geschützten Materialien an diesem Werk gibt " -#~ "(Anmerkungen, Motive), sind sie unter der Lizenz http://creativecommons." -#~ "org/licenses/by-sa/3.0/ verfügbar." - -#~ msgid "Text prepared based on:" -#~ msgstr "Der vorbereitete Text basiert auf:" - -#~ msgid "Edited and annotated by:" -#~ msgstr "Herausgegeben und mit Anmerkungen versehen von:" - -#~ msgid "Listing of all works" -#~ msgstr "Werkverzeichnis" - -#~ msgid "Table of Content" -#~ msgstr "Inhaltsverzeichnis" - -#~ msgid "â top â" -#~ msgstr "nach oben" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Leg das Buch aufs Regal ab!" - -#~ msgid "Create new shelf" -#~ msgstr "Neues Bücherregal erstellen" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Keine neue Bücherregale vorhanden. Wenn du willst, kannst du ein neues " -#~ "Bücherregal erstellen." - -#~ msgid "Put on the shelf!" -#~ msgstr "Leg aufs Regal ab!" - -#~ msgid "Epoch" -#~ msgstr "Epoche" - -#~ msgid "Kind" -#~ msgstr "Art" - -#~ msgid "Genre" -#~ msgstr "Gattung" - -#~ msgid "Read online" -#~ msgstr "Online lesen" - -#~ msgid "Download" -#~ msgstr "Herunterladen" - -#~ msgid "to print" -#~ msgstr "Drucken" - -#~ msgid "for an e-book reader" -#~ msgstr "für E-Book-Reader" - -#~ msgid "for Kindle" -#~ msgstr "für Kindle" - -#, fuzzy -#~ msgid "for advanced usage" -#~ msgstr "fortgeschritten" - -#~ msgid "Listen" -#~ msgstr "Hören" - -#~ msgid "Table of contents" -#~ msgstr "Inhalt" - -#~ msgid "Themes" -#~ msgstr "Motive" - -#~ msgid "Edit. note" -#~ msgstr "Edit. note" - -#~ msgid "Infobox" -#~ msgstr "Infobox" - -#~ msgid "Book's page" -#~ msgstr "Buchseite" - -#, fuzzy -#~ msgid "for a reader" -#~ msgstr "zum Lesen" - -#, fuzzy -#~ msgid "for advanced usege" -#~ msgstr "fortgeschritten" - -#, fuzzy -#~ msgid "Download a custom PDF" -#~ msgstr "PDF-Datei herunterladen" - -#~ msgid "Motifs and themes" -#~ msgstr "Motive und Themen" - -#~ msgid "See" -#~ msgstr "Siehe" - -#~ msgid "Source" -#~ msgstr "Quelle" - -#, fuzzy -#~ msgid "of the book" -#~ msgstr "Buchquelle" - -#~ msgid "Source XML file" -#~ msgstr "Quelle der XML-Datei" - -#~ msgid "Book on" -#~ msgstr "Buch über" - -#~ msgid "Editor's Platform" -#~ msgstr "Die Plattform des Editors" - -#~ msgid "Book description on Lektury.Gazeta.pl" -#~ msgstr "Buchbeschreibung in Lektury.Gazeta.pl" - -#~ msgid "Book description on Wikipedia" -#~ msgstr "Buchbeschreibung in Wikipedia" - -#~ msgid "Mix this book" -#~ msgstr "Mische dieses Buch" - -#~ msgid "Download all audiobooks for this book" -#~ msgstr "Alle Audiobücher zu diesem Buch herunterladen" - -#~ msgid "Catalogue" -#~ msgstr "Katalog" - -#~ msgid "Authors" -#~ msgstr "Autoren" - -#~ msgid "Kinds" -#~ msgstr "Arten" - -#~ msgid "Genres" -#~ msgstr "Gattungen" - -#~ msgid "Epochs" -#~ msgstr "Epochen" - -#~ msgid "Themes and topics" -#~ msgstr "Motive und Themen" - -#, fuzzy -#~ msgid "Listing of all DAISY files" -#~ msgstr "Werkverzeichnis" - -#, fuzzy -#~ msgid "Latest DAISY audiobooks" -#~ msgstr "Werkverzeichnis" - -#~ 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Å." -#~ msgstr "" -#~ "DAISY-System ist ein weltweit populäres Format, Bücher zur Verfügung zu " -#~ "stellen \n" -#~ "Es ist angepasst an Bedüfnisse von Sehbehinderten, Blinden und anderen " -#~ "Menschen, die Leseprobleme haben.\n" -#~ "Sie können die Sammlung kostenlos und ohne Beschränkugen nutzen." - -#~ msgid "" -#~ "The criteria are ambiguous. Please select one of the following options:" -#~ msgstr "" -#~ "Die Kriterien sind zweitdeutig. Bitte wählen Sie eine der folgenden " -#~ "Möglichkeiten." - -#~ msgid "Shelves containing fragment" -#~ msgstr "Regale mit Buchauszügen" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Keine neue Bücherregale vorhanden. Wenn du willst, kannst du ein neues " -#~ "Bücherregal erstellen." - -#~ msgid "Save all shelves" -#~ msgstr "Alle Bücherregale speichern" - -#~ msgid "Expand fragment" -#~ msgstr "Buchauszug aufklappen" - -#~ msgid "Hide fragment" -#~ msgstr "Buchauszug zuklappen" - -#~ msgid "See full category" -#~ msgstr "Alle Kategorien ansehen" - -#, fuzzy -#~ msgid "All books" -#~ msgstr "Alle Bücher" - -#~ msgid "Audiobooks" -#~ msgstr "Audiobücher" - -#~ msgid "DAISY" -#~ msgstr "DAISY" - -#~ msgid "Work is licensed under " -#~ msgstr "Das Werk ist unter der Lizenz verfügbar" - -#~ msgid "Based on" -#~ msgstr "Basiert auf" - -#~ msgid "Details" -#~ msgstr "Einzelheiten" - -#~ msgid "Author" -#~ msgstr "Autor" - -#~ msgid "Other resources" -#~ msgstr "Andere Ressourcen" - -#, fuzzy -#~ msgid "Source of the image" -#~ msgstr "Bildquelle" - -#~ msgid "Image on the Editor's Platform" -#~ msgstr "Image auf dem Platform des Editors" - -#~ msgid "View XML source" -#~ msgstr "Siehe die XML-Quelle" - -#~ msgid "Work's themes " -#~ msgstr "Werkmotive" - -#, fuzzy -#~ msgid "Listing of all pictures" -#~ msgstr "Abbildungenverzeichnis" - -#~ msgid "Download as" -#~ msgstr "Herunterladen als" - -#~ msgid "Artist" -#~ msgstr "Schriftsteller" - -#~ msgid "Director" -#~ msgstr "Regisseur" - -#~ msgid "Audiobooks were prepared as a part of the projects:" -#~ msgstr "Audiobücher wurden als Teil der folgenden Projekte vorbereitet:" - -#~ msgid "%(cs)s, funded by %(fb)s" -#~ msgstr "%(cs)s, gestiftet von %(fb)s" - -#~ msgid "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -#~ msgstr "" -#~ "Audiobücher wurden als Teil des Projektes %(cs)s, finanziert von: %(fb)s." - -#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." -#~ msgstr "Audiobücher wurden als Teil des Projektes %(cs)s vorbereitet." - -#~ msgid "Did you mean" -#~ msgstr "Meinten Sie" - -#~ msgid "Results by authors" -#~ msgstr "Ergebnisse von Autoren" - -#~ msgid "Results by title" -#~ msgstr "Ergebnisse von Titeln" - -#~ msgid "Results in text" -#~ msgstr "Ergebnisse im Text" - -#, fuzzy -#~ msgid "Other results" -#~ msgstr "Andere Ergebnisse" - -#~ msgid "Sorry! Search cirteria did not match any resources." -#~ msgstr "Sorry! Die Suche ergab leider keine Treffer." - -#~ msgid "" -#~ "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 "" -#~ "Die Suchemaschine berücksichtigt folgende Kriterien: Titel, Autor, Motiv/" -#~ "Thema, Epoche, Literaturgattung und Gattungsart. \n" -#~ "\t\tDie Suche nach Text-Phrasen wird momentan nicht unterstützt." - -#~ msgid "Sorry! Search query must have at least two characters." -#~ msgstr "Ihre Suchanfrage muss mindestens zwei Zeichen enthalten." - -#~ msgid "in Lektury.Gazeta.pl" -#~ msgstr "in Lektury.Gazeta.pl" - -#~ msgid "in Wikipedia" -#~ msgstr "in Wikipedia" - -#~ msgid "Your shelves with books" -#~ msgstr "Deine Bücherregale" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "" -#~ "Keine neuen Bücherregale vorhanden. Wenn du willst, kannst du ein neues " -#~ "Bücherregal erstellen." - -#~ msgid "Create shelf" -#~ msgstr "Bücherregal erstellen" - -#~ msgid "author" -#~ msgstr "Autor" - -#~ msgid "Hand-outs for teachers" -#~ msgstr "Lehrmaterialien" - -#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" -#~ msgstr "Lese Werkanalyse dieses Autors in Lektury.Gazeta.pl" - -#~ msgid "Read article about this author on Wikipedia" -#~ msgstr "Lese den Beitrag über diesen Autor in Wikipedia" - -#~ msgid "This author's works are copyrighted." -#~ msgstr "Die Werke dieses Autors sind urheberrechtlich geschützt." - -#~ msgid "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries can't publish this author's works." -#~ msgstr "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Finde " -#~ "heraus</a>, warum Internet-Bibliotheken dürfen Werke dieses Autors nicht " -#~ "zugänglich machen." - -#~ msgid "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet school library of Wolne Lektury soon." -#~ msgstr "" -#~ "Dieses Werk ist zur öffentlichen Nutzung vorgesehen und wird bald in der " -#~ "Internetbibliothek Wolne Lektury veröffentlicht sein." - -#~ msgid "" -#~ "This author's works will become part of public domain and will be allowed " -#~ "to be published without restrictions in" -#~ msgstr "" -#~ "Die Werke dieses Autors werden bald zur öffentlichen Nutzung freigestellt " -#~ "und können in der Zukunft ohne weitere Einschränkungen veröffentlicht " -#~ "werden." - -#~ msgid "" -#~ "This work is in public domain and will be published on Internet school " -#~ "library of Wolne Lektury soon." -#~ msgstr "" -#~ "Dieses Werk ist zur öffentlichen Nutzung vorgesehen und wird bald in der " -#~ "Internetbibliothek Wolne Lektury veröffentlicht sein." - -#~ msgid "" -#~ "This work will become part of public domain and will be allowed to be " -#~ "published without restrictions in" -#~ msgstr "" -#~ "Dieses Werk wird bald zur öffentlichen Nutzung freigestellt und kann in " -#~ "der Zukunft ohne weitere Einschränkungen veröffentlicht werden" - -#~ msgid "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries can't publish this work." -#~ msgstr "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Finde " -#~ "heraus</a>, warum Internet-Bibliotheken die Werke dieses Autors nicht " -#~ "veröffentlichen dürfen." - -#~ msgid "This work is copyrighted." -#~ msgstr "Dieses Werk ist urheberrechtlich geschützt." - -#~ msgid "Login to Wolne Lektury" -#~ msgstr "Einloggen in WolneLektury.pl" - -#~ msgid "Login" -#~ msgstr "Login" - -#~ msgid "" -#~ "Internet Explorer cannot display this site properly. Click here to read " -#~ "more..." -#~ msgstr "" -#~ "Diese Seite kann nicht richtig im Internet Explorer angezeigt werden. " -#~ "Klicken Sie hier, um mehr zu lesen..." - -#~ msgid "Your shelves" -#~ msgstr "Deine Bücherregale" - -#~ msgid "Register on" -#~ msgstr "Registrieren" - -#~ msgid "or" -#~ msgstr "oder" - -#~ msgid "return to main page" -#~ msgstr "Zur Startseite wechseln" - -#, fuzzy -#~ msgid "Listing of all audiobooks on WolneLektury.pl" -#~ msgstr "Werkverzeichnis unter WolneLektury.pl" - -#~ msgid "Put a book" -#~ msgstr "Buch ablegen" - -#~ msgid "on the shelf!" -#~ msgstr "aufs Regal!" - -#~ msgid "and printing using" -#~ msgstr "drucken mit" - -#~ msgid "Download EPUB" -#~ msgstr "EPUB-Datei herunterladen" - -#~ msgid "Download TXT" -#~ msgstr "TXT-Datei herunterladen" - -#~ msgid "on small displays, for example mobile phones" -#~ msgstr "auf kleines Display, z. B. Handy" - -#~ msgid "Download ODT" -#~ msgstr "ODT-Datei herunterladen" - -#~ msgid "and editing using" -#~ msgstr "bearbeiten mit" - -#~ msgid "Book on project's wiki" -#~ msgstr "Schullektüre auf WikiProjekt" - -#~ msgid "on" -#~ msgstr "auf" - -#~ msgid "See description" -#~ msgstr "Beschreibung ansehen" - -#~ msgid "Listing of all works on WolneLektury.pl" -#~ msgstr "Werkverzeichnis unter WolneLektury.pl" - -#~ msgid "Jump to" -#~ msgstr "Ãberspringen" - -#~ msgid "Categories" -#~ msgstr "Kategorien" - -#, fuzzy -#~ msgid "Listing of all DAISY files on WolneLektury.pl" -#~ msgstr "Werkverzeichnis unter WolneLektury.pl" - -#~ msgid "Show full category" -#~ msgstr "Alle Kategorien anzeigen" - -#~ msgid "Hide" -#~ msgstr "weniger" - -#~ msgid "Browse books by categories" -#~ msgstr "Bücher nach ausgewählten Kategorien ansehen" - -#~ msgid "delete" -#~ msgstr "löschen" - -#~ msgid "" -#~ "Create your own book set. You can share it with friends by sending them " -#~ "link to your shelf." -#~ msgstr "" -#~ "Erstelle dein eigenes Bücherregal. Du kannst es später mal mit deinen " -#~ "Freunden teilen, indem du den Link an sie verschickst." - -#~ msgid "You need to " -#~ msgstr "Um deine Bücherregale zu verwalten " - -#~ msgid "sign in" -#~ msgstr "musst du angemeldet sein" - -#~ msgid "to manage your shelves." -#~ msgstr "Bücherregale verwalten" - -#~ msgid "" -#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." -#~ msgstr "" -#~ "Unterrichtsszenarien und andere Ideen für die Verwendung von Wolnelektury." -#~ "pl für das Unterricht" - -#~ msgid "" -#~ "are professional recordings of literary texts from our repository, " -#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " -#~ "DAISY system." -#~ msgstr "" -#~ "sind professionelle Aufnahmen literarischer Texte aus unserer Sammlung, " -#~ "die unter freier Lizenz in folgenden Formaten verfügbar sind: MP3-und Ogg-" -#~ "Vorbis-Formate sowie im DAISY-System." - -#~ msgid "Themes groups" -#~ msgstr "Motivketten" - -#~ msgid "See our blog" -#~ msgstr "Siehe unseren Blog" - -#~ msgid "You can help us!" -#~ msgstr "Du kannst uns helfen!" - -#~ msgid "" -#~ "We try our best to elaborate works appended to our library. It is " -#~ "possible only due to support of our volunteers." -#~ msgstr "" -#~ "Wir sind stets bemüht, unseren Bibliothekbestand ständig um neue Werke zu " -#~ "erweitern. Dies ist nur dank der Hilfe unserer Volontäre möglich." - -#~ msgid "" -#~ "We invite people who want to take part in developing Internet school " -#~ "library Wolne Lektury." -#~ msgstr "" -#~ "Wir laden herzlich alle Personen ein, die sich an der Mitgestaltung " -#~ "unserer Internet-Schulbibliothek beteiligen wollen." - -#~ msgid "About us" -#~ msgstr "Ãber das Projekt" - -#~ msgid "" -#~ "\n" -#~ "\t\t\tInternet library with school readings âWolne Lekturyâ (<a href=" -#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) is a project made by " -#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " -#~ "which are recommended by Ministry of National Education and are in public " -#~ "domain.\n" -#~ "\t\t\t" -#~ msgstr "" -#~ "\n" -#~ "\t\t\tSchulbücher âWolne Lekturyâ in der Internetbibliothek(<a href=" -#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) ist ein Projekt, das " -#~ "von der Stiftung Modernes Polen gefördert wird. Die Stiftung ist seit " -#~ "2007 tätig und hat bisher viele Schulbücher aus dem Bibliothekbestand zur " -#~ "öffentlichen Nutzung freigestellt. Die Schulbücher werden ausdrücklich " -#~ "vom Bildungsministerium empfohlen.\n" -#~ "\t\t\t" - -#~ msgid "Searching in" -#~ msgstr "Suchen in" - -#~ msgid "More than one result matching the criteria found." -#~ msgstr "Es wurden mehrere Treffer in dieser Kategorie gefunden." - -#~ msgid "Search in WolneLektury.pl" -#~ msgstr "Suche unter WolneLektury.pl" - -#~ msgid "Your shelf is empty" -#~ msgstr "Dein Bücherregal ist leer" - -#~ msgid "" -#~ "You can put a book on a shelf by entering page of the reading and " -#~ "clicking 'Put on the shelf'." -#~ msgstr "" -#~ "Du kannst das Buch aufs Regal ablegen, indem du \" aufs Regal!\" - Button " -#~ "anklickst." - -#~ msgid "Choose books' formats which you want to download:" -#~ msgstr "Wähle Buchformate aus, die du herunterladen möchtest:" - -#~ msgid "for listening" -#~ msgstr "zum Hören" - -#~ msgid "on favourite MP3 player" -#~ msgstr "auf Lieblings-MP3-Player" - -#~ msgid "Xiph.org Foundation" -#~ msgstr "Xiph.org Stiftung" - -#~ msgid "Updating list of books' formats on the shelf" -#~ msgstr "Liste der Buchformate auf dem Regal aktualisieren" - -#~ msgid "cancel" -#~ msgstr "löschen" - -#~ msgid "Share this shelf" -#~ msgstr "Teile dieses Bücherregal" - -#~ msgid "" -#~ "Copy this link and share it with other people to let them see your shelf." -#~ msgstr "" -#~ "Kopiere diesen Link und verschicke an Personen, mit denen du dein " -#~ "Bücherregal teilen willst." - -#, fuzzy -#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Lies Werkanalyse dieses Autors unter Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Lies Werkanalyse dieses Autors unter Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Lies Werkanalyse dieses Autors unter Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read related study on Lektury.Gazeta.pl" -#~ msgstr "Lies Werkanalyse dieses Autors unter Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" -#~ msgstr "Lies den Beitrag über diesen Autor auf Wikipedia" - -#, fuzzy -#~ msgid "Read article about kind %(last_tag)s on Wikipedia" -#~ msgstr "Lies den Beitrag über diesen Autor auf Wikipedia" - -#, fuzzy -#~ msgid "Read article about genre %(last_tag)s on Wikipedia" -#~ msgstr "Lies den Beitrag über diesen Autor auf Wikipedia" - -#, fuzzy -#~ msgid "Read related article on Wikipedia" -#~ msgstr "Lies den Beitrag über diesen Autor auf Wikipedia" - -#~ msgid "Delete" -#~ msgstr "Löschen" - -#~ msgid "return to the main page" -#~ msgstr "zur Startseite wechseln" - -#~ msgid "return to list of materials" -#~ msgstr "zurück zur Materialienliste" - -#~ msgid "Hand-outs for teachers on " -#~ msgstr "Lehrmaterialien" - -#, fuzzy -#~ msgid "" -#~ "Download TXT - for reading on small displays, for example mobile phones" -#~ msgstr "auf kleines Display, z. B. Handy" - -#~ msgid "Download MP3" -#~ msgstr "MP3-Datei herunterladen" - -#~ msgid "Download Ogg Vorbis" -#~ msgstr "Ogg Vorbis-Datei herunterladen" - -#~ msgid "Download DAISY" -#~ msgstr "DAISY10-Datei herunterladen" - -#~ msgid "check list of books" -#~ msgstr "Siehe Bücherliste" - -#~ msgid "in our repository" -#~ msgstr "in unserer Sammlung" - -#~ msgid "Polish" -#~ msgstr "Polnisch" - -#~ msgid "German" -#~ msgstr "Deutsch" - -#~ msgid "English" -#~ msgstr "Englisch" - -#~ msgid "Lithuanian" -#~ msgstr "Litauisch" - -#~ msgid "French" -#~ msgstr "Französisch" - -#~ msgid "Russian" -#~ msgstr "Russisch" - -#~ msgid "Spanish" -#~ msgstr "Spanisch" - -#~ msgid "Ukrainian" -#~ msgstr "Ukrainisch" - -#~ msgid "Choose your interface language: " -#~ msgstr "Wählen Sie Ihre Sprache:" - -#~ msgid "Choose language" -#~ msgstr "Sprache wählen" - -#~ msgid "Hide description" -#~ msgstr "Beschreibung ausblenden" - -#~ msgid "Read study of epoch" -#~ msgstr "Lies Epochenanalyse" - -#~ msgid "Read article about epoch" -#~ msgstr "Lies den Beitrag aus dieser Epoche" diff --git a/apps/wolnelektury_core/locale/en/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index 54c22ef01..000000000 Binary files a/apps/wolnelektury_core/locale/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/en/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index d5cfb827e..000000000 --- a/apps/wolnelektury_core/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,796 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:43+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1\n" - -#: views.py:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "Sign in" - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "Register" - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr "You have to be logged in to continue" - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "Page does not exist" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "Page not found" - -#: 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 "" -"We are sorry, but this page does not exist. Please check if the address you " -"entered is correct you entered or go to " - -#: templates/404.html:14 -msgid "main page" -msgstr "main page" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "Server error" - -#: templates/500.html:19 -msgid "" -"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " -"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " -"error.</p>" -msgstr "" -"<p>Wolnelektury.pl is currently unavailable. Meanwhile, visit our <a " -"href='http://nowoczesnapolska.org.pl'>website</a>.</p> <p>Inform our <a " -"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " -"error.</p>" - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "Service unavailable" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "" -"The website Wolnelektury.pl is currently unavailable due to maintainance." - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "Wolne Lektury Internet library" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "Latest publications" - -#: templates/main_page.html:41 -msgid "News" -msgstr "News" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "Tools" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "Report an error or make a suggestion" - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "Download the catalogue in PDF format." - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "Widget" - -#: templates/main_page.html:59 -msgid "Missing a book?" -msgstr "Missing a book?" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "Publishing plan" - -#: templates/main_page.html:71 -msgid "Information" -msgstr "Information" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "Image used:" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" <a href='%(b)s'>%(c)s</a> free reading you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgid_plural "" -"\n" -" <a href='%(b)s'>%(c)s</a> free readings you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgstr[0] "" -"\n" -" <a href='%(b)s'>%(c)s</a> free reading you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgstr[1] "" -"\n" -" <a href='%(b)s'>%(c)s</a> free readings you have <a " -"href='%(r)s'>right to</a>\n" -" " - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "Welcome" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "" - -#: templates/superbase.html:74 templates/user.html:14 -#, fuzzy -msgid "Social accounts" -msgstr "or join accounts:" - -#: templates/superbase.html:77 -msgid "My shelf" -msgstr "My shelf" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "Administration" - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "Logout" - -#: templates/superbase.html:111 -msgid "Search" -msgstr "Search" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "Language versions" - -#: templates/superbase.html:165 -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." -"org.pl/\">Modern Poland Foundation</a>.\n" -"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" -"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" -"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" -"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" -"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tWolne Lektury is a project carried out by the <a href=\"http://" -"nowoczesnapolska.org.pl/\">Modern Poland Foundation</a>.\n" -"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" -"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/\">the " -"Silesian Library</a> and <a href=\"http://www.bibliotekaelblaska.pl/\">the " -"Library of ElblÄ g</a>, based on NL, US and LE resources.\n" -"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" -"\t\t\t\t\"" - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" -"\">fundacja@nowoczesnapolska.org.pl</a>\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" -"\">fundacja@nowoczesnapolska.org.pl</a>\n" -"\t\t\t\t" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "Close" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "Loading" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "Site administration" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "Translations" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "advanced" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "simplified" - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "Import book" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -#, fuzzy -msgid "Sign in using:" -msgstr "Sign in" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "or register" - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgstr[0] "" -"\n" -"We have %(c)s works published at Wolne Lektury!\n" -"Help us expand our library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or donating 1% your income tax</a>.\n" -msgstr[1] "" -"\n" -"We have %(c)s works published at Wolne Lektury!\n" -"Help us expand our library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or donating 1% of your income tax</a>.\n" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -msgstr "" -"Become an editor of Wolne Lektury! Find out if\n" -"we are currently working on a reading you are looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "More..." - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "" - -#: templates/openid/login.html:27 -#, fuzzy -msgid "Sign In" -msgstr "Sign in" - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "previous" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "next" - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "Authorize access to Wolne Lektury" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" -"strong>." -msgstr "" -"Confirm to authorize access to Wolne Lektury as <strong>%(user)s</strong>." - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" - -#: templates/socialaccount/connections.html:36 -#, fuzzy -msgid "Remove" -msgstr "remove" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "" - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" -"\">sign in</a>." -msgstr "" - -#~ msgid "Listing of all audiobooks" -#~ msgstr "List of the audiobooks" - -#~ msgid "Latest MP3 audiobooks" -#~ msgstr "Latest MP3 audiobooks" - -#~ msgid "Latest Ogg Vorbis audiobooks" -#~ msgstr "Latest Ogg Vorbis audiobooks" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." -#~ msgstr "" -#~ "Audio library of required readings of Modern Poland Foundation.\n" -#~ "It is free of charge and you can use it without any limits. \n" -#~ "Audiobooks are recorded with the participation of famous Polish actors " -#~ "like Danuta Stenka or Jan Peszek." - -#~ msgid "See also" -#~ msgstr "See also" - -#~ msgid "Theme" -#~ msgstr "Theme" - -#~ msgid "in work " -#~ msgstr "in work " - -#~ msgid "This work is licensed under:" -#~ msgstr "This work is licensed under:" - -#~ msgid "" -#~ "This work isn't covered by copyright and is part of the\n" -#~ " public domain, which means it can be freely used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" -#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" -#~ " license." -#~ msgstr "" -#~ "This work is not covered by copyright and is a part of the\n" -#~ " public domain, which means that it can be used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" -#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" -#~ " license." - -#~ msgid "Text prepared based on:" -#~ msgstr "Text based on:" - -#~ msgid "Edited and annotated by:" -#~ msgstr "Edited and annotated by:" - -#~ msgid "Listing of all works" -#~ msgstr "List of all works" - -#~ msgid "Table of Content" -#~ msgstr "Table of Contents" - -#~ msgid "â top â" -#~ msgstr "â top â" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Put this book on the shelf!" - -#~ msgid "Create new shelf" -#~ msgstr "Create new shelf" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "You do not have any shelves. You can create one below, if you want to." - -#~ msgid "Put on the shelf!" -#~ msgstr "Put on the shelf!" - -#~ msgid "Epoch" -#~ msgstr "Period" - -#~ msgid "Kind" -#~ msgstr "Form" - -#~ msgid "Genre" -#~ msgstr "Genre" - -#~ msgid "Read online" -#~ msgstr "Read online" - -#~ msgid "Download" -#~ msgstr "Download" - -#~ msgid "to print" -#~ msgstr "to print" - -#~ msgid "for an e-book reader" -#~ msgstr "for an e-book reader" - -#~ msgid "for Kindle" -#~ msgstr "for Kindle" - -#, fuzzy -#~ msgid "for advanced usage" -#~ msgstr "advanced" - -#~ msgid "Listen" -#~ msgstr "Listen" - -#~ msgid "Table of contents" -#~ msgstr "Table of contents" - -#~ msgid "Themes" -#~ msgstr "Themes" - -#~ msgid "Edit. note" -#~ msgstr "Edit. note" - -#~ msgid "Infobox" -#~ msgstr "Infobox" - -#~ msgid "Book's page" -#~ msgstr "Book's page" - -#~ msgid "for a reader" -#~ msgstr "for a reader" - -#, fuzzy -#~ msgid "for advanced usege" -#~ msgstr "advanced" - -#~ msgid "Download a custom PDF" -#~ msgstr "Download a custom PDF" - -#~ msgid "Motifs and themes" -#~ msgstr "Motifs and themes" - -#~ msgid "See" -#~ msgstr "See" - -#~ msgid "Source" -#~ msgstr "Source" - -#~ msgid "of the book" -#~ msgstr "of the book" - -#~ msgid "Source XML file" -#~ msgstr "Source XML file" - -#~ msgid "Book on" -#~ msgstr "Book on" - -#~ msgid "Editor's Platform" -#~ msgstr "Editor's Platform" - -#~ msgid "Book description on Lektury.Gazeta.pl" -#~ msgstr "Book description on Lektury.Gazeta.pl" - -#~ msgid "Book description on Wikipedia" -#~ msgstr "Book description on Wikipedia" - -#~ msgid "Mix this book" -#~ msgstr "Mix this book" - -#~ msgid "Download all audiobooks for this book" -#~ msgstr "Download all audiobooks for this book" - -#~ msgid "Catalogue" -#~ msgstr "Catalogue" - -#~ msgid "Authors" -#~ msgstr "Authors" - -#~ msgid "Kinds" -#~ msgstr "Forms" - -#~ msgid "Genres" -#~ msgstr "Genres" - -#~ msgid "Epochs" -#~ msgstr "Periods" - -#~ msgid "Themes and topics" -#~ msgstr "Motifs and themes" - -#~ msgid "Listing of all DAISY files" -#~ msgstr "List of all DAISY files" - -#~ msgid "Latest DAISY audiobooks" -#~ msgstr "Latest DAISY audiobooks" - -#~ 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Å." -#~ msgstr "" -#~ "The internationally recognized DAISY book format \n" -#~ "provides the best possible standardized access to books for people who " -#~ "are \n" -#~ "partially sighted, blind or are dyslexic. It is free of charge and you " -#~ "can use it without any limits." - -#~ msgid "" -#~ "The criteria are ambiguous. Please select one of the following options:" -#~ msgstr "" -#~ "The criteria are ambiguous. Please select one of the following options:" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Shelves containing fragment" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "You do not own any shelves. You can create one below, if you want to." - -#~ msgid "Save all shelves" -#~ msgstr "Save all shelves" - -#~ msgid "Expand fragment" -#~ msgstr "Expand fragment" - -#~ msgid "Hide fragment" -#~ msgstr "Hide fragment" - -#~ msgid "See full category" -#~ msgstr "See full category" - -#~ msgid "All books" -#~ msgstr "All books" - -#~ msgid "Audiobooks" -#~ msgstr "Audiobooks" - -#~ msgid "DAISY" -#~ msgstr "DAISY" - -#~ msgid "Work is licensed under " -#~ msgstr "Work is licensed under " - -#~ msgid "Based on" -#~ msgstr "Based on" - -#~ msgid "Details" -#~ msgstr "Details" - -#~ msgid "Author" -#~ msgstr "Author" - -#~ msgid "Other resources" -#~ msgstr "Other sources" - -#~ msgid "Source of the image" -#~ msgstr "Source of the image" - -#~ msgid "Image on the Editor's Platform" -#~ msgstr "Image on the Editor's Platform" - -#~ msgid "View XML source" -#~ msgstr "View XML source" - -#~ msgid "Work's themes " -#~ msgstr "Work's themes " - -#~ msgid "Listing of all pictures" -#~ msgstr "List of all pictures" - -#~ msgid "Download as" -#~ msgstr "Download as" - -#~ msgid "Artist" -#~ msgstr "Reader" - -#~ msgid "Director" -#~ msgstr "Director" - -#~ msgid "Audiobooks were prepared as a part of the projects:" -#~ msgstr "Audiobooks were prepared as a part of the following projects:" - -#~ msgid "%(cs)s, funded by %(fb)s" -#~ msgstr "%(cs)s, funded by %(fb)s" - -#~ msgid "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -#~ msgstr "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." - -#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." -#~ msgstr "Audiobooks were prepared as a part of the %(cs)s project." - -#~ msgid "Did you mean" -#~ msgstr "Did you mean" - -#~ msgid "Results by authors" -#~ msgstr "Results by authors" - -#~ msgid "Results by title" -#~ msgstr "Results by title" - -#~ msgid "Results in text" -#~ msgstr "Results in text" - -#~ msgid "Other results" -#~ msgstr "Other results" - -#~ msgid "Sorry! Search cirteria did not match any resources." -#~ msgstr "Sorry! Search cirteria did not match any resources." - -#~ msgid "" -#~ "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 "" -#~ "Search engine supports following criteria: title, author, theme/topic, " -#~ "period, form and genre.\n" -#~ "\t\tAs for now we do not support full text search." - -#~ msgid "Sorry! Search query must have at least two characters." -#~ msgstr "Sorry! Search query must have at least two characters." - -#~ msgid "in Lektury.Gazeta.pl" -#~ msgstr "in Lektury.Gazeta.pl" - -#~ msgid "in Wikipedia" -#~ msgstr "in Wikipedia" - -#~ msgid "Your shelves with books" -#~ msgstr "Your shelves with books" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "You do not own any shelves. You can create one below if you want to" - -#~ msgid "Create shelf" -#~ msgstr "Create shelf" - -#~ msgid "author" -#~ msgstr "author" - -#~ msgid "Hand-outs for teachers" -#~ msgstr "Handouts for teachers" - -#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" -#~ msgstr "Read work's study of this author on Lektury.Gazeta.pl" - -#~ msgid "Read article about this author on Wikipedia" -#~ msgstr "Read article about this author on Wikipedia" - -#~ msgid "This author's works are copyrighted." -#~ msgstr "This author's works are copyrighted." - -#~ msgid "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries can't publish this author's works." -#~ msgstr "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries cannot publish this author's works." - -#~ msgid "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet school library of Wolne Lektury soon." -#~ msgstr "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet library of Wolne Lektury soon." - -#~ msgid "" -#~ "This author's works will become part of public domain and will be allowed " -#~ "to be published without restrictions in" -#~ msgstr "" -#~ "This author's works will become part of public domain and will be " -#~ "published without restrictions in" - -#~ msgid "" -#~ "This work is in public domain and will be published on Internet school " -#~ "library of Wolne Lektury soon." -#~ msgstr "" -#~ "This work is in public domain and will be published on Internet library " -#~ "of Wolne Lektury soon." - -#~ msgid "" -#~ "This work will become part of public domain and will be allowed to be " -#~ "published without restrictions in" -#~ msgstr "" -#~ "This work will become part of public domain and will be published without " -#~ "restrictions in" - -#~ msgid "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries can't publish this work." -#~ msgstr "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries cannot publish this work." - -#~ msgid "This work is copyrighted." -#~ msgstr "This work is copyrighted." - -#~ msgid "Login to Wolne Lektury" -#~ msgstr "Login to Wolne Lektury" - -#~ msgid "Login" -#~ msgstr "Login" diff --git a/apps/wolnelektury_core/locale/es/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index b00c569b3..000000000 Binary files a/apps/wolnelektury_core/locale/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/es/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index e60b97811..000000000 --- a/apps/wolnelektury_core/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,1105 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:43+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" - -#: views.py:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "Iniciar sesión" - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "Ya has iniciado sesión como usuario %(user)s" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "Registrarse" - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr "Tienes que iniciar sesión para continuar" - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "Página no existe" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "Página no encontrada" - -#: 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 "" -"Lo sentimos, esta página no existe. Compruebue si la dirección es correcta o " -"pase a" - -#: templates/404.html:14 -msgid "main page" -msgstr "página principal" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "Error del servidor" - -#: templates/500.html:19 -msgid "" -"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " -"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " -"error.</p>" -msgstr "" -"<p>La página Wolnelektury.pl actualmente no está disponible. Mientras tanto " -"visita nuestro <a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> " -"<p>Informa a nuestros <a href='mailto:fundacja@nowoczesnapolska.org." -"pl'>administradores</a> sobre el error.</p>" - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "Servicio no está disponible" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "La página Wolnelektury.pl no está disponible debido al mantenimiento." - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "La biblioteca virtual WolneLektury.pl" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "Novedades" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "Publicaciones recientes" - -#: templates/main_page.html:41 -msgid "News" -msgstr "Noticias" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "Herramientas" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "Reporta un error o una sugerencia" - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "Descarga el catálogo en el formato PDF" - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "Widget" - -#: templates/main_page.html:59 -msgid "Missing a book?" -msgstr "¿Falta un libro?" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "Plan de publicación" - -#: templates/main_page.html:71 -msgid "Information" -msgstr "Información" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "La imagen usada:" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "RegÃstrate en WolneLektury.pl" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" <a href='%(b)s'>%(c)s</a> free reading you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgid_plural "" -"\n" -" <a href='%(b)s'>%(c)s</a> free readings you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgstr[0] "" -"\n" -" <a href='%(b)s'>%(c)s</a> tienes lecturas libres <a " -"href='%(r)s'>right to</a>\n" -" " -msgstr[1] "" -"\n" -" <a href='%(b)s'>%(c)s</a> free readings you have <a " -"href='%(r)s'>right to</a>\n" -" " - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "Bienvenido" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "Contraseña" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "Correo electrónico" - -#: templates/superbase.html:74 templates/user.html:14 -msgid "Social accounts" -msgstr "Cuentas sociales" - -#: templates/superbase.html:77 -msgid "My shelf" -msgstr "Mi estante" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "Administración" - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "Cerrar sesión" - -#: templates/superbase.html:111 -msgid "Search" -msgstr "Buscar" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "Versiones de idiomas" - -#: templates/superbase.html:165 -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." -"org.pl/\">Modern Poland Foundation</a>.\n" -"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" -"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" -"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" -"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" -"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tWolne Lektury es un proyecto dirigido por <a href=\"http://" -"nowoczesnapolska.org.pl/\"> la Fundación Polonia Moderna</a>.\n" -"\t\t\t\tReproducciones digitales están preparadas por <a href=\"http://www." -"bn.org.pl/\">La Biblioteca Nacional</a>, en base de los recursos de la BN. \n" -"\t\t\t\tHosting <a href=\"http://eo.pl/\">EO Networks</a>.\n" -"\t\t\t\t " - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" -"\">fundacja@nowoczesnapolska.org.pl</a>\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tFundación Polonia Moderna, c/ MarszaÅkowska 84/92, lok. 125, 00-514 " -"Varsovia, tel/fax: +48 (22) 621-30-17\n" -" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" -"\">fundacja@nowoczesnapolska.org.pl</a>\n" -"\t\t\t\t" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "Cerrar" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "Cargando" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "Usuario" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "Administración de la página" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "Traducciones" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "avanzado" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "simplificado" - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "Importar libro" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "¿Olvidaste tu contraseña?" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -msgid "Sign in using:" -msgstr "Iniciar sesión con:" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "o registrarse" - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgstr[0] "" -"\n" -"Tenemos %(c)s obras publicadas en Wolne Lektury!Ayúdanos ampliar la " -"biblioteca y libera lecturas nuevas \n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\"> - haz una " -"donación \n" -" o dona 1 porcentaje de tu impuesto </a>.\n" -msgstr[1] "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -msgstr "" -"Hazte el editor de Wolne Lektury! Averigua si\n" -"actualmente estamos preparando la lectura que te interesa y prepara\n" -"una publicación por ti mismo/a inscribiéndote en la Plataforma Editorial." - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "Más..." - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "Iniciar sesión con OpenID " - -#: templates/openid/login.html:27 -#, fuzzy -msgid "Sign In" -msgstr "Iniciar sesión" - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "anterior" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "siguiente" - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "Autoriza el acceso a Wolne Lektury" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" -"strong>." -msgstr "" -"Confirma para autorizar el acceso a Wolne Lektury como el usuario <strong>" -"%(user)s</strong>." - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Conexiones de la cuenta de usuario" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" -"Puede iniciar sesión en su cuenta de usuario a través de cualquiera de las " -"siguientes cuentas de terceros:" - -#: templates/socialaccount/connections.html:36 -msgid "Remove" -msgstr "Borrar" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "" -"Actualmente no tiene ninguna cuenta social relacionada con esta cuenta de " -"usuario." - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "Agrega una cuenta de terceros" - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "Inicio de sesión cancelado" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" -"\">sign in</a>." -msgstr "" -"Ha decidido anular lo de iniciar sesión en nuestra página usando una de sus " -"cuentas de usuario existentes. Si se ha equivocado, pase a<a href=" -"\"%(login_url)s\">sign in</a>, por favor." - -#~ msgid "Listing of all audiobooks" -#~ msgstr "Lista de todos los audiolibros" - -#~ msgid "Latest MP3 audiobooks" -#~ msgstr "Los últimos audiolibros en el formato MP3" - -#~ msgid "Latest Ogg Vorbis audiobooks" -#~ msgstr "Los últimos audiolibros en el formato Ogg" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." -#~ msgstr "" -#~ "Colección de grabaciones de libros de lectura obligatoria de la Fundación " -#~ "Polonia Moderna.Es gratuita y libre.Los audiolibros están grabados por " -#~ "actores y actrices conocidos/as, como Danuta Stenka y Jan Peszek." - -#~ msgid "See also" -#~ msgstr "Ve también" - -#~ msgid "Theme" -#~ msgstr "Tema" - -#~ msgid "in work " -#~ msgstr "de la obra" - -#~ msgid "This work is licensed under:" -#~ msgstr "Esta obra se distribuye bajo licencia" - -#~ msgid "" -#~ "This work isn't covered by copyright and is part of the\n" -#~ " public domain, which means it can be freely used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" -#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" -#~ " license." -#~ msgstr "" -#~ "Esta obra está libre de derechos de autor y es de dominio público, por " -#~ "ende se puede usar,publicar y difundir libremente. Si esta obra tiene " -#~ "materiales adicionales (como notas a pie de pá gina, temas lutrarios, " -#~ "etc.), que no esten libres de derechos de autor, dichos materiales están " -#~ "publicados bajo la \n" -#~ "<a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " -#~ "Commons Attribution-ShareAlike 3.0</a>\n" -#~ " licencia." - -#~ msgid "Text prepared based on:" -#~ msgstr "Texto preparado basado en:" - -#~ msgid "Edited and annotated by:" -#~ msgstr "Editado y anotado por:" - -#~ msgid "Listing of all works" -#~ msgstr "Lista de las obras" - -#~ msgid "Table of Content" -#~ msgstr "Ãndice" - -#~ msgid "â top â" -#~ msgstr "â la cabeza de página â" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "¡Poner un libro en el estante!" - -#~ msgid "Create new shelf" -#~ msgstr "Crear un estante nuevo" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "No tienes ningún estante. Puedes crear uno abajo si quieres." - -#~ msgid "Put on the shelf!" -#~ msgstr "¡Poner en el estante!" - -#~ msgid "Epoch" -#~ msgstr "Ãpoca" - -#~ msgid "Kind" -#~ msgstr "Género" - -#~ msgid "Genre" -#~ msgstr "Subgénero" - -#~ msgid "Read online" -#~ msgstr "Leer online" - -#~ msgid "Download" -#~ msgstr "Descargar" - -#~ msgid "to print" -#~ msgstr "imprimir" - -#~ msgid "for an e-book reader" -#~ msgstr "para los usuarios de e-libros" - -#~ msgid "for Kindle" -#~ msgstr "para Kindle" - -#~ msgid "for advanced usage" -#~ msgstr "para el uso avanzado" - -#~ msgid "Listen" -#~ msgstr "Escucha" - -#~ msgid "Table of contents" -#~ msgstr "Ãndice" - -#~ msgid "Themes" -#~ msgstr "Temas" - -#~ msgid "Edit. note" -#~ msgstr "Editar nota" - -#~ msgid "Infobox" -#~ msgstr "Infobox" - -#~ msgid "Book's page" -#~ msgstr "volver a la página del libro" - -#~ msgid "for a reader" -#~ msgstr "para el lector" - -#, fuzzy -#~ msgid "for advanced usege" -#~ msgstr "avanzado" - -#~ msgid "Download a custom PDF" -#~ msgstr "Descarga un PDF personalisado" - -#~ msgid "Motifs and themes" -#~ msgstr "Temas" - -#~ msgid "See" -#~ msgstr "Ve" - -#~ msgid "Source" -#~ msgstr "Fuente" - -#~ msgid "of the book" -#~ msgstr "del libro" - -#~ msgid "Source XML file" -#~ msgstr "Archivo XML fuente" - -#~ msgid "Book on" -#~ msgstr "Libro en" - -#~ msgid "Editor's Platform" -#~ msgstr "La plataforma de redactor" - -#~ msgid "Book description on Lektury.Gazeta.pl" -#~ msgstr "Descripción del libro en Lektury.Gazeta.pl" - -#~ msgid "Book description on Wikipedia" -#~ msgstr "Descripción del libro en Wikipedia" - -#~ msgid "Mix this book" -#~ msgstr "Mezcla est elibro" - -#~ msgid "Download all audiobooks for this book" -#~ msgstr "Descarga todos los audiolibros de este libro" - -#~ msgid "Catalogue" -#~ msgstr "Catálogo" - -#~ msgid "Authors" -#~ msgstr "Autores" - -#~ msgid "Kinds" -#~ msgstr "Géneros" - -#~ msgid "Genres" -#~ msgstr "Subgéneros" - -#~ msgid "Epochs" -#~ msgstr "Ãpocas" - -#~ msgid "Themes and topics" -#~ msgstr "Temas y motivos" - -#~ msgid "Listing of all DAISY files" -#~ msgstr "Lista de todos los archivos DAISY" - -#~ msgid "Latest DAISY audiobooks" -#~ msgstr "Los últimos audiolibros en el formato 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Å." -#~ msgstr "" -#~ "El sistema DAISY es un formato multimedio que permite acceder a los " -#~ "libros, adaptado para las necesidades de personas con baja visión, " -#~ "invidentes o las que tienes problemas para leer. Los podeis usar de " -#~ "manera gratuita y libre." - -#~ msgid "" -#~ "The criteria are ambiguous. Please select one of the following options:" -#~ msgstr "" -#~ "Estos criterios son ambiguous. Por favor, selecta una de las siguientes " -#~ "opciones:" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Estentes que contienen este fragmento" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "No tienes ningún estante. Puedes crear uno abajo si quieres." - -#~ msgid "Save all shelves" -#~ msgstr "Guardar todos los estantes" - -#~ msgid "Expand fragment" -#~ msgstr "Ampliar este fragmento" - -#~ msgid "Hide fragment" -#~ msgstr "Esconder este fragmento" - -#~ msgid "See full category" -#~ msgstr "Ver toda la categorÃa" - -#~ msgid "All books" -#~ msgstr "Todos los libros" - -#~ msgid "Audiobooks" -#~ msgstr "Audiolibros" - -#~ msgid "DAISY" -#~ msgstr "DAISY" - -#~ msgid "Work is licensed under " -#~ msgstr "Las obras se distribuyen bajo licencia" - -#~ msgid "Based on" -#~ msgstr "Basado en" - -#~ msgid "Details" -#~ msgstr "Detalles" - -#~ msgid "Author" -#~ msgstr "Autor" - -#~ msgid "Other resources" -#~ msgstr "Otros recursos" - -#~ msgid "Source of the image" -#~ msgstr "Fuente de la imagen" - -#~ msgid "Image on the Editor's Platform" -#~ msgstr "La imagen en la Plataforma de el Editor" - -#~ msgid "View XML source" -#~ msgstr "Ver XML fuente" - -#~ msgid "Work's themes " -#~ msgstr "Temas de la obra" - -#~ msgid "Listing of all pictures" -#~ msgstr "Lista de todas la imagenes" - -#~ msgid "Download as" -#~ msgstr "Descarga como" - -#~ msgid "Artist" -#~ msgstr "Artista" - -#~ msgid "Director" -#~ msgstr "Director" - -#~ msgid "Audiobooks were prepared as a part of the projects:" -#~ msgstr "Los audiolibros fueron preparados como la parte de los proyectos:" - -#~ msgid "%(cs)s, funded by %(fb)s" -#~ msgstr "%(cs)s, financiado por %(fb)s" - -#~ msgid "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -#~ msgstr "" -#~ "Los audiolibros fueron preparados como parte del %(cs)s proyecto fundado " -#~ "por %(fb)s." - -#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." -#~ msgstr "Los audiolibros fueron preparados como parte del %(cs)s proyecto" - -#~ msgid "Did you mean" -#~ msgstr "Quizás quisiste decir" - -#~ msgid "Results by authors" -#~ msgstr "Resultados por autores" - -#~ msgid "Results by title" -#~ msgstr "Resultados por el tÃtulo" - -#~ msgid "Results in text" -#~ msgstr "Resultados en el texto" - -#~ msgid "Other results" -#~ msgstr "Otros resultados" - -#~ msgid "Sorry! Search cirteria did not match any resources." -#~ msgstr "" -#~ "Lo sentimos, no hay resultados que corresponden con los criterios de la " -#~ "búsqueda." - -#~ msgid "" -#~ "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 "" -#~ "El buscador admite los criterios siguientes: tÃtulo, autor, tema/motivo, " -#~ "época, género y subgénero.\n" -#~ "\t\tActualmente no admitimos la búsqueda de texto entero." - -#~ msgid "Sorry! Search query must have at least two characters." -#~ msgstr "¡Perdón! La pregunta debe tener por lo menos dos letras." - -#~ msgid "in Lektury.Gazeta.pl" -#~ msgstr "en Lektury.Gazeta.pl" - -#~ msgid "in Wikipedia" -#~ msgstr "en Wikipedia" - -#~ msgid "Your shelves with books" -#~ msgstr "Tus estantes con libros" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "No tienes ningún estante. Puedes crear uno abajo si quieres." - -#~ msgid "Create shelf" -#~ msgstr "Crear un estante" - -#~ msgid "author" -#~ msgstr "autor" - -#~ msgid "Hand-outs for teachers" -#~ msgstr "Materiales para los profesores" - -#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" -#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" - -#~ msgid "Read article about this author on Wikipedia" -#~ msgstr "Leer el artÃculo sobre este autor en Wikipedia" - -#~ msgid "This author's works are copyrighted." -#~ msgstr "Las obras de este autor están protegidas por los derechos de autor." - -#~ msgid "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries can't publish this author's works." -#~ msgstr "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" -#~ "publiczna/'>Entérate</a> por qué las bibliotecas virtuales no pueden " -#~ "publicar las obras de este autor." - -#~ msgid "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet school library of Wolne Lektury soon." -#~ msgstr "" -#~ "Las obras de este autor se encuentran en el dominio público y pronto " -#~ "serán publicadas en la biblioteca virtual de Wolne Lektury." - -#~ msgid "" -#~ "This author's works will become part of public domain and will be allowed " -#~ "to be published without restrictions in" -#~ msgstr "" -#~ "Las obras de este autor entrarán en los recursos del dominio público y " -#~ "podrán ser publicadas sin restricciones en " - -#~ msgid "" -#~ "This work is in public domain and will be published on Internet school " -#~ "library of Wolne Lektury soon." -#~ msgstr "" -#~ "Esta obra se encuentra en el dominio público y pronto será publicada en " -#~ "la biblioteca electrónica de Wolne Lektury." - -#~ msgid "" -#~ "This work will become part of public domain and will be allowed to be " -#~ "published without restrictions in" -#~ msgstr "" -#~ "Esta obra entrará en los recursos del dominio público y podrá ser " -#~ "publicada sin restricciones en" - -#~ msgid "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries can't publish this work." -#~ msgstr "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" -#~ "publiczna/'>Entérate</a> por qué las bibliotecas virtuales no pueden " -#~ "publicar esta obra." - -#~ msgid "This work is copyrighted." -#~ msgstr "Esta obra está protegida por los derechos de autor." - -#~ msgid "Login to Wolne Lektury" -#~ msgstr "Registrate en WolneLektury.pl" - -#~ msgid "Login" -#~ msgstr "Login" - -#~ msgid "" -#~ "Internet Explorer cannot display this site properly. Click here to read " -#~ "more..." -#~ msgstr "" -#~ "Internet Explorer no puede mostrar esta página correctamente. Haz clic " -#~ "aquà para saber más..." - -#~ msgid "Your shelves" -#~ msgstr "Tus estantes" - -#~ msgid "Register on" -#~ msgstr "Registrarse en" - -#~ msgid "or" -#~ msgstr "o" - -#~ msgid "return to main page" -#~ msgstr "volver a la página principal" - -#, fuzzy -#~ msgid "Listing of all audiobooks on WolneLektury.pl" -#~ msgstr "Lista de las obras en WolneLektury.pl" - -#~ msgid "Put a book" -#~ msgstr "¡Poner un libro" - -#~ msgid "on the shelf!" -#~ msgstr "en el estante!" - -#~ msgid "and printing using" -#~ msgstr "e imprimir" - -#~ msgid "Download EPUB" -#~ msgstr "Descargar EPUB" - -#~ msgid "Download TXT" -#~ msgstr "Descargar TXT" - -#~ msgid "on small displays, for example mobile phones" -#~ msgstr "en pantallas pequeñas como las de teléfonos móviles" - -#~ msgid "Download ODT" -#~ msgstr "Descargar ODT" - -#~ msgid "and editing using" -#~ msgstr "y editar" - -#~ msgid "Book on project's wiki" -#~ msgstr "Libro en wiki del proyecto" - -#~ msgid "on" -#~ msgstr "en" - -#~ msgid "See description" -#~ msgstr "Ver la descripción" - -#~ msgid "Listing of all works on WolneLektury.pl" -#~ msgstr "Lista de las obras en WolneLektury.pl" - -#~ msgid "Jump to" -#~ msgstr "Saltar a" - -#~ msgid "Categories" -#~ msgstr "CategorÃas" - -#, fuzzy -#~ msgid "Listing of all DAISY files on WolneLektury.pl" -#~ msgstr "Lista de las obras en WolneLektury.pl" - -#~ msgid "Show full category" -#~ msgstr "Mostrar toda la categorÃa" - -#~ msgid "Hide" -#~ msgstr "Esconder" - -#~ msgid "Browse books by categories" -#~ msgstr "Mirar los libros según categorÃa" - -#~ msgid "delete" -#~ msgstr "borrar" - -#~ msgid "" -#~ "Create your own book set. You can share it with friends by sending them " -#~ "link to your shelf." -#~ msgstr "" -#~ "Crea tu propia colección de libros. Puedes compartirla con tus amigos " -#~ "enviándoles el enlace a tu estante." - -#~ msgid "You need to " -#~ msgstr "Tienes que" - -#~ msgid "sign in" -#~ msgstr "iniciar la sesión" - -#~ msgid "to manage your shelves." -#~ msgstr "para organizar tus estantes." - -#~ msgid "" -#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." -#~ msgstr "" -#~ "Esquemas de clases y otras ideas para usar WolneLektury.pl en la " -#~ "enseñanza." - -#~ msgid "" -#~ "are professional recordings of literary texts from our repository, " -#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " -#~ "DAISY system." -#~ msgstr "" -#~ "son grabaciones profesionales de textos literarios de nuestro depósito. " -#~ "Están disponibles gratis en formatos MP3, Ogg Vorbis y en el sistema " -#~ "DAISY. " - -#~ msgid "Themes groups" -#~ msgstr "Grupos de temas" - -#~ msgid "See our blog" -#~ msgstr "Ver nuestro blog" - -#~ msgid "You can help us!" -#~ msgstr "¡Puedes ayudarnos!" - -#~ msgid "" -#~ "We try our best to elaborate works appended to our library. It is " -#~ "possible only due to support of our volunteers." -#~ msgstr "" -#~ "Hacemos todo lo posible para elaborar las obras de nuestra biblioteca con " -#~ "la mayor perfección. Esto es posible sólo gracias al apoyo de nuestros " -#~ "voluntarios." - -#~ msgid "" -#~ "We invite people who want to take part in developing Internet school " -#~ "library Wolne Lektury." -#~ msgstr "" -#~ "Invitamos a todos quienes quieren formar parte en el desarrollo de la " -#~ "biblioteca virtual de Wolne Lektury." - -#~ msgid "About us" -#~ msgstr "Sobre nosotros" - -#~ msgid "" -#~ "\n" -#~ "\t\t\tInternet library with school readings âWolne Lekturyâ (<a href=" -#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) is a project made by " -#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " -#~ "which are recommended by Ministry of National Education and are in public " -#~ "domain.\n" -#~ "\t\t\t" -#~ msgstr "" -#~ "\n" -#~ "\t\t\tLa biblioteca virtual con lecturas âWolne Lekturyâ (<a href=" -#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>)es un proyecto creado " -#~ "por la Fundación Polonia Moderna. HabÃa comenzado su actividad en el año " -#~ "2007 y está compartiendo las lecturas recomendadas por el Ministerio de " -#~ "la Educación Nacional y que son del dominio público.\n" -#~ "\t\t\t" - -#~ msgid "Searching in" -#~ msgstr "Buscando en" - -#~ msgid "More than one result matching the criteria found." -#~ msgstr "" -#~ "Se ha encontrado más que un resultado que corresponde a tus criterios." - -#~ msgid "Search in WolneLektury.pl" -#~ msgstr "Buscar en WolneLektury.pl" - -#~ msgid "Your shelf is empty" -#~ msgstr "Tu estante está vacÃo" - -#~ msgid "" -#~ "You can put a book on a shelf by entering page of the reading and " -#~ "clicking 'Put on the shelf'." -#~ msgstr "" -#~ "Puedes poner un libro en el estante entrando en la página de aquella " -#~ "lectura y haciendo clic en \"Poner en el estante\"." - -#~ msgid "Choose books' formats which you want to download:" -#~ msgstr "Elige formatos de los libros que quieres descargar:" - -#~ msgid "for listening" -#~ msgstr "para escuchar" - -#~ msgid "on favourite MP3 player" -#~ msgstr "en tu reproductor de MP3 favorito." - -#~ msgid "Xiph.org Foundation" -#~ msgstr "Fundación Xiph.org" - -#~ msgid "Updating list of books' formats on the shelf" -#~ msgstr "Actualizando la lista de formatos de los libros en el estante" - -#~ msgid "cancel" -#~ msgstr "cancelar" - -#~ msgid "Share this shelf" -#~ msgstr "Compartir este estante" - -#~ msgid "" -#~ "Copy this link and share it with other people to let them see your shelf." -#~ msgstr "" -#~ "Copia este enlace y compártelo con otros para que puedan ver tu estante. " - -#, fuzzy -#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read related study on Lektury.Gazeta.pl" -#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" -#~ msgstr "Leer el artÃculo sobre este autor en Wikipedia" - -#, fuzzy -#~ msgid "Read article about kind %(last_tag)s on Wikipedia" -#~ msgstr "Leer el artÃculo sobre este autor en Wikipedia" - -#, fuzzy -#~ msgid "Read article about genre %(last_tag)s on Wikipedia" -#~ msgstr "Leer el artÃculo sobre este autor en Wikipedia" - -#, fuzzy -#~ msgid "Read related article on Wikipedia" -#~ msgstr "Leer el artÃculo sobre este autor en Wikipedia" - -#~ msgid "Delete" -#~ msgstr "Borrar" - -#~ msgid "return to the main page" -#~ msgstr "volver a la página principal" - -#~ msgid "return to list of materials" -#~ msgstr "volver a la lista de los materiales" - -#~ msgid "Hand-outs for teachers on " -#~ msgstr "Materiales para los profesores en" - -#, fuzzy -#~ msgid "" -#~ "Download TXT - for reading on small displays, for example mobile phones" -#~ msgstr "en pantallas pequeñas como las de teléfonos móviles" - -#~ msgid "Download MP3" -#~ msgstr "Descargar MP3" - -#~ msgid "Download Ogg Vorbis" -#~ msgstr "Descargar Ogg Vorbis" - -#~ msgid "Download DAISY" -#~ msgstr "Descargar DAISY" - -#~ msgid "check list of books" -#~ msgstr "Verificar la lista de libros" - -#~ msgid "in our repository" -#~ msgstr "en nuestra colección" - -#~ msgid "Polish" -#~ msgstr "polaco" - -#~ msgid "German" -#~ msgstr "alemán" - -#~ msgid "English" -#~ msgstr "inglés" - -#~ msgid "Lithuanian" -#~ msgstr "lituano" - -#~ msgid "French" -#~ msgstr "francés" - -#~ msgid "Russian" -#~ msgstr "ruso" - -#~ msgid "Spanish" -#~ msgstr "español" - -#~ msgid "Ukrainian" -#~ msgstr "ucraniano" - -#~ msgid "Choose your interface language: " -#~ msgstr "Elige el idioma de la interfaz:" - -#~ msgid "Choose language" -#~ msgstr "Elige el idioma" - -#~ msgid "Hide description" -#~ msgstr "Esconder la descripción" - -#~ msgid "Read study of epoch" -#~ msgstr "Leer el estudio sobre esta época" - -#~ msgid "Read article about epoch" -#~ msgstr "Leer el artÃculo sobre esta época" diff --git a/apps/wolnelektury_core/locale/fr/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index cb1d1c608..000000000 Binary files a/apps/wolnelektury_core/locale/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/fr/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index aed8199d8..000000000 --- a/apps/wolnelektury_core/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,805 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:43+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1\n" - -#: views.py:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "Connexion" - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "Inscrivez-vous" - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr "Vous devez être connecter pour continuer" - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "Site n'existe pas" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "Composant non trouvé" - -#: 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 "" -"Désolé, cette page n'existe pas. Vérifiez si vous avez introduit l'adresse " -"correcte ou allez à " - -#: templates/404.html:14 -msgid "main page" -msgstr "accueil" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "Erreur du serveur" - -#: templates/500.html:19 -msgid "" -"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " -"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " -"error.</p>" -msgstr "" -"<p> Le site Wolnelektury.pl est temporairement inaccessible. En attendant, " -"visitez notre <a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p> " -"Informez nos <a href='mailto:fundacja@nowoczesnapolska.org.pl'> " -"administrateurs </a> de l'erreur.</p>" - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "Site inaccessible" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "" -"Le site Wolnelektury.pl est temporairement inaccessible en raison " -"d'opérations de maintenance." - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "Wolne Lektury - la bibliothèque en ligne" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "Publications récentes" - -#: templates/main_page.html:41 -msgid "News" -msgstr "Actualités" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "Outils" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "Rapportez une erreur ou faites une suggestion" - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "Téléchargez le catalogue au format PDF" - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "Widget" - -#: templates/main_page.html:59 -msgid "Missing a book?" -msgstr "Il vous manque un livre?" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "Plan de publication" - -#: templates/main_page.html:71 -msgid "Information" -msgstr "Informations" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "L'image utilisé:" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "Wolne Lektury (Lectures Libres)" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" <a href='%(b)s'>%(c)s</a> free reading you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgid_plural "" -"\n" -" <a href='%(b)s'>%(c)s</a> free readings you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgstr[0] "" -"\n" -" <a href='%(b)s'>%(c)s</a> lecture gratuite <a " -"href='%(r)s'>auxquelles vous avez droit</a>\n" -" " -msgstr[1] "" -"\n" -" <a href='%(b)s'>%(c)s</a> lectures gratuites <a " -"href='%(r)s'>auxquelles vous avez droit</a>\n" -" " - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "Bienvenue" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "" - -#: templates/superbase.html:74 templates/user.html:14 -#, fuzzy -msgid "Social accounts" -msgstr "ou utilisez votre compte" - -#: templates/superbase.html:77 -msgid "My shelf" -msgstr "Mon étagère" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "Administration" - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "Déconnexion" - -#: templates/superbase.html:111 -msgid "Search" -msgstr "Rechercher" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "Version linguistique" - -#: templates/superbase.html:165 -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." -"org.pl/\">Modern Poland Foundation</a>.\n" -"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" -"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" -"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" -"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" -"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tLectures Libres est un projet réalisé par la <a href=\"http://" -"nowoczesnapolska.org.pl/\">Fondation Pologne Moderne </a>.\n" -"\t\t\t\tReproductions numériques sont préparées par la<a href=\"http://www." -"bn.org.pl/\">Bibliothèque nationale</a>, <a href=\"http://www.bs.katowice.pl/" -"\">Bibliothèque de Silésie</a> et <a href=\"http://www.bibliotekaelblaska.pl/" -"\">Bibliothèque d'ElblÄ g</a> et basées sur leurs ressources. \n" -"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" -"\t\t\t\t" - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" -"\">fundacja@nowoczesnapolska.org.pl</a>\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\t Fondation Pologne Moderne, 00-514 Warszawa (Varsovie), ul. " -"MarszaÅkowska 84/92 lok. 125, tél./fax: (+48) (22) 621-30-17\n" -" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" -"\">fundacja@nowoczesnapolska.org.pl</a>\n" -"\t\t\t\t" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "Fermer" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "Chargement en cours" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "Site de l'administrateur" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "Traductions" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "avancé(e)" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "simplifié(e)" - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "Importez le livre" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -#, fuzzy -msgid "Sign in using:" -msgstr "Connexion" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "ou inscrivez-vous" - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgstr[0] "" -"\n" -"Nous avons %(c)s d'ouvrages publiés sur Wolne Lektury!\n" -"Aidez-nous à élargir la bibliothèque et libérez des nouvelles lectures par\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">faire une donation\n" -"ou transférer 1% de vos impôts</a>.\n" -msgstr[1] "" -"\n" -"Nous avons %(c)s d'ouvrages publiés sur Wolne Lektury!\n" -"Aidez-nous à élargir la bibliothèque et libérez des nouvelles lectures par\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">faire une donation\n" -"ou transférer 1% de vos impôts</a>.\n" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -msgstr "" -"Devenez un éditeur de Wolne Lektury! Vérifiez si\n" -"nous sommes en train de préparer un texte que vous cherchez et rédigez\n" -"une publication vous-mêmes en se connectant sur la Plateforme des éditeurs." - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "Plus..." - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "" - -#: templates/openid/login.html:27 -#, fuzzy -msgid "Sign In" -msgstr "Connexion" - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "précédent(e)" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "suivant(e)" - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "Autorisez l'accès à Wolne Lektury" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" -"strong>." -msgstr "" -"Confirmez pour autoriser l'accès à Wolne Lektury comme l'utilisateur <strong>" -"%(user)s</strong>." - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" - -#: templates/socialaccount/connections.html:36 -#, fuzzy -msgid "Remove" -msgstr "supprimer" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "" - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" -"\">sign in</a>." -msgstr "" - -#~ msgid "Listing of all audiobooks" -#~ msgstr "Liste des tous les livres audio" - -#~ msgid "Latest MP3 audiobooks" -#~ msgstr "Les plus nouveaux livres audio MP3" - -#~ msgid "Latest Ogg Vorbis audiobooks" -#~ msgstr "Les plus nouveaux livres audio Ogg Vorbis" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." -#~ msgstr "" -#~ "Audiothèque des lectures scolaires de la Fondation Pologne Moderne.\n" -#~ "Vous pouvez l'utiliser gratuitement et sans limites. \n" -#~ "Les livres audio sont lus par les acteurs connus, comme par exemple: " -#~ "Danuta Stenka et Jan Peszek." - -#~ msgid "See also" -#~ msgstr "Voir aussi" - -#~ msgid "Theme" -#~ msgstr "Thème" - -#~ msgid "in work " -#~ msgstr "dans l'oeuvre" - -#~ msgid "This work is licensed under:" -#~ msgstr "Cet oeuvre est publié sous la licence" - -#~ msgid "" -#~ "This work isn't covered by copyright and is part of the\n" -#~ " public domain, which means it can be freely used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" -#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" -#~ " license." -#~ msgstr "" -#~ "Cet ouvrage n'est pas protégé par le droit d'auteur et appartiennent au\n" -#~ "domaine public; c'est-à -dire qu'il peut être publié et divulgué " -#~ "librement.\n" -#~ "Si l'ouvrage est accompagné des matériaux supplémentaires (annotations, " -#~ "motifs littéraires, etc.),\n" -#~ "ces derniers sont donc distribués sous la licence:\n" -#~ "<a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl" -#~ "\">Paternité - Partage à l'Identique 3.0 non transposé</a>." - -#~ msgid "Text prepared based on:" -#~ msgstr "Préparation du texte basée sur:" - -#~ msgid "Edited and annotated by:" -#~ msgstr "Les éditions et annotations par:" - -#~ msgid "Listing of all works" -#~ msgstr "Liste des tous les ouvrages" - -#~ msgid "Table of Content" -#~ msgstr "Table des matières" - -#~ msgid "â top â" -#~ msgstr "â top â" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Mettre un livre sur l'étagère!" - -#~ msgid "Create new shelf" -#~ msgstr "Créez une nouvelle étagère" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une au-dessous, si " -#~ "vous voulez." - -#~ msgid "Put on the shelf!" -#~ msgstr "Mettre sur l'étagère!" - -#~ msgid "Epoch" -#~ msgstr "Ãpoque" - -#~ msgid "Kind" -#~ msgstr "Type" - -#~ msgid "Genre" -#~ msgstr "Genre" - -#~ msgid "Read online" -#~ msgstr "Lisez en ligne" - -#~ msgid "Download" -#~ msgstr "Téléchargez" - -#~ msgid "to print" -#~ msgstr "pour imprimer" - -#~ msgid "for an e-book reader" -#~ msgstr "pour un lecteur des livres numeriques" - -#~ msgid "for Kindle" -#~ msgstr "pour Kindle" - -#~ msgid "for advanced usage" -#~ msgstr "pour lâutilisation avancée" - -#~ msgid "Listen" -#~ msgstr "Ãcoutez" - -#~ msgid "Table of contents" -#~ msgstr "Table des matières" - -#~ msgid "Themes" -#~ msgstr "Thèmes" - -#~ msgid "Edit. note" -#~ msgstr "Note d'éditeur" - -#~ msgid "Infobox" -#~ msgstr "Infobox" - -#~ msgid "Book's page" -#~ msgstr "Site du livre" - -#~ msgid "for a reader" -#~ msgstr "pour un lecteur" - -#, fuzzy -#~ msgid "for advanced usege" -#~ msgstr "avancé(e)" - -#~ msgid "Download a custom PDF" -#~ msgstr "Téléchargez un PDF pérsonnalisé" - -#~ msgid "Motifs and themes" -#~ msgstr "Motifs et thèmes" - -#~ msgid "See" -#~ msgstr "Voir" - -#~ msgid "Source" -#~ msgstr "Source" - -#~ msgid "of the book" -#~ msgstr "du livre" - -#~ msgid "Source XML file" -#~ msgstr "Fichier source XML" - -#~ msgid "Book on" -#~ msgstr "Livre sur" - -#~ msgid "Editor's Platform" -#~ msgstr "Plateforme d'éditeur" - -#~ msgid "Book description on Lektury.Gazeta.pl" -#~ msgstr "Description du livre sur Lektury.Gazeta.pl" - -#~ msgid "Book description on Wikipedia" -#~ msgstr "Description du livre sur Wikipédia" - -#~ msgid "Mix this book" -#~ msgstr "Mixez ce livre" - -#~ msgid "Download all audiobooks for this book" -#~ msgstr "Téléchargez tous les livres audio pour ce livre" - -#~ msgid "Catalogue" -#~ msgstr "Catalogue" - -#~ msgid "Authors" -#~ msgstr "Auteurs" - -#~ msgid "Kinds" -#~ msgstr "Types" - -#~ msgid "Genres" -#~ msgstr "Genres" - -#~ msgid "Epochs" -#~ msgstr "Ãpoques" - -#~ msgid "Themes and topics" -#~ msgstr "Thèmes et sujets" - -#~ msgid "Listing of all DAISY files" -#~ msgstr "Liste des tous les livres audio DAISY" - -#~ msgid "Latest DAISY audiobooks" -#~ msgstr "Le plus nouveaux livres audio 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Å." -#~ msgstr "" -#~ "DAISY est un système pour rendre les livres accessibles, apprécié autour " -#~ "du monde, \n" -#~ "approprié à des non voyants et à des malvoyants et à des personnes \n" -#~ "qui ont des difficultés à lire. Vous pouvez l'utiliser gratuitement et " -#~ "sans limites." - -#~ msgid "" -#~ "The criteria are ambiguous. Please select one of the following options:" -#~ msgstr "Les critères sont ambigus. Choisissez parmi les options ci-dessous:" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Ãtagères qui contiennent l'extrait" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une au-dessous, si " -#~ "vous voulez." - -#~ msgid "Save all shelves" -#~ msgstr "Enregistrer toutes les étagères" - -#~ msgid "Expand fragment" -#~ msgstr "Montrer l'extrait" - -#~ msgid "Hide fragment" -#~ msgstr "Cacher l'extrait" - -#~ msgid "See full category" -#~ msgstr "Voir catégorie entière" - -#~ msgid "All books" -#~ msgstr "Tous les livres" - -#~ msgid "Audiobooks" -#~ msgstr "Livres audio" - -#~ msgid "DAISY" -#~ msgstr "DAISY" - -#~ msgid "Work is licensed under " -#~ msgstr "Ouvrage sous la licence" - -#~ msgid "Based on" -#~ msgstr "Basé sur" - -#~ msgid "Details" -#~ msgstr "Détails" - -#~ msgid "Author" -#~ msgstr "Auteur" - -#~ msgid "Other resources" -#~ msgstr "Autres ressources" - -#~ msgid "Source of the image" -#~ msgstr "Source d'image" - -#~ msgid "Image on the Editor's Platform" -#~ msgstr "L'image sur la Plateforme d'éditeur" - -#~ msgid "View XML source" -#~ msgstr "Voir source XML" - -#~ msgid "Work's themes " -#~ msgstr "Les thèmes de l'oeuvre" - -#~ msgid "Listing of all pictures" -#~ msgstr "Liste de tous les images" - -#~ msgid "Download as" -#~ msgstr "Téléchargez comme" - -#~ msgid "Artist" -#~ msgstr "Artiste" - -#~ msgid "Director" -#~ msgstr "Metteur en scène" - -#~ msgid "Audiobooks were prepared as a part of the projects:" -#~ msgstr "Livres audios ont été préparés comme une part des projets:" - -#~ msgid "%(cs)s, funded by %(fb)s" -#~ msgstr "%(cs)s, sponsorisé par %(fb)s" - -#~ msgid "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -#~ msgstr "" -#~ "Livres audios ont été préparés comme une part du projet %(cs)s sponsorisé " -#~ "par %(fb)s." - -#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." -#~ msgstr "Livres audios ont été préparés comme une part du projet %(cs)s." - -#~ msgid "Did you mean" -#~ msgstr "Est-ce que vous cherchez" - -#~ msgid "Results by authors" -#~ msgstr "Résultats par l'auteur" - -#~ msgid "Results by title" -#~ msgstr "Résultats par le titre" - -#~ msgid "Results in text" -#~ msgstr "Résultats dans le texte" - -#~ msgid "Other results" -#~ msgstr "Autres résultats" - -#~ msgid "Sorry! Search cirteria did not match any resources." -#~ msgstr "" -#~ "Nous sommes désolés, aucune ressource ne répond aux critères de recherche." - -#~ msgid "" -#~ "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 "" -#~ "Le moteur de recherche permet de chercher selon le titre, auteur, sujet/" -#~ "thème, époque, type et genre.\n" -#~ "\t\tPour le moment nous n'assurons pas la recherche en plein texte." - -#~ msgid "Sorry! Search query must have at least two characters." -#~ msgstr "" -#~ "Nous sommes désolés, pour effectuer la recherche il faut entrer au moins " -#~ "deux caractères." - -#~ msgid "in Lektury.Gazeta.pl" -#~ msgstr "sur Lektury.Gazeta.pl" - -#~ msgid "in Wikipedia" -#~ msgstr "sur Wikipédia" - -#~ msgid "Your shelves with books" -#~ msgstr "Vos étagères avec les livres" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "" -#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une en-dessus, si " -#~ "vous voulez." - -#~ msgid "Create shelf" -#~ msgstr "Créez une étagère" - -#~ msgid "author" -#~ msgstr "auteur" - -#~ msgid "Hand-outs for teachers" -#~ msgstr "Fiches pour les enseignants" - -#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" -#~ msgstr "Lisez une élaboration d'oeuvres de cet auteur sur Lektury.Gazeta.pl" - -#~ msgid "Read article about this author on Wikipedia" -#~ msgstr "Lisez un article sur cet auteur sur Wikipédia." - -#~ msgid "This author's works are copyrighted." -#~ msgstr "Les oeuvres de cet auteur sont protégées par le droit d'auteur." - -#~ msgid "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries can't publish this author's works." -#~ msgstr "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" -#~ "publiczna/'>Apprenez pourquoi</a> les bibliothèques en ligne ne peuvent " -#~ "pas publier les oeuvres de cet auteur." - -#~ msgid "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet school library of Wolne Lektury soon." -#~ msgstr "" -#~ "Les oeuvres de cet auteur appartiennent au domaine public et seront " -#~ "prochainement publiées dans la bibliothèque en ligne Wolne Lektury." - -#~ msgid "" -#~ "This author's works will become part of public domain and will be allowed " -#~ "to be published without restrictions in" -#~ msgstr "" -#~ "Les oeuvres de cet auteur entreront dans le domaine public et il sera " -#~ "possible de les publier sans restrictions" - -#~ msgid "" -#~ "This work is in public domain and will be published on Internet school " -#~ "library of Wolne Lektury soon." -#~ msgstr "" -#~ "Cette oeuvre appartient au domaine public et sera prochainement publiée " -#~ "dans la bibliothèque en ligne Wolne Lektury." - -#~ msgid "" -#~ "This work will become part of public domain and will be allowed to be " -#~ "published without restrictions in" -#~ msgstr "" -#~ "Cette oeuvre entrera dans le domaine public et il sera possible de la " -#~ "publier sans restrictions " - -#~ msgid "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries can't publish this work." -#~ msgstr "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" -#~ "publiczna/'>Apprenez pourquoi</a> les bibliothèques en ligne ne peuvent " -#~ "pas publier cette oeuvre." - -#~ msgid "This work is copyrighted." -#~ msgstr "Cette oeuvre est protégée par le droit d'auteur" - -#~ msgid "Login to Wolne Lektury" -#~ msgstr "Se connecter à Wolne Lektury" - -#~ msgid "Login" -#~ msgstr "Connexion" diff --git a/apps/wolnelektury_core/locale/it/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/it/LC_MESSAGES/django.mo deleted file mode 100644 index 5e5748cb2..000000000 Binary files a/apps/wolnelektury_core/locale/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/it/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index 38d521eb1..000000000 --- a/apps/wolnelektury_core/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,787 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:43+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" - -#: views.py:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "Accedi" - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "Registrati" - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr " Per poter continuare devi essere loggato" - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "Questa pagina non esiste" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "La pagina non è stata trovata" - -#: 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 "" -"Siamo spiacenti, ma questa pagina non esiste. Si prega di verificare se " -"l'indirizzo è stato inserito correttamente oppure andare su" - -#: templates/404.html:14 -msgid "main page" -msgstr "pagina principale" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "Errore del server" - -#: templates/500.html:19 -msgid "" -"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " -"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " -"error.</p>" -msgstr "" -"<p> il sito di Wolnelektury.pl non è disponibile al momento. Nel frattempo " -"si prega di visitare il nostro <a href='http://nowoczesnapolska.org." -"pl'>blog</a>.</p> <p>Si prega di informare i nostri <a href='mailto:" -"fundacja@nowoczesnapolska.org.pl'>amministratori</a> sull'errore. </p>" - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "Servizio non disponibile" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "" -"A causa di lavori di manutenzione il sito WolneLektury.pl non è " -"momentaneamente disponibile." - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "Wolne Lektury biblioteca online" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "" - -#: templates/main_page.html:41 -msgid "News" -msgstr "" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "Segnala un'errore o una proposta" - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "Scarica il catalogo nel formato PDF." - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "Widget" - -#: templates/main_page.html:59 -msgid "Missing a book?" -msgstr "Manca un libro?" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "Programma editoriale" - -#: templates/main_page.html:71 -msgid "Information" -msgstr "" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "Immagine usata" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" <a href='%(b)s'>%(c)s</a> free reading you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgid_plural "" -"\n" -" <a href='%(b)s'>%(c)s</a> free readings you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgstr[0] "" -"\n" -" <a href='%(b)s'>%(c)s</a> hai una lettura libera <a " -"href='%(r)s'>right to</a>\n" -" " -msgstr[1] "" -"\n" -" <a href='%(b)s'>%(c)s</a> hai le letture libere <a " -"href='%(r)s'>right to</a>\n" -" " - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "Benvenuti" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "" - -#: templates/superbase.html:74 templates/user.html:14 -msgid "Social accounts" -msgstr "" - -#: templates/superbase.html:77 -msgid "My shelf" -msgstr "Il mio scaffale" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "Amministrazione" - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "Esci" - -#: templates/superbase.html:111 -msgid "Search" -msgstr "Cerca" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "Versioni in altre lingue" - -#: templates/superbase.html:165 -#, fuzzy -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." -"org.pl/\">Modern Poland Foundation</a>.\n" -"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" -"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" -"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" -"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" -"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tWolne Lektury è il progetto condotto da <a href=\"http://" -"nowoczesnapolska.org.pl/\">Modern Poland Foundation</a>.\n" -"\t\t\t\t Le riproduzioni digitali vengono fatte da <a href=\"http://www.bn." -"org.pl/\">Biblioteca Nazionale</a>, <a href=\"http://www.bs.katowice.pl/" -"\">Biblioteka ĹšlÃâ¦ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" -"\">Biblioteka ElblÃâ¦ska</a>, sulla base di raccolte di BN, BĹš e BE.\n" -"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" -"\t\t\t\t" - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" -"\">fundacja@nowoczesnapolska.org.pl</a>\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tFondazione Polonia Moderna, 00-514 Varsavia, ul. MarszaÅkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" -"\">fundacja@nowoczesnapolska.org.pl</a>\n" -"\t\t\t\t" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "Chiudi" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "Caricamento" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "Amministrazione del sito" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "Traduzioni" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "avanzato" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "semplificato" - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "Importa un libro" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -#, fuzzy -msgid "Sign in using:" -msgstr "Accedi" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "oppure registrati" - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgstr[0] "" -"\n" -"Abbiamo %(c)s dell'opera pubblicata in Wolne Lektury!\n" -"Aiutaci ad espandere la biblioteca e aggiungere nuove letture gratuite da\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">facendo una " -"donazione\n" -"oppure con un trasferimento 1% della tua imposta sul reddito</a>.\n" -msgstr[1] "" -"\n" -"Abbiamo %(c)s dell'opera pubblicata in Wolne Lektury!\n" -"Aiutaci ad espandere la biblioteca e aggiungere nuove letture gratuite da\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">facendo una " -"donazione\n" -"oppure con un trasferimento 1% della tua imposta sul reddito</a>.\n" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -msgstr "" - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "Più" - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "" - -#: templates/openid/login.html:27 -#, fuzzy -msgid "Sign In" -msgstr "Accedi" - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "precedente" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "seguente" - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "Autorizza accesso a Wolne Lektury" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" -"strong>." -msgstr "" -"Conferma l'accesso autorizzato a Wolne Lektury come utente <strong>%(user)s</" -"strong>." - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" - -#: templates/socialaccount/connections.html:36 -#, fuzzy -msgid "Remove" -msgstr "elimina" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "" - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" -"\">sign in</a>." -msgstr "" - -#~ msgid "Listing of all audiobooks" -#~ msgstr "Elenco di tutti gli audiolibri " - -#~ msgid "Latest MP3 audiobooks" -#~ msgstr "Ultimi audiolibri MP3" - -#~ msgid "Latest Ogg Vorbis audiobooks" -#~ msgstr "Ultimi audiolibri Ogg Vorbis" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "MoĹĽecie z niej korzystaÃâ¡ bezpĹâatnie i bez ograniczeĹâ.\n" -#~ "Audiobooki nagrywajÃ⦠znani aktorzy, wĹâºrÄÅd nich Danuta Stenka i Jan " -#~ "Peszek." -#~ msgstr "" -#~ "Audioteca dei testi scolastici della Fondazione Nowoczesna Polska. \n" -#~ " Potete utilizzarla gratuitamente e senza limiti.\n" -#~ "Gli audiolibri vengono registrati da famosi attori, tra cui Danuta Stenka " -#~ "e Jan Peszek." - -#~ msgid "See also" -#~ msgstr "Vedi anche" - -#~ msgid "Theme" -#~ msgstr "tema" - -#~ msgid "in work " -#~ msgstr "in corso" - -#~ msgid "This work is licensed under:" -#~ msgstr "Questa opera è pubblicata su licenza:" - -#~ msgid "" -#~ "This work isn't covered by copyright and is part of the\n" -#~ " public domain, which means it can be freely used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" -#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" -#~ " license." -#~ msgstr "" -#~ "Questa opera non è sotto il diritto d'autore e fa parte del\n" -#~ "pubblico dominio, il che significa che è possibile pubblicarla \n" -#~ "e distribuirla liberamente. Se un'opera è completata con i materiali " -#~ "aggiuntivi \n" -#~ "(le annotazioni, i motivi letterari ecc.) che sono protette dal diritto " -#~ "d'autore, quei\n" -#~ "materiali aggiuntivi sono disponibili secondo la \n" -#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " -#~ "Commons Attribution-ShareAlike 3.0</a>\n" -#~ "licenza." - -#~ msgid "Text prepared based on:" -#~ msgstr "Il testo preparato e basato su:" - -#~ msgid "Edited and annotated by:" -#~ msgstr "Curato ed elaborato da:" - -#~ msgid "Listing of all works" -#~ msgstr "Elenco di tutte le opere" - -#~ msgid "Table of Content" -#~ msgstr "Indice" - -#~ msgid "ââ â top ââ â" -#~ msgstr "ââ â su ââ â" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "Metti il libro sullo scaffale" - -#~ msgid "Create new shelf" -#~ msgstr "Crea un nuovo scaffale" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "Non hai nessuno scaffale. se vuoi puoi crearne uno, qui sotto." - -#~ msgid "Put on the shelf!" -#~ msgstr "Metti sullo scaffale!" - -#~ msgid "Epoch" -#~ msgstr "Epoca" - -#~ msgid "Kind" -#~ msgstr "Categoria" - -#~ msgid "Genre" -#~ msgstr "Genere" - -#~ msgid "Read online" -#~ msgstr "Leggi online" - -#~ msgid "Download" -#~ msgstr "Scarica" - -#~ msgid "Listen" -#~ msgstr "Ascolta" - -#~ msgid "Table of contents" -#~ msgstr "Indice" - -#~ msgid "Themes" -#~ msgstr "Temi" - -#~ msgid "Edit. note" -#~ msgstr "Modifica. nota" - -#~ msgid "Infobox" -#~ msgstr "Infobox" - -#~ msgid "Book's page" -#~ msgstr "Pagina del libro" - -#~ msgid "Download a custom PDF" -#~ msgstr " Scarica un PDF personalizzato" - -#~ msgid "Motifs and themes" -#~ msgstr "Motivi e temi" - -#~ msgid "See" -#~ msgstr "Vedi" - -#~ msgid "Source" -#~ msgstr "Fonte" - -#~ msgid "of the book" -#~ msgstr "del libro" - -#~ msgid "Source XML file" -#~ msgstr "File di fonte XML" - -#~ msgid "Book on" -#~ msgstr "Libro su" - -#~ msgid "Editor's Platform" -#~ msgstr " Piattaforma del editore" - -#~ msgid "Book description on Lektury.Gazeta.pl" -#~ msgstr "Descrizione del libro su Lektury.Gazeta.pl" - -#~ msgid "Book description on Wikipedia" -#~ msgstr "Descrizione del libro su Wikipedia" - -#~ msgid "Mix this book" -#~ msgstr "Combina questo libro" - -#~ msgid "Download all audiobooks for this book" -#~ msgstr "Scarica tutti gli audiolibri per questo libro." - -#~ msgid "Catalogue" -#~ msgstr "Catalogo" - -#~ msgid "Authors" -#~ msgstr "Autori" - -#~ msgid "Kinds" -#~ msgstr "Categorie" - -#~ msgid "Genres" -#~ msgstr "Generi" - -#~ msgid "Epochs" -#~ msgstr "Epoche" - -#~ msgid "Themes and topics" -#~ msgstr "temi e argomenti" - -#~ msgid "Listing of all DAISY files" -#~ msgstr "Elenco di tutti i file DAISY " - -#~ msgid "Latest DAISY audiobooks" -#~ msgstr "Ultimi audiolibri 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Ĺâ." -#~ msgstr "" -#~ "Il sistema DAISY è un formato conosciuto nel mondo che serve a fornire i " -#~ "libri\n" -#~ "adeguato ai bisogni delle persone non vedenti, ipovedenti \n" -#~ "e con difficoltà nel leggere. Potete usufruirne gratuitamente e senza " -#~ "limiti." - -#~ msgid "" -#~ "The criteria are ambiguous. Please select one of the following options:" -#~ msgstr "" -#~ "Questi criteri sono ambigui. Si prega di selezionare una delle seguenti " -#~ "opzioni:" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Gli scaffali che contengono il frammento" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "Non hai nessuno scaffale. Se vuoi puoi crearne uno, qui sotto." - -#~ msgid "Save all shelves" -#~ msgstr "Salva tutti gli scaffali" - -#~ msgid "Expand fragment" -#~ msgstr "Espandi il frammento" - -#~ msgid "Hide fragment" -#~ msgstr "Nascondi il frammento" - -#~ msgid "See full category" -#~ msgstr "Vedi tutta la categoria" - -#~ msgid "All books" -#~ msgstr "Tutti i libri" - -#~ msgid "Audiobooks" -#~ msgstr "Audiolibri" - -#~ msgid "DAISY" -#~ msgstr "DAISY" - -#~ msgid "Work is licensed under " -#~ msgstr "L'opera è su licenza di" - -#~ msgid "Based on" -#~ msgstr "Basato su" - -#~ msgid "Details" -#~ msgstr "Dettagli" - -#~ msgid "Author" -#~ msgstr "Autore" - -#~ msgid "Other resources" -#~ msgstr "Altre fonti" - -#~ msgid "Source of the image" -#~ msgstr "Fonte dell'immagine" - -#~ msgid "Image on the Editor's Platform" -#~ msgstr "Immagine sulla piattaforma del editore" - -#~ msgid "View XML source" -#~ msgstr "Visualizza la fonte XML" - -#~ msgid "Work's themes " -#~ msgstr "Temi dell'opera" - -#~ msgid "Listing of all pictures" -#~ msgstr "Elenco di tutte le immagini" - -#~ msgid "Artist" -#~ msgstr "Artista" - -#~ msgid "Director" -#~ msgstr "Direttore" - -#~ msgid "Download as" -#~ msgstr "Scarica come" - -#~ msgid "Audiobooks were prepared as a part of the projects:" -#~ msgstr "" -#~ "Gli audilobri sono stati preparati come parte dei seguenti progetti:" - -#~ msgid "%(cs)s, funded by %(fb)s" -#~ msgstr "%(cs)s, creato da %(fb)s // %(cs)s, finanziato da %(fb)s" - -#~ msgid "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -#~ msgstr "" -#~ "Gli audiollibri sono stati preparati come parte del progetto %(cs)s, " -#~ "finanziato da %(fb)s" - -#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." -#~ msgstr "Gli audiolibri sono stati preparati come parte di progetto %(cs)s." - -#~ msgid "Did you mean" -#~ msgstr "Volevi dire" - -#~ msgid "Results by authors" -#~ msgstr "Risultati per autore" - -#~ msgid "Results by title" -#~ msgstr "Risultati per titolo" - -#~ msgid "Results in text" -#~ msgstr "Risultati nel testo" - -#~ msgid "Other results" -#~ msgstr "Altri risultati" - -#~ msgid "Sorry! Search cirteria did not match any resources." -#~ msgstr "" -#~ "Siamo spiacenti!I criteri di ricerca non corrispondono alle risorse." - -#~ msgid "" -#~ "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 "" -#~ "Il motore di ricerca supporta i seguenti criteri: titolo, autore, tema, " -#~ "epoca, genere.\n" -#~ "\t\t Per il momento non supportiamo i criteri del testo intero." - -#~ msgid "Sorry! Search query must have at least two characters." -#~ msgstr "" -#~ "Siamo spiacenti! La ricerca viene effettuata su parole con almeno due " -#~ "caratteri." - -#~ msgid "in Lektury.Gazeta.pl" -#~ msgstr "su Lektury.Gazeta.pl" - -#~ msgid "in Wikipedia" -#~ msgstr "su Wikipedia" - -#~ msgid "Your shelves with books" -#~ msgstr "I tuoi scaffali con i libri" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "Non hai nessuno scaffale. se vuoi puoi crearne uno, qui sotto." - -#~ msgid "Create shelf" -#~ msgstr "Crea uno scaffale" - -#~ msgid "author" -#~ msgstr "autore" - -#~ msgid "Hand-outs for teachers" -#~ msgstr "Materiali per gli insegnanti // " - -#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" -#~ msgstr "Leggi lo studio dell'opera di questo autore su Lektury.Gazeta.pl" - -#~ msgid "Read article about this author on Wikipedia" -#~ msgstr "Leggi l'articolo di questo autore su Wikipedia" - -#~ msgid "This author's works are copyrighted." -#~ msgstr " Le opere di questo autore sono protette dai diritti d'autore." - -#~ msgid "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries can't publish this author's works." -#~ msgstr "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Scopri</" -#~ "a> perche le biblioteche online non possono pubblicare opere di questo " -#~ "autore." - -#~ msgid "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet school library of Wolne Lektury soon." -#~ msgstr "" -#~ "Le opere di questo autore sono di pubblico dominio e fra poco saranno " -#~ "pubblicate nella biblioteca scolastica di Wolne Lektury. " - -#~ msgid "" -#~ "This author's works will become part of public domain and will be allowed " -#~ "to be published without restrictions in" -#~ msgstr "" -#~ "Le opere di questo autore saranno di pubblico dominio e sarà possibile " -#~ "pubblicarle senza le restrizioni su" - -#~ msgid "" -#~ "This work is in public domain and will be published on Internet school " -#~ "library of Wolne Lektury soon." -#~ msgstr "" -#~ "Questa opera è di pubblico dominio e fra poco sarà pubblicata nella " -#~ "biblioteca scolastica di Wolne Lektury." - -#~ msgid "" -#~ "This work will become part of public domain and will be allowed to be " -#~ "published without restrictions in" -#~ msgstr "" -#~ "Questa opera sarà di pubblico dominio e sarà possibile pubblicarla senza " -#~ "le restrizioni su" - -#~ msgid "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries can't publish this work." -#~ msgstr "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Scopri</" -#~ "a> perché le librerie online non possono pubblicare le opere di questo " -#~ "autore." - -#~ msgid "This work is copyrighted." -#~ msgstr "Quest'opera è protetta dal diritto d'autore." - -#~ msgid "Login to Wolne Lektury" -#~ msgstr "Loggati in Wolne Lektury" - -#~ msgid "Login" -#~ msgstr "Login" diff --git a/apps/wolnelektury_core/locale/jp/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/jp/LC_MESSAGES/django.mo deleted file mode 100644 index 6b700daec..000000000 Binary files a/apps/wolnelektury_core/locale/jp/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/jp/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/jp/LC_MESSAGES/django.po deleted file mode 100644 index c2d5e8fd9..000000000 --- a/apps/wolnelektury_core/locale/jp/LC_MESSAGES/django.po +++ /dev/null @@ -1,345 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-02-07 15:50+0100\n" -"Last-Translator: Marcin Koziej <marcin@lolownia.org>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: views.py:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "Zaloguj" - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "" - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr "" - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "" - -#: 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 "" - -#: templates/404.html:14 -msgid "main page" -msgstr "" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "" - -#: templates/500.html:19 -msgid "" -"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " -"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " -"error.</p>" -msgstr "" - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "" - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "" - -#: templates/main_page.html:41 -msgid "News" -msgstr "" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "" - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "" - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "" - -#: templates/main_page.html:59 -msgid "Missing a book?" -msgstr "" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "" - -#: templates/main_page.html:71 -msgid "Information" -msgstr "" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" <a href='%(b)s'>%(c)s</a> free reading you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgid_plural "" -"\n" -" <a href='%(b)s'>%(c)s</a> free readings you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgstr[0] "" -msgstr[1] "" - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "" - -#: templates/superbase.html:74 templates/user.html:14 -msgid "Social accounts" -msgstr "" - -#: templates/superbase.html:77 -msgid "My shelf" -msgstr "" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "" - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "" - -#: templates/superbase.html:111 -msgid "Search" -msgstr "" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "" - -#: templates/superbase.html:165 -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." -"org.pl/\">Modern Poland Foundation</a>.\n" -"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" -"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" -"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" -"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" -"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" -"\t\t\t\t" -msgstr "" - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" -"\">fundacja@nowoczesnapolska.org.pl</a>\n" -"\t\t\t\t" -msgstr "" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "" - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -#, fuzzy -msgid "Sign in using:" -msgstr "Zaloguj" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "" - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgstr[0] "" -msgstr[1] "" - -#: 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 "" - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "" - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "" - -#: templates/openid/login.html:27 -#, fuzzy -msgid "Sign In" -msgstr "Zaloguj" - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "" - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" -"strong>." -msgstr "" - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" - -#: templates/socialaccount/connections.html:36 -msgid "Remove" -msgstr "" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "" - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" -"\">sign in</a>." -msgstr "" diff --git a/apps/wolnelektury_core/locale/lt/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/lt/LC_MESSAGES/django.mo deleted file mode 100644 index 5d1dfb986..000000000 Binary files a/apps/wolnelektury_core/locale/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/lt/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/lt/LC_MESSAGES/django.po deleted file mode 100644 index 99e0dfa8e..000000000 --- a/apps/wolnelektury_core/locale/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,1136 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:43+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.3\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" - -#: views.py:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "Prisijungti " - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "Jau esate prisijungÄs kaip vartotojas %(user)s" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "Registruotis " - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr "NorÄdami tÄsti, turite bÅ«ti prisijungÄ" - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "Tinklalapis neegzistuoja" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "Puslapis nerastas" - -#: 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 "" -"AtsipraÅ¡ome, bet Å¡is tinklalapis neegzistuoja. PraÅ¡ome patvirtinti ar " -"įvedÄte teisingÄ adresÄ arba eikite į" - -#: templates/404.html:14 -msgid "main page" -msgstr "pagrindinį puslapį" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "Serverio klaida" - -#: templates/500.html:19 -msgid "" -"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " -"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " -"error.</p>" -msgstr "" -"<p>Interneto svetainÄ yra laikinai neprieinama. Aplankykite mÅ«sų <a " -"href='http://nowoczesnapolska.org.pl'>blogÄ </a>.</p> <p>PraneÅ¡kite<a " -"href='mailto:fundacja@nowoczesnapolska.org.pl'>administratoriams</a> apie " -"klaidÄ .</p>\"" - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "Paslauga neprieinama" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "" -"Interneto svetainÄ Wolnelektury.pl Å¡iuo metu yra neprieinama dÄl atliekamų " -"remonto darbų." - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "Wolne Lektury internetinÄ biblioteka" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "Kas naujo?" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "Naujos publikacijos" - -#: templates/main_page.html:41 -msgid "News" -msgstr "Naujienos" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "PriemonÄs" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "PraneÅ¡kite apie klaidÄ arba teikite pasiÅ«lymus" - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "Atsisiųsti katalogÄ PDF formatu." - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "Valdiklis" - -#: templates/main_page.html:59 -msgid "Missing a book?" -msgstr "Neradote knygos?" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "Publikavimo planas" - -#: templates/main_page.html:71 -msgid "Information" -msgstr "Informacija" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "Panaudotas paveikslÄlis:" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" <a href='%(b)s'>%(c)s</a> free reading you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgid_plural "" -"\n" -" <a href='%(b)s'>%(c)s</a> free readings you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgstr[0] "" -"\n" -" <a href='%(b)s'>%(c)s</a> nemokamas kÅ«rinys į kurį <a " -"href='%(r)s'>turite teisÄ</a>\n" -" " -msgstr[1] "" -"\n" -" <a href='%(b)s'>%(c)s</a> nemokami kÅ«riniai į kuriuos <a " -"href='%(r)s'>turite teisÄ</a>\n" -" " -msgstr[2] "" -"\n" -" <a href='%(b)s'>%(c)s</a> nemokamų kÅ«rinių į kuriuos <a " -"href='%(r)s'>turite teisÄ</a>\n" -" " - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "Sveiki atvykÄ" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "Slaptažodis" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "El- paÅ¡tas" - -#: templates/superbase.html:74 templates/user.html:14 -msgid "Social accounts" -msgstr "SocialinÄs paskyros" - -#: templates/superbase.html:77 -msgid "My shelf" -msgstr "Mano lentyna" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "Administracija " - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "Atsijungti" - -#: templates/superbase.html:111 -msgid "Search" -msgstr "IeÅ¡koti" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "Kalbų versijos" - -#: templates/superbase.html:165 -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." -"org.pl/\">Modern Poland Foundation</a>.\n" -"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" -"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" -"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" -"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" -"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tProjektas Wolne Lektury yra <a href=\"http://nowoczesnapolska.org.pl/" -"\">fondo Å iuolaikinÄ Lenkija</a> vadovaujamas.\n" -"\t\t\t\tSkaitmeninÄs reprodukcijos yra <a href=\"http://www.bn.org.pl/\"> " -"NacionalinÄs bibliotekos</a>, <a href=\"http://www.bs.katowice.pl/" -"\">Silezijos bibliotekos</a> ir <a href=\"http://www.bibliotekaelblaska.pl/" -"\">Elbingo bibliotekos</a> paruoÅ¡tos, remiantis Å¡ių bibliotekų iÅ¡tekliais.\n" -"\t\t\t\tPriegloba: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" -"\t\t\t\t" - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" -"\">fundacja@nowoczesnapolska.org.pl</a>\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tFondas Å iuolaikinÄ Lenkija, 00-514 Warszawa, ul. MarszaÅkowska 84/92 " -"lok. 125, tel/faksas: (22) 621-30-17\n" -" el. paÅ¡tas: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" -"\">fundacja@nowoczesnapolska.org.pl</a>\n" -"\t\t\t\t" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "Uždaryti" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "Kraunasi" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "Vartotojas" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "Interneto svetainÄs administracija" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "Vertimai" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "papildomas" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "supaprastintas" - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "Importuoti knygÄ " - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "PamirÅ¡ote slaptažodį?" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -msgid "Sign in using:" -msgstr "Prisijungti naudojant:" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "arba registruotis " - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgstr[0] "" -"\n" -"Turime %(c)s kÅ«rinį publikuotÄ Wolne Lektury interneto svetainÄje!\n" -"PadÄkite mums plÄtoti bibliotekÄ ir nemokamai bendrinti naujus kÅ«rinius\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">remdami mus " -"finansiÅ¡kai\n" -"arba skirdami 1% jÅ«sų pajamų mokesÄio</a>.\n" -msgstr[1] "" -"\n" -"Turime %(c)s kÅ«rinius publikuotus Wolne Lektury interneto svetainÄje!\n" -"PadÄkite mums plÄtoti bibliotekÄ ir nemokamai bendrinti naujus kÅ«rinius\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">remdami mus " -"finansiÅ¡kai\n" -"arba skirdami 1% jÅ«sų pajamų mokesÄio</a>.\n" -msgstr[2] "" -"\n" -"Turime %(c)s kÅ«rinių publikuotų Wolne Lektury interneto svetainÄje!\n" -"PadÄkite mums plÄtoti bibliotekÄ ir nemokamai bendrinti naujus kÅ«rinius\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">remdami mus " -"finansiÅ¡kai\n" -"arba skirdami 1% jÅ«sų pajamų mokesÄio</a>.\n" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -msgstr "" -"Tapkite redaktoriumi Wolne Lektury interneto svetainÄs! Sužinokite ar\n" -"Å¡iuo metu dirbame su jÅ«sų ieÅ¡komu kÅ«riniu ir paruoÅ¡kite\n" -"jÅ«sų leidinį prisijungdami prie RedakcinÄs Platformos." - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "Daugiau..." - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "OpenID Prisijungti" - -#: templates/openid/login.html:27 -msgid "Sign In" -msgstr "Prisijungti " - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "ankstÄsnis" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "sekantis " - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "Leisti prieigÄ prie Wolne Lektury interneto svetainÄs" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" -"strong>." -msgstr "" -"Patvirtinkite, kad leistute prieigÄ prie Wolne Lektury interneto svetainÄs " -"kaip vartotojas <strong>%(user)s</strong>." - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Paskyros jungtys" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" -"Galite prisijungti prie jÅ«sų paskyros naudodamiesi Å¡iomis third party " -"paskyromis:" - -#: templates/socialaccount/connections.html:36 -msgid "Remove" -msgstr "PaÅ¡alinti" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "Neturite socialinio tinklo paskyrų prijungtų prie Å¡ios paskyros." - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "PridÄti 3rd Party PaskyrÄ " - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "Prisijungimas atÅ¡auktas" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" -"\">sign in</a>." -msgstr "" -"NusprendÄte atÅ¡aukti prisijungimÄ prie mÅ«sų interneto svetainÄs naudodamiesi " -"viena iÅ¡ jÅ«sų egzistuojanÄių paskyrų. Jei įvyko klaida, praÅ¡ome pradÄti Äia " -"<a href=\"%(login_url)s\">sign in</a>." - -#~ msgid "Listing of all audiobooks" -#~ msgstr "Visų audio knygų sÄ raÅ¡as" - -#~ msgid "Latest MP3 audiobooks" -#~ msgstr "Naujosios MP3 audio knygos" - -#~ msgid "Latest Ogg Vorbis audiobooks" -#~ msgstr "Naujosios Ogg Vorbis audio knygos" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." -#~ msgstr "" -#~ "Fondo Å iuolaikinÄ Lenkija privalomos literatÅ«ros audio knygų rinkinys.\n" -#~ "Galite juo naudotis nemokamai ir be apribojimų.\n" -#~ "Audio knygos yra garsių aktorių įraÅ¡omos, tokių kaip Danuta Stenka ir Jan " -#~ "Peszek." - -#~ msgid "See also" -#~ msgstr "ŽiÅ«rÄti daugiau" - -#~ msgid "Theme" -#~ msgstr "Motyvas" - -#~ msgid "in work " -#~ msgstr "kÅ«rinyje" - -#~ msgid "This work is licensed under:" -#~ msgstr "Å is kÅ«rinys yra licencijuotas pagal:" - -#~ msgid "" -#~ "This work isn't covered by copyright and is part of the\n" -#~ " public domain, which means it can be freely used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" -#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" -#~ " license." -#~ msgstr "" -#~ "Å io visuomenÄs srities kÅ«rinio autorių teisÄ neapima,\n" -#~ "tai reiÅ¡kia, kad gali bÅ«ti laisvai naudojamas bei\n" -#~ "platinamas. Jei su Å¡iuo kÅ«riniu yra pateikiamos bet kokios\n" -#~ "papildomos autorinių teisių saugomos medžiagos (kaip pastabos, motyvai ir " -#~ "t.t.), Å¡ios\n" -#~ "medžiagos yra licencijuotos pagal\n" -#~ "<a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " -#~ "Commons Attribution-ShareAlike 3.0</a>\n" -#~ "licencijÄ ." - -#~ msgid "Text prepared based on:" -#~ msgstr "Tekstas paruoÅ¡tas remiantis:" - -#~ msgid "Edited and annotated by:" -#~ msgstr "Redagavimas ir pastabos:" - -#~ msgid "Listing of all works" -#~ msgstr "Visų kÅ«rinių sÄ raÅ¡as" - -#~ msgid "Table of Content" -#~ msgstr "Turinys" - -#~ msgid "â top â" -#~ msgstr "âį viršųâ" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "PadÄkite knygÄ Ä¯ lentynÄ !" - -#~ msgid "Create new shelf" -#~ msgstr "Sukurti naujÄ lentynÄ " - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naujÄ lentynÄ " -#~ "žemiau." - -#~ msgid "Put on the shelf!" -#~ msgstr "PadÄkite į lentynÄ !" - -#~ msgid "Epoch" -#~ msgstr "Epocha" - -#~ msgid "Kind" -#~ msgstr "RÅ«Å¡is " - -#~ msgid "Genre" -#~ msgstr "Žanras" - -#~ msgid "Read online" -#~ msgstr "Skaityti online" - -#~ msgid "Download" -#~ msgstr "Atsisiųsti" - -#~ msgid "to print" -#~ msgstr "Spausdinti" - -#~ msgid "for an e-book reader" -#~ msgstr "e-knygos skaitytojui" - -#~ msgid "for Kindle" -#~ msgstr "skaityklei Kindle" - -#~ msgid "for advanced usage" -#~ msgstr "iÅ¡plÄstiniam naudojimui" - -#~ msgid "Listen" -#~ msgstr "Klausytis" - -#~ msgid "Table of contents" -#~ msgstr "Turinys" - -#~ msgid "Themes" -#~ msgstr "Motyvai" - -#~ msgid "Edit. note" -#~ msgstr "Redaguoti pastabÄ " - -#~ msgid "Infobox" -#~ msgstr "Infobox" - -#~ msgid "Book's page" -#~ msgstr "Knygos puslapis" - -#~ msgid "for a reader" -#~ msgstr "skaitytojui" - -#, fuzzy -#~ msgid "for advanced usege" -#~ msgstr "papildomas" - -#~ msgid "Download a custom PDF" -#~ msgstr "Atsisiųsti PDF failÄ " - -#~ msgid "Motifs and themes" -#~ msgstr "Motyvai ir temos" - -#~ msgid "See" -#~ msgstr "ŽiÅ«rÄti" - -#~ msgid "Source" -#~ msgstr "Knygos" - -#~ msgid "of the book" -#~ msgstr "Å¡altinis" - -#~ msgid "Source XML file" -#~ msgstr "Å altinio XML failas" - -#~ msgid "Book on" -#~ msgstr "Knyga " - -#~ msgid "Editor's Platform" -#~ msgstr "Redaktoriaus Platformoje" - -#~ msgid "Book description on Lektury.Gazeta.pl" -#~ msgstr "Knygos apraÅ¡ymas Lektury.Gazeta.pl interneto svetainÄje" - -#~ msgid "Book description on Wikipedia" -#~ msgstr "Knygos apraÅ¡ymas Vikipedijoje" - -#~ msgid "Mix this book" -#~ msgstr "MaiÅ¡yti Å¡iÄ knygÄ " - -#~ msgid "Download all audiobooks for this book" -#~ msgstr "Atsisiųsti visas Å¡ios knygos audio knygas" - -#~ msgid "Catalogue" -#~ msgstr "Katalogas" - -#~ msgid "Authors" -#~ msgstr "Autoriai" - -#~ msgid "Kinds" -#~ msgstr "RÅ«Å¡ys" - -#~ msgid "Genres" -#~ msgstr "Žanrai" - -#~ msgid "Epochs" -#~ msgstr "Epochos" - -#~ msgid "Themes and topics" -#~ msgstr "Motyvai ir temos" - -#~ msgid "Listing of all DAISY files" -#~ msgstr "Visų DAISY failų sÄ raÅ¡as" - -#~ msgid "Latest DAISY audiobooks" -#~ msgstr "Naujosios DAISY audio knygos" - -#~ 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Å." -#~ msgstr "" -#~ "DAISY sistema yra visame pasaulyje pripažintas knygų bendrinimo formatas\n" -#~ "pritaikytas silpnesnio regÄjimo žmonÄms, akliesiems bei kitiems skaitymo " -#~ "problemų turintiems žmonÄms.Galite jomis naudotis nemokamai ir be " -#~ "apribojimų." - -#~ msgid "" -#~ "The criteria are ambiguous. Please select one of the following options:" -#~ msgstr "" -#~ "PaieÅ¡kos kriterijai nÄra tikslÅ«s. PraÅ¡ome iÅ¡rinkti vienÄ iÅ¡ žemiau " -#~ "nurodytų galimybių:" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Lentynos turinÄios fragmentus " - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naujÄ lentynÄ " -#~ "žemiau." - -#~ msgid "Save all shelves" -#~ msgstr "Ä®raÅ¡yti visas lentynas" - -#~ msgid "Expand fragment" -#~ msgstr "IÅ¡plÄsti fragmentÄ " - -#~ msgid "Hide fragment" -#~ msgstr "SlÄpti fragmentÄ " - -#~ msgid "See full category" -#~ msgstr "ŽiÅ«rÄti visÄ kategorijÄ " - -#~ msgid "All books" -#~ msgstr "Visos knygos" - -#~ msgid "Audiobooks" -#~ msgstr "Audio knygos" - -#~ msgid "DAISY" -#~ msgstr "DAISY" - -#~ msgid "Work is licensed under " -#~ msgstr "KÅ«rinys yra licencijuotas pagal:" - -#~ msgid "Based on" -#~ msgstr "Remiantis" - -#~ msgid "Details" -#~ msgstr "DetalÄs " - -#~ msgid "Author" -#~ msgstr "Autorius" - -#~ msgid "Other resources" -#~ msgstr "Kiti iÅ¡tekliai" - -#~ msgid "Source of the image" -#~ msgstr "PaveikslÄlio Å¡altinis" - -#~ msgid "Image on the Editor's Platform" -#~ msgstr "PaveikslÄlis Redaktoriaus Platformoje" - -#~ msgid "View XML source" -#~ msgstr "ŽiÅ«rÄti XML Å¡altinį" - -#~ msgid "Work's themes " -#~ msgstr "KÅ«rinio motyvai" - -#~ msgid "Listing of all pictures" -#~ msgstr "Visų vaizdų sÄ raÅ¡as" - -#~ msgid "Download as" -#~ msgstr "Atsisiųsti kaip" - -#~ msgid "Artist" -#~ msgstr "Artistas" - -#~ msgid "Director" -#~ msgstr "Režisierus" - -#~ msgid "Audiobooks were prepared as a part of the projects:" -#~ msgstr "Audio knygos buvo paruoÅ¡tos kaip projektų dalis:" - -#~ msgid "%(cs)s, funded by %(fb)s" -#~ msgstr "\"%(cs)s, %(fb)s finansuotų" - -#~ msgid "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -#~ msgstr "" -#~ "Audio knygos buvo paruoÅ¡tos kaip dalis %(fb)s. finansuoto %(cs)s projekto." - -#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." -#~ msgstr "Audio knygos buvo paruoÅ¡tos kaip dalis %(cs)s projekto." - -#~ msgid "Did you mean" -#~ msgstr "Gal turÄjote omenyje" - -#~ msgid "Results by authors" -#~ msgstr "Rezultatai pagal autorius" - -#~ msgid "Results by title" -#~ msgstr "Rezultatai pagal pavadinimÄ " - -#~ msgid "Results in text" -#~ msgstr "Rezultatai tekste" - -#~ msgid "Other results" -#~ msgstr "Kiti rezultatai" - -#~ msgid "Sorry! Search cirteria did not match any resources." -#~ msgstr "AtsipraÅ¡ome! Rezultatų, atitinkanÄių paieÅ¡kos kriterijus nÄra." - -#~ msgid "" -#~ "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 "" -#~ "PaieÅ¡kos sistema palaiko nurodytus kriterijus: pavadinimas, autorius, " -#~ "tema, epocha, rÅ«Å¡is ir žanras.\n" -#~ "\t\t Kol kas negalima atlikti viso teksto paieÅ¡kos." - -#~ msgid "Sorry! Search query must have at least two characters." -#~ msgstr "" -#~ "AtsipraÅ¡ome! PaieÅ¡kos užklausa turi susidÄti mažiausiai iÅ¡ dviejų " -#~ "simbolių." - -#~ msgid "in Lektury.Gazeta.pl" -#~ msgstr "Lektury.Gazeta.pl interneto svetainÄje" - -#~ msgid "in Wikipedia" -#~ msgstr "Vikipedijoje" - -#~ msgid "Your shelves with books" -#~ msgstr "Tavo lentynos su knygomis" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "" -#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naujÄ lentynÄ " -#~ "žemiau." - -#~ msgid "Create shelf" -#~ msgstr "Sukurti lentynÄ " - -#~ msgid "author" -#~ msgstr "autorius" - -#~ msgid "Hand-outs for teachers" -#~ msgstr "Dalijamoji medžiaga mokytojams" - -#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" -#~ msgstr "" -#~ "Skaitykite Å¡io autoriaus kÅ«rinio apraÅ¡ymÄ interneto svetainÄje Lektury." -#~ "Gazeta.pl" - -#~ msgid "Read article about this author on Wikipedia" -#~ msgstr "Skaitykite straipsnį apie šį autorių Vikipedijoje" - -#~ msgid "This author's works are copyrighted." -#~ msgstr "Å io autoriaus kÅ«riniai yra autorinių teisių saugomi ." - -#~ msgid "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries can't publish this author's works." -#~ msgstr "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" -#~ "publiczna/'>Sužinokite</a> kodÄl Å¡io autoriaus kÅ«riniai negali bÅ«ti " -#~ "publikuojami internetinÄje bibliotekoje." - -#~ msgid "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet school library of Wolne Lektury soon." -#~ msgstr "" -#~ "Å io autoriaus kÅ«riniai yra vieÅ¡ai prieinami ir netrukus bus publikuoti " -#~ "interneto svetainÄs Wolne Lektury internetinÄje bibliotekoje. " - -#~ msgid "" -#~ "This author's works will become part of public domain and will be allowed " -#~ "to be published without restrictions in" -#~ msgstr "" -#~ "Å io autoriaus kÅ«riniai netrukus bus vieÅ¡ai prieinami ir galÄs bÅ«ti " -#~ "publikuojami be apribojimų" - -#~ msgid "" -#~ "This work is in public domain and will be published on Internet school " -#~ "library of Wolne Lektury soon." -#~ msgstr "" -#~ "Å is kÅ«rinys yra vieÅ¡ai prieinamas ir netrukus bus publikuotas interneto " -#~ "svetainÄs Wolne Lektury internetinÄje bibliotekoje." - -#~ msgid "" -#~ "This work will become part of public domain and will be allowed to be " -#~ "published without restrictions in" -#~ msgstr "" -#~ "Å is kÅ«rinys netrukus bus vieÅ¡ai prieinamas ir galÄs bÅ«ti publikuojamas be " -#~ "apribojimų" - -#~ msgid "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries can't publish this work." -#~ msgstr "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" -#~ "publiczna/'>Sužinokite</a> kodÄl Å¡is kÅ«rinys negali bÅ«ti publikuojamas " -#~ "internetinÄje bibliotekoje." - -#~ msgid "This work is copyrighted." -#~ msgstr "Å is kÅ«rinis yra autorinių teisių saugomas." - -#~ msgid "Login to Wolne Lektury" -#~ msgstr "Prisijungti prie Wolne Lektury interneto svetainÄs" - -#~ msgid "Login" -#~ msgstr "Prisijungti" - -#~ msgid "" -#~ "Internet Explorer cannot display this site properly. Click here to read " -#~ "more..." -#~ msgstr "" -#~ "Internet Explorer nie sugeba teisingai parodyti Å¡io tinklapio. Paspausti " -#~ "Äia, kad sužinoti daugiau..." - -#~ msgid "Your shelves" -#~ msgstr "Tavo lentynos" - -#~ msgid "Register on" -#~ msgstr "Registruotis į" - -#~ msgid "or" -#~ msgstr "arba" - -#~ msgid "return to main page" -#~ msgstr "gryžk į pagrindinį puslapį" - -#, fuzzy -#~ msgid "Listing of all audiobooks on WolneLektury.pl" -#~ msgstr "KÅ«riniu sÄ raÅ¡as LaisvojiLiteratura.lt" - -#~ msgid "Put a book" -#~ msgstr "Prijung literatÅ«rÄ " - -#~ msgid "on the shelf!" -#~ msgstr "į lentynÄ !" - -#~ msgid "for reading" -#~ msgstr "į skaitimÄ " - -#~ msgid "and printing using" -#~ msgstr "ir spausdinti su pagalbÄ " - -#~ msgid "Download EPUB" -#~ msgstr "atsisiųsk EPUB failÄ " - -#~ msgid "Download TXT" -#~ msgstr "atsisiųsk TXT failÄ " - -#~ msgid "on small displays, for example mobile phones" -#~ msgstr "ant displÄjaus, pvz. mobilaus telefono " - -#~ msgid "Download ODT" -#~ msgstr "atsisiųsk ODT failÄ " - -#~ msgid "and editing using" -#~ msgstr "ir edituoti su pagalbÄ " - -#~ msgid "Book on project's wiki" -#~ msgstr "Sukurk straipsnį apie knygÄ vikiprojekte" - -#~ msgid "on" -#~ msgstr "ant" - -#~ msgid "See description" -#~ msgstr "ApraÅ¡ymas" - -#, fuzzy -#~ msgid "Listing of all works on WolneLektury.pl" -#~ msgstr "KÅ«riniu sÄ raÅ¡as LaisvojiLiteratura.lt" - -#~ msgid "Jump to" -#~ msgstr "Santrumpa" - -#~ msgid "Categories" -#~ msgstr "KÅ«rinio kategorija " - -#, fuzzy -#~ msgid "Listing of all DAISY files on WolneLektury.pl" -#~ msgstr "KÅ«riniu sÄ raÅ¡as LaisvojiLiteratura.lt" - -#~ msgid "Show full category" -#~ msgstr "ApžiÅ«rek visÄ kategorijÄ " - -#~ msgid "Hide" -#~ msgstr "Suvyniok" - -#~ msgid "Browse books by categories" -#~ msgstr "Peržiurinek literaturÄ pagal iÅ¡rinktÄ kategorijÄ " - -#~ msgid "delete" -#~ msgstr "paÅ¡alink" - -#~ msgid "" -#~ "Create your own book set. You can share it with friends by sending them " -#~ "link to your shelf." -#~ msgstr "" -#~ "Sukurk savo knygų rinkiny. Gali juo veliau pasidalinti su kitais, " -#~ "persiÅ«sk jiems nuorodÄ i tavo lentynÄ ." - -#~ msgid "You need to " -#~ msgstr "Gali" - -#~ msgid "sign in" -#~ msgstr "Prisijungti " - -#~ msgid "to manage your shelves." -#~ msgstr "Kad valdti savo lentynom." - -#~ msgid "" -#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." -#~ msgstr "" -#~ "Pamokų scenarijai ir kiti sumanymai kaip panaudoti servisÄ " -#~ "LaisvojiLiteratura.lt mokslui." - -#~ msgid "" -#~ "are professional recordings of literary texts from our repository, " -#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " -#~ "DAISY system." -#~ msgstr "" -#~ "Tai profesjonalus literaturinių tekstų garso įraÅ¡ai, mÅ«sų rinkinių " -#~ "laisvai prieinami Å¡iuose įraÅ¡ymo formatouse: MP3, Ogg Vorbis ir sistema " -#~ "DAISY." - -#~ msgid "Themes groups" -#~ msgstr "Motyvų grupÄ" - -#~ msgid "See our blog" -#~ msgstr "Aplankyk mÅ«sų blogÄ " - -#~ msgid "You can help us!" -#~ msgstr "Gali mums padÄti!" - -#~ msgid "" -#~ "We try our best to elaborate works appended to our library. It is " -#~ "possible only due to support of our volunteers." -#~ msgstr "" -#~ "DÄka savanorių aprÅ¡ymai kÅ«riniu, kurie yra prijungemi i mÅ«sų bibliotekÄ " -#~ "yra kiekvienÄ kartÄ kruopÅ¡Äiai paruoÅ¡ti" - -#~ msgid "" -#~ "We invite people who want to take part in developing Internet school " -#~ "library Wolne Lektury." -#~ msgstr "" -#~ "KvieÄiame visus, kurie nori kartu su mumi kurti mokykline internetine " -#~ "bibliotekÄ Laisvoji Literatura." - -#~ msgid "About us" -#~ msgstr "Apie projektÄ " - -#~ msgid "" -#~ "\n" -#~ "\t\t\tInternet library with school readings âWolne Lekturyâ (<a href=" -#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) is a project made by " -#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " -#~ "which are recommended by Ministry of National Education and are in public " -#~ "domain.\n" -#~ "\t\t\t" -#~ msgstr "" -#~ "\n" -#~ "\t\t\tInternetine biblioteka \"Laisvoji Literatura\" (www." -#~ "laisvojiliteratura.lt) siÅ«lanti mokyklinÄ literaturÄ - tai " -#~ "Å iuolaikines Lenkijos Fondasto projektas. Fondas veike nou 2007 metų ir " -#~ "savo rinkinuose turi mokyklinÄ literaturÄ , kuri yra " -#~ "rekomenduojama per Å vietimo ir Mokslo MinisterijÄ ir kuri jau\tpateko į " -#~ "vieÅ¡iÄ Interneto svetainÄ.\n" -#~ "\t\t\t" - -#~ msgid "Searching in" -#~ msgstr "IeÅ¡koimas" - -#~ msgid "More than one result matching the criteria found." -#~ msgstr "Surasta daugiau nei vienas pajeÅ¡ku rezultatas" - -#~ msgid "Search in WolneLektury.pl" -#~ msgstr "IeÅ¡kok Å¡iame tinklapyje LasvojiLiteratura.lt " - -#~ msgid "Your shelf is empty" -#~ msgstr "Tavo lentyna yra tuÅ¡Äia" - -#~ msgid "" -#~ "You can put a book on a shelf by entering page of the reading and " -#~ "clicking 'Put on the shelf'." -#~ msgstr "" -#~ "Gali įmesti knygÄ Ä¯ lentynÄ , įeik į knygos tinklapį ir iÅ¡rink \"Ä® lentynÄ " -#~ "\". " - -#~ msgid "Choose books' formats which you want to download:" -#~ msgstr "Pasirink knygos persiuntimo formatÄ :" - -#~ msgid "for listening" -#~ msgstr "klausyti" - -#~ msgid "on favourite MP3 player" -#~ msgstr "numylÄtam MP3 grotuve" - -#~ msgid "open format" -#~ msgstr "atviras formatas" - -#~ msgid "Xiph.org Foundation" -#~ msgstr "Fondo Xiph.Org" - -#~ msgid "Updating list of books' formats on the shelf" -#~ msgstr "Atnaujinti knygų formatų sÄ raÅ¡Ä lentynose. " - -#~ msgid "cancel" -#~ msgstr "anuliuoti" - -#~ msgid "Share this shelf" -#~ msgstr "Pasidalink Å¡iÄ lentynÄ ." - -#~ msgid "" -#~ "Copy this link and share it with other people to let them see your shelf." -#~ msgstr "" -#~ "Sukopijuok Å¡iÄ nuorodÄ ir persiusk jÄ tiems, su kuriais noru pasidalinti " -#~ "savo lentynÄ ." - -#, fuzzy -#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Perskaityk Å¡io autoriaus apraÅ¡ymÄ tinklapį Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Perskaityk Å¡io autoriaus apraÅ¡ymÄ tinklapį Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "Perskaityk Å¡io autoriaus apraÅ¡ymÄ tinklapį Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read related study on Lektury.Gazeta.pl" -#~ msgstr "Perskaityk Å¡io autoriaus apraÅ¡ymÄ tinklapį Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" -#~ msgstr "Perskaityk straipsnį apie autorių Wikipedijoje" - -#, fuzzy -#~ msgid "Read article about kind %(last_tag)s on Wikipedia" -#~ msgstr "Perskaityk straipsnį apie autorių Wikipedijoje" - -#, fuzzy -#~ msgid "Read article about genre %(last_tag)s on Wikipedia" -#~ msgstr "Perskaityk straipsnį apie autorių Wikipedijoje" - -#, fuzzy -#~ msgid "Read related article on Wikipedia" -#~ msgstr "Perskaityk straipsnį apie autorių Wikipedijoje" - -#~ msgid "Delete" -#~ msgstr "paÅ¡alinti " - -#~ msgid "return to the main page" -#~ msgstr "sugryžk į pagrindinį puslapį " - -#~ msgid "return to list of materials" -#~ msgstr "gryžk i medžiagų saraÅ¡Ä " - -#~ msgid "Hand-outs for teachers on " -#~ msgstr "PagalbinÄs medžiagos mokytojams" - -#, fuzzy -#~ msgid "" -#~ "Download TXT - for reading on small displays, for example mobile phones" -#~ msgstr "ant displÄjaus, pvz. mobilaus telefono " - -#~ msgid "Polish" -#~ msgstr "Lenkų" - -#~ msgid "German" -#~ msgstr "VokieÄių" - -#~ msgid "English" -#~ msgstr "Anglų " - -#~ msgid "Lithuanian" -#~ msgstr "Lietuvių" - -#~ msgid "French" -#~ msgstr "PrancÅ«zų" - -#~ msgid "Russian" -#~ msgstr "Rusų" - -#~ msgid "Spanish" -#~ msgstr "Ispanų" - -#~ msgid "Ukrainian" -#~ msgstr "UkrainieÄių" - -#~ msgid "Choose your interface language: " -#~ msgstr "Pasirink sÄ sajos kalbÄ :" - -#~ msgid "Choose language" -#~ msgstr "Pasirink kalbÄ " - -#~ msgid "Hide description" -#~ msgstr "Suvyniok apraÅ¡ymÄ " - -#~ msgid "Download MP3" -#~ msgstr "atsisiųsk MP3 failÄ " - -#~ msgid "Download Ogg Vorbis" -#~ msgstr "atsisiųsk Ogg Vorbis failÄ " - -#~ msgid "Download DAISY" -#~ msgstr "atsisiųsk DAISY failÄ " - -#~ msgid "check list of books" -#~ msgstr "patikrink knygų sÄ raÅ¡Ä " - -#~ msgid "in our repository" -#~ msgstr "mÅ«sų knygų rinkiny" - -#~ msgid "Read study of epoch" -#~ msgstr "Perskaityk gadynÄs apraÅ¡ymÄ " - -#~ msgid "Read article about epoch" -#~ msgstr "Perskaityk straipsnį apie gadynÄ " diff --git a/apps/wolnelektury_core/locale/pl/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index b6919642f..000000000 Binary files a/apps/wolnelektury_core/locale/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/pl/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 6a6ad3450..000000000 --- a/apps/wolnelektury_core/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,1207 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: WolneLektury\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:43+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: pl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" -"X-Poedit-Language: Polish\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2)\n" - -#: views.py:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "Zaloguj siÄ" - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "Zalogowano jako %(user)s" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "ZaÅóż konto" - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr "Zaloguj siÄ, aby kontynuowaÄ" - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "Podana strona nie istnieje" - -#: templates/404.html:10 -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" - -#: templates/404.html:14 -msgid "main page" -msgstr "strony gÅównej" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "BÅÄ d serwera" - -#: templates/500.html:19 -msgid "" -"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " -"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " -"error.</p>" -msgstr "" -"<p>Serwis Wolnelektury.pl jest chwilowo niedostÄpny. Odwiedź naszego <a " -"href='http://nowoczesnapolska.org.pl'>bloga</a></p>\n" -"<p>Powiadom <a href='mailto:fundacja@nowoczesnapolska.org." -"pl'>administratorów</a> o bÅÄdzie.</p>" - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "Serwis niedostÄpny" - -#: 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." - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "Biblioteka internetowa Wolne Lektury" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "Co nowego?" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "Ostatnie publikacje" - -#: templates/main_page.html:41 -msgid "News" -msgstr "AktualnoÅci" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "NarzÄdzia" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "ZgÅoÅ bÅÄ d lub sugestiÄ" - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "Pobierz katalog w formacie PDF." - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "Widget" - -#: templates/main_page.html:59 -msgid "Missing a book?" -msgstr "Nie znalazÅeÅ/-aÅ utworu?" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "Plan publikacji" - -#: templates/main_page.html:71 -msgid "Information" -msgstr "Informacje" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "Polityka prywatnoÅci" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "Użyto obrazu:" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" <a href='%(b)s'>%(c)s</a> free reading you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgid_plural "" -"\n" -" <a href='%(b)s'>%(c)s</a> free readings you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgstr[0] "" -"\n" -" <a href='%(b)s'>%(c)s</a> darmowy utwór do której <a " -"href='%(r)s'>masz prawo</a>\n" -" " -msgstr[1] "" -"\n" -" <a href='%(b)s'>%(c)s</a> darmowe utwory do których <a " -"href='%(r)s'>masz prawo</a>\n" -" " -msgstr[2] "" -"\n" -" <a href='%(b)s'>%(c)s</a> darmowych utworów do których " -"<a href='%(r)s'>masz prawo</a>\n" -" " - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "Witaj" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "HasÅo" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "E-mail" - -#: templates/superbase.html:74 templates/user.html:14 -msgid "Social accounts" -msgstr "Konta spoÅecznoÅciowe" - -#: templates/superbase.html:77 -msgid "My shelf" -msgstr "Moja póÅka" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "Administracja" - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "Wyloguj" - -#: templates/superbase.html:111 -msgid "Search" -msgstr "Szukaj" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "Wersje jÄzykowe" - -#: templates/superbase.html:165 -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." -"org.pl/\">Modern Poland Foundation</a>.\n" -"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" -"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" -"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" -"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" -"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" -"\t\t\t\t" -msgstr "" -"\n" -"Wolne Lektury to projekt prowadzony przez <a href=\"http://nowoczesnapolska." -"org.pl/\">fundacjÄ Nowoczesna Polska</a>. \n" -"Reprodukcje cyfrowe wykonane przez <a href=\"http://www.bn.org.pl/" -"\">BibliotekÄ NarodowÄ </a>, <a href=\"http://www.bs.katowice.pl/" -"\">BibliotekÄ ÅlÄ skÄ </a> i <a href=\"http://www.bibliotekaelblaska.pl/" -"\">BibliotekÄ ElblÄ skÄ </a> z egzemplarzy pochodzÄ cych ze zbiorów BN, BÅ i " -"BE.\n" -"Hosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>." - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" -"\">fundacja@nowoczesnapolska.org.pl</a>\n" -"\t\t\t\t" -msgstr "" -"\n" -"Fundacja Nowoczesna Polska, 00-514 Warszawa, ul. MarszaÅkowska 84/92 lok. " -"125, tel/fax: (22) 621-30-17, e-mail: <a href=\"mailto:" -"fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "Zamknij" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "Åadowanie" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "Użytkownik" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "Administracja stronÄ " - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "TÅumaczenia" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "zaawansowane" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "uproszczone" - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "Importuj ksiÄ Å¼kÄ" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "Nie pamiÄtasz hasÅa?" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -msgid "Sign in using:" -msgstr "Zaloguj siÄ używajÄ c:" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "albo zaÅóż konto" - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgstr[0] "" -"\n" -"W serwisie Wolne Lektury już teraz opublikowany jest %(c)s utwór! Pomóż w " -"rozwijaniu biblioteki i uwalnianiu nowych lektur <a href=\"http://" -"nowoczesnapolska.org.pl/wesprzyj_nas/\">przekazujÄ c nam darowiznÄ lub 1% " -"podatku</a>.\n" -msgstr[1] "" -"\n" -"W serwisie Wolne Lektury już teraz opublikowane sÄ %(c)s utwory! Pomóż w " -"rozwijaniu biblioteki i uwalnianiu nowych lektur <a href=\"http://" -"nowoczesnapolska.org.pl/wesprzyj_nas/\">przekazujÄ c nam darowiznÄ lub 1% " -"podatku</a>.\n" -msgstr[2] "" -"\n" -"W serwisie Wolne Lektury już teraz opublikowanych jest %(c)s utworów! Pomóż " -"w rozwijaniu biblioteki i uwalnianiu nowych lektur <a href=\"http://" -"nowoczesnapolska.org.pl/wesprzyj_nas/\">przekazujÄ c nam darowiznÄ lub 1% " -"podatku</a>.\n" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -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..." -msgstr "WiÄcej..." - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "Logowanie 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" -msgstr "poprzedni" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "nastÄpny" - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "Zezwól na dostÄp do Wolnych Lektur" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" -"strong>." -msgstr "" -"Potwierdź dostÄp do Wolnych Lektur jako użytkownik <strong>%(user)s</strong>." - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "PowiÄ zania konta" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" -"Możesz siÄ zalogowaÄ na swoje konto używajÄ c nastÄpujÄ cych kont zewnÄtrznych:" - -#: templates/socialaccount/connections.html:36 -msgid "Remove" -msgstr "UsuÅ" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "Aktualnie do Twojego konta nie sÄ podÅÄ czone żadne konta zewnÄtrzne." - -#: templates/socialaccount/connections.html:47 -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:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" -"\">sign in</a>." -msgstr "" -"Logowanie przy użyciu zewnÄtrznego konta zostaÅo anulowane. JeÅli byÅ to " -"bÅÄ d, przejdź do <a href=\"%(login_url)s\">strony logowania</a>." - -#~ msgid "Listing of all audiobooks" -#~ msgstr "Spis wszystkich audiobooków" - -#~ msgid "Latest MP3 audiobooks" -#~ msgstr "Ostatnio dodane audiobooki w formacie MP3" - -#~ msgid "Latest Ogg Vorbis audiobooks" -#~ msgstr "Ostatnio dodane audiobooki w formacie Ogg Vorbis" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." -#~ msgstr "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." - -#~ msgid "See also" -#~ msgstr "Zobacz też" - -#~ msgid "Theme" -#~ msgstr "Motyw" - -#~ msgid "in work " -#~ msgstr "w utworze" - -#~ msgid "This work is licensed under:" -#~ msgstr "Utwór jest udostÄpniony na licencji:" - -#~ msgid "" -#~ "This work isn't covered by copyright and is part of the\n" -#~ " public domain, which means it can be freely used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" -#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" -#~ " 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 <a " -#~ "href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie " -#~ "autorstwa-Na tych samych warunkach 3.0</a>." - -#~ msgid "Text prepared based on:" -#~ msgstr "Tekst opracowany na podstawie:" - -#~ msgid "Edited and annotated by:" -#~ msgstr "Opracowanie redakcyjne i przypisy:" - -#~ msgid "Listing of all works" -#~ msgstr "Spis wszystkich utworów" - -#~ msgid "Table of Content" -#~ msgstr "Spis treÅci" - -#~ msgid "â top â" -#~ msgstr "â góra â" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "WrzuÄ lekturÄ na póÅkÄ!" - -#~ msgid "Create new shelf" -#~ msgstr "Utwórz nowÄ póÅkÄ" - -#~ 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." - -#~ msgid "Put on the shelf!" -#~ msgstr "WrzuÄ na póÅkÄ" - -#~ msgid "Epoch" -#~ msgstr "Epoka" - -#~ msgid "Kind" -#~ msgstr "Rodzaj" - -#~ msgid "Genre" -#~ msgstr "Gatunek" - -#~ msgid "Read online" -#~ msgstr "Czytaj online" - -#~ msgid "Download" -#~ msgstr "Pobierz" - -#~ msgid "to print" -#~ msgstr "do druku" - -#~ msgid "for an e-book reader" -#~ msgstr "na czytnik e-booków" - -#~ msgid "for Kindle" -#~ msgstr "na Kindle" - -#~ msgid "for advanced usage" -#~ msgstr "do zadaÅ specjalnych" - -#~ msgid "Listen" -#~ msgstr "SÅuchaj" - -#~ msgid "Table of contents" -#~ msgstr "Spis treÅci" - -#~ msgid "Themes" -#~ msgstr "Motywy" - -#~ msgid "Edit. note" -#~ msgstr "Nota red." - -#~ msgid "Infobox" -#~ msgstr "Informacje" - -#~ msgid "Book's page" -#~ msgstr "Strona utworu" - -#~ msgid "for a reader" -#~ msgstr "na czytnik" - -#~ msgid "Download a custom PDF" -#~ msgstr "Stwórz wÅasny plik PDF" - -#~ msgid "Motifs and themes" -#~ msgstr "Motywy i tematy" - -#~ msgid "See" -#~ msgstr "Zobacz" - -#~ msgid "Source" -#~ msgstr "ŹródÅo" - -#~ msgid "of the book" -#~ msgstr "utworu" - -#~ msgid "Source XML file" -#~ msgstr "ŹródÅowy plik XML" - -#~ msgid "Book on" -#~ msgstr "Utwór na" - -#~ msgid "Editor's Platform" -#~ msgstr "Platformie Redakcyjnej" - -#~ msgid "Book description on Lektury.Gazeta.pl" -#~ msgstr "Opis lektury w Lektury.Gazeta.pl" - -#~ msgid "Book description on Wikipedia" -#~ msgstr "Opis lektury w Wikipedii" - -#~ msgid "Mix this book" -#~ msgstr "Miksuj treÅÄ utworu" - -#~ msgid "Download all audiobooks for this book" -#~ msgstr "Pobierz wszystkie audiobooki tego utworu" - -#~ msgid "Catalogue" -#~ msgstr "Katalog" - -#~ msgid "Authors" -#~ msgstr "Autorzy" - -#~ msgid "Kinds" -#~ msgstr "Rodzaje" - -#~ msgid "Genres" -#~ msgstr "Gatunki" - -#~ msgid "Epochs" -#~ msgstr "Epoki" - -#~ msgid "Themes and topics" -#~ msgstr "Motywy i tematy" - -#~ msgid "Listing of all DAISY files" -#~ msgstr "Spis wszystkich plików DAISY" - -#~ msgid "Latest DAISY audiobooks" -#~ 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Å." -#~ 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Å." - -#~ 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:" - -#~ msgid "Shelves containing fragment" -#~ msgstr "PóÅki zawierajÄ ce fragment" - -#~ 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." - -#~ msgid "Save all shelves" -#~ msgstr "Zapisz póÅki" - -#~ msgid "Expand fragment" -#~ msgstr "RozwiÅ fragment" - -#~ msgid "Hide fragment" -#~ msgstr "ZwiÅ fragment" - -#~ msgid "See full category" -#~ msgstr "Zobacz caÅÄ kategoriÄ" - -#~ msgid "All books" -#~ msgstr "Wszystkie utwory" - -#~ msgid "Audiobooks" -#~ msgstr "Audiobooki" - -#~ msgid "DAISY" -#~ msgstr "DAISY" - -#~ msgid "Work is licensed under " -#~ msgstr "Utwór jest udostÄpniony na licencji" - -#~ msgid "Based on" -#~ msgstr "Na podstawie" - -#~ msgid "Details" -#~ msgstr "O utworze" - -#~ msgid "Author" -#~ msgstr "Autor" - -#~ msgid "Other resources" -#~ msgstr "W innych miejscach" - -#~ msgid "Source of the image" -#~ msgstr "ŹródÅo obrazu" - -#~ msgid "Image on the Editor's Platform" -#~ msgstr "Obraz na Platformie Redakcyjnej" - -#~ msgid "View XML source" -#~ msgstr "ŹródÅowy plik XML" - -#~ msgid "Work's themes " -#~ msgstr "Motywy w utworze" - -#~ msgid "Listing of all pictures" -#~ msgstr "Spis wszystkich obrazów" - -#~ msgid "Download as" -#~ msgstr "Pobierz jako" - -#~ msgid "Artist" -#~ msgstr "Czyta" - -#~ msgid "Director" -#~ msgstr "Reżyseruje" - -#~ msgid "Audiobooks were prepared as a part of the projects:" -#~ msgstr "Audiobooki przygotowane w ramach projektów:" - -#~ msgid "%(cs)s, funded by %(fb)s" -#~ msgstr "%(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." - -#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." -#~ msgstr "Audiobooki przygotowane w ramach projektu %(cs)s." - -#~ msgid "Did you mean" -#~ msgstr "Czy chodziÅo Ci o" - -#~ msgid "Results by authors" -#~ msgstr "Znalezieni autorzy" - -#~ msgid "Results by title" -#~ msgstr "Znalezione w tytuÅach" - -#~ msgid "Results in text" -#~ msgstr "Znalezione w treÅci" - -#~ msgid "Other results" -#~ msgstr "Inne wyniki" - -#~ msgid "Sorry! Search cirteria did not match any resources." -#~ msgstr "" -#~ "Przepraszamy! Brak wyników speÅniajÄ cych kryteria podane w zapytaniu." - -#~ msgid "" -#~ "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." - -#~ msgid "Sorry! Search query must have at least two characters." -#~ msgstr "Przepraszamy! Zapytanie musi zawieraÄ co najmniej dwa znaki." - -#~ msgid "in Lektury.Gazeta.pl" -#~ msgstr "w serwisie Lektury.Gazeta.pl" - -#~ msgid "in Wikipedia" -#~ msgstr "w Wikipedii" - -#~ msgid "Your shelves with books" -#~ msgstr "Twoje póÅki z lekturami" - -#~ msgid "remove" -#~ msgstr "usuÅ" - -#~ 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." - -#~ msgid "Create shelf" -#~ msgstr "Utwórz póÅkÄ" - -#~ msgid "author" -#~ msgstr "autor" - -#~ msgid "Hand-outs for teachers" -#~ msgstr "MateriaÅy pomocnicze dla nauczycieli" - -#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" -#~ msgstr "Przeczytaj omówienia utworów autora w serwisie Lektury.Gazeta.pl" - -#~ msgid "Read article about this author on Wikipedia" -#~ msgstr "Przeczytaj artykuÅ o autorze w Wikipedii" - -#~ msgid "This author's works are copyrighted." -#~ msgstr "DzieÅa tego autora objÄte sÄ prawem autorskim." - -#~ msgid "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries can't publish this author's works." -#~ msgstr "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Dowiedz " -#~ "siÄ</a>, dlaczego biblioteki internetowe nie mogÄ udostÄpniaÄ dzieÅ tego " -#~ "autora." - -#~ msgid "" -#~ "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 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 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 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 "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries can't publish this work." -#~ msgstr "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Dowiedz " -#~ "siÄ</a>, dlaczego biblioteki internetowe nie mogÄ udostÄpniaÄ tego dzieÅa." - -#~ msgid "This work is copyrighted." -#~ msgstr "To dzieÅo objÄte jest prawem autorskim." - -#, fuzzy -#~ msgid "for advanced usege" -#~ msgstr "zaawansowane" - -#~ msgid "Login to Wolne Lektury" -#~ msgstr "Zaloguj siÄ do Wolnych Lektur" - -#~ msgid "Login" -#~ msgstr "Zaloguj siÄ" - -#~ msgid "Mobile app" -#~ msgstr "Aplikacja mobilna" - -#~ msgid "See description" -#~ msgstr "Zobacz opis" - -#~ msgid "of the book " -#~ msgstr "utworu" - -#~ msgid "" -#~ "Internet Explorer cannot display this site properly. Click here to read " -#~ "more..." -#~ msgstr "" -#~ "Internet Explorer nie potrafi poprawnie wyÅwietliÄ tej strony. Kliknij " -#~ "tutaj, aby dowiedzieÄ siÄ wiÄcej..." - -#~ msgid "Your shelves" -#~ msgstr "Twoje póÅki" - -#~ msgid "Didn't find a book? Make a suggestion." -#~ msgstr "Nie znalazÅeÅ utworu na stronie? ZgÅoÅ sugestiÄ." - -#~ msgid "Register on" -#~ msgstr "Zarejestruj siÄ w" - -#~ msgid "or" -#~ msgstr "lub" - -#~ msgid "return to main page" -#~ msgstr "wrÃ³Ä do strony gÅównej" - -#~ msgid "Listing of all audiobooks on WolneLektury.pl" -#~ msgstr "Spis wszystkich audiobooków w WolneLektury.pl" - -#~ msgid "on WolneLektury.pl" -#~ msgstr "w WolneLektury.pl" - -#~ msgid "Put a book" -#~ msgstr "WrzuÄ lekturÄ" - -#~ msgid "on the shelf!" -#~ msgstr "na póÅkÄ!" - -#~ msgid "and printing using" -#~ msgstr "i drukowania przy pomocy" - -#~ msgid "Download EPUB" -#~ msgstr "Pobierz plik EPUB" - -#~ msgid "on mobile devices" -#~ msgstr "na urzÄ dzeniach mobilnych" - -#~ msgid "Download TXT" -#~ msgstr "Pobierz plik TXT" - -#~ msgid "on small displays, for example mobile phones" -#~ msgstr "na maÅych ekranach, np. na komórce" - -#~ msgid "Download ODT" -#~ msgstr "Pobierz plik ODT" - -#~ msgid "and editing using" -#~ msgstr "i edytowania przy pomocy" - -#~ msgid "on" -#~ msgstr "w" - -#~ msgid "Listing of all works on WolneLektury.pl" -#~ msgstr "Spis wszystkich utworów w WolneLektury.pl" - -#~ msgid "audiobooks" -#~ msgstr "audiobooki" - -#~ msgid "Jump to" -#~ msgstr "Na skróty" - -#~ msgid "Categories" -#~ msgstr "Utwór w kategoriach" - -#~ msgid "Listing of all DAISY files on WolneLektury.pl" -#~ msgstr "Spis wszystkich plików DAISY w WolneLektury.pl" - -#~ msgid "Show full category" -#~ msgstr "Zobacz caÅÄ kategoriÄ" - -#~ msgid "Hide" -#~ msgstr "ZwiÅ" - -#~ msgid "" -#~ "\n" -#~ "%(c)s book from <a href='http://domenapubliczna.org'>public domain</a> or " -#~ "under\n" -#~ "a <a href='http://creativecommons.org/licenses/by-sa/3.0/deed.pl'>free " -#~ "license</a>.\n" -#~ msgid_plural "" -#~ "\n" -#~ "%(c)s books from <a href='http://domenapubliczna.org'>public domain</a> " -#~ "or under\n" -#~ "a <a href='http://creativecommons.org/licenses/by-sa/3.0/deed.pl'>free " -#~ "license</a>.\n" -#~ msgstr[0] "" -#~ "\n" -#~ "%(c)s lektura z <a href='http://domenapubliczna.org'>domeny publicznej</" -#~ "a>\n" -#~ "lub na <a href='http://creativecommons.org/licenses/by-sa/3.0/deed." -#~ "pl'>wolnej licencji</a>.\n" -#~ msgstr[1] "" -#~ "\n" -#~ "%(c)s lektury z <a href='http://domenapubliczna.org'>domeny publicznej</" -#~ "a>\n" -#~ "i na <a href='http://creativecommons.org/licenses/by-sa/3.0/deed." -#~ "pl'>wolnej licencji</a>.\n" -#~ msgstr[2] "" -#~ "\n" -#~ "%(c)s lektur z <a href='http://domenapubliczna.org'>domeny publicznej</" -#~ "a>\n" -#~ "i na <a href='http://creativecommons.org/licenses/by-sa/3.0/deed." -#~ "pl'>wolnej licencji</a>.\n" - -#~ msgid "Browse books by categories" -#~ msgstr "PrzeglÄ daj lektury wedÅug wybranych kategorii" - -#~ msgid "Books for every school level" -#~ msgstr "Lektury na każdy poziom edukacji" - -#~ msgid "primary school" -#~ msgstr "szkoÅa podstawowa" - -#~ msgid "gymnasium" -#~ msgstr "gimnazjum" - -#~ msgid "high school" -#~ msgstr "szkoÅa Årednia" - -#~ msgid "delete" -#~ msgstr "usuÅ" - -#~ 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." - -#~ msgid "You need to " -#~ msgstr "Aby zarzÄ dzaÄ swoimi póÅkami, musisz siÄ" - -#~ msgid "sign in" -#~ msgstr "zalogowaÄ" - -#~ msgid "to manage your shelves." -#~ msgstr "." - -#~ 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Ä:" - -#~ msgid "Insert this element in place where you want display the widget" -#~ msgstr "UmieÅÄ ten element w miejscu gdzie chcesz wyÅwietliÄ widżet" - -#~ msgid "Place this element just before closing body tag: </body>" -#~ msgstr "UmieÅÄ ten element tuż przed zamkniÄciem taga body: </body>" - -#~ 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." - -#~ msgid "Themes groups" -#~ msgstr "Rodziny motywów" - -#~ msgid "See our blog" -#~ msgstr "Zobacz nasz blog" - -#~ msgid "You can help us!" -#~ msgstr "Możesz nam pomóc!" - -#~ msgid "Become a volunteer – an editor, developer or translator." -#~ msgstr "" -#~ "ZostaÅ naszym redaktorem, programistÄ lub tÅumaczem â wolontariuszem." - -#~ msgid "Gain new skills and experience." -#~ msgstr "ZdobÄ dź nowe umiejÄtnoÅci i doÅwiadczenie." - -#~ msgid "Join an open project of creating an innovative online library." -#~ msgstr "" -#~ "Weź udziaÅ w otwartym projekcie i twórz innowacyjnÄ bibliotekÄ " -#~ "internetowÄ ." - -#~ msgid "About us" -#~ msgstr "O projekcie" - -#~ msgid "" -#~ "\n" -#~ "\t\t\tInternet library with school readings âWolne Lekturyâ (<a href=" -#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) is a project made by " -#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " -#~ "which are recommended by Ministry of National Education and are in public " -#~ "domain.\n" -#~ "\t\t\t" -#~ msgstr "" -#~ "\n" -#~ "Biblioteka internetowa z lekturami szkolnymi âWolne Lekturyâ (<a href=" -#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) 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." - -#~ msgid "" -#~ "\n" -#~ "Portions of this page are modifications based on work created and <a href=" -#~ "\"http://code.google.com/policies.html\">shared by Google</a> and used\n" -#~ "according to terms described in the <a href=\"http://creativecommons.org/" -#~ "licenses/by/3.0/\">Creative Commons\n" -#~ "3.0 Attribution License</a>.\n" -#~ msgstr "" -#~ "\n" -#~ "Strona zawiera zmodyfikowane logo Androida, stworzone i <a href=\"http://" -#~ "code.google.com/policies.html\">udostÄpnione przez Google</a>\n" -#~ "na warunkach licencji <a href=\"http://creativecommons.org/licenses/" -#~ "by/3.0/\">Creative Commons 3.0 Uznanie Autorstwa</a>.\n" - -#~ msgid "return to the main page" -#~ msgstr "wrÃ³Ä do strony gÅównej" - -#~ msgid "Searching in" -#~ msgstr "Wyszukiwanie w" - -#~ msgid "More than one result matching the criteria found." -#~ msgstr "Znaleziono wiÄcej niż jeden wynik wyszukiwania." - -#~ msgid "Search in WolneLektury.pl" -#~ msgstr "Wyszukiwanie w WolneLektury.pl" - -#~ msgid "Your shelf is empty" -#~ msgstr "Twoja póÅka jest pusta" - -#~ msgid "" -#~ "You can put a book on a shelf by entering page of the reading and " -#~ "clicking 'Put on the shelf'." -#~ msgstr "" -#~ "Możesz wrzuciÄ ksiÄ Å¼kÄ na póÅkÄ, wchodzÄ c na stronÄ danej lektury i " -#~ "klikajÄ c na przycisk âNa póÅkÄ!â." - -#~ msgid "Choose books' formats which you want to download:" -#~ msgstr "Wybierz formaty ksiÄ Å¼ek, które chcesz pobraÄ:" - -#~ msgid "for listening" -#~ msgstr "do sÅuchania" - -#~ msgid "on favourite MP3 player" -#~ msgstr "w ulubionym odtwarzaczu MP3" - -#~ msgid "Xiph.org Foundation" -#~ msgstr "fundacji Xiph.Org" - -#~ msgid "Updating list of books' formats on the shelf" -#~ msgstr "Uaktualnianie listy formatów ksiÄ Å¼ek na póÅce." - -#~ msgid "cancel" -#~ msgstr "anuluj" - -#~ msgid "Share this shelf" -#~ msgstr "Podziel siÄ tÄ póÅkÄ " - -#~ 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Ä ." - -#~ 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" - -#~ 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" - -#~ 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" - -#~ msgid "Read related study on Lektury.Gazeta.pl" -#~ msgstr "Przeczytaj powiÄ zane omówienia w serwisie Lektury.Gazeta.pl" - -#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" -#~ msgstr "Przeczytaj artykuÅ o epoce %(last_tag)s w Wikipedii" - -#~ msgid "Read article about kind %(last_tag)s on Wikipedia" -#~ msgstr "Przeczytaj artykuÅ o rodzaju %(last_tag)s w Wikipedii" - -#~ msgid "Read article about genre %(last_tag)s on Wikipedia" -#~ msgstr "Przeczytaj artykuÅ o gatunku %(last_tag)s w Wikipedii" - -#~ msgid "Read related article on Wikipedia" -#~ msgstr "Przeczytaj powiÄ zany artykuÅ w Wikipedii" - -#~ msgid "Delete" -#~ msgstr "UsuÅ" - -#~ msgid "Hand-outs for teachers on " -#~ msgstr "MateriaÅy pomocnicze dla nauczycieli w " - -#~ msgid "" -#~ "We try our best to elaborate works appended to our library. It is " -#~ "possible only due to support of our volunteers." -#~ msgstr "" -#~ "Utwory wÅÄ czane sukcesywnie do naszej biblioteki staramy siÄ opracowywaÄ " -#~ "jak najdokÅadniej. Jest to możliwe tylko dziÄki wspóÅpracujÄ cym z nami " -#~ "wolontariuszom." - -#~ msgid "" -#~ "We invite people who want to take part in developing Internet school " -#~ "library Wolne Lektury." -#~ msgstr "" -#~ "Zapraszamy wszystkie osoby, które chcÄ wspóÅtworzyÄ szkolnÄ bibliotekÄ " -#~ "internetowÄ Wolne Lektury." - -#~ msgid "Latest audiobooks - all formats" -#~ msgstr "Ostatnio dodane audiobooki - wszystkie formaty" - -#~ msgid "return to list of materials" -#~ msgstr "wrÃ³Ä do listy materiaÅów" - -#~ msgid "Book on project's wiki" -#~ msgstr "Lektura na wiki projektu" - -#~ msgid "daisy" -#~ msgstr "daisy" - -#~ msgid "" -#~ "are professional recordings of literary texts from our repository, " -#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " -#~ "DAISY system." -#~ msgstr "" -#~ "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" - -#~ msgid "Download DAISY" -#~ msgstr "Pobierz plik DAISY" - -#~ msgid "check list of books" -#~ msgstr "zobacz spis utworów" - -#~ msgid "in our repository" -#~ msgstr "w naszym zbiorze" - -#~ msgid "Polish" -#~ msgstr "polski" - -#~ msgid "German" -#~ msgstr "niemiecki" - -#~ msgid "English" -#~ msgstr "angielski" - -#~ msgid "Lithuanian" -#~ msgstr "litewski" - -#~ msgid "French" -#~ msgstr "francuski" - -#~ msgid "Russian" -#~ msgstr "rosyjski" - -#~ msgid "Spanish" -#~ msgstr "hiszpaÅski" - -#~ msgid "Ukrainian" -#~ msgstr "ukraiÅski" - -#~ msgid "Choose your interface language: " -#~ msgstr "Wybierz jÄzyk interfejsu:" - -#~ msgid "Choose language" -#~ msgstr "Wybierz jÄzyk" - -#~ msgid "Hide description" -#~ msgstr "ZwiÅ opis" diff --git a/apps/wolnelektury_core/locale/ru/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index 55de36919..000000000 Binary files a/apps/wolnelektury_core/locale/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/ru/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index f7eb548b3..000000000 --- a/apps/wolnelektury_core/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,1122 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:43+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" - -#: views.py:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "ÐÑ Ð¾Ð´" - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "ÐаÑегиÑÑÑоваÑÑÑÑ" - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²Ð¾Ð¹Ñи, ÑÑÐ¾Ð±Ñ Ð¿ÑодолжaÑÑ" - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "Ð¡Ð°Ð¹Ñ Ð½Ðµ ÑÑÑеÑÑвÑеÑ" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "Ð¡Ð°Ð¹Ñ Ð½Ðµ найден" - -#: 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 "" -"ÐзвиниÑе! ÐÑÐ¾Ñ ÑÐ°Ð¹Ñ Ð½Ðµ ÑÑÑеÑÑвÑеÑ. ÐÑовеÑÑÑе, пожалÑйÑÑа, набÑали ли Ð²Ñ " -"Ñ Ð¾ÑоÑий адÑÐµÑ Ð¸Ð»Ð¸ зайдиÑе на" - -#: templates/404.html:14 -msgid "main page" -msgstr "главнÑÑ ÑÑÑаниÑÑ" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "ÐÑибка ÑеÑвеÑа" - -#: templates/500.html:19 -msgid "" -"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " -"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " -"error.</p>" -msgstr "" -"<p> The Wolnelektury.pl вÑеменно не ÑабоÑаеÑ. Тем вÑемeнем зайдиÑе на <a " -"href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>СообÑиÑе наÑим<a " -"href='mailto:fundacja@nowoczesnapolska.org.pl'> админиÑÑÑаÑоÑам </a> об " -"оÑибке.</p>" - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "СеÑÐ²Ð¸Ñ Ð½ÐµÐ´Ð¾ÑÑÑпен" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "" -"Ðо Ð¿Ð¾Ð²Ð¾Ð´Ñ ÑÐµÑ Ð½Ð¸ÑеÑкой поддÑежки ÑÐ°Ð¹Ñ The Wolnelektury.pl вÑеменно не " -"ÑабоÑаеÑ." - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "WolneLektury инÑеÑÐ½ÐµÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "ÐоÑледние пÑбликаÑии" - -#: templates/main_page.html:41 -msgid "News" -msgstr "ÐовоÑÑи" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "УÑилиÑÑ" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "СообÑиÑÑ Ð¾Ð± оÑибке или пÑедложении" - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "СкаÑаÑÑ ÐºÐ°Ñалог в PDF ÑоÑмаÑе." - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "ÐиджеÑ" - -#: templates/main_page.html:59 -msgid "Missing a book?" -msgstr "ÐоÑеÑÑли книгÑ?" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "ÐздаÑелÑÑкий план" - -#: templates/main_page.html:71 -msgid "Information" -msgstr "ÐнÑоÑмаÑиÑ" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "ÐÑполÑзÑемÑе изобÑажениÑ:" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "на WolneLektury.pl" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" <a href='%(b)s'>%(c)s</a> free reading you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgid_plural "" -"\n" -" <a href='%(b)s'>%(c)s</a> free readings you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgstr[0] "" -"\n" -" <a href='%(b)s'>%(c)s</a> беÑплаÑное ÑÑение, коÑоÑом ÐÑ " -"<a href='%(r)s'>впÑаве полÑзоваÑÑÑÑ</a>\n" -" " -msgstr[1] "" -"\n" -" <a href='%(b)s'>%(c)s</a> беÑплаÑнÑе ÑÑениÑ, коÑоÑÑми ÐÑ " -"<a href='%(r)s'>впÑаве полÑзоваÑÑÑÑ </a>\n" -" " -msgstr[2] "" -"\n" -" <a href='%(b)s'>%(c)s</a> беÑплаÑнÑÑ ÑÑений, коÑоÑÑми ÐÑ " -"<a href='%(r)s'>впÑаве полÑзоваÑÑÑÑ </a>\n" -" " - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "ÐобÑо пожаловаÑÑ" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "" - -#: templates/superbase.html:74 templates/user.html:14 -#, fuzzy -msgid "Social accounts" -msgstr "или пÑиÑоединиÑеÑÑ Ðº полÑзоваÑелÑм" - -#: templates/superbase.html:77 -msgid "My shelf" -msgstr "СоздаÑÑ Ð¿Ð¾Ð»ÐºÑ" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "ÐдминиÑÑÑаÑиÑ" - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "ÐÑÑ Ð¾Ð´" - -#: templates/superbase.html:111 -msgid "Search" -msgstr "ÐоиÑк" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "ЯзÑковÑе веÑÑии" - -#: templates/superbase.html:165 -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." -"org.pl/\">Modern Poland Foundation</a>.\n" -"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" -"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" -"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" -"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" -"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tWolne Lektury - ÑÑо пÑÐ¾ÐµÐºÑ Ð¿Ð¾Ð´ ÑпÑавлением <a href=\"http://" -"nowoczesnapolska.org.pl/\"> Фонда Ðолодой ÐолÑÑи </a>.\n" -"\t\t\t\t ЦиÑÑовÑе копии ÑоздаÑÑÑÑ <a href=\"http://www.bn.org.pl/\"> " -"ÐаÑÐ¾Ð´Ð½Ð°Ñ ÐиблиоÑека </a>, <a href=\"http://www.bs.katowice.pl/\">СилезÑÐºÐ°Ñ " -"ÐиблиоÑека</a> and <a href=\"http://www.bibliotekaelblaska.pl/" -"\">ÐлÑблонгÑÐºÐ°Ñ ÐиблиоÑека, оÑнованнÑе на ÑеÑÑÑÑÐ°Ñ TNL. \n" -"\t\t\t\tHosting <a href=\"http://eo.pl/\">EO Networks</a>.\n" -"\t\t\t\t" - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" -"\">fundacja@nowoczesnapolska.org.pl</a>\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tФонд Ðолодой ÐолÑÑи, 00-514 ÐаÑÑава, ul. MarszaÅkowska 84/92 lok. " -"125, tel/fax: (22) 621-30-17\n" -" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" -"\">fundacja@nowoczesnapolska.org.pl</a>\n" -"\t\t\t\t" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "ÐакÑойÑе" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "ÐогÑÑзка" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "Ð¡Ð°Ð¹Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑии" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "ÐеÑевод" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "пÑодвинÑÑÑй" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "ÑпÑоÑеннÑй" - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "ÐмпоÑÑ ÐºÐ½Ð¸Ð³Ð¸" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -#, fuzzy -msgid "Sign in using:" -msgstr "ÐÑ Ð¾Ð´" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "или заÑегиÑÑÑиÑоваÑÑÑÑ" - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgstr[0] "" -"\n" -"У Ð½Ð°Ñ %(c)s пÑоизведение опÑбликованное на Wolne Lektury\n" -"ÐомогиÑе нам ÑаÑпÑоÑÑÑаниÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Ð¸ помеÑÑиÑÑ Ð½Ð¾Ð²Ñе беÑплаÑнÑе ÑÑениÑ\n" -"пÑи помоÑи <a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/" -"\">денежного пожеÑÑвованиÑ\n" -"или пеÑевода 1% ваÑего Ð¿Ð¾Ð´Ð¾Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ налога</a>.\n" -msgstr[1] "" -"\n" -"У Ð½Ð°Ñ %(c)s пÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑбликованнÑе на Wolne Lektury\n" -"ÐомогиÑе нам ÑаÑпÑоÑÑÑаниÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Ð¸ помеÑÑиÑÑ Ð½Ð¾Ð²Ñе беÑплаÑнÑе ÑÑениÑ\n" -"пÑи помоÑи <a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/" -"\">денежного пожеÑÑвованиÑ\n" -"или пеÑевода 1% ваÑего Ð¿Ð¾Ð´Ð¾Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ налога</a>.\n" -msgstr[2] "" -"\n" -"У Ð½Ð°Ñ %(c)s пÑоизведений опÑбликованнÑÑ Ð½Ð° Wolne Lektury\n" -"ÐомогиÑе нам ÑаÑпÑоÑÑÑаниÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Ð¸ помеÑÑиÑÑ Ð½Ð¾Ð²Ñе беÑплаÑнÑе ÑÑениÑ\n" -"пÑи помоÑи <a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/" -"\">денежного пожеÑÑвованиÑ\n" -"или пеÑевода 1% ваÑего Ð¿Ð¾Ð´Ð¾Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ налога</a>.\n" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -msgstr "" -"СÑанÑÑе ÑедакÑоÑом Wolne Lektury! УзанйÑе ÑабоÑаем ли\n" -"Ð¼Ñ ÑейÑÐ°Ñ Ð½Ð°Ð´ ÑÑением, коÑоÑoе Ð²Ñ Ð¸ÑиÑе и Ñами подгоÑовÑÑе\n" -"пÑбликаÑиÑ, Ð²Ñ Ð¾Ð´Ñ Ð² плаÑÑоÑÐ¼Ñ ÑедакÑиÑовки." - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "ÐодÑобнее..." - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "" - -#: templates/openid/login.html:27 -#, fuzzy -msgid "Sign In" -msgstr "ÐÑ Ð¾Ð´" - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "пÑедÑдÑÑаÑ" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "ÑледÑÑÑаÑ" - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "ÐвÑоÑизаÑÐ¸Ñ Ð´Ð¾ÑÑÑпа к Wolne Lektury" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" -"strong>." -msgstr "" -"ÐодÑвеÑждение Ð´Ð»Ñ Ð°Ð²ÑоÑизаÑии доÑÑÑпа к Wolne Lektury как полÑзоваÑÐµÐ»Ñ " -"<strong>%(user)s </strong>." - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" - -#: templates/socialaccount/connections.html:36 -#, fuzzy -msgid "Remove" -msgstr "ÑбÑаÑÑ" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "" - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" -"\">sign in</a>." -msgstr "" - -#~ msgid "Listing of all audiobooks" -#~ msgstr "СпиÑок ÑабоÑ" - -#~ msgid "Latest MP3 audiobooks" -#~ msgstr "ÐоÑледние MP3 аÑдиокниги" - -#~ msgid "Latest Ogg Vorbis audiobooks" -#~ msgstr "ÐоÑледние Ogg Vorbis аÑдиокниги" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." -#~ msgstr "" -#~ "ÐÑдиоÑека ÑколÑнÑÑ ÑÑений Фонда Nowoczesna Polska.\n" -#~ ". ÐожеÑе иÑполÑзоваÑÑ ÐµÐµ беÑплаÑно и без огÑаниÑений. \n" -#~ "ÐÑдиокниги запиÑÑваÑÑ Ð¸Ð·Ð²ÐµÑÑнÑе акÑеÑÑ, в Ñом ÑиÑле ÐанÑÑа СÑенка и Ян " -#~ "ÐеÑек." - -#~ msgid "See also" -#~ msgstr "ÐодÑобнее" - -#~ msgid "Theme" -#~ msgstr "ÐоÑив" - -#~ msgid "in work " -#~ msgstr "в ÑÑÑде" - -#~ msgid "This work is licensed under:" -#~ msgstr "РазÑеÑение на ÑабоÑÑ Ñо ÑÑоÑонÑ" - -#~ msgid "" -#~ "This work isn't covered by copyright and is part of the\n" -#~ " public domain, which means it can be freely used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" -#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" -#~ " license." -#~ msgstr "" -#~ "ÐÑÐ¾Ñ ÑÑÑд не заÑиÑен авÑоÑÑким пÑавом и ÑвлÑеÑÑÑ ÑаÑÑÑÑ \n" -#~ "        обÑеÑÑвенного домена, ÑÑо обознаÑаеÑ, нем можно Ñвободно " -#~ "ÑполÑзоваÑÑÑÑ, пÑбликоваÑÑ Ð¸ \n" -#~ "        ÑаÑпÑоÑÑÑанÑÑÑ. ÐÑли еÑÑÑ ÐºÐ°ÐºÐ¸Ðµ-либо дополниÑелÑнÑе маÑеÑиалÑ, " -#~ "заÑиÑеннÑе авÑоÑÑкими пÑавами \n" -#~ "        пÑедоÑÑавленнÑе Ñ ÑÑой ÑабоÑой (напÑимеÑ, анноÑаÑии, моÑÐ¸Ð²Ñ Ð¸ Ñ." -#~ "д.), ÑÑи \n" -#~ "        маÑеÑÐ¸Ð°Ð»Ñ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ð¿Ð¾ лиÑензией \n" -#~ "        <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\"> " -#~ "Creative Commons Attribution-ShareAlike 3.0 </ a>" - -#~ msgid "Text prepared based on:" -#~ msgstr "ТекÑÑ Ð¿Ð¾Ð´Ð³Ð¾Ñовлен на оÑнове:" - -#~ msgid "Edited and annotated by:" -#~ msgstr "Ðод ÑедакÑией и Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑиÑми:" - -#~ msgid "Listing of all works" -#~ msgstr "СпиÑок ÑабоÑ" - -#~ msgid "Table of Content" -#~ msgstr "Ðглавление" - -#~ msgid "â top â" -#~ msgstr "â Ñоп â" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "ÐоÑÑавÑÑе ÐºÐ½Ð¸Ð³Ñ Ð½Ð° полкÑ!" - -#~ msgid "Create new shelf" -#~ msgstr "СоздаÑÑ Ð½Ð¾Ð²ÑÑ Ð¿Ð¾Ð»ÐºÑ" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "У Ð²Ð°Ñ Ð½ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ Ð¿Ð¾Ð»Ð¾Ðº. ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð¾Ð´Ð½Ñ Ð½Ð¸Ð¶Ðµ." - -#~ msgid "Put on the shelf!" -#~ msgstr "ÐоÑÑавÑÑе на полкÑ!" - -#~ msgid "Epoch" -#~ msgstr "ÑÐ¿Ð¾Ñ Ð°" - -#~ msgid "Kind" -#~ msgstr "ÑоÑма" - -#~ msgid "Genre" -#~ msgstr "жанÑ" - -#~ msgid "Read online" -#~ msgstr "ЧиÑаÑÑ Ð¾Ð½Ð»Ð°Ð¹Ð½" - -#~ msgid "Download" -#~ msgstr "СкаÑаÑÑ" - -#~ msgid "to print" -#~ msgstr "пеÑаÑаÑÑ" - -#~ msgid "for an e-book reader" -#~ msgstr "Ð´Ð»Ñ ÑиÑаÑÐµÐ»Ñ ÑлекÑÑонной книги" - -#~ msgid "for Kindle" -#~ msgstr "Ð´Ð»Ñ Ðиндле" - -#~ msgid "for advanced usage" -#~ msgstr "пÑодвинÑÑое иÑполÑзование" - -#~ msgid "Listen" -#~ msgstr "ÐоÑлÑÑайÑе" - -#~ msgid "Table of contents" -#~ msgstr "Ðглавление" - -#~ msgid "Themes" -#~ msgstr "ÐоÑивÑ" - -#~ msgid "Edit. note" -#~ msgstr "ÐзмениÑÑ Ð¿ÑимеÑание" - -#~ msgid "Infobox" -#~ msgstr "ÐнÑобокÑ" - -#~ msgid "Book's page" -#~ msgstr "ÐозÑаÑиÑеÑÑ Ð½Ð° ÑÐ°Ð¹Ñ ÐºÐ½Ð¸Ð³Ð¸" - -#~ msgid "for a reader" -#~ msgstr "Ð´Ð»Ñ ÑиÑаÑелÑ" - -#, fuzzy -#~ msgid "for advanced usege" -#~ msgstr "пÑодвинÑÑÑй" - -#~ msgid "Download a custom PDF" -#~ msgstr "СкаÑаÑÑ PDF" - -#~ msgid "Motifs and themes" -#~ msgstr "ÐоÑÐ¸Ð²Ñ Ð¸ ÑемÑ" - -#~ msgid "See" -#~ msgstr "ÐоÑмоÑÑиÑе" - -#~ msgid "Source" -#~ msgstr "ÐÑÑоÑник" - -#~ msgid "of the book" -#~ msgstr "данной книги" - -#~ msgid "Source XML file" -#~ msgstr "ÐÑÑ Ð¾Ð´Ð½Ñй Ñайл" - -#~ msgid "Book on" -#~ msgstr "Ðнига на" - -#~ msgid "Editor's Platform" -#~ msgstr "ÐлаÑÑоÑма ÑедакÑоÑов" - -#~ msgid "Book description on Lektury.Gazeta.pl" -#~ msgstr "ÐпиÑание книги на Lektury.Gazeta.pl" - -#~ msgid "Book description on Wikipedia" -#~ msgstr "ÐпиÑание книги на Wikipedia" - -#~ msgid "Mix this book" -#~ msgstr "данной книги" - -#~ msgid "Download all audiobooks for this book" -#~ msgstr "СкаÑаÑÑ Ð²Ñе книги Ñ ÑÑой полки" - -#~ msgid "Catalogue" -#~ msgstr "ÐаÑалог" - -#~ msgid "Authors" -#~ msgstr "ÐвÑоÑÑ" - -#~ msgid "Kinds" -#~ msgstr "ФоÑмÑ" - -#~ msgid "Genres" -#~ msgstr "ÐанÑÑ" - -#~ msgid "Epochs" -#~ msgstr "ÐÐ¿Ð¾Ñ Ð¸" - -#~ msgid "Themes and topics" -#~ msgstr "ÐоÑÐ¸Ð²Ñ Ð¸ ÑемÑ" - -#~ msgid "Listing of all DAISY files" -#~ msgstr "СпиÑок вÑÐµÑ DAISY Ñайлов" - -#~ msgid "Latest DAISY audiobooks" -#~ msgstr "ÐоÑледние 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Å." -#~ msgstr "" -#~ "СиÑÑема DAISY ÑÑо извеÑÑнÑй во вÑем миÑе ÑоÑÐ¼Ð°Ñ Ð·Ð°Ð¿Ð¸Ñи книг\n" -#~ ", пÑедназнаÑен Ð´Ð»Ñ Ð»Ñдей Ñ Ð¿Ð»Ð¾Ñ Ð¸Ð¼ зÑением, Ð¿Ð»Ð¾Ñ Ð¾ видÑÑÐ¸Ñ Ð¸ дÑÑÐ³Ð¸Ñ Ð»Ð¸Ñ\n" -#~ ", имеÑÑÐ¸Ñ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ ÑÑением. Ðнигами можно полÑзоваÑÑÑÑ Ð±ÐµÑплаÑно и без " -#~ "огÑаниÑений." - -#~ msgid "" -#~ "The criteria are ambiguous. Please select one of the following options:" -#~ msgstr "" -#~ "ÐÑиÑеÑÐ¸Ñ ÑвлÑÑÑÑÑ Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°ÑнÑми. ÐожалÑйÑÑа, вÑбеÑиÑе один из ÑледÑÑÑÐ¸Ñ " -#~ "ваÑианÑов:" - -#~ msgid "Shelves containing fragment" -#~ msgstr "Ðолки Ñ ÑÑагменÑом" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "У Ð²Ð°Ñ Ð½ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð¹ полки. ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð¾Ð´Ð½Ñ Ð½Ð¸Ð¶Ðµ." - -#~ msgid "Save all shelves" -#~ msgstr "Ð¡Ð¾Ñ ÑаниÑÑ Ð²Ñе полки" - -#~ msgid "Expand fragment" -#~ msgstr "РаÑÑÑнÑÑÑ ÑÑагменÑ" - -#~ msgid "Hide fragment" -#~ msgstr "СкÑÑÑÑ ÑÑагменÑ" - -#~ msgid "See full category" -#~ msgstr "ÐÑÑ ÐºÐ°ÑегоÑиÑ" - -#~ msgid "All books" -#~ msgstr "ÐÑе книги" - -#~ msgid "Audiobooks" -#~ msgstr "ÐÑдиокниги" - -#~ msgid "DAISY" -#~ msgstr "ÐаиÑÑ" - -#~ msgid "Work is licensed under " -#~ msgstr "РазÑеÑение на ÑабоÑÑ Ñо ÑÑоÑонÑ" - -#~ msgid "Based on" -#~ msgstr "ÐÑнованнÑй на" - -#~ msgid "Details" -#~ msgstr "ÐодÑобнее" - -#~ msgid "Author" -#~ msgstr "ÐвÑоÑ" - -#~ msgid "Other resources" -#~ msgstr "дÑÑгие ÑеÑÑÑÑÑ" - -#~ msgid "Source of the image" -#~ msgstr "ÐÑÑоÑник книги" - -#~ msgid "Image on the Editor's Platform" -#~ msgstr "ÐзобÑажение на плаÑÑоÑме ÑедакÑоÑов" - -#~ msgid "View XML source" -#~ msgstr "ÐÑоÑмоÑÑ XML-иÑÑоÑник" - -#~ msgid "Work's themes " -#~ msgstr "Ð¢ÐµÐ¼Ñ ÑÑÑда" - -#~ msgid "Listing of all pictures" -#~ msgstr "СпиÑок ÑабоÑ" - -#~ msgid "Download as" -#~ msgstr "СкаÑаÑÑ" - -#~ msgid "Artist" -#~ msgstr "ÐÑÑиÑÑ" - -#~ msgid "Director" -#~ msgstr "ÑежиÑÑеÑ" - -#~ msgid "Audiobooks were prepared as a part of the projects:" -#~ msgstr "ÐÑдиокниги бÑли подгоÑÐ¾Ð²Ð»ÐµÐ½Ñ Ð² ÑÐ°Ð¼ÐºÐ°Ñ Ð¿ÑоекÑа:" - -#~ msgid "%(cs)s, funded by %(fb)s" -#~ msgstr "%(cs)s, ÑинанÑиÑÑемого %(fb)s" - -#~ msgid "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -#~ msgstr "" -#~ "ÐÑдиокниги бÑли подгоÑÐ¾Ð²Ð»ÐµÐ½Ñ Ð² ÑÐ°Ð¼ÐºÐ°Ñ %(cs)s пÑоекÑa, ÑинанÑиÑÑемого %(fb)" -#~ "s." - -#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." -#~ msgstr "ÐÑдиокниги бÑли подгоÑÐ¾Ð²Ð»ÐµÐ½Ñ Ð² ÑÐ°Ð¼ÐºÐ°Ñ %(cs)s пÑоекÑa." - -#~ msgid "Did you mean" -#~ msgstr "ÐÑ Ð¸Ð¼ÐµÐ»Ð¸ в видÑ" - -#~ msgid "Results by authors" -#~ msgstr "РезÑлÑÑаÑÑ Ð¿Ð¾ авÑоÑам" - -#~ msgid "Results by title" -#~ msgstr "РезÑлÑÑаÑÑ Ð¿Ð¾ заглавиÑм" - -#~ msgid "Results in text" -#~ msgstr "РезÑлÑÑаÑÑ Ð² ÑекÑÑÐ°Ñ " - -#~ msgid "Other results" -#~ msgstr "дÑÑгие ÑеÑÑÑÑÑ" - -#~ msgid "Sorry! Search cirteria did not match any resources." -#~ msgstr "ÐзвиниÑе! ÐÑиÑеÑий поиÑка не ÑооÑвеÑÑÑвÑÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ð¼ ÑеÑÑÑÑам." - -#~ msgid "" -#~ "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 "" -#~ "ÐÑкаÑÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ Ð´Ð²Ð¸Ð³Ð°ÑÐµÐ»Ñ Ð¸ÑполÑзÑÑ ÐºÑиÑеÑии: заглавие, авÑоÑ, Ñема/" -#~ "ÑÑжеÑ, ÑÐ¿Ð¾Ñ Ð°, ÑоÑма и жанÑ.\n" -#~ "\t\tÐока Ð¼Ñ Ð½Ðµ поддеÑживаем поиÑка вÑего ÑекÑÑа." - -#~ msgid "Sorry! Search query must have at least two characters." -#~ msgstr "" -#~ "ÐзвиниÑе! У иÑкаемого вопÑоÑа Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿Ð¾ кÑайней меÑе два ÑвойÑÑва." - -#~ msgid "in Lektury.Gazeta.pl" -#~ msgstr "на Lektury.Gazeta.pl" - -#~ msgid "in Wikipedia" -#~ msgstr "в Ðикипедии" - -#~ msgid "Your shelves with books" -#~ msgstr "ÐаÑи книжнÑе полки" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "У Ð²Ð°Ñ Ð½ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ Ð¿Ð¾Ð»Ð¾Ðº. ÐÑли Ñ Ð¾ÑиÑе, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð¾Ð´Ð½Ñ Ð½Ð¸Ð¶Ðµ." - -#~ msgid "Create shelf" -#~ msgstr "СоздаÑÑ Ð¿Ð¾Ð»ÐºÑ" - -#~ msgid "author" -#~ msgstr "авÑоÑ" - -#~ msgid "Hand-outs for teachers" -#~ msgstr "ХендаÑÑÑ Ð´Ð»Ñ ÑÑиÑелей" - -#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" -#~ msgstr "ЧиÑаÑÑ Ð¾ÑеÑк пÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ авÑоÑа на Lektury.Gazeta.pl" - -#~ msgid "Read article about this author on Wikipedia" -#~ msgstr "ÐÑоÑиÑайÑе ÑÑаÑÑÑ Ð¾Ð± авÑоÑе в Ðикипедии" - -#~ msgid "This author's works are copyrighted." -#~ msgstr "Ðа ÑабоÑÑ ÑÑого авÑоÑа ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð°Ð²ÑоÑÑкое пÑаво." - -#~ msgid "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries can't publish this author's works." -#~ msgstr "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" -#~ "publiczna/'>УзнайÑе</a>, поÑÐµÐ¼Ñ Ð¸Ð½ÑеÑнеÑ-библиоÑеки не могÑÑ Ð¸Ð·Ð´Ð°ÑÑ ÑÐ°Ð±Ð¾Ñ " -#~ "ÑÑого авÑоÑа." - -#~ msgid "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet school library of Wolne Lektury soon." -#~ msgstr "" -#~ "РабоÑÑ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ авÑоÑа Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ Ð² пÑблиÑной облаÑÑи и ÑкоÑо бÑдÑÑ Ð¸Ð·Ð´Ð°Ð½Ñ " -#~ "в ÑколÑной библиоÑеке ÐнÑеÑнеÑа." - -#~ msgid "" -#~ "This author's works will become part of public domain and will be allowed " -#~ "to be published without restrictions in" -#~ msgstr "" -#~ "ТÑÑÐ´Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ авÑоÑа бÑдÑÑ ÑаÑÑÑÑ Ð¿ÑблиÑной облаÑÑи и возможнÑм бÑÐ´ÐµÑ Ð¸Ñ " -#~ "издание без огÑаниÑений на" - -#~ msgid "" -#~ "This work is in public domain and will be published on Internet school " -#~ "library of Wolne Lektury soon." -#~ msgstr "" -#~ "ÐÑÐ¾Ñ ÑÑÑд Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² пÑблиÑной облаÑÑи. ÐÑ ÑкоÑо помеÑÑим его в ÑколÑной " -#~ "библиоÑеке Wolne Lektury." - -#~ msgid "" -#~ "This work will become part of public domain and will be allowed to be " -#~ "published without restrictions in" -#~ msgstr "" -#~ "ÐÑÐ¾Ñ ÑÑÑд бÑÐ´ÐµÑ ÑаÑÑÑÑ Ð¿ÑблиÑной ÑÑеÑÑ. Ðго издание бÑÐ´ÐµÑ ÑазÑеÑено без " -#~ "огÑаниÑений" - -#~ msgid "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries can't publish this work." -#~ msgstr "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" -#~ "publiczna/'>УзнайÑе</a>, поÑÐµÐ¼Ñ Ð¸Ð½ÑеÑнеÑ-библиоÑеки не могÑÑ Ð¸Ð·Ð´Ð°ÑÑ ÑÑого " -#~ "ÑÑÑда." - -#~ msgid "This work is copyrighted." -#~ msgstr "Ðа ÑÑÑ ÑабоÑÑ ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð°Ð²ÑоÑÑкое пÑаво." - -#~ msgid "Login to Wolne Lektury" -#~ msgstr "ÐойÑи на WolneLektury.pl" - -#~ msgid "Login" -#~ msgstr "ÐойÑи" - -#~ msgid "" -#~ "Internet Explorer cannot display this site properly. Click here to read " -#~ "more..." -#~ msgstr "" -#~ "Internet Explorer не Ð¼Ð¾Ð¶ÐµÑ Ñ Ð¾ÑоÑо показаÑÑ ÑайÑа. ЩелкниÑе здеÑÑ, ÑÑÐ¾Ð±Ñ " -#~ "пÑоÑиÑаÑÑ Ð±Ð¾Ð»ÑÑе..." - -#~ msgid "Your shelves" -#~ msgstr "ÐаÑи полки" - -#~ msgid "Register on" -#~ msgstr "РегиÑÑÑаÑÐ¸Ñ Ð½Ð°" - -#~ msgid "or" -#~ msgstr "или" - -#~ msgid "return to main page" -#~ msgstr "возвÑÐ°Ñ Ð½Ð° главнÑÑ ÑÑÑаниÑÑ" - -#, fuzzy -#~ msgid "Listing of all audiobooks on WolneLektury.pl" -#~ msgstr "СпиÑок ÑÐ°Ð±Ð¾Ñ Ð½Ð° WolneLektury.pl" - -#~ msgid "Put a book" -#~ msgstr "ÐоÑÑавÑÑе книгÑ" - -#~ msgid "on the shelf!" -#~ msgstr "на полкÑ" - -#~ msgid "and printing using" -#~ msgstr "и Ð´Ð»Ñ Ð¿ÐµÑаÑки" - -#~ msgid "Download EPUB" -#~ msgstr "СкаÑаÑÑ EPUB" - -#~ msgid "Download TXT" -#~ msgstr "СкаÑаÑÑ TXT" - -#~ msgid "on small displays, for example mobile phones" -#~ msgstr "на маленÑÐºÐ¸Ñ Ð´Ð¸ÑплеÑÑ , напÑ. мобилÑнÑÑ ÑелеÑонов" - -#~ msgid "Download ODT" -#~ msgstr "СкаÑаÑÑ ODT" - -#~ msgid "and editing using" -#~ msgstr "и Ð´Ð»Ñ ÑедакÑиÑованиÑ" - -#~ msgid "Book on project's wiki" -#~ msgstr "Ðнига по пÑоекÑÑ Ð²Ð¸ÐºÐ¸" - -#~ msgid "on" -#~ msgstr "на" - -#~ msgid "See description" -#~ msgstr "ÐоÑмоÑÑиÑе опиÑание" - -#~ msgid "Listing of all works on WolneLektury.pl" -#~ msgstr "СпиÑок ÑÐ°Ð±Ð¾Ñ Ð½Ð° WolneLektury.pl" - -#~ msgid "Jump to" -#~ msgstr "ÐеÑейдиÑе на" - -#~ msgid "Categories" -#~ msgstr "ÐаÑегоÑии" - -#, fuzzy -#~ msgid "Listing of all DAISY files on WolneLektury.pl" -#~ msgstr "СпиÑок ÑÐ°Ð±Ð¾Ñ Ð½Ð° WolneLektury.pl" - -#~ msgid "Show full category" -#~ msgstr "ÐоказаÑÑ Ð²ÑÑ ÐºÐ°ÑегоÑиÑ" - -#~ msgid "Hide" -#~ msgstr "СкÑÑÑÑ" - -#~ msgid "Browse books by categories" -#~ msgstr "ÐÑоÑмаÑÑиваÑÑ ÐºÐ½Ð¸Ð³Ð¸ по каÑегоÑиÑм" - -#~ msgid "delete" -#~ msgstr "ÑдалиÑÑ" - -#~ msgid "" -#~ "Create your own book set. You can share it with friends by sending them " -#~ "link to your shelf." -#~ msgstr "" -#~ "СоздаÑÑ ÑобÑÑвеннÑй Ð½Ð°Ð±Ð¾Ñ ÐºÐ½Ð¸Ð³. ÐÑ Ð¼Ð¾Ð¶ÐµÑе делиÑÑÑÑ Ð¸Ð¼Ð¸ Ñо Ñвоими " -#~ "дÑÑзÑÑми, поÑÑÐ»Ð°Ñ ÑÑÑÐ»ÐºÑ Ð½Ð° ÑÐ²Ð¾Ñ Ð¿Ð¾Ð»ÐºÑ." - -#~ msgid "You need to " -#~ msgstr "Ðам Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾" - -#~ msgid "sign in" -#~ msgstr "ÐойÑи в ÑиÑÑемÑ," - -#~ msgid "to manage your shelves." -#~ msgstr "ÑÑÐ¾Ð±Ñ ÑпÑавлÑÑÑ Ñвоими полками" - -#~ msgid "" -#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." -#~ msgstr "" -#~ "ÐонÑпекÑÑ ÑÑоков и дÑÑгие идеи иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Wolnelektury.pl ÑÑиÑелÑми." - -#~ msgid "" -#~ "are professional recordings of literary texts from our repository, " -#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " -#~ "DAISY system." -#~ msgstr "" -#~ "- ÑÑо пÑоÑеÑÑионалÑнÑе запиÑи лиÑеÑаÑÑÑнÑÑ ÑекÑÑов из наÑего Ñ ÑанилиÑа. " -#~ "Ðни доÑÑÑÐ¿Ð½Ñ Ð¿Ð¾ беÑплаÑÐ½Ð¾Ð¼Ñ ÑазÑеÑÐµÐ½Ð¸Ñ ? в ÑоÑмаÑÐ°Ñ MP3 и Ogg Vorbis, а " -#~ "Ñакже в ÑиÑÑеме DAISY." - -#~ msgid "Themes groups" -#~ msgstr "ТемаÑиÑеÑкие гÑÑппÑ" - -#~ msgid "See our blog" -#~ msgstr "ÐоÑмоÑÑиÑе Ð½Ð°Ñ Ð±Ð»Ð¾Ð³" - -#~ msgid "You can help us!" -#~ msgstr "ÐÑ Ð¼Ð¾Ð¶ÐµÑе нам помоÑÑ!" - -#~ msgid "" -#~ "We try our best to elaborate works appended to our library. It is " -#~ "possible only due to support of our volunteers." -#~ msgstr "" -#~ "ÐÑ ÑÑÑемимÑÑ ÑÑаÑелÑно ÑазÑабаÑÑваÑÑ ÑÑÑдÑ, пÑибавлÑемÑе в наÑÑ " -#~ "библиоÑекÑ. ÐÑо ÑвлÑеÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñм ÑолÑко благодаÑÑ Ð¿Ð¾Ð¼Ð¾Ñи наÑÐ¸Ñ " -#~ "волонÑеÑов." - -#~ msgid "" -#~ "We invite people who want to take part in developing Internet school " -#~ "library Wolne Lektury." -#~ msgstr "" -#~ "ÐÑ Ð¿ÑиглаÑаем лÑдей, коÑоÑÑе Ñ Ð¾ÑÑÑ Ð¿ÑинÑÑÑ ÑÑаÑÑие в ÑазвиÑии ÑколÑной " -#~ "библиоÑеки ÐнÑеÑнеÑа Wolne Lektury." - -#~ msgid "About us" -#~ msgstr "РнаÑ" - -#~ msgid "" -#~ "\n" -#~ "\t\t\tInternet library with school readings âWolne Lekturyâ (<a href=" -#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) is a project made by " -#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " -#~ "which are recommended by Ministry of National Education and are in public " -#~ "domain.\n" -#~ "\t\t\t" -#~ msgstr "" -#~ "\n" -#~ "\t\t\tÐнÑеÑнеÑ-библиоÑека Ñо ÑколÑнÑми ÑÑениÑми âWolne Lekturyâ (<a href=" -#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) ÑвлÑеÑÑÑ Ð¿ÑоекÑом, " -#~ "ÑозданнÑм Ñондом СовÑеменной ÐолÑÑи. ÐейÑÑвÑÑ Ñ 2007 г., библиоÑека " -#~ "Ð´ÐµÐ»Ð°ÐµÑ Ð´Ð¾ÑÑÑпнÑми ÑколÑнÑе ÑÑÐµÐ½Ð¸Ñ Ð¿ÑблиÑного домена, пÑедлагаемÑе " -#~ "миниÑÑÑом наÑодного обÑазованиÑ. \n" -#~ "\t\t\t" - -#~ msgid "Searching in" -#~ msgstr "ÐÑкаÑÑ Ð²" - -#~ msgid "More than one result matching the criteria found." -#~ msgstr "ÐолÑÑе Ñем один кÑиÑеÑий ÑооÑвеÑÑÑвÑÐµÑ Ð½Ð°Ð¹Ð´ÐµÐ½Ð½Ñм кÑиÑеÑиÑм." - -#~ msgid "Search in WolneLektury.pl" -#~ msgstr "ÐÑкаÑÑ Ð² WolneLektury.pl" - -#~ msgid "Your shelf is empty" -#~ msgstr "У ÑÐµÐ±Ñ Ð¿ÑÑÑÐ°Ñ Ð¿Ð¾Ð»ÐºÐ°" - -#~ msgid "" -#~ "You can put a book on a shelf by entering page of the reading and " -#~ "clicking 'Put on the shelf'." -#~ msgstr "" -#~ "ÐÑ Ð¼Ð¾Ð¶ÐµÑе поÑÑавиÑÑ ÐºÐ½Ð¸Ð³Ñ Ð½Ð° полкÑ, Ð·Ð°Ñ Ð¾Ð´Ñ Ð½Ð° ÑÐ°Ð¹Ñ Ð¿ÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ " -#~ "ÑелкнÑв 'ÐоÑÑавиÑÑ Ð½Ð° полкÑ'." - -#~ msgid "Choose books' formats which you want to download:" -#~ msgstr "ÐÑбÑаÑÑ ÑоÑÐ¼Ð°Ñ ÐºÐ½Ð¸Ð³, коÑоÑÑе Ð²Ñ Ñ Ð¾ÑиÑе ÑкаÑаÑÑ:" - -#~ msgid "for listening" -#~ msgstr "Ð´Ð»Ñ ÑлÑÑаниÑ" - -#~ msgid "on favourite MP3 player" -#~ msgstr "на лÑбимом MP3-плейеÑе" - -#~ msgid "Xiph.org Foundation" -#~ msgstr "Фонд Xiph.org" - -#~ msgid "Updating list of books' formats on the shelf" -#~ msgstr "ÐбновиÑÑ ÑпиÑок ÑоÑмаÑов книг на полке" - -#~ msgid "cancel" -#~ msgstr "ÐÑмениÑÑ" - -#~ msgid "Share this shelf" -#~ msgstr "ÐелиÑÑ ÑÑÑ Ð¿Ð¾Ð»ÐºÑ" - -#~ msgid "" -#~ "Copy this link and share it with other people to let them see your shelf." -#~ msgstr "" -#~ "ÐопиÑоваÑÑ ÑÑÑ ÑÑÑÐ»ÐºÑ Ð¸ делиÑÑ Ñ Ð´ÑÑгими полÑзоваÑелÑми, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ могли " -#~ "ÑвидеÑÑ Ð²Ð°ÑÑ Ð¿Ð¾Ð»ÐºÑ." - -#, fuzzy -#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "ЧиÑаÑÑ Ð¾ÑеÑк пÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ авÑоÑа на Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "ЧиÑаÑÑ Ð¾ÑеÑк пÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ авÑоÑа на Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "ЧиÑаÑÑ Ð¾ÑеÑк пÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ авÑоÑа на Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read related study on Lektury.Gazeta.pl" -#~ msgstr "ЧиÑаÑÑ Ð¾ÑеÑк пÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ авÑоÑа на Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" -#~ msgstr "ÐÑоÑиÑайÑе ÑÑаÑÑÑ Ð¾Ð± авÑоÑе в Ðикипедии" - -#, fuzzy -#~ msgid "Read article about kind %(last_tag)s on Wikipedia" -#~ msgstr "ÐÑоÑиÑайÑе ÑÑаÑÑÑ Ð¾Ð± авÑоÑе в Ðикипедии" - -#, fuzzy -#~ msgid "Read article about genre %(last_tag)s on Wikipedia" -#~ msgstr "ÐÑоÑиÑайÑе ÑÑаÑÑÑ Ð¾Ð± авÑоÑе в Ðикипедии" - -#, fuzzy -#~ msgid "Read related article on Wikipedia" -#~ msgstr "ÐÑоÑиÑайÑе ÑÑаÑÑÑ Ð¾Ð± авÑоÑе в Ðикипедии" - -#~ msgid "Delete" -#~ msgstr "УдалиÑÑ" - -#~ msgid "return to the main page" -#~ msgstr "возвÑаÑиÑеÑÑ Ð½Ð° главнÑÑ ÑÑÑаниÑÑ" - -#~ msgid "return to list of materials" -#~ msgstr "возвÑаÑиÑеÑÑ Ðº ÑпиÑÐºÑ Ð¼Ð°ÑеÑиалов" - -#~ msgid "Hand-outs for teachers on " -#~ msgstr "Ñ ÐµÐ½Ð´Ð°ÑÑÑ Ð´Ð»Ñ ÑÑиÑелей на" - -#, fuzzy -#~ msgid "" -#~ "Download TXT - for reading on small displays, for example mobile phones" -#~ msgstr "на маленÑÐºÐ¸Ñ Ð´Ð¸ÑплеÑÑ , напÑ. мобилÑнÑÑ ÑелеÑонов" - -#~ msgid "Download MP3" -#~ msgstr "ÑкаÑаÑÑ MP3" - -#~ msgid "Download Ogg Vorbis" -#~ msgstr "СкаÑаÑÑ Ogg Vorbis" - -#~ msgid "Download DAISY" -#~ msgstr "СкаÑаÑÑ DAISY" - -#~ msgid "check list of books" -#~ msgstr "пÑовеÑиÑÑ ÑпиÑок книг" - -#~ msgid "in our repository" -#~ msgstr "в наÑем Ñ ÑанилиÑе" - -#~ msgid "Polish" -#~ msgstr "полÑÑкий" - -#~ msgid "German" -#~ msgstr "немеÑкий" - -#~ msgid "English" -#~ msgstr "английÑкий" - -#~ msgid "Lithuanian" -#~ msgstr "лиÑовÑкий" - -#~ msgid "French" -#~ msgstr "ÑÑанÑÑзÑкий" - -#~ msgid "Russian" -#~ msgstr "ÑÑÑÑкий" - -#~ msgid "Spanish" -#~ msgstr "иÑпанÑкий" - -#~ msgid "Ukrainian" -#~ msgstr "ÑкÑаинÑкий" - -#~ msgid "Choose your interface language: " -#~ msgstr "ÐÑбеÑиÑе ÑзÑк инÑеÑÑейÑа" - -#~ msgid "Choose language" -#~ msgstr "ÐÑбеÑиÑе ÑзÑк" - -#~ msgid "Hide description" -#~ msgstr "СкÑÑÑÑ Ð¾Ð¿Ð¸Ñание" - -#~ msgid "Read study of epoch" -#~ msgstr "ÐÑоÑиÑайÑе оÑеÑк ÑÐ¿Ð¾Ñ Ð¸" - -#~ msgid "Read article about epoch" -#~ msgstr "ÐÑоÑиÑайÑе ÑÑаÑÑÑ Ð¾Ð± ÑÐ¿Ð¾Ñ Ðµ" diff --git a/apps/wolnelektury_core/locale/uk/LC_MESSAGES/django.mo b/apps/wolnelektury_core/locale/uk/LC_MESSAGES/django.mo deleted file mode 100644 index a49a72656..000000000 Binary files a/apps/wolnelektury_core/locale/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/apps/wolnelektury_core/locale/uk/LC_MESSAGES/django.po b/apps/wolnelektury_core/locale/uk/LC_MESSAGES/django.po deleted file mode 100644 index e6f50aaff..000000000 --- a/apps/wolnelektury_core/locale/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,1092 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 10:43+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" - -#: views.py:34 views.py:35 templates/superbase.html:85 -msgid "Sign in" -msgstr "УвÑйÑи" - -#: views.py:41 views.py:62 -#, python-format -msgid "Already logged in as user %(user)s" -msgstr "Ðи вже ÑвÑйÑли Ñк коÑиÑÑÑÐ²Ð°Ñ %(user)s" - -#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 -msgid "Register" -msgstr "ÐаÑеÑÑÑÑÑваÑиÑÑ" - -#: views.py:77 -msgid "You have to be logged in to continue" -msgstr "Щоб пÑодовжиÑи, ÑвÑйдÑÑÑ Ð² ÑвÑй акаÑнÑ." - -#: templates/404.html:5 -msgid "Page does not exist" -msgstr "СÑоÑÑнка не ÑÑнÑÑ" - -#: templates/404.html:10 -msgid "Page not found" -msgstr "СÑоÑÑÐ½ÐºÑ Ð½Ðµ знайдено" - -#: 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 "" -"Ðа жалÑ, ÑÑ ÑÑоÑÑнка не ÑÑнÑÑ. ÐÑÐ´Ñ Ð»Ð°Ñка, пеÑевÑÑÑе пÑавилÑнÑÑÑÑ Ð°Ð´ÑеÑи або " -"пеÑейдÑÑÑ Ð½Ð°" - -#: templates/404.html:14 -msgid "main page" -msgstr "головна ÑÑоÑÑнка" - -#: templates/500.html:6 templates/500.html.py:17 -msgid "Server error" -msgstr "Ðомилка ÑеÑвеÑа" - -#: templates/500.html:19 -msgid "" -"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " -"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " -"error.</p>" -msgstr "" -"<p>СÑоÑÑнка Wolnelektury.pl ÑимÑаÑово недоÑÑÑпна. РмÑжÑаÑÑ, ÑвÑйдÑÑÑ Ð½Ð° Ð½Ð°Ñ " -"<a href='http://nowoczesnapolska.org.pl'>блог</a>.</p> <p>ÐовÑдомÑе наÑÐ¸Ñ <a " -"href='mailto:fundacja@nowoczesnapolska.org.pl'>адмÑнÑÑÑÑаÑоÑÑв</a> пÑо " -"помилкÑ.</p>" - -#: templates/503.html:6 templates/503.html.py:17 -msgid "Service unavailable" -msgstr "ÐоÑлÑга недоÑÑÑпна" - -#: templates/503.html:19 -msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." -msgstr "" -"У зв'ÑÐ·ÐºÑ Ð· ÑÐµÑ Ð½ÑÑними ÑобоÑами ÑеÑвÑÑ Wolnelektury.pl ÑимÑаÑово недоÑÑÑпний." - -#: templates/main_page.html:6 templates/main_page.html.py:7 -msgid "Wolne Lektury internet library" -msgstr "ÐлекÑÑонна бÑблÑоÑека WolneLektury.pl" - -#: templates/main_page.html:23 -msgid "What's new?" -msgstr "Що нового?" - -#: templates/main_page.html:31 -msgid "Recent publications" -msgstr "оÑÑÐ°Ð½Ð½Ñ Ð¿ÑблÑкаÑÑÑ" - -#: templates/main_page.html:41 -msgid "News" -msgstr "ÐовоÑÑÑ" - -#: templates/main_page.html:50 -msgid "Utilities" -msgstr "ÑÑилÑÑи" - -#: templates/main_page.html:53 -msgid "Report a bug or suggestion" -msgstr "ÐовÑдомиÑи пÑо Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑ Ð°Ð±Ð¾ надÑÑлаÑи ÑÐ²Ð¾Ñ Ð¿ÑопозиÑÑÑ" - -#: templates/main_page.html:56 -msgid "Download the catalogue in PDF format." -msgstr "ÐаванÑажиÑи каÑалог Ñ ÑоÑмаÑÑ PDF." - -#: templates/main_page.html:58 -msgid "Widget" -msgstr "ÐÑджеÑ" - -#: templates/main_page.html:59 -msgid "Missing a book?" -msgstr "Ðе знайÑли книжки?" - -#: templates/main_page.html:60 templates/publish_plan.html:4 -#: templates/publish_plan.html.py:8 -msgid "Publishing plan" -msgstr "Ðлан пÑблÑкаÑÑÑ" - -#: templates/main_page.html:71 -msgid "Information" -msgstr "ÑнÑоÑмаÑÑÑ" - -#: templates/main_page.html:73 -msgid "Privacy policy" -msgstr "" - -#: templates/main_page.html:98 -msgid "Image used:" -msgstr "ÐикоÑиÑÑано гÑаÑÑкÑ:" - -#: templates/superbase.html:18 -msgid "Wolne Lektury" -msgstr "Wolne Lektury" - -#: templates/superbase.html:55 -#, python-format -msgid "" -"\n" -" <a href='%(b)s'>%(c)s</a> free reading you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgid_plural "" -"\n" -" <a href='%(b)s'>%(c)s</a> free readings you have <a " -"href='%(r)s'>right to</a>\n" -" " -msgstr[0] "" -"\n" -" <a href='%(b)s'>%(c)s</a> безкоÑÑовний ÑекÑÑ, до Ñкого " -"маÑÑ <a href='%(r)s'>пÑаво</a>\n" -" " -msgstr[1] "" -"\n" -" <a href='%(b)s'>%(c)s</a> безкоÑÑÐ¾Ð²Ð½Ñ ÑекÑÑи, до ÑÐºÐ¸Ñ " -"маÑÑ <a href='%(r)s'>пÑаво</a>\n" -" " -msgstr[2] "" -"\n" -" <a href='%(b)s'>%(c)s</a> безкоÑÑÐ¾Ð²Ð½Ñ ÑекÑÑи, до ÑÐºÐ¸Ñ " -"маÑÑ <a href='%(r)s'>пÑаво</a>\n" -" " - -#: templates/superbase.html:66 -msgid "Welcome" -msgstr "ÐаÑкаво пÑоÑимо" - -#: templates/superbase.html:72 templates/user.html:12 -msgid "Password" -msgstr "ÐаÑолÑ" - -#: templates/superbase.html:73 templates/user.html:13 -msgid "E-mail" -msgstr "ÐлекÑÑонна адÑеÑа" - -#: templates/superbase.html:74 templates/user.html:14 -msgid "Social accounts" -msgstr "ÐблÑÐºÐ¾Ð²Ñ Ð·Ð°Ð¿Ð¸Ñи в ÑоÑÑалÑÐ½Ð¸Ñ Ð¼ÐµÑÐµÐ¶Ð°Ñ " - -#: templates/superbase.html:77 -msgid "My shelf" -msgstr "ÐÐ¾Ñ Ð¿Ð¾Ð»Ð¸ÑÑ" - -#: templates/superbase.html:79 -msgid "Administration" -msgstr "ÐдмÑнÑÑÑÑаÑÑÑ" - -#: templates/superbase.html:81 -msgid "Logout" -msgstr "ÐийÑи " - -#: templates/superbase.html:111 -msgid "Search" -msgstr "ÐоÑÑк" - -#: templates/superbase.html:131 -msgid "Language versions" -msgstr "ÐÐ¾Ð²Ð½Ñ Ð²ÐµÑÑÑÑ" - -#: templates/superbase.html:165 -msgid "" -"\n" -"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." -"org.pl/\">Modern Poland Foundation</a>.\n" -"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" -"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" -"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" -"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" -"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tWolne Lektury Ñе пÑÐ¾ÐµÐºÑ <a href=\"http://nowoczesnapolska.org.pl/" -"\">Ð¤Ð¾Ð½Ð´Ñ Ð¡ÑÑаÑна ÐолÑÑа (Fundacja Nowoczesna Polska)</a>.\n" -"\t\t\t\tЦиÑÑÐ¾Ð²Ñ ÑепÑодÑкÑÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ñ <a href=\"http://www.bn.org.pl/" -"\">ÐаÑÑоналÑÐ½Ð¾Ñ ÐÑблÑоÑекоÑ</a>, <a href=\"http://www.bs.katowice.pl/" -"\">СÑлезÑÐºÐ¾Ñ Ð±ÑблÑоÑекоÑ</a> Ñа <a href=\"http://www.bibliotekaelblaska.pl/" -"\">ÐлÑблонзÑÐºÐ¾Ñ Ð±ÑблÑоÑекоÑ</a>, на оÑÐ½Ð¾Ð²Ñ ÑÑ Ð·Ð°ÑобÑв.\n" -"\t\t\t\tХоÑÑинг: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" -"\t\t\t\t" - -#: templates/superbase.html:172 -msgid "" -"\n" -"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " -"lok. 125, tel/fax: (22) 621-30-17\n" -" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" -"\">fundacja@nowoczesnapolska.org.pl</a>\n" -"\t\t\t\t" -msgstr "" -"\n" -"\t\t\t\tFundacja Nowoczesna Polska (Фонд СÑÑаÑна ÐолÑÑа), 00-514 Warszawa, " -"ul. MarszaÅkowska 84/92 lok. 125, Ñел/ÑакÑ: (22) 621-30-17\n" -" eлекÑÑонна поÑÑа: <a href=\"mailto:fundacja@nowoczesnapolska." -"org.pl\">fundacja@nowoczesnapolska.org.pl</a>\n" -"\t\t\t\t" - -#: templates/superbase.html:189 -msgid "Close" -msgstr "ÐакÑиÑи" - -#: templates/superbase.html:191 -msgid "Loading" -msgstr "ÐаванÑажÑÑÑÑÑÑ" - -#: templates/user.html:5 templates/user.html.py:9 -msgid "User" -msgstr "ÐоÑиÑÑÑваÑ" - -#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 -msgid "Site administration" -msgstr "ÐдмÑнÑÑÑÑаÑÑÑ ÑайÑÑ" - -#: templates/admin/base_site.html:9 -msgid "Translations" -msgstr "ÐеÑеклади" - -#: templates/admin/catalogue/book/change_form.html:6 -#: templates/admin/catalogue/book/change_form.html:35 -msgid "advanced" -msgstr "ÑозÑиÑений" - -#: templates/admin/catalogue/book/change_form.html:33 -msgid "simplified" -msgstr "ÑпÑоÑений" - -#: templates/admin/catalogue/book/change_list.html:7 -msgid "Import book" -msgstr "ÐмпоÑÑÑваÑи книжкÑ" - -#: templates/auth/login.html:10 -msgid "Forgot Password?" -msgstr "ÐабÑли паÑолÑ?" - -#: templates/auth/login.html:15 templates/auth/register.html:7 -msgid "Sign in using:" -msgstr "УвÑйÑи за допомогоÑ:" - -#: templates/auth/login_register.html:9 -msgid "or register" -msgstr "або заÑеÑÑÑÑÑваÑиÑÑ" - -#: templates/info/join_us.html:6 -#, python-format -msgid "" -"\n" -"We have %(c)s work published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgid_plural "" -"\n" -"We have %(c)s works published in Wolne Lektury!\n" -"Help us expand the library and set new readings free by\n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" -"or transferring 1% of your income tax</a>.\n" -msgstr[0] "" -"\n" -"Ðа ÑайÑÑ Wolne Lektury опÑблÑковано вже %(c)s ÑвÑÑ!\n" -"ÐопоможÑÑÑ Ð½Ð°Ð¼ ÑозвиваÑи бÑблÑоÑÐµÐºÑ Ñ Ð½Ð°Ð´Ð°Ð²Ð°Ñи доÑÑÑп до Ð½Ð¾Ð²Ð¸Ñ ÑвоÑÑв - \n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">пеÑекажÑÑÑ Ð½Ð°Ð¼ " -"благодÑйний внеÑок\n" -"або 1% ваÑого подаÑÐºÑ Ð½Ð° пÑибÑÑок.</a>.\n" -msgstr[1] "" -"\n" -"Ðа ÑайÑÑ Wolne Lektury опÑблÑковано вже %(c)s ÑвоÑÑв!\n" -"ÐопоможÑÑÑ Ð½Ð°Ð¼ ÑозвиваÑи бÑблÑоÑÐµÐºÑ Ñ Ð½Ð°Ð´Ð°Ð²Ð°Ñи доÑÑÑп до Ð½Ð¾Ð²Ð¸Ñ ÑвоÑÑв - \n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">пеÑекажÑÑÑ Ð½Ð°Ð¼ " -"благодÑйний внеÑок\n" -"або 1% ваÑого подаÑÐºÑ Ð½Ð° пÑибÑÑок.</a>.\n" -msgstr[2] "" -"\n" -"Ðа ÑайÑÑ Wolne Lektury опÑблÑковано вже %(c)s ÑвÑÑ!\n" -"ÐопоможÑÑÑ Ð½Ð°Ð¼ ÑозвиваÑи бÑблÑоÑÐµÐºÑ Ñ Ð½Ð°Ð´Ð°Ð²Ð°Ñи доÑÑÑп до Ð½Ð¾Ð²Ð¸Ñ ÑвоÑÑв - \n" -"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">пеÑекажÑÑÑ Ð½Ð°Ð¼ " -"благодÑйний внеÑок\n" -"або 1% ваÑого подаÑÐºÑ Ð½Ð° пÑибÑÑок.</a>.\n" - -#: templates/info/join_us.html:20 -msgid "" -"Become an editor of Wolne Lektury! Find out if\n" -"we're currently working on a reading you're looking for and prepare\n" -"a publication by yourself by logging into the Editorial Platform." -msgstr "" -"СÑÐ°Ð½Ñ ÑедакÑоÑом Wolne Lektury! ÐÑзнайÑÑ Ñи\n" -"ми вже пÑаÑÑÑмо над ÑекÑÑом, Ñкого ÑÑкаÑÑ Ñа Ñам пÑдгоÑÑй\n" -"пÑблÑкаÑÑÑ, ÑеÑÑÑÑÑÑÑиÑÑ Ð½Ð° РедакÑоÑÑÑкÑй плаÑÑоÑмÑ." - -#: templates/info/join_us.html:23 -msgid "More..." -msgstr "ÐÑлÑÑе..." - -#: templates/openid/login.html:6 templates/openid/login.html.py:10 -msgid "OpenID Sign In" -msgstr "УвÑйÑи за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ OpenID" - -#: templates/openid/login.html:27 -msgid "Sign In" -msgstr "УвÑйÑи" - -#: templates/pagination/pagination.html:5 -#: templates/pagination/pagination.html:7 -msgid "previous" -msgstr "попеÑеднÑ" - -#: templates/pagination/pagination.html:21 -#: templates/pagination/pagination.html:23 -msgid "next" -msgstr "наÑÑÑпна" - -#: templates/piston/authorize_token.html:4 -#: templates/piston/authorize_token.html:7 -msgid "Authorize access to Wolne Lektury" -msgstr "ÐвÑоÑизÑваÑи доÑÑÑп до Wolne Lektury" - -#: templates/piston/authorize_token.html:10 -#, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" -"strong>." -msgstr "" -"ÐÑдÑвеÑдиÑи, Ñоб авÑоÑизÑваÑи доÑÑÑп до Wolne Lektury вÑд ÑÐ¼ÐµÐ½Ñ ÐºÐ¾ÑиÑÑÑваÑа " -"<strong>%(user)s</strong>." - -#: templates/socialaccount/connections.html:5 -#: templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Ðов'ÑÐ·Ð°Ð½Ñ Ð°ÐºÐ°ÑнÑи" - -#: templates/socialaccount/connections.html:12 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" -"ÐожеÑе ÑвÑйÑи Ñ ÐÐ°Ñ Ð°ÐºÐ°ÑÐ½Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ ÑнÑÐ¸Ñ Ð¾Ð±Ð»ÑÐºÐ¾Ð²Ð¸Ñ Ð·Ð°Ð¿Ð¸ÑÑв ÑÐ°ÐºÐ¸Ñ , Ñк:" - -#: templates/socialaccount/connections.html:36 -msgid "Remove" -msgstr "ÐидалиÑи" - -#: templates/socialaccount/connections.html:44 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "У ÐÐ°Ñ Ð½ÐµÐ¼Ð°Ñ Ð·Ð°Ñаз Ð¶Ð¾Ð´Ð½Ð¸Ñ Ð¾Ð±Ð»ÑÐºÐ¾Ð²Ð¸Ñ Ð·Ð°Ð¿Ð¸ÑÑв пов'ÑÐ·Ð°Ð½Ð¸Ñ Ð· Ñим акаÑнÑом." - -#: templates/socialaccount/connections.html:47 -msgid "Add a 3rd Party Account" -msgstr "ÐодаÑи ÑнÑий облÑковий Ð·Ð°Ð¿Ð¸Ñ " - -#: templates/socialaccount/login_cancelled.html:5 -#: templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "РеÑÑÑÑаÑÑÑ ÑкаÑовано" - -#: templates/socialaccount/login_cancelled.html:15 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" -"\">sign in</a>." -msgstr "" -"РеÑÑÑÑаÑÑÑ Ð½Ð° ÑайÑÑ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ ÑÑнÑÑÑого облÑкового запиÑÑ Ð±Ñло ÑкаÑовано. " -"ЯкÑо Ñе помилка, пеÑейдÑÑÑ Ð´Ð¾ ÑÑоÑÑнки <a href=\"%(login_url)s\">ÑеÑÑÑÑаÑÑÑ</" -"a>." - -#~ msgid "Listing of all audiobooks" -#~ msgstr "СпиÑок ÑÑÑÑ Ð°ÑдÑокниг" - -#~ msgid "Latest MP3 audiobooks" -#~ msgstr "ÐÑÑÐ°Ð½Ð½Ñ Ð°ÑдÑокниги MP3" - -#~ msgid "Latest Ogg Vorbis audiobooks" -#~ msgstr "ÐÑÑÐ°Ð½Ð½Ñ Ð°ÑдÑокниги Ogg Vorbis" - -#~ msgid "" -#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" -#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" -#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." -#~ msgstr "" -#~ "ÐÑдÑоÑека ÑкÑлÑÐ½Ð¾Ñ Ð»ÑÑеÑаÑÑÑи Ð¤Ð¾Ð½Ð´Ñ Ð¡ÑÑаÑна ÐолÑÑа (Fundacja Nowoczesna " -#~ "Polska).\n" -#~ "Ðожна Ð½ÐµÑ ÐºÐ¾ÑиÑÑÑваÑиÑÑ Ð±ÐµÐ·ÐºÐ¾ÑÑовно Ñ Ð±ÐµÐ· обмеженÑ.\n" -#~ "ÐÑдÑокниги заÑиÑÑÑÑÑ Ð²ÑÐ´Ð¾Ð¼Ñ Ð°ÐºÑоÑи, ÑеÑед ÑÐºÐ¸Ñ ÐанÑÑа СÑенка Ñа Ян ÐеÑек." - -#~ msgid "See also" -#~ msgstr "ÐивиÑиÑÑ Ñакож" - -#~ msgid "Theme" -#~ msgstr "Тема" - -#~ msgid "in work " -#~ msgstr "Ñ ÑвоÑÑ" - -#~ msgid "This work is licensed under:" -#~ msgstr "Цей ÑвÑÑ Ð´Ð¾ÑÑÑпний на ÑÐ¼Ð¾Ð²Ð°Ñ Ð»ÑÑензÑÑ:" - -#~ msgid "" -#~ "This work isn't covered by copyright and is part of the\n" -#~ " public domain, which means it can be freely used, published and\n" -#~ " distributed. If there are any additional copyrighted materials\n" -#~ " provided with this work (such as annotations, motifs etc.), " -#~ "those\n" -#~ " materials are licensed under the \n" -#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" -#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" -#~ " license." -#~ msgstr "" -#~ "Цей ÑвÑÑ Ð½Ðµ Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом Ñ Ñ ÑаÑÑиноÑ\n" -#~ " ÑÑÑпÑлÑного надбаннÑ, ÑÐ¾Ð¼Ñ Ð¹Ð¾Ð³Ð¾ можна викоÑиÑÑовÑваÑи без " -#~ "обмеженÑ, пÑблÑкÑваÑи, Ñа\n" -#~ " ÑозповÑÑджÑваÑи. ЯкÑо ÑвÑÑ Ð¼ÑÑÑиÑÑ Ð´Ð¾Ð´Ð°ÑÐºÐ¾Ð²Ñ Ð¼Ð°ÑеÑÑали, коÑÑÑ " -#~ "Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом\n" -#~ " (напÑиклад пÑимÑÑки, моÑиви, ÑоÑо), доÑÑÑп до ÑÐ¸Ñ \n" -#~ " додаÑÐºÐ¾Ð²Ð¸Ñ Ð¼Ð°ÑеÑÑалÑв надаÑÑÑÑÑ Ð½Ð° ÑÐ¼Ð¾Ð²Ð°Ñ Ð»ÑÑензÑÑ \n" -#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" -#~ "\">Creative Commons Ðз зазнаÑеннÑм ÑÐ¼ÐµÐ½Ñ Ð°Ð²ÑоÑа â Ðа ÑÐ¸Ñ Ð¶Ðµ ÑÐ¼Ð¾Ð²Ð°Ñ 3.0</" -#~ "a>\n" -#~ " ." - -#~ msgid "Text prepared based on:" -#~ msgstr "ТекÑÑ Ð¿ÑдгоÑовлено на оÑновÑ:" - -#~ msgid "Edited and annotated by:" -#~ msgstr "РедагÑÐ²Ð°Ð½Ð½Ñ Ñа пÑимÑÑки:" - -#~ msgid "Listing of all works" -#~ msgstr "СпиÑок ÑÑÑÑ ÑвоÑÑв" - -#~ msgid "Table of Content" -#~ msgstr "ÐмÑÑÑ" - -#~ msgid "â top â" -#~ msgstr "â вгоÑÑ â" - -#~ msgid "Put a book on the shelf!" -#~ msgstr "ÐоклаÑÑи ÐºÐ½Ð¸Ð¶ÐºÑ Ð½Ð° полиÑÑ!" - -#~ msgid "Create new shelf" -#~ msgstr "СÑвоÑиÑи Ð½Ð¾Ð²Ñ Ð¿Ð¾Ð»Ð¸ÑÑ" - -#~ msgid "" -#~ "You do not have any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "Ð Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ Ð¶Ð¾Ð´Ð½Ð¸Ñ Ð¿Ð¾Ð»Ð¸ÑÑ. ÐижÑе ви можеÑе ÑÑвоÑиÑи полиÑÑ, ÑкÑо бажаÑÑе." - -#~ msgid "Put on the shelf!" -#~ msgstr "ÐоклаÑÑи на полиÑÑ!" - -#~ msgid "Epoch" -#~ msgstr "ÐÐ¿Ð¾Ñ Ð°" - -#~ msgid "Kind" -#~ msgstr "Ð Ñд" - -#~ msgid "Genre" -#~ msgstr "ÐанÑ" - -#~ msgid "Read online" -#~ msgstr "ЧиÑаÑи онлайн" - -#~ msgid "Download" -#~ msgstr "ÐаванÑажиÑи" - -#~ msgid "to print" -#~ msgstr "дÑÑкÑваÑи" - -#~ msgid "for an e-book reader" -#~ msgstr "Ð´Ð»Ñ ÑнÑеÑнеÑного ÑиÑаÑа" - -#~ msgid "for Kindle" -#~ msgstr "Ð´Ð»Ñ Kindle" - -#~ msgid "for advanced usage" -#~ msgstr "Ð´Ð»Ñ Ð´Ð¾ÑвÑÑеного коÑиÑÑÑваÑа" - -#~ msgid "Listen" -#~ msgstr "СлÑÑ Ð°Ñи" - -#~ msgid "Table of contents" -#~ msgstr "ÐмÑÑÑ" - -#~ msgid "Themes" -#~ msgstr "Теми" - -#~ msgid "Edit. note" -#~ msgstr "ÐоменÑÐ°Ñ ÑедакÑоÑа" - -#~ msgid "Infobox" -#~ msgstr "ÐнÑобокÑ" - -#~ msgid "Book's page" -#~ msgstr "СÑоÑÑнка книжки" - -#~ msgid "for a reader" -#~ msgstr "Ð´Ð»Ñ ÑиÑаÑа" - -#, fuzzy -#~ msgid "for advanced usege" -#~ msgstr "ÑозÑиÑений" - -#~ msgid "Download a custom PDF" -#~ msgstr "ÐаванÑажиÑи PDF" - -#~ msgid "Motifs and themes" -#~ msgstr "ÐоÑиви Ñа Ñеми" - -#~ msgid "See" -#~ msgstr "ÐивиÑиÑÑ" - -#~ msgid "Source" -#~ msgstr "ÐжеÑело" - -#~ msgid "of the book" -#~ msgstr "книжки" - -#~ msgid "Source XML file" -#~ msgstr "ÐÐ¸Ñ Ñдний Ñайл XML" - -#~ msgid "Book on" -#~ msgstr "Ðнижка на" - -#~ msgid "Editor's Platform" -#~ msgstr "РедакÑоÑÑÑка плаÑÑоÑма" - -#~ msgid "Book description on Lektury.Gazeta.pl" -#~ msgstr "ÐÐ¿Ð¸Ñ ÐºÐ½Ð¸Ð¶ÐºÐ¸ на Lektury.Gazeta.pl" - -#~ msgid "Book description on Wikipedia" -#~ msgstr "ÐÐ¿Ð¸Ñ ÐºÐ½Ð¸Ð¶ÐºÐ¸ Ñ ÐÑкÑпедÑÑ" - -#~ msgid "Mix this book" -#~ msgstr "ÐÑкÑÑваÑи ÑÑ ÐºÐ½Ð¸Ð¶ÐºÑ" - -#~ msgid "Download all audiobooks for this book" -#~ msgstr "ÐаванÑажиÑи вÑÑ Ð°ÑдÑокниги Ð´Ð»Ñ ÑÑÑÑ ÐºÐ½Ð¸Ð¶ÐºÐ¸" - -#~ msgid "Catalogue" -#~ msgstr "ÐаÑалог" - -#~ msgid "Authors" -#~ msgstr "ÐвÑоÑи" - -#~ msgid "Kinds" -#~ msgstr "Роди" - -#~ msgid "Genres" -#~ msgstr "ÐанÑи" - -#~ msgid "Epochs" -#~ msgstr "ÐÐ¿Ð¾Ñ Ð¸" - -#~ msgid "Themes and topics" -#~ msgstr "Теми Ñа моÑиви" - -#~ msgid "Listing of all DAISY files" -#~ msgstr "СпиÑок ÑÑÑÑ ÑайлÑв DAISY" - -#~ msgid "Latest DAISY audiobooks" -#~ msgstr "ÐÑÑÐ°Ð½Ð½Ñ Ð°ÑдÑокниги 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Å." -#~ msgstr "" -#~ "СиÑÑема DAISY Ñе визнаний Ñ Ð²ÑÑÐ¾Ð¼Ñ ÑвÑÑÑ ÑоÑÐ¼Ð°Ñ Ð½Ð°Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð¾ÑÑÑÐ¿Ñ Ð´Ð¾ " -#~ "книжок,\n" -#~ "коÑÑий вÑдповÑÐ´Ð°Ñ Ð¿Ð¾ÑÑебам оÑÑб ÑлабозоÑÐ¸Ñ , ÑлÑÐ¿Ð¸Ñ , а Ñакож ÑнÑÐ¸Ñ Ð¾ÑÑб,\n" -#~ "ÑÐºÑ Ð¼Ð°ÑÑÑ ÑÑÑдноÑÑ Ð· ÑиÑаннÑм. ÐожеÑе ними коÑиÑÑÑваÑиÑÑ Ð±ÐµÐ·ÐºÐ¾ÑÑовно Ñ " -#~ "без обмеженÑ." - -#~ msgid "" -#~ "The criteria are ambiguous. Please select one of the following options:" -#~ msgstr "ÐибÑÐ°Ð½Ñ ÐºÑиÑеÑÑÑ Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°ÑнÑ. ÐибеÑÑÑÑ Ð¾Ð´Ð¸Ð½ з наÑÑÑÐ¿Ð½Ð¸Ñ Ð²Ð°ÑÑанÑÑв:" - -#~ msgid "Shelves containing fragment" -#~ msgstr "ÐолиÑÑ, ÑÐºÑ Ð¼ÑÑÑÑÑÑ ÑÑагменÑ" - -#~ msgid "" -#~ "You do not own any shelves. You can create one below, if you want to." -#~ msgstr "" -#~ "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ Ð¶Ð¾Ð´Ð½Ð¸Ñ Ð¿Ð¾Ð»Ð¸ÑÑ. ÐижÑе ви можеÑе ÑÑвоÑиÑи полиÑÑ, ÑкÑо бажаÑÑе." - -#~ msgid "Save all shelves" -#~ msgstr "ÐбеÑегÑи вÑÑ Ð¿Ð¾Ð»Ð¸ÑÑ" - -#~ msgid "Expand fragment" -#~ msgstr "ÐоказаÑи ÑÑагменÑ" - -#~ msgid "Hide fragment" -#~ msgstr "Ð¡Ñ Ð¾Ð²Ð°Ñи ÑÑагменÑ" - -#~ msgid "See full category" -#~ msgstr "ÐивиÑиÑÑ Ð²ÑÑ ÐºÐ°ÑегоÑÑÑ" - -#~ msgid "All books" -#~ msgstr "ÐÑÑ ÐºÐ½Ð¸Ð¶ÐºÐ¸" - -#~ msgid "Audiobooks" -#~ msgstr "ÐÑдÑокниги" - -#~ msgid "DAISY" -#~ msgstr "DAISY" - -#~ msgid "Work is licensed under " -#~ msgstr "ТвÑÑ Ð½Ð° ÑÐ¼Ð¾Ð²Ð°Ñ Ð»ÑÑензÑÑ" - -#~ msgid "Based on" -#~ msgstr "Ðа оÑновÑ" - -#~ msgid "Details" -#~ msgstr "ÐодÑобиÑÑ" - -#~ msgid "Author" -#~ msgstr "ÐвÑоÑ" - -#~ msgid "Other resources" -#~ msgstr "ÐнÑÑ Ð·Ð°Ñоби" - -#~ msgid "Source of the image" -#~ msgstr "ÐжеÑело гÑаÑÑки" - -#~ msgid "Image on the Editor's Platform" -#~ msgstr "ÐÑаÑÑка на РедакÑоÑÑÑкÑй плаÑÑоÑмÑ" - -#~ msgid "View XML source" -#~ msgstr "ÐивиÑиÑÑ Ð²Ð¸Ñ Ñдний XML" - -#~ msgid "Work's themes " -#~ msgstr "Теми ÑвоÑÑ" - -#~ msgid "Listing of all pictures" -#~ msgstr "СпиÑок вÑÑÑ Ð³ÑаÑÑк" - -#~ msgid "Download as" -#~ msgstr "ÐаванÑажиÑи Ñк" - -#~ msgid "Artist" -#~ msgstr "ÐиÑеÑÑ" - -#~ msgid "Director" -#~ msgstr "РежиÑеÑ" - -#~ msgid "Audiobooks were prepared as a part of the projects:" -#~ msgstr "ÐÑдÑокниги вигоÑовлено в ÑÐ°Ð¼Ð°Ñ Ð¿ÑоекÑÑв:" - -#~ msgid "%(cs)s, funded by %(fb)s" -#~ msgstr "%(cs)s, ÑÑнанÑованого з коÑÑÑв %(fb)s" - -#~ msgid "" -#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." -#~ msgstr "" -#~ "ÐÑдÑокниги вигоÑовлено в ÑÐ°Ð¼Ð°Ñ Ð¿ÑоекÑÑ %(cs)s, ÑÑнанÑованого з коÑÑÑв " -#~ "%(fb)s." - -#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." -#~ msgstr "ÐÑдÑокниги вигоÑовлено в ÑÐ°Ð¼Ð°Ñ Ð¿ÑоекÑÑ %(cs)s." - -#~ msgid "Did you mean" -#~ msgstr "Чи йдеÑÑÑÑ Ð¿Ñо" - -#~ msgid "Results by authors" -#~ msgstr "РезÑлÑÑаÑи за авÑоÑом" - -#~ msgid "Results by title" -#~ msgstr "РезÑлÑÑаÑи за заголовком" - -#~ msgid "Results in text" -#~ msgstr "РезÑлÑÑаÑи в ÑекÑÑÑ" - -#~ msgid "Other results" -#~ msgstr "ÐнÑÑ ÑезÑлÑÑаÑи" - -#~ msgid "Sorry! Search cirteria did not match any resources." -#~ msgstr "Ðа жалÑ, кÑиÑеÑÑÑм поÑÑÐºÑ Ð½Ðµ вÑдповÑÐ´Ð°Ñ Ð¶Ð¾Ð´ÐµÐ½ ÑезÑлÑÑаÑ." - -#~ msgid "" -#~ "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 "" -#~ "РпоÑÑковÑй ÑиÑÑÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¸Ð¹ поÑÑк за кÑиÑеÑÑÑми: авÑоÑ, Ñема/моÑив, " -#~ "ÐµÐ¿Ð¾Ñ Ð°, ÑÑд Ñа жанÑ.\n" -#~ "\t\tÐоки Ñо неможливий поÑÑк в ÑÑÐ»Ð¾Ð¼Ñ ÑекÑÑÑ." - -#~ msgid "Sorry! Search query must have at least two characters." -#~ msgstr "Ðа жалÑ, Ð´Ð»Ñ Ð¿Ð¾ÑÑÐºÑ Ð¿Ð¾ÑÑÑбно ввеÑÑи ÑонайменÑе два знаки." - -#~ msgid "in Lektury.Gazeta.pl" -#~ msgstr "на Lektury.Gazeta.pl" - -#~ msgid "in Wikipedia" -#~ msgstr "Ñ ÐÑкÑпедÑÑ" - -#~ msgid "Your shelves with books" -#~ msgstr "ÐаÑÑ Ð¿Ð¾Ð»Ð¸ÑÑ Ð· книжками" - -#~ msgid "You do not own any shelves. You can create one below if you want to" -#~ msgstr "" -#~ "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ Ð¶Ð¾Ð´Ð½Ð¸Ñ Ð¿Ð¾Ð»Ð¸ÑÑ. ÐижÑе ви можеÑе ÑÑвоÑиÑи полиÑÑ, ÑкÑо бажаÑÑе" - -#~ msgid "Create shelf" -#~ msgstr "СÑвоÑиÑи полиÑÑ" - -#~ msgid "author" -#~ msgstr "авÑоÑ" - -#~ msgid "Hand-outs for teachers" -#~ msgstr "ÐаÑеÑÑали Ð´Ð»Ñ Ð²ÑиÑелÑв" - -#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" -#~ msgstr "ÐÑоÑиÑаÑи обговоÑÐµÐ½Ð½Ñ ÑÑого авÑоÑа на Lektury.Gazeta.pl" - -#~ msgid "Read article about this author on Wikipedia" -#~ msgstr "ÐÑоÑиÑаÑи ÑÑаÑÑÑ Ð¿Ñо ÑÑого авÑоÑа Ñ ÐÑкÑпедÑÑ" - -#~ msgid "This author's works are copyrighted." -#~ msgstr "ТвоÑи ÑÑого авÑоÑа Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом." - -#~ msgid "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries can't publish this author's works." -#~ msgstr "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" -#~ "publiczna/'>ÐÑзнаÑиÑÑ</a> ÑÐ¾Ð¼Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ñ Ð±ÑблÑоÑеки не можÑÑÑ " -#~ "опÑблÑкÑваÑи ÑвоÑÑв ÑÑого авÑоÑа." - -#~ msgid "" -#~ "This author's works are in public domain and will be published on " -#~ "Internet school library of Wolne Lektury soon." -#~ msgstr "" -#~ "ТвоÑи ÑÑого авÑоÑа Ñ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного Ð½Ð°Ð´Ð±Ð°Ð½Ð½Ñ Ñ Ð½ÐµÐ·Ð°Ð±Ð°Ñом бÑдÑÑÑ " -#~ "опÑблÑÐºÐ¾Ð²Ð°Ð½Ñ Ð½Ð° Wolne Lektury." - -#~ msgid "" -#~ "This author's works will become part of public domain and will be allowed " -#~ "to be published without restrictions in" -#~ msgstr "" -#~ "ТвоÑи ÑÑого авÑоÑа ÑÑанÑÑÑ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного Ð½Ð°Ð´Ð±Ð°Ð½Ð½Ñ Ñ Ð¼Ð¾Ð¶Ð½Ð° бÑде ÑÑ " -#~ "пÑблÑкÑваÑи без Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ñ Ð²" - -#~ msgid "" -#~ "This work is in public domain and will be published on Internet school " -#~ "library of Wolne Lektury soon." -#~ msgstr "" -#~ "Цей ÑвÑÑ Ñ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного Ð½Ð°Ð´Ð±Ð°Ð½Ð½Ñ Ñ Ð½ÐµÐ·Ð°Ð±Ð°Ñом бÑде опÑблÑкований " -#~ "на Wolne Lektury" - -#~ msgid "" -#~ "This work will become part of public domain and will be allowed to be " -#~ "published without restrictions in" -#~ msgstr "" -#~ "Цей ÑвÑÑ ÑÑане ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного Ð½Ð°Ð´Ð±Ð°Ð½Ð½Ñ Ñ Ð¼Ð¾Ð¶Ð½Ð° бÑде його " -#~ "пÑблÑкÑваÑи без Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ñ Ñ" - -#~ msgid "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " -#~ "out</a> why Internet libraries can't publish this work." -#~ msgstr "" -#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" -#~ "publiczna/'>ÐÑзнаÑиÑÑ</a>, ÑÐ¾Ð¼Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ñ Ð±ÑблÑоÑеки не можÑÑÑ " -#~ "опÑблÑкÑваÑи ÑÑого ÑвоÑÑ" - -#~ msgid "This work is copyrighted." -#~ msgstr "Цей ÑвÑÑ Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом" - -#~ msgid "Login to Wolne Lektury" -#~ msgstr "УвÑйÑи Ñ WolneLektury.pl" - -#~ msgid "Login" -#~ msgstr "УвÑйÑи" - -#~ msgid "" -#~ "Internet Explorer cannot display this site properly. Click here to read " -#~ "more..." -#~ msgstr "" -#~ "ÐнÑеÑÐ½ÐµÑ ÐкÑполоÑÐµÑ Ð½Ðµ може пÑавилÑно вÑдобÑазиÑи ÑÑÑÑ ÑÑоÑÑнки. " -#~ "ÐаÑиÑнÑÑÑ, Ñоб дÑзнаÑиÑÑ Ð±ÑлÑÑе..." - -#~ msgid "Your shelves" -#~ msgstr "ÐаÑÑ Ð¿Ð¾Ð»Ð¸ÑÑ" - -#~ msgid "Register on" -#~ msgstr "РеÑÑÑÑаÑÑÑ Ð½Ð°" - -#~ msgid "or" -#~ msgstr "або" - -#~ msgid "return to main page" -#~ msgstr "повеÑÐ½ÐµÐ½Ð½Ñ Ð½Ð° Ð³Ð¾Ð»Ð¾Ð²Ð½Ñ ÑÑоÑÑнкÑ" - -#, fuzzy -#~ msgid "Listing of all audiobooks on WolneLektury.pl" -#~ msgstr "ÐлÑавÑÑний ÑпиÑок ÑвоÑÑв на WolneLektury.pl" - -#~ msgid "Put a book" -#~ msgstr "ÐоклаÑÑи книжкÑ" - -#~ msgid "on the shelf!" -#~ msgstr "на полиÑÑ!" - -#~ msgid "and printing using" -#~ msgstr "Ñа дÑÑÐºÑ Ð· викоÑиÑÑаннÑм" - -#~ msgid "Download EPUB" -#~ msgstr "ÐаванÑажиÑи EPUB" - -#~ msgid "Download TXT" -#~ msgstr "ÐаванÑажиÑи TXT" - -#~ msgid "on small displays, for example mobile phones" -#~ msgstr "на Ð½ÐµÐ²ÐµÐ»Ð¸ÐºÐ¸Ñ ÐµÐºÑÐ°Ð½Ð°Ñ , на пÑиклад на мобÑлÑÐ½Ð¾Ð¼Ñ ÑелеÑонÑ" - -#~ msgid "Download ODT" -#~ msgstr "ÐаванÑажиÑи ODT" - -#~ msgid "and editing using" -#~ msgstr "Ñа едиÑÑÑ Ð· викоÑиÑÑаннÑм" - -#~ msgid "Book on project's wiki" -#~ msgstr "Ðнижка на вÑÐºÑ Ð¿ÑоекÑÑ" - -#~ msgid "on" -#~ msgstr "на" - -#~ msgid "See description" -#~ msgstr "ÐивиÑиÑÑ Ð¾Ð¿Ð¸Ñ" - -#~ msgid "Jump to" -#~ msgstr "ÐеÑейÑи до" - -#~ msgid "Categories" -#~ msgstr "ÐаÑегоÑÑÑ" - -#, fuzzy -#~ msgid "Listing of all DAISY files on WolneLektury.pl" -#~ msgstr "ÐлÑавÑÑний ÑпиÑок ÑвоÑÑв на WolneLektury.pl" - -#~ msgid "Show full category" -#~ msgstr "ÐоказаÑи вÑÑ ÐºÐ°ÑегоÑÑÑ" - -#~ msgid "Hide" -#~ msgstr "Ð¡Ñ Ð¾Ð²Ð°Ñи" - -#~ msgid "Browse books by categories" -#~ msgstr "ÐеÑеглÑдаÑи книжки за каÑегоÑÑÑми" - -#~ msgid "delete" -#~ msgstr "видалиÑи" - -#~ msgid "" -#~ "Create your own book set. You can share it with friends by sending them " -#~ "link to your shelf." -#~ msgstr "" -#~ "СÑвоÑиÑи ÑвÑй вибÑÑ ÐºÐ½Ð¸Ð¶Ð¾Ðº. Ðи можеÑе подÑлиÑиÑÑ Ð½Ð¸Ð¼ з дÑÑзÑми виÑилаÑÑи " -#~ "Ñм поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° ваÑÑ Ð¿Ð¾Ð»Ð¸ÑÑ." - -#~ msgid "You need to " -#~ msgstr "Ðам ÑÑеба" - -#~ msgid "sign in" -#~ msgstr "ÑвÑйÑи в акаÑнÑ" - -#~ msgid "to manage your shelves." -#~ msgstr "Ñоб ÑпÑавлÑÑи ÑвоÑми полиÑÑми" - -#~ msgid "" -#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." -#~ msgstr "" -#~ "Ðлани ÑÑокÑв Ñа ÑнÑÑ ÑÐ´ÐµÑ Ñк коÑиÑÑÑваÑиÑÑ Wolnelektury.pl в навÑаннÑ" - -#~ msgid "" -#~ "are professional recordings of literary texts from our repository, " -#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " -#~ "DAISY system." -#~ msgstr "" -#~ "Ñе пÑоÑеÑÑÐ¹Ð½Ñ Ð·Ð°Ð¿Ð¸Ñи ÑекÑÑÑв лÑÑеÑаÑÑÑи з наÑÐ¾Ñ Ð±Ð°Ð·Ð¸, доÑÑÑÐ¿Ð½Ñ Ð½Ð° вÑлÑнÑй " -#~ "лÑÑензÑÑ Ñ ÑоÑмаÑÐ°Ñ MP3 Ñа Ogg Vorbis, а Ñакож в ÑиÑÑÐµÐ¼Ñ DAISY." - -#~ msgid "Themes groups" -#~ msgstr "ÐÑÑпи моÑивÑв" - -#~ msgid "See our blog" -#~ msgstr "ÐивиÑиÑÑ Ð½Ð°Ñ Ð±Ð»Ð¾Ð³" - -#~ msgid "You can help us!" -#~ msgstr "ÐожеÑе нам допомогÑи!" - -#~ msgid "" -#~ "We try our best to elaborate works appended to our library. It is " -#~ "possible only due to support of our volunteers." -#~ msgstr "" -#~ "Ðи намагаÑмоÑÑ Ñкомога кÑаÑе пÑдгоÑÑваÑи ÑвоÑи, ÑÐºÑ Ð´Ð¾Ð´Ð°ÑÑÑÑÑ Ð´Ð¾ наÑÐ¾Ñ " -#~ "бÑблÑоÑеки. Це можливо ÑÑлÑки завдÑки наÑим волонÑеÑам." - -#~ msgid "" -#~ "We invite people who want to take part in developing Internet school " -#~ "library Wolne Lektury." -#~ msgstr "" -#~ "ÐапÑоÑÑÑмо вÑÑÑ , Ñ Ñо Ñ Ð¾Ñе бÑаÑи ÑÑаÑÑÑ Ñ ÑвоÑÐµÐ½Ð½Ñ ÑкÑлÑÐ½Ð¾Ñ ÑнÑеÑнеÑ-" -#~ "бÑблÑоÑеки Wolne Lektury." - -#~ msgid "About us" -#~ msgstr "ÐÑо наÑ" - -#~ msgid "" -#~ "\n" -#~ "\t\t\tInternet library with school readings âWolne Lekturyâ (<a href=" -#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) is a project made by " -#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " -#~ "which are recommended by Ministry of National Education and are in public " -#~ "domain.\n" -#~ "\t\t\t" -#~ msgstr "" -#~ "\n" -#~ "\t\t\tÐнÑеÑнеÑ-бÑблÑоÑека ÑкÑлÑÐ½Ð¾Ñ Ð»ÑÑеÑаÑÑÑи âWolne Lekturyâ (<a href=" -#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) Ñе пÑÐ¾ÐµÐºÑ " -#~ "ÑеалÑзований Фондом ÐодеÑна ÐолÑÑа. ÐÑÐ¾ÐµÐºÑ ÑÑаÑÑÑвав Ñ 2007 ÑоÑÑ Ñа Ð½Ð°Ð´Ð°Ñ " -#~ "доÑÑÑп до лÑÑеÑаÑÑÑи, ÑÐµÐºÐ¾Ð¼ÐµÐ½Ð´Ð¾Ð²Ð°Ð½Ð¾Ñ ÐÑнÑÑÑеÑÑÑвом наÑÑоналÑÐ½Ð¾Ñ Ð¾ÑвÑÑи, " -#~ "Ñка Ñ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного надбаннÑ.\n" -#~ "\t\t\t" - -#~ msgid "Searching in" -#~ msgstr "ÐоÑÑк в" - -#~ msgid "More than one result matching the criteria found." -#~ msgstr "ÐÑлÑÑе нÑж один ÑезÑлÑÑÐ°Ñ Ð²ÑдповÑÐ´Ð°Ñ ÐºÑиÑеÑÑÑм." - -#~ msgid "Search in WolneLektury.pl" -#~ msgstr "ÐоÑÑк в WolneLektury.pl" - -#~ msgid "Your shelf is empty" -#~ msgstr "ÐаÑа полиÑÑ Ð¿Ð¾ÑожнÑ" - -#~ msgid "" -#~ "You can put a book on a shelf by entering page of the reading and " -#~ "clicking 'Put on the shelf'." -#~ msgstr "" -#~ "Щоб поклаÑÑи ÐºÐ½Ð¸Ð¶ÐºÑ Ð½Ð° полиÑÑ, ÑвÑйдÑÑÑ Ð½Ð° ÑÑоÑÑÐ½ÐºÑ ÐºÐ½Ð¸Ð¶ÐºÐ¸ Ñа наÑиÑнÑÑÑ " -#~ "\"ÐоклаÑÑи на полиÑÑ\"." - -#~ msgid "Choose books' formats which you want to download:" -#~ msgstr "ÐибÑаÑи ÑоÑмаÑ, в ÑÐºÐ¾Ð¼Ñ Ñ Ð¾ÑеÑе заванÑажиÑи книжкÑ:" - -#~ msgid "for listening" -#~ msgstr "Ð´Ð»Ñ ÑлÑÑ Ð°Ð½Ð½Ñ" - -#~ msgid "on favourite MP3 player" -#~ msgstr "на ÑлÑÐ±Ð»ÐµÐ½Ð¾Ð¼Ñ Ð¿Ð»ÐµÑÑÑ MP3" - -#~ msgid "Xiph.org Foundation" -#~ msgstr "Фонд Xiph.org" - -#~ msgid "Updating list of books' formats on the shelf" -#~ msgstr "ÐновиÑи ÑпиÑок ÑоÑмаÑÑв книжок, ÑÐºÑ Ð½Ð° полиÑÑ" - -#~ msgid "cancel" -#~ msgstr "вÑÐ´Ñ Ð¸Ð»Ð¸Ñи" - -#~ msgid "Share this shelf" -#~ msgstr "ÐодÑлиÑиÑÑ ÑÑÑÑ Ð¿Ð¾Ð»Ð¸ÑеÑ" - -#~ msgid "" -#~ "Copy this link and share it with other people to let them see your shelf." -#~ msgstr "ÐопÑÑваÑи Ñе поÑиланнÑ, Ñоб виÑлаÑи ÑнÑим, Ñа подÑлиÑиÑÑ Ð¿Ð¾Ð»Ð¸ÑеÑ." - -#, fuzzy -#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "ÐÑоÑиÑаÑи обговоÑÐµÐ½Ð½Ñ ÑÑого авÑоÑа на Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "ÐÑоÑиÑаÑи обговоÑÐµÐ½Ð½Ñ ÑÑого авÑоÑа на Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" -#~ msgstr "ÐÑоÑиÑаÑи обговоÑÐµÐ½Ð½Ñ ÑÑого авÑоÑа на Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read related study on Lektury.Gazeta.pl" -#~ msgstr "ÐÑоÑиÑаÑи обговоÑÐµÐ½Ð½Ñ ÑÑого авÑоÑа на Lektury.Gazeta.pl" - -#, fuzzy -#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" -#~ msgstr "ÐÑоÑиÑаÑи ÑÑаÑÑÑ Ð¿Ñо ÑÑого авÑоÑа на ÐÑкÑпедÑÑ" - -#, fuzzy -#~ msgid "Read article about kind %(last_tag)s on Wikipedia" -#~ msgstr "ÐÑоÑиÑаÑи ÑÑаÑÑÑ Ð¿Ñо ÑÑого авÑоÑа на ÐÑкÑпедÑÑ" - -#, fuzzy -#~ msgid "Read article about genre %(last_tag)s on Wikipedia" -#~ msgstr "ÐÑоÑиÑаÑи ÑÑаÑÑÑ Ð¿Ñо ÑÑого авÑоÑа на ÐÑкÑпедÑÑ" - -#, fuzzy -#~ msgid "Read related article on Wikipedia" -#~ msgstr "ÐÑоÑиÑаÑи ÑÑаÑÑÑ Ð¿Ñо ÑÑого авÑоÑа на ÐÑкÑпедÑÑ" - -#~ msgid "Delete" -#~ msgstr "ÐидалиÑи" - -#~ msgid "return to the main page" -#~ msgstr "повеÑÐ½ÐµÐ½Ð½Ñ Ð½Ð° головнÑ" - -#~ msgid "return to list of materials" -#~ msgstr "повеÑÐ½ÐµÐ½Ð½Ñ Ð´Ð¾ ÑпиÑÐºÑ Ð¼Ð°ÑеÑÑалÑв" - -#~ msgid "Hand-outs for teachers on " -#~ msgstr "ÐаÑеÑÑали Ð´Ð»Ñ Ð²ÑиÑелÑв Ñ" - -#, fuzzy -#~ msgid "" -#~ "Download TXT - for reading on small displays, for example mobile phones" -#~ msgstr "на Ð½ÐµÐ²ÐµÐ»Ð¸ÐºÐ¸Ñ ÐµÐºÑÐ°Ð½Ð°Ñ , на пÑиклад на мобÑлÑÐ½Ð¾Ð¼Ñ ÑелеÑонÑ" - -#~ msgid "Choose your interface language: " -#~ msgstr "ÐибÑаÑи Ð¼Ð¾Ð²Ñ ÑнÑеÑÑейÑÑ" - -#~ msgid "Choose language" -#~ msgstr "ÐибÑаÑи мовÑ" - -#~ msgid "Hide description" -#~ msgstr "Ð¡Ñ Ð¾Ð²Ð°Ñи опиÑ" - -#~ msgid "Download MP3" -#~ msgstr "ÐаванÑажиÑи MP3" - -#~ msgid "Download Ogg Vorbis" -#~ msgstr "ÐаванÑажиÑи Ogg Vorbis" - -#~ msgid "Download DAISY" -#~ msgstr "ÐаванÑажиÑи DAISY" - -#~ msgid "Alphabetical listing of works" -#~ msgstr "ÐлÑавÑÑний ÑпиÑок ÑвоÑÑв" - -#~ msgid "check list of books" -#~ msgstr "пеÑевÑÑиÑи ÑпиÑок книжок" - -#~ msgid "in our repository" -#~ msgstr "в наÑÑй базÑ" - -#~ msgid "Read study of epoch" -#~ msgstr "ÐÑоÑиÑаÑи обговоÑÐµÐ½Ð½Ñ ÐµÐ¿Ð¾Ñ Ð¸" - -#~ msgid "Read article about epoch" -#~ msgstr "ÐÑоÑиÑаÑи ÑÑаÑÑÑ Ð¿Ñо ÑÑ ÐµÐ¿Ð¾Ñ Ñ" diff --git a/apps/wolnelektury_core/management/__init__.py b/apps/wolnelektury_core/management/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/wolnelektury_core/management/commands/__init__.py b/apps/wolnelektury_core/management/commands/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/wolnelektury_core/management/commands/localepack.py b/apps/wolnelektury_core/management/commands/localepack.py deleted file mode 100644 index bd631928c..000000000 --- a/apps/wolnelektury_core/management/commands/localepack.py +++ /dev/null @@ -1,243 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from optparse import make_option -from django.conf import settings -from django.core.management.base import BaseCommand -from django.core.management import call_command -from .translation2po import get_languages - -import os -import shutil -import tempfile -import sys - -import allauth - -ROOT = os.path.dirname(settings.PROJECT_DIR) - - -def is_our_app(mod): - return mod.__path__[0].startswith(ROOT) - - -class Locale(object): - def save(self, output_directory, languages): - pass - - def generate(self, languages): - pass - -def copy_f(frm, to): - "I can create a necessary dest directiories, yey!" - if not os.path.exists(os.path.dirname(to)): - os.makedirs(os.path.dirname(to)) - shutil.copyfile(frm, to) - -class AppLocale(Locale): - def __init__(self, appmod): - self.app = appmod - if not os.path.exists(os.path.join(self.path, 'locale')): - raise LookupError('No locale for app %s' % appmod) - - @property - def path(self): - return self.app.__path__[0] - - @property - def name(self): - return self.app.__name__ - - def save(self, output_directory, languages): - for lc in languages: - lc = lc[0] - if os.path.exists(os.path.join(self.path, 'locale', lc)): - copy_f(os.path.join(self.path, 'locale', lc, 'LC_MESSAGES', 'django.po'), - os.path.join(output_directory, lc, self.name + '.po')) - - - def load(self, input_directory, languages): - for lc in zip(*languages)[0]: - if os.path.exists(os.path.join(input_directory, lc, self.name + '.po')): - out = os.path.join(self.path, 'locale', lc, 'LC_MESSAGES', 'django.po') - if not os.path.exists(os.path.dirname(out)): - os.makedirs(os.path.dirname(out)) - copy_f(os.path.join(input_directory, lc, self.name + '.po'), - out) - - wd = os.getcwd() - os.chdir(self.path) - try: - call_command('compilemessages', settings='wolnelektury.settings') - except: - pass - finally: - os.chdir(wd) - - - def generate(self, languages): - wd = os.getcwd() - os.chdir(self.path) - try: - call_command('makemessages', all=True) - except: - pass - finally: - os.chdir(wd) - - -class ModelTranslation(Locale): - def __init__(self, appname, poname=None): - self.appname = appname - self.poname = poname and poname or appname - - def save(self, output_directory, languages): - call_command('translation2po', self.appname, directory=output_directory, poname=self.poname) - - def load(self, input_directory, languages): - call_command('translation2po', self.appname, directory=input_directory, - load=True, lang=','.join(zip(*languages)[0]), poname=self.poname, keep_running=True) - - -class CustomLocale(Locale): - def __init__(self, app_dir, - config=os.path.join(ROOT, "babel.cfg"), - out_file=os.path.join(ROOT, 'wolnelektury/locale-contrib/django.pot'), - name=None): - self.app_dir = app_dir - self.config = config - self.out_file = out_file - self.name = name - - def generate(self, languages): - os.system('pybabel extract -F "%s" -o "%s" "%s"' % (self.config, self.out_file, self.app_dir)) - os.system('pybabel update -D django -i %s -d %s' % (self.out_file, os.path.dirname(self.out_file))) - - def po_file(self, language): - d = os.path.dirname(self.out_file) - n = os.path.basename(self.out_file).split('.')[0] - return os.path.join(d, language, 'LC_MESSAGES', n + '.po') - - def save(self, output_directory, languages): - for lc in zip(*languages)[0]: - if os.path.exists(self.po_file(lc)): - copy_f(self.po_file(lc), - os.path.join(output_directory, lc, self.name + '.po')) - - def load(self, input_directory, languages): - for lc in zip(*languages)[0]: - copy_f(os.path.join(input_directory, lc, self.name + '.po'), - self.po_file(lc)) - os.system('pybabel compile -D django -d %s' % os.path.dirname(self.out_file)) - - -SOURCES = [] - -for appn in settings.INSTALLED_APPS: - app = __import__(appn) - if is_our_app(app): - try: - SOURCES.append(AppLocale(app)) - except LookupError, e: - print "no locales in %s" % app.__name__ - -SOURCES.append(ModelTranslation('infopages', 'infopages_db')) -SOURCES.append(CustomLocale(os.path.dirname(allauth.__file__), name='contrib')) - - -class Command(BaseCommand): - option_list = BaseCommand.option_list + ( - make_option('-l', '--load', help='load locales back to source', action='store_true', dest='load', default=False), - make_option('-L', '--lang', help='load just one language', dest='lang', default=None), - make_option('-d', '--directory', help='load from this directory', dest='directory', default=None), - make_option('-o', '--outfile', help='Resulting zip file', dest='outfile', default='./wl-locale.zip'), - make_option('-m', '--merge', help='Use git to merge. Please use with clean working directory.', action='store_true', dest='merge', default=False), - make_option('-M', '--message', help='commit message', dest='message', default='New locale'), - - ) - help = 'Make a locale pack' - args = '' - - def current_rev(self): - return os.popen('git rev-parse HEAD').read() - - def current_branch(self): - return os.popen("git branch |grep '^[*]' | cut -c 3-").read() - - def save(self, options): - packname = options.get('outfile') - packname_b = os.path.basename(packname).split('.')[0] - fmt = '.'.join(os.path.basename(packname).split('.')[1:]) - - if fmt != 'zip': - raise NotImplementedError('Sorry. Only zip format supported at the moment.') - - tmp_dir = tempfile.mkdtemp('-wl-locale') - out_dir = os.path.join(tmp_dir, packname_b) - os.mkdir(out_dir) - - try: - for lang in settings.LANGUAGES: - os.mkdir(os.path.join(out_dir, lang[0])) - - for src in SOURCES: - src.generate(settings.LANGUAGES) - src.save(out_dir, settings.LANGUAGES) - # src.save(settings.LANGUAGES) - - # write out revision - rev = self.current_rev() - rf = open(os.path.join(out_dir, '.revision'), 'w') - rf.write(rev) - rf.close() - - - cwd = os.getcwd() - try: - os.chdir(os.path.dirname(out_dir)) - self.system('zip -r %s %s' % (os.path.join(cwd, packname_b+'.zip'), os.path.basename(out_dir))) - finally: - os.chdir(cwd) - # shutil.make_archive(packname_b, fmt, root_dir=os.path.dirname(out_dir), base_dir=os.path.basename(out_dir)) - finally: - shutil.rmtree(tmp_dir, ignore_errors=True) - - def load(self, options): - langs = get_languages(options['lang']) - - for src in SOURCES: - src.load(options['directory'], langs) - - def handle(self, *a, **options): - if options['load']: - if not options['directory'] or not os.path.exists(options['directory']): - print "Directory not provided or does not exist, please use -d" - sys.exit(1) - - if options['merge']: self.merge_setup(options['directory']) - self.load(options) - if options['merge']: self.merge_finish(options['message']) - else: - self.save(options) - - merge_branch = 'wl-locale-merge' - last_branch = None - - def merge_setup(self, directory): - self.last_branch = self.current_branch() - rev = open(os.path.join(directory, '.revision')).read() - - self.system('git checkout -b %s %s' % (self.merge_branch, rev)) - - def merge_finish(self, message): - self.system('git commit -a -m "%s"' % message.replace('"', '\\"')) - self.system('git checkout %s' % self.last_branch) - self.system('git merge -s recursive -X theirs %s' % self.merge_branch) - self.system('git branch -d %s' % self.merge_branch) - - def system(self, fmt, *args): - code = os.system(fmt % args) - if code != 0: - raise OSError('Command %s returned with exit code %d' % (fmt % args, code)) - return code diff --git a/apps/wolnelektury_core/management/commands/translation2po.py b/apps/wolnelektury_core/management/commands/translation2po.py deleted file mode 100644 index 6220006fe..000000000 --- a/apps/wolnelektury_core/management/commands/translation2po.py +++ /dev/null @@ -1,135 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import os -import time -from optparse import make_option -from django.conf import settings -from django.core.management.base import BaseCommand -from django.core.management.color import color_style -from django.db import models - -import polib -import modeltranslation.models -from modeltranslation.translator import translator, NotRegistered - - -def metadata(language=''): - "get metadata for PO, given language code" - t = time.strftime('%Y-%m-%d %H:%M%z') - - return { - 'Project-Id-Version': '1.0', - 'Report-Msgid-Bugs-To': settings.CONTACT_EMAIL, - 'POT-Creation-Date': '%s' % t, - 'PO-Revision-Date': '%s' % t, - 'Last-Translator': 'you <you@example.com>', - 'Language-Team': '%s' % dict(settings.LANGUAGES).get(language, language), - 'MIME-Version': '1.0', - 'Content-Type': 'text/plain; charset=utf-8', - 'Content-Transfer-Encoding': '8bit', - } - - -def make_po(language=''): - "Create new POFile object for language code" - po = polib.POFile() - po.metadata = metadata(language) - return po - - -def get_languages(langs): - if not langs: return settings.LANGUAGES - langs = langs.split(',') - lm = dict(settings.LANGUAGES) - return map(lambda l: (l, lm.get(l, l)), langs) - - -class Command(BaseCommand): - option_list = BaseCommand.option_list + ( - make_option('-d', '--directory', help='Specify which directory should hold generated PO files', dest='directory', default=''), - make_option('-l', '--load', help='load locales back to source', action='store_true', dest='load', default=False), - make_option('-L', '--language', help='locales to load', dest='lang', default=None), - make_option('-n', '--poname', help='name of the po file [no extension]', dest='poname', default=None), - make_option('-k', '--keep-running', help='keep running even when missing an input file', dest='keep_running', default=False, action='store_true'), - ) - help = 'Export models from app to po files' - args = 'app' - - def get_models(self, app): - for mdname in dir(app.models): - if mdname[0] == '_': continue - md = getattr(app.models, mdname) - try: - assert issubclass(md, models.Model) - except (AssertionError, TypeError): - continue - - try: - opts = translator.get_options_for_model(md) - except NotRegistered: - continue - else: - yield (md, opts) - - def handle(self, appname, **options): - if not options['poname']: options['poname'] = appname - app = __import__(appname) - - if options['load']: - objects = {} - modmod = {} - for md, opts in self.get_models(app): - if not md.__name__ in objects: - objects[md.__name__] = {} - modmod['model'] = md - - languages = get_languages(options['lang']) - - for lng in zip(*languages)[0]: - pofile = os.path.join(options['directory'], lng, options['poname'] + '.po') - if not os.path.exists(pofile): - if options['keep_running']: - continue - else: - raise OSError('%s po file: %s not found' % (appname, pofile)) - po = polib.pofile(pofile) - for entry in po: - loc, _ignored = entry.occurrences[0] - _appname, modelname, fieldname, pk = loc.split('/') - try: - obj = objects[modelname][pk] - except KeyError: - obj = modmod['model'].objects.get(pk=pk) - objects[modelname][pk] = obj - setattr(obj, fieldname, entry.msgstr) - - for mod, objcs in objects.items(): - for o in objcs.values(): - o.save() - - else: - pofiles = {} - for md, opts in self.get_models(app): - for obj in md.objects.all().order_by('pk'): - for fld, locflds in opts.local_fields.items(): - k = getattr(obj, '%s_%s' % (fld, settings.LANGUAGE_CODE)) or '' - for locfld in locflds: - cur_lang = locfld.language - try: - po = pofiles[cur_lang] - except: - po = make_po(cur_lang) - pofiles[cur_lang] = po - v = locfld.value_from_object(obj) or '' - entry = polib.POEntry( - msgid=k, - msgstr=v, - occurrences=[('%s/%s/%s/%s' % (appname, md.__name__, locfld.name, str(obj.pk)), 0)]) - po.append(entry) - - directory = options['directory'] - for lng, po in pofiles.items(): - os.makedirs(os.path.join(directory, lng)) - po.save(os.path.join(directory, lng, '%s.po' % options['poname'])) diff --git a/apps/wolnelektury_core/management/profile.py b/apps/wolnelektury_core/management/profile.py deleted file mode 100644 index 90e5ec5f5..000000000 --- a/apps/wolnelektury_core/management/profile.py +++ /dev/null @@ -1,17 +0,0 @@ - -import cProfile -import functools -import os - -_object = None - -def profile(meth): - def _wrapper(self, *args, **kwargs): - object = self - setattr(object, "__%s" % meth.__name__, meth) - cProfile.runctx('object.__%s(object, *args, **kwargs)' % (meth.__name__, ), globals(), locals(), - "profile.%d" % os.getpid()) - - functools.update_wrapper(_wrapper, meth) - return _wrapper - diff --git a/apps/wolnelektury_core/signals.py b/apps/wolnelektury_core/signals.py deleted file mode 100644 index 5eb7e8847..000000000 --- a/apps/wolnelektury_core/signals.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf import settings -from django.core.cache import caches -from django.db.models.signals import post_save, post_delete -from django.dispatch import receiver - -from funding.models import Spent -from infopages.models import InfoPage -from libraries.models import Catalog, Library -from pdcounter.models import Author, BookStub - - -@receiver([post_save, post_delete]) -def flush_views_after_manual_change(sender, **kwargs): - """Flushes views cache after changes with some models. - - Changes to those models happen infrequently, so we can afford - to just flush the cache on those instances. - - If changes become too often, relevant bits should be separated - as ssi_included views and flushed individually when needed. - - """ - if sender in (Catalog, Library, InfoPage, Author, BookStub, Spent): - caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() diff --git a/apps/wolnelektury_core/static/css/annoy.css b/apps/wolnelektury_core/static/css/annoy.css deleted file mode 100755 index 7ffa414d5..000000000 --- a/apps/wolnelektury_core/static/css/annoy.css +++ /dev/null @@ -1,52 +0,0 @@ -#annoy-on { - font-size: 13px; - line-height: 1.15em; - - padding: .1em 1em; - background: orange; - z-index: 200; - font-family: Arial, sans-serif; - display: block; - padding: 0 1em; - width: 1em; - text-align:center; - border-radius: 0 0 0 1em; - position: absolute; - top: 0; - right: 0; - color: black; -} - -#annoy { - font-size: 13px; - line-height: 1.15em; - padding: 1em 5em 1em 0; - display: none; - background: orange; - font-family: Arial, sans-serif; - position: relative; - z-index: 200; -} -#annoy p { - margin: 0 0 0 10em;; -} -#annoy a { - color: #4E56C8; -} - -#annoy a#annoy-off { - padding: .5em 1em .5em; - width: 1em; - text-align:center; - font-family: Arial, sans-serif; - display: block; - - border-radius: 0 0 0 1em; - position: absolute; - top: 0; - right: 0; - color: black; -} -#annoy a#annoy-off:hover { - cursor: pointer; -} diff --git a/apps/wolnelektury_core/static/css/jquery.countdown.css b/apps/wolnelektury_core/static/css/jquery.countdown.css deleted file mode 100644 index 3eca47676..000000000 --- a/apps/wolnelektury_core/static/css/jquery.countdown.css +++ /dev/null @@ -1,53 +0,0 @@ -/* jQuery Countdown styles 1.5.7. */ -.hasCountdown { - /*border: 1px solid #ccc; - background-color: #eee;*/ - margin: 1em 0 7em 0; -} -.countdown_rtl { - direction: rtl; -} -.countdown_holding span { - background-color: #ccc; -} -.countdown_row { - clear: both; - width: 100%; - padding: 0px 2px; - text-align: center; -} -.countdown_show1 .countdown_section { - width: 98%; -} -.countdown_show2 .countdown_section { - width: 48%; -} -.countdown_show3 .countdown_section { - width: 32.5%; -} -.countdown_show4 .countdown_section { - width: 24.5%; -} -.countdown_show5 .countdown_section { - width: 19.5%; -} -.countdown_show6 .countdown_section { - width: 16.25%; -} -.countdown_show7 .countdown_section { - width: 14%; -} -.countdown_section { - display: block; - float: left; - font-size: 100%; - text-align: center; -} -.countdown_amount { - font-size: 3.5em; - line-height: 1.4em; -} -.countdown_descr { - display: block; - width: 100%; -} diff --git a/apps/wolnelektury_core/static/css/master.book.css b/apps/wolnelektury_core/static/css/master.book.css deleted file mode 100644 index 29c84765e..000000000 --- a/apps/wolnelektury_core/static/css/master.book.css +++ /dev/null @@ -1,410 +0,0 @@ -body { - font-size: 16px; - font: Georgia, "Times New Roman", serif; - line-height: 1.5em; - margin: 0; -} - -a { - color: blue; - text-decoration: none; -} - -#book-text { - margin: 0 3em; - max-width: 36em; -} - -#other-text #book-text { - width: 36em; -} - -/* ================================== */ -/* = Header with logo and menu = */ -/* ================================== */ -#header { - margin: 3.4em 0 0 1.4em; -} - -img { - border: none; -} - -#logo { - font-size: 1.5em; -} -#logo a { - color: black; -} - -#menu { - position: fixed; - left: 0em; - top: 0em; - width: 100%; - height: 1.5em; - background: #333; - color: #FFF; - opacity: 0.9; - z-index: 99; -} - -#menu ul { - list-style: none; - padding: 0; - margin: 0; -} - -#menu li a { - display: block; - float: left; - height: 1.5em; - margin-left: 0.5em; - text-align: center; - color: #FFF; - padding: 0 1em; -} -#menu li a.menu { - padding-right: 1.5em; -} - -#menu li a.menu:hover, #menu li a.menu:active { - color: #000; - background: #FFF url(/static/img/arrow-down.png) no-repeat center right; -} - -#menu li a.menu.selected { - color: #000; - background: #FFF url(/static/img/arrow-up.png) no-repeat center right; -} -#menu a.menu-link { - display: block; - float: left; - height: 1.5em; - margin-left: 0.5em; - text-align: center; - color: #FFF; -} -#menu span { - color: #888; - font-style: italic; - font-size: .75em; - margin-right: 0.5em; -} - - -#toc, #themes, #nota_red, #info, #other-versions, #objects { - position: fixed; - left: 0em; - top: 1.5em; - width: 37em; - padding: 1.5em; - background: #FFF; - border-bottom: 0.25em solid #DDD; - border-right: 0.25em solid #DDD; - display: none; - height: 16em; - overflow-x: hidden; - overflow-y: auto; - opacity: 0.9; - z-index: 99; -} -#download { - position: fixed; - left: 0em; - top: 1.5em; - width: 37em; - padding: 1.5em; - background: #FFF; - border-bottom: 0.25em solid #DDD; - border-right: 0.25em solid #DDD; - display: none; - height: 10em; - overflow-x: hidden; - overflow-y: auto; - opacity: 0.9; - z-index: 99; -} - -#toc ol, #themes ol, #objects ol { - list-style: none; - padding: 0; - margin: 0; -} - -#toc ol li { - font-weight: bold; -} - -#toc ol ol { - padding: 0 0 1.5em 1.5em; - margin: 0; -} - -#toc ol ol li { - font-weight: normal; -} - -#toc h2 { - display: none; -} - -#toc .anchor { - float: none; - margin: 0; - color: blue; - font-size: 16px; - position: inherit; -} - -#info p { - text-align: justify; - margin: 1.5em 0 0; -} - -/* =================================================== */ -/* = Common elements: headings, paragraphs and lines = */ -/* =================================================== */ -h1 { - font-size: 3em; - margin: 0 0 1.5em 0; - text-align: center; - line-height: 1.5em; - font-weight: bold; -} - -h2 { - font-size: 2em; - margin: 1.5em 0 0; - font-weight: bold; - line-height: 1.5em; -} - -h3 { - font-size: 1.5em; - margin: 1.5em 0 0; - font-weight: normal; - line-height: 1.5em; -} - -h4 { - font-size: 1em; - margin: 1.5em 0 0; - line-height: 1.5em; -} - -p { - margin: 0; -} - -/* ======================== */ -/* = Footnotes and themes = */ -/* ======================== */ -.theme-begin { - border-left: 0.1em solid #DDDDDD; - color: #777; - padding: 0 0.5em; - width: 7.5em; - - font-style: normal; - font-weight: normal; - font-variant: normal; - letter-spacing: 0; - text-transform: none; - text-decoration: none; - - font-size: 16px; - float: right; - margin-right: -9.5em; - margin-bottom: 0.5em; - clear: both; - left: 40em; - line-height: 1.5em; - text-align: left; -} - -.annotation { - font-style: normal; - font-weight: normal; - font-size: 12px; - padding-left: 2px; - position: relative; - top: -4px; -} - -#footnotes { - margin-top: 3em; -} - -#footnotes .annotation { - display: block; - float: left; - width: 2.5em; - clear: both; -} - -#footnotes div { - margin: 1.5em 0 0 0; -} - -#footnotes p, #footnotes ul { - margin-left: 2.5em; - font-size: 0.875em; -} - -#footnotes .permalink { - font-size: .75em; -} - -blockquote { - font-size: 0.875em; -} - -/* ============= */ -/* = Numbering = */ -/* ============= */ -.verse, .paragraph { - position:relative; -} -.anchor { - position: absolute; - margin: -0.25em -0.5em; - left: -3em; - color: #777; - font-size: 12px; - width: 2em; - text-align: center; - padding: 0.25em 0.5em; - line-height: 1.5em; -} - -.anchor:hover, #book-text .anchor:active { - color: #FFF; - background-color: #CCC; -} - -/* =================== */ -/* = Custom elements = */ -/* =================== */ -span.author { - font-size: 0.5em; - display: block; - line-height: 1.5em; - margin-bottom: 0.25em; -} - -span.collection { - font-size: 0.375em; - display: block; - line-height: 1.5em; - margin-bottom: -0.25em; -} - -span.subtitle { - font-size: 0.5em; - display: block; - line-height: 1.5em; - margin-top: -0.25em; -} - -span.translator { - font-size: 0.375em; - display: block; - line-height: 1.5em; - margin-top: 0.25em; -} - -div.didaskalia { - font-style: italic; - margin: 0.5em 0 0 1.5em; -} - -div.kwestia { - margin: 0.5em 0 0; -} - -div.stanza { - margin: 1.5em 0 0; -} - -div.kwestia div.stanza { - margin: 0; -} - -p.paragraph { - text-align: justify; - margin: 1.5em 0 0; -} - -p.motto { - text-align: justify; - font-style: italic; - margin: 1.5em 0 0; -} - -p.motto_podpis { - font-size: 0.875em; - text-align: right; -} - -div.fragment { - border-bottom: 0.1em solid #999; - padding-bottom: 1.5em; -} - -div.note p, div.dedication p, div.note p.paragraph, div.dedication p.paragraph { - text-align: right; - font-style: italic; -} - -hr.spacer { - height: 3em; - visibility: hidden; -} - -hr.spacer-line { - margin: 1.5em 0; - border: none; - border-bottom: 0.1em solid #000; -} - -p.spacer-asterisk { - padding: 0; - margin: 1.5em 0; - text-align: center; -} - -div.person-list ol { - list-style: none; - padding: 0 0 0 1.5em; -} - -p.place-and-time { - font-style: italic; -} - -em.math, em.foreign-word, em.book-title, em.didaskalia { - font-style: italic; -} - -em.author-emphasis { - letter-spacing: 0.1em; -} - -em.person { - font-style: normal; - font-variant: small-caps; -} - -.verse:after { - content: "\feff"; -} - - -/* =================================== */ -/* = Hide some elements for printing = */ -/* =================================== */ - -@media print { - #menu {display: none;} -} diff --git a/apps/wolnelektury_core/static/css/master.picture.css b/apps/wolnelektury_core/static/css/master.picture.css deleted file mode 100644 index 43abda40a..000000000 --- a/apps/wolnelektury_core/static/css/master.picture.css +++ /dev/null @@ -1,60 +0,0 @@ - -#picture-view { - left: 0; - right: 0; - position:absolute; - top: 0; - bottom: 0; - z-index: 10; -} - -#picture-view .picture-wrap { - background-repeat: no-repeat; - margin: 0 auto 0 auto; - display: block; - position: relative; - z-index: 10; -// cursor: move; - -} - -.picture-wrap .mark { - border: 2px solid rgba(200, 200, 200, 0.7); - position: absolute; - display: block; -} - -.picture-wrap .mark .label { - position: absolute; - display: block; - background-color: rgba(200, 200, 200, 0.7); - color: rgba(0,0,0,0.6); - font-size: 0.9rem; -// bottom: -1.5em; -} - -.button.inactive:active, -.button.inactive:link, -.button.inactive:visited -{ - color: #606060 !important; - cursor: not-allowed; -} - -#sponsors { - margin-top: 3em; -} -#sponsors img { - width: 100%; -} - -#spinner { - height: 1em; - z-index:10; -} - -.dropdown-body { - font-size: 0.8rem; - background-color: #444; -} - diff --git a/apps/wolnelektury_core/static/css/new.book.css b/apps/wolnelektury_core/static/css/new.book.css deleted file mode 100644 index a5f4c0676..000000000 --- a/apps/wolnelektury_core/static/css/new.book.css +++ /dev/null @@ -1,275 +0,0 @@ -body { - font-size: 16px; - font-family: Georgia, "Times New Roman", serif; - line-height: 1.5em; - margin: 0; -} - -a { - color: blue; - text-decoration: none; -} - -/* ================================== */ -/* = Header with logo and menu = */ -/* ================================== */ -#toc ol, #themes ol, #objects ol { - list-style: none; - padding: 0; - margin: 0; -} - -#toc ol li { - font-weight: bold; -} - -#toc ol ol { - padding: 0 0 1.5em 1.5em; - margin: 0; -} - -#toc ol ol li { - font-weight: normal; -} - -#toc h2 { - display: none; -} - -#toc .anchor { - float: none; - margin: 0; - color: blue; - font-size: 16px; - position: inherit; -} - -#info p { - margin: 1em 0 0; -} - -#info .sponsors img { - margin-bottom: 1em; -} - - -/* =================================================== */ -/* = Common elements: headings, paragraphs and lines = */ -/* =================================================== */ -h1 { - font-size: 3em; - margin: 1.5em 0; - text-align: center; - line-height: 1.5em; - font-weight: bold; -} - -h2 { - font-size: 2em; - margin: 1.5em 0 0; - font-weight: bold; - line-height: 1.5em; -} - -h3 { - font-size: 1.5em; - margin: 1.5em 0 0; - font-weight: normal; - line-height: 1.5em; -} - -h4 { - font-size: 1em; - margin: 1.5em 0 0; - line-height: 1.5em; -} - -p { - margin: 0; -} - -/* ======================== */ -/* = Footnotes and themes = */ -/* ======================== */ - -.annotation { - font-style: normal; - font-weight: normal; - font-size: .75em; - padding-left: 2px; - position: relative; - top: -4px; -} - -#footnotes { - margin-top: 3em; -} - -#footnotes .annotation { - display: block; - float: left; - width: 2.5em; - clear: both; -} - -#footnotes div { - margin: 1.5em 0 0 0; -} - -#footnotes p, #footnotes ul { - margin-left: 2.5em; - font-size: 0.875em; -} - -#footnotes .permalink { - font-size: .75em; -} - -blockquote { - font-size: 0.875em; -} - -/* ============= */ -/* = Numbering = */ -/* ============= */ -.verse, .paragraph { - position:relative; -} -/*.anchor { - position: absolute; - margin: -0.25em -0.5em; - color: #777; - font-size: 12px; - text-align: center; - padding: 0.25em 0.5em; - line-height: 1.5em; -}*/ - - -/* =================== */ -/* = Custom elements = */ -/* =================== */ -span.author { - font-size: 0.5em; - display: block; - line-height: 1.5em; - margin-bottom: 0.25em; -} - -span.collection { - font-size: 0.375em; - display: block; - line-height: 1.5em; - margin-bottom: -0.25em; -} - -span.subtitle { - font-size: 0.5em; - display: block; - line-height: 1.5em; - margin-top: -0.25em; -} - -span.translator { - font-size: 0.375em; - display: block; - line-height: 1.5em; - margin-top: 0.25em; -} - -div.didaskalia { - font-style: italic; - margin: 0.5em 0 0 1.5em; -} - -div.kwestia { - margin: 0.5em 0 0; -} - -div.stanza { - margin: 1.5em 0; -} - -div.kwestia div.stanza { - margin: 0; -} - -p.paragraph { - text-align: justify; - margin: 0; - text-indent: 1.5em; -} - -.motto { - text-align: justify; - font-style: italic; - margin: 1.5em 0 0; -} - -p.motto_podpis { - font-size: 0.875em; - text-align: right; - margin-bottom: 1.5em; -} - -div.fragment { - border-bottom: 0.1em solid #999; - padding-bottom: 1.5em; -} - -div.note p, div.dedication p, div.note p.paragraph, div.dedication p.paragraph { - text-align: right; - font-style: italic; -} - -hr.spacer { - height: 3em; - visibility: hidden; -} - -hr.spacer-line { - margin: 1.5em 0; - border: none; - border-bottom: 0.1em solid #000; -} - -p.spacer-asterisk { - padding: 0; - margin: 1.5em 0; - text-align: center; -} - -div.person-list ol { - list-style: none; - padding: 0 0 0 1.5em; -} - -p.place-and-time { - font-style: italic; -} - -em.math, em.foreign-word, em.book-title, em.didaskalia { - font-style: italic; -} - -em.author-emphasis { - letter-spacing: 0.1em; -} - -em.person { - font-style: normal; - font-variant: small-caps; -} - -.verse:after { - content: "\feff"; -} - - -/* =================================== */ -/* = Hide some elements for printing = */ -/* =================================== */ - -@media print { - #menu {display: none;} -} diff --git a/apps/wolnelektury_core/static/css/picture_box.css b/apps/wolnelektury_core/static/css/picture_box.css deleted file mode 100644 index a2ab07d1f..000000000 --- a/apps/wolnelektury_core/static/css/picture_box.css +++ /dev/null @@ -1,29 +0,0 @@ -.book-wide-box.picture img.cover { - width: 53.5em; - height: auto; -} - -.picture.book-wide-box .book-box-tools { - margin-left: 50em; // 535px image + 15px margin @ 11pt -} - -.picture li.book-box-download { - width: 15em; -} - - -.Picture-item { - display: inline-block; - vertical-align: top; - float: left; -} - - -.picture.book-wide-box .other-tools { - margin: 5em 0 0 0; -} - - -.picture.book-wide-box #theme-list-wrapper { - margin-left: 55em; -} diff --git a/apps/wolnelektury_core/static/css/simple.css b/apps/wolnelektury_core/static/css/simple.css deleted file mode 100755 index f723889a2..000000000 --- a/apps/wolnelektury_core/static/css/simple.css +++ /dev/null @@ -1,75 +0,0 @@ -/* Legacy simple style for some very old pages. */ - -html { - margin: 0; -} - -body { - margin: 0; - padding: 1em; - color: #2F4110; - background: #FFF url(/static/img/bg.png) repeat-x; - font-size: .75em; - font-family: Verdana,Arial,Helvetica,sans-serif; -} - - - -#body { - margin-top: 2em; -/* - max-width: 900px; - margin:auto; -*/ - margin-left: 400px; -} - -#logo { - float: left; - margin-left: 100px; - margin-top: 4em; -} - -h1 { - font: bold 2.2em Arial,sans-serif; - padding-top: .7em; - margin-bottom: .2em; -} - - -h2 { - font-size: 1.1em; - margin:0; -} - -a { - color: #295158; - text-decoration: none; -} - - -.plain li { - list-style: none; -} - -li { - margin: 1em; -} - -.clr { - clear: both; -} - - -.more { - text-align: right; -} - -table { - margin-top: 1em; -} - -th { - font-weight: normal; - text-align: left; -} diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png deleted file mode 100644 index 954e22dbd..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png deleted file mode 100644 index 64ece5707..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png deleted file mode 100644 index abdc01082..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png deleted file mode 100644 index 9b383f4d2..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png deleted file mode 100644 index a23baad25..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png deleted file mode 100644 index 42ccba269..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png deleted file mode 100644 index 1b1972b56..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png deleted file mode 100644 index f1273672d..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png deleted file mode 100644 index 359397acf..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_222222_256x240.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_222222_256x240.png deleted file mode 100644 index b273ff111..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_222222_256x240.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_228ef1_256x240.png deleted file mode 100644 index a641a371a..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_228ef1_256x240.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png deleted file mode 100644 index 85e63e9f6..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png deleted file mode 100644 index e117effa3..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_ffffff_256x240.png b/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_ffffff_256x240.png deleted file mode 100644 index 42f8f992c..000000000 Binary files a/apps/wolnelektury_core/static/css/ui-lightness/images/ui-icons_ffffff_256x240.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/css/ui-lightness/jquery-ui-1.8.16.custom.css b/apps/wolnelektury_core/static/css/ui-lightness/jquery-ui-1.8.16.custom.css deleted file mode 100644 index da10fff71..000000000 --- a/apps/wolnelektury_core/static/css/ui-lightness/jquery-ui-1.8.16.custom.css +++ /dev/null @@ -1,342 +0,0 @@ -/* - * jQuery UI CSS Framework 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { display: none; } -.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } -.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } -.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } -.ui-helper-clearfix { display: inline-block; } -/* required comment for clearfix to work in Opera \*/ -* html .ui-helper-clearfix { height:1%; } -.ui-helper-clearfix { display:block; } -/* end clearfix */ -.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { cursor: default !important; } - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } - - -/* - * jQuery UI CSS Framework 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - * - * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px - */ - - -/* Component containers -----------------------------------*/ -.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } -.ui-widget .ui-widget { font-size: 1em; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } -.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } -.ui-widget-content a { color: #333333; } -.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } -.ui-widget-header a { color: #ffffff; } - -/* Interaction states -----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } -.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } -.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } -.ui-widget :active { outline: none; } - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } -.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } -.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } -.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } -.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } -.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } -.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } - -/* positioning */ -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-off { background-position: -96px -144px; } -.ui-icon-radio-on { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; } -.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; } -.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } -.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } - -/* Overlays */ -.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } -.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* - * jQuery UI Autocomplete 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Autocomplete#theming - */ -.ui-autocomplete { position: absolute; cursor: default; } - -/* workarounds */ -* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ - -/* - * jQuery UI Menu 1.8.16 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Menu#theming - */ -.ui-menu { - list-style:none; - padding: 2px; - margin: 0; - display:block; - float: left; -} -.ui-menu .ui-menu { - margin-top: -3px; -} -.ui-menu .ui-menu-item { - margin:0; - padding: 0; - zoom: 1; - float: left; - clear: left; - width: 100%; -} -.ui-menu .ui-menu-item a { - text-decoration:none; - display:block; - padding:.2em .4em; - line-height:1.5; - zoom:1; -} -.ui-menu .ui-menu-item a.ui-state-hover, -.ui-menu .ui-menu-item a.ui-state-active { - font-weight: normal; - margin: -1px; -} diff --git a/apps/wolnelektury_core/static/img/1percent-big.png b/apps/wolnelektury_core/static/img/1percent-big.png deleted file mode 100644 index 333413ee6..000000000 Binary files a/apps/wolnelektury_core/static/img/1percent-big.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/android-poster.png b/apps/wolnelektury_core/static/img/android-poster.png deleted file mode 100644 index a518650d4..000000000 Binary files a/apps/wolnelektury_core/static/img/android-poster.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/arrow-down.png b/apps/wolnelektury_core/static/img/arrow-down.png deleted file mode 100644 index 0e32315c0..000000000 Binary files a/apps/wolnelektury_core/static/img/arrow-down.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/arrow-gray.png b/apps/wolnelektury_core/static/img/arrow-gray.png deleted file mode 100644 index b1c590d04..000000000 Binary files a/apps/wolnelektury_core/static/img/arrow-gray.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/arrow-gray.svg b/apps/wolnelektury_core/static/img/arrow-gray.svg deleted file mode 100644 index 02d7075c3..000000000 --- a/apps/wolnelektury_core/static/img/arrow-gray.svg +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - version="1.1" - width="14.117774" - height="7.4593911" - id="svg6288"> - <defs - id="defs6290" /> - <metadata - id="metadata6293"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g - transform="translate(-286.99505,-661.55707)" - id="layer1"> - <g - transform="matrix(0.52354174,0,0,0.52354174,92.72559,391.47243)" - id="layer1-0"> - <path - d="m 397.25241,515.87986 -12.65419,12.65419 -12.74921,-12.62294 -0.78125,0.78125 13.56171,13.43544 13.40419,-13.43544 z" - id="rect4090" - style="fill:#717171;fill-opacity:1;stroke:none" /> - </g> - </g> -</svg> diff --git a/apps/wolnelektury_core/static/img/arrow-teal.png b/apps/wolnelektury_core/static/img/arrow-teal.png deleted file mode 100644 index ce406336b..000000000 Binary files a/apps/wolnelektury_core/static/img/arrow-teal.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/arrow-teal.svg b/apps/wolnelektury_core/static/img/arrow-teal.svg deleted file mode 100644 index 478ed07c2..000000000 --- a/apps/wolnelektury_core/static/img/arrow-teal.svg +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - version="1.1" - width="14.117774" - height="7.4593911" - id="svg6288"> - <defs - id="defs6290" /> - <metadata - id="metadata6293"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g - transform="translate(-284.86155,-665.60555)" - id="layer1"> - <g - transform="matrix(0.52354174,0,0,0.52354174,90.59209,395.52091)" - id="g5216" - style="fill:#0d7e85;fill-opacity:1"> - <path - d="m 397.25241,515.87986 -12.65419,12.65419 -12.74921,-12.62294 -0.78125,0.78125 13.56171,13.43544 13.40419,-13.43544 z" - id="path5218" - style="fill:#0d7e85;fill-opacity:1;stroke:none" /> - </g> - </g> -</svg> diff --git a/apps/wolnelektury_core/static/img/arrow-up.png b/apps/wolnelektury_core/static/img/arrow-up.png deleted file mode 100644 index cdf9cf635..000000000 Binary files a/apps/wolnelektury_core/static/img/arrow-up.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/auth/facebook.png b/apps/wolnelektury_core/static/img/auth/facebook.png deleted file mode 100644 index f9b6e7149..000000000 Binary files a/apps/wolnelektury_core/static/img/auth/facebook.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/auth/google.png b/apps/wolnelektury_core/static/img/auth/google.png deleted file mode 100644 index bf7d11240..000000000 Binary files a/apps/wolnelektury_core/static/img/auth/google.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/auth/openid.png b/apps/wolnelektury_core/static/img/auth/openid.png deleted file mode 100644 index 83e97691f..000000000 Binary files a/apps/wolnelektury_core/static/img/auth/openid.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/auth/twitter.png b/apps/wolnelektury_core/static/img/auth/twitter.png deleted file mode 100644 index d2a55029d..000000000 Binary files a/apps/wolnelektury_core/static/img/auth/twitter.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/backdrop/boltron-3212284622.jpg b/apps/wolnelektury_core/static/img/backdrop/boltron-3212284622.jpg deleted file mode 100644 index 7fe148c19..000000000 Binary files a/apps/wolnelektury_core/static/img/backdrop/boltron-3212284622.jpg and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/backdrop/book-drawer2.jpg b/apps/wolnelektury_core/static/img/backdrop/book-drawer2.jpg deleted file mode 100644 index 88a1ee4be..000000000 Binary files a/apps/wolnelektury_core/static/img/backdrop/book-drawer2.jpg and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/backdrop/horiavarlan-4268896468.jpg b/apps/wolnelektury_core/static/img/backdrop/horiavarlan-4268896468.jpg deleted file mode 100644 index acc80b6e7..000000000 Binary files a/apps/wolnelektury_core/static/img/backdrop/horiavarlan-4268896468.jpg and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/bg-header.png b/apps/wolnelektury_core/static/img/bg-header.png deleted file mode 100644 index 4e4cdf9a7..000000000 Binary files a/apps/wolnelektury_core/static/img/bg-header.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/bg.png b/apps/wolnelektury_core/static/img/bg.png deleted file mode 100644 index be7d63a7c..000000000 Binary files a/apps/wolnelektury_core/static/img/bg.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/book-parent.png b/apps/wolnelektury_core/static/img/book-parent.png deleted file mode 100644 index 566859807..000000000 Binary files a/apps/wolnelektury_core/static/img/book-parent.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/book.png b/apps/wolnelektury_core/static/img/book.png deleted file mode 100644 index f26483979..000000000 Binary files a/apps/wolnelektury_core/static/img/book.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/doodle/20110908-android.png b/apps/wolnelektury_core/static/img/doodle/20110908-android.png deleted file mode 100644 index 664b579f5..000000000 Binary files a/apps/wolnelektury_core/static/img/doodle/20110908-android.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/doodle/20110908-logo.png b/apps/wolnelektury_core/static/img/doodle/20110908-logo.png deleted file mode 100644 index f4ab58319..000000000 Binary files a/apps/wolnelektury_core/static/img/doodle/20110908-logo.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/download.png b/apps/wolnelektury_core/static/img/download.png deleted file mode 100644 index 54d1bf904..000000000 Binary files a/apps/wolnelektury_core/static/img/download.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/download.svg b/apps/wolnelektury_core/static/img/download.svg deleted file mode 100644 index cb49aa2ba..000000000 --- a/apps/wolnelektury_core/static/img/download.svg +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - version="1.1" - width="21.03125" - height="21.03125" - id="svg6288"> - <defs - id="defs6290" /> - <metadata - id="metadata6293"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g - transform="translate(-232.34152,-641.84656)" - id="layer1"> - <g - transform="translate(-139.3058,123.6384)" - id="layer1-8" - style="fill:#0d7e85;fill-opacity:1"> - <path - d="m 382.14732,518.20816 c -5.80761,0 -10.5,4.69238 -10.5,10.5 0,5.80762 4.69239,10.53125 10.5,10.53125 5.80762,0 10.53125,-4.72363 10.53125,-10.53125 0,-5.80762 -4.72363,-10.5 -10.53125,-10.5 z m -3.21875,7.65625 3.21875,3.28125 3.21875,-3.25 0.6875,0.625 -3.9375,4 -3.875,-4 0.6875,-0.65625 z m -0.3125,6.28125 7.0625,0 0,0.96875 -7.0625,0 0,-0.96875 z" - id="path3167" - style="fill:#0d7e85;fill-opacity:1;stroke:none" /> - </g> - </g> -</svg> diff --git a/apps/wolnelektury_core/static/img/epub-www.jpg b/apps/wolnelektury_core/static/img/epub-www.jpg deleted file mode 100644 index 84016cf6e..000000000 Binary files a/apps/wolnelektury_core/static/img/epub-www.jpg and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/epub.png b/apps/wolnelektury_core/static/img/epub.png deleted file mode 100644 index 32510fdfb..000000000 Binary files a/apps/wolnelektury_core/static/img/epub.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/favicon.ico b/apps/wolnelektury_core/static/img/favicon.ico deleted file mode 100644 index 3f2aacc37..000000000 Binary files a/apps/wolnelektury_core/static/img/favicon.ico and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/favicon.png b/apps/wolnelektury_core/static/img/favicon.png deleted file mode 100644 index 9794f3588..000000000 Binary files a/apps/wolnelektury_core/static/img/favicon.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/indicator.gif b/apps/wolnelektury_core/static/img/indicator.gif deleted file mode 100644 index 085ccaeca..000000000 Binary files a/apps/wolnelektury_core/static/img/indicator.gif and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/kindle-poster-260.png b/apps/wolnelektury_core/static/img/kindle-poster-260.png deleted file mode 100644 index 1fd435eee..000000000 Binary files a/apps/wolnelektury_core/static/img/kindle-poster-260.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/kindle-poster.png b/apps/wolnelektury_core/static/img/kindle-poster.png deleted file mode 100644 index 63560d273..000000000 Binary files a/apps/wolnelektury_core/static/img/kindle-poster.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/licenses/cc-by-sa.png b/apps/wolnelektury_core/static/img/licenses/cc-by-sa.png deleted file mode 100644 index 7b15bc451..000000000 Binary files a/apps/wolnelektury_core/static/img/licenses/cc-by-sa.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/licenses/cc-by-sa.svg b/apps/wolnelektury_core/static/img/licenses/cc-by-sa.svg deleted file mode 100644 index 140e9b8c6..000000000 --- a/apps/wolnelektury_core/static/img/licenses/cc-by-sa.svg +++ /dev/null @@ -1,482 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - version="1.0" - width="651.2334" - height="150.00021" - id="svg1833" - sodipodi:version="0.32" - inkscape:version="0.48.3.1 r9886" - sodipodi:docname="cc-by-sa.svg" - inkscape:output_extension="org.inkscape.output.svg.inkscape" - inkscape:export-filename="/home/rczajka/workspace/wolnelektury/apps/wolnelektury_core/static/img/licenses/cc-by-sa.png" - inkscape:export-xdpi="12.599982" - inkscape:export-ydpi="12.599982"> - <metadata - id="metadata74"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <sodipodi:namedview - inkscape:window-height="425" - inkscape:window-width="569" - inkscape:pageshadow="2" - inkscape:pageopacity="0.0" - guidetolerance="10.0" - gridtolerance="10.0" - objecttolerance="10.0" - borderopacity="1.0" - bordercolor="#666666" - pagecolor="#ffffff" - id="base" - showgrid="false" - inkscape:zoom="0.21950618" - inkscape:cx="378.75899" - inkscape:cy="295.52172" - inkscape:window-x="573" - inkscape:window-y="352" - inkscape:current-layer="svg1833" - fit-margin-top="0" - fit-margin-left="0" - fit-margin-right="0" - fit-margin-bottom="0" - inkscape:window-maximized="0" /> - <defs - id="defs1835"> - <linearGradient - id="linearGradient3117"> - <stop - style="stop-color:#000000;stop-opacity:0" - offset="0" - id="stop3131" /> - <stop - style="stop-color:#000000;stop-opacity:0.16494845" - offset="1" - id="stop3121" /> - </linearGradient> - <linearGradient - x1="233.35068" - y1="303.90625" - x2="315.43057" - y2="303.90625" - id="linearGradient3123" - xlink:href="#linearGradient3117" - gradientUnits="userSpaceOnUse" /> - <linearGradient - id="linearGradient15296"> - <stop - style="stop-color:#ff5959;stop-opacity:1" - offset="0" - id="stop15298" /> - <stop - style="stop-color:#df0000;stop-opacity:1" - offset="1" - id="stop15300" /> - </linearGradient> - <linearGradient - id="linearGradient17969"> - <stop - style="stop-color:#ffb73d;stop-opacity:1" - offset="0" - id="stop17971" /> - <stop - style="stop-color:#ffa000;stop-opacity:1" - offset="1" - id="stop17973" /> - </linearGradient> - <linearGradient - id="linearGradient18870"> - <stop - style="stop-color:#fff18d;stop-opacity:1" - offset="0" - id="stop18872" /> - <stop - style="stop-color:#ffcd01;stop-opacity:1" - offset="1" - id="stop18874" /> - </linearGradient> - <linearGradient - id="linearGradient23319"> - <stop - style="stop-color:#ffffff;stop-opacity:1" - offset="0" - id="stop23321" /> - <stop - style="stop-color:#ffffff;stop-opacity:0" - offset="1" - id="stop23323" /> - </linearGradient> - <linearGradient - id="linearGradient20648"> - <stop - style="stop-color:#00a000;stop-opacity:0.25892857" - offset="0" - id="stop20650" /> - <stop - style="stop-color:#008000;stop-opacity:1" - offset="1" - id="stop20652" /> - </linearGradient> - <linearGradient - id="linearGradient21541"> - <stop - style="stop-color:#263cce;stop-opacity:1" - offset="0" - id="stop21543" /> - <stop - style="stop-color:#263cce;stop-opacity:0" - offset="1" - id="stop21545" /> - </linearGradient> - <linearGradient - id="linearGradient25099"> - <stop - style="stop-color:#652f99;stop-opacity:1" - offset="0" - id="stop25101" /> - <stop - style="stop-color:#502679;stop-opacity:0.65178573" - offset="1" - id="stop25103" /> - </linearGradient> - <linearGradient - x1="89" - y1="118" - x2="126" - y2="155" - id="linearGradient3400" - xlink:href="#linearGradient15296" - gradientUnits="userSpaceOnUse" /> - <linearGradient - x1="89.626488" - y1="191.40311" - x2="126.02959" - y2="155" - id="linearGradient3402" - xlink:href="#linearGradient17969" - gradientUnits="userSpaceOnUse" /> - <linearGradient - x1="157.68582" - y1="186.68582" - x2="126" - y2="155" - id="linearGradient3404" - xlink:href="#linearGradient18870" - gradientUnits="userSpaceOnUse" /> - <linearGradient - x1="149.80643" - y1="178.80643" - x2="92.016411" - y2="121.01641" - id="linearGradient3406" - xlink:href="#linearGradient23319" - gradientUnits="userSpaceOnUse" /> - <linearGradient - x1="91.149223" - y1="189.85078" - x2="126" - y2="155" - id="linearGradient3408" - xlink:href="#linearGradient20648" - gradientUnits="userSpaceOnUse" /> - <linearGradient - x1="89" - y1="155" - x2="163" - y2="155" - id="linearGradient3410" - xlink:href="#linearGradient21541" - gradientUnits="userSpaceOnUse" /> - <linearGradient - x1="126" - y1="155" - x2="57.340927" - y2="115.35966" - id="linearGradient3412" - xlink:href="#linearGradient25099" - gradientUnits="userSpaceOnUse" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient3117" - id="linearGradient3103" - gradientUnits="userSpaceOnUse" - x1="233.35068" - y1="303.90625" - x2="315.43057" - y2="303.90625" - gradientTransform="matrix(10,0,0,10,-2333.5067,-2872.5692)" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient15296" - id="linearGradient3105" - gradientUnits="userSpaceOnUse" - x1="89" - y1="118" - x2="126" - y2="155" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient17969" - id="linearGradient3107" - gradientUnits="userSpaceOnUse" - x1="89.626488" - y1="191.40311" - x2="126.02959" - y2="155" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient18870" - id="linearGradient3109" - gradientUnits="userSpaceOnUse" - x1="157.68582" - y1="186.68582" - x2="126" - y2="155" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient23319" - id="linearGradient3111" - gradientUnits="userSpaceOnUse" - x1="149.80643" - y1="178.80643" - x2="92.016411" - y2="121.01641" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient20648" - id="linearGradient3113" - gradientUnits="userSpaceOnUse" - x1="91.149223" - y1="189.85078" - x2="126" - y2="155" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient21541" - id="linearGradient3115" - gradientUnits="userSpaceOnUse" - x1="89" - y1="155" - x2="163" - y2="155" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient25099" - id="linearGradient3118" - gradientUnits="userSpaceOnUse" - x1="126" - y1="155" - x2="57.340927" - y2="115.35966" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient15296" - id="linearGradient3181" - gradientUnits="userSpaceOnUse" - x1="89" - y1="118" - x2="126" - y2="155" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient17969" - id="linearGradient3183" - gradientUnits="userSpaceOnUse" - x1="89.626488" - y1="191.40311" - x2="126.02959" - y2="155" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient18870" - id="linearGradient3185" - gradientUnits="userSpaceOnUse" - x1="157.68582" - y1="186.68582" - x2="126" - y2="155" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient23319" - id="linearGradient3187" - gradientUnits="userSpaceOnUse" - x1="149.80643" - y1="178.80643" - x2="92.016411" - y2="121.01641" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient20648" - id="linearGradient3189" - gradientUnits="userSpaceOnUse" - x1="91.149223" - y1="189.85078" - x2="126" - y2="155" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient21541" - id="linearGradient3191" - gradientUnits="userSpaceOnUse" - x1="89" - y1="155" - x2="163" - y2="155" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient25099" - id="linearGradient3193" - gradientUnits="userSpaceOnUse" - x1="126" - y1="155" - x2="57.340927" - y2="115.35966" /> - </defs> - <g - id="g25107" - transform="matrix(0.69444443,0,0,0.69444443,-102.43055,-85.76383)" - inkscape:export-filename="/home/rczajka/workspace/wolnelektury/apps/wolnelektury_core/static/img/licenses/cc-by-sa.png" - inkscape:export-xdpi="8.9999876" - inkscape:export-ydpi="8.9999876"> - <path - id="path11693" - style="fill:url(#linearGradient3181);fill-opacity:1;fill-rule:nonzero;stroke:none" - transform="matrix(2.918919,0,0,2.918919,-112.2838,-220.9323)" - d="m 163,155 c 0,20.43454 -16.56546,37 -37,37 -20.43454,0 -37,-16.56546 -37,-37 0,-20.43454 16.56546,-37 37,-37 l 0,37 37,0 z" - inkscape:connector-curvature="0" /> - <path - id="path10806" - style="fill:url(#linearGradient3183);fill-opacity:1;fill-rule:nonzero;stroke:none" - transform="matrix(0,2.501931,-2.501931,0,643.2993,-83.74315)" - d="m 163,155 c 0,20.43454 -16.56546,37 -37,37 -20.43454,0 -37,-16.56546 -37,-37 0,-20.43454 16.56546,-37 37,-37 l 0,37 37,0 z" - inkscape:connector-curvature="0" /> - <path - id="path8149" - style="fill:url(#linearGradient3185);fill-opacity:1;fill-rule:nonzero;stroke:none" - transform="matrix(-2.084941,0,0,-2.084941,518.2029,554.6661)" - d="m 163,155 c 0,20.43454 -16.56546,37 -37,37 -20.43454,0 -37,-16.56546 -37,-37 0,-20.43454 16.56546,-37 37,-37 l 0,37 37,0 z" - inkscape:connector-curvature="0" /> - <path - id="path13467" - style="fill:url(#linearGradient3187);fill-opacity:1;fill-rule:nonzero;stroke:none" - transform="matrix(0,-1.667952,1.667952,0,-3.032742,441.6625)" - d="m 163,155 c 0,20.43454 -16.56546,37 -37,37 -20.43454,0 -37,-16.56546 -37,-37 0,-20.43454 16.56546,-37 37,-37 l 0,37 37,0 z" - inkscape:connector-curvature="0" /> - <path - id="path6377" - style="fill:url(#linearGradient3189);fill-opacity:1;fill-rule:nonzero;stroke:none" - transform="matrix(1.250965,0,0,1.250965,97.87857,37.60054)" - d="m 163,155 c 0,20.43454 -16.56546,37 -37,37 -20.43454,0 -37,-16.56546 -37,-37 0,-20.43454 16.56546,-37 37,-37 l 0,37 37,0 z" - inkscape:connector-curvature="0" /> - <path - id="path3654" - style="fill:url(#linearGradient3191);fill-opacity:1;fill-rule:nonzero;stroke:none" - transform="matrix(0,0.833976,-0.833976,0,384.7666,127.0362)" - d="m 163,155 c 0,20.43454 -16.56546,37 -37,37 -20.43454,0 -37,-16.56546 -37,-37 0,-20.43454 16.56546,-37 37,-37 l 0,37 37,0 z" - inkscape:connector-curvature="0" /> - <path - id="path3660" - style="fill:url(#linearGradient3193);fill-opacity:1;fill-rule:nonzero;stroke:none" - transform="matrix(-0.416988,0,0,-0.416988,308.0406,296.1335)" - d="m 163,155 c 0,20.43454 -16.56546,37 -37,37 -20.43454,0 -37,-16.56546 -37,-37 0,-20.43454 16.56546,-37 37,-37 20.43454,0 37,16.56546 37,37 z" - inkscape:connector-curvature="0" /> - </g> - <g - transform="matrix(10,0,0,10,-2483.3886,-2889.9518)" - id="g3877" - style="fill:#b3b3b3;fill-opacity:1" - inkscape:export-filename="/home/rczajka/workspace/wolnelektury/apps/wolnelektury_core/static/img/licenses/cc-by-sa.png" - inkscape:export-xdpi="12.64246" - inkscape:export-ydpi="12.64246"> - <g - transform="matrix(0.234375,0,0,0.234364,281.758,288.9959)" - style="display:inline;fill:#b3b3b3;fill-opacity:1" - id="layer3"> - <path - d="M 31.1875,0 C 13.904525,0.43835438 0,14.612004 0,32 0,49.663996 14.336004,64 32,64 49.663996,64 64,49.663996 64,32 64,14.336004 49.663996,0 32,0 31.724,0 31.461833,-0.00695801 31.1875,0 z M 31.15625,5.5 C 31.439783,5.49101 31.714297,5.5 32,5.5 46.628003,5.4999998 58.5,17.371998 58.5,32 58.499998,46.628001 46.628002,58.5 32,58.5 17.371999,58.499999 5.5,46.628002 5.5,32 5.4999999,17.657701 16.922915,5.9512829 31.15625,5.5 z" - style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none" - id="path3742" - inkscape:connector-curvature="0" /> - <g - id="g6525" - style="fill:#b3b3b3;fill-opacity:1"> - <path - d="m 36.6875,15.75 c 0,2.554317 -2.070683,4.625 -4.625,4.625 -2.554317,0 -4.625,-2.070683 -4.625,-4.625 0,-2.554317 2.070683,-4.625 4.625,-4.625 2.554317,0 4.625,2.070683 4.625,4.625 l 0,0 z" - transform="translate(-0.0625,0.185547)" - style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none" - id="path2838" - inkscape:connector-curvature="0" /> - <path - d="m 27.215125,52.689453 9.56975,0 0,-15.378905 2.893008,0 c 0,0 -0.0011,-10.990367 0,-12.720111 -0.0028,-0.456306 0.04119,-1.365057 -0.620739,-2.026989 -0.661932,-0.661932 -1.555399,-0.621804 -2.02699,-0.620739 -0.47159,0.0011 -9.588717,0.0011 -10.060308,0 -0.471591,-0.0011 -1.365057,-0.04119 -2.026989,0.620739 -0.661933,0.661932 -0.617898,1.570683 -0.620739,2.026989 0.0011,1.729744 0,12.720111 0,12.720111 l 2.893007,0 0,15.378905 z" - style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none" - id="path3746" - inkscape:connector-curvature="0" /> - </g> - </g> - <g - transform="matrix(0.236997,0,0,0.236675,265.0539,288.9952)" - id="g3561" - style="fill:#b3b3b3;fill-opacity:1"> - <g - id="Background" - style="fill:#b3b3b3;fill-opacity:1" /> - <g - id="Guides" - style="fill:#b3b3b3;fill-opacity:1" /> - <g - id="Foreground" - style="fill:#b3b3b3;fill-opacity:1"> - <g - id="g3566" - style="fill:#b3b3b3;fill-opacity:1"> - <path - d="M 31.603,0 C 22.92,0 15.28,3.213 9.376,9.203 3.299,15.368 0,23.355 0,31.69 c 0,8.421 3.212,16.235 9.29,22.312 6.078,6.078 13.978,9.376 22.313,9.376 8.334,0 16.409,-3.299 22.66,-9.463 5.904,-5.817 9.029,-13.544 9.029,-22.226 0,-8.595 -3.125,-16.409 -9.116,-22.4 C 48.098,3.213 40.285,0 31.603,0 z m 0.086,5.73 c 7.12,0 13.458,2.691 18.406,7.64 4.862,4.862 7.466,11.287 7.466,18.319 0,7.119 -2.518,13.37 -7.379,18.146 -5.123,5.036 -11.721,7.727 -18.493,7.727 -6.858,0 -13.283,-2.691 -18.232,-7.64 C 8.508,44.973 5.73,38.462 5.73,31.69 5.73,24.831 8.508,18.32 13.457,13.284 18.319,8.335 24.57,5.73 31.689,5.73 z" - style="fill-rule:evenodd;fill:#b3b3b3;fill-opacity:1" - id="path3568" - inkscape:connector-curvature="0" /> - <path - d="m 31.281,26.424 c -1.79,-3.264 -4.844,-4.563 -8.389,-4.563 -5.16,0 -9.267,3.65 -9.267,9.829 0,6.283 3.861,9.829 9.442,9.829 3.581,0 6.635,-1.966 8.319,-4.949 l -3.931,-2.001 c -0.878,2.106 -2.212,2.738 -3.896,2.738 -2.914,0 -4.248,-2.422 -4.248,-5.616 0,-3.194 1.124,-5.617 4.248,-5.617 0.842,0 2.527,0.457 3.51,2.562 l 4.212,-2.212 z" - style="fill-rule:evenodd;fill:#b3b3b3;fill-opacity:1" - id="path3570" - inkscape:connector-curvature="0" /> - <path - d="m 49.562,26.424 c -1.79,-3.264 -4.844,-4.563 -8.389,-4.563 -5.16,0 -9.267,3.65 -9.267,9.829 0,6.283 3.861,9.829 9.443,9.829 3.58,0 6.634,-1.966 8.319,-4.949 l -3.931,-2.001 c -0.878,2.106 -2.211,2.738 -3.896,2.738 -2.914,0 -4.248,-2.422 -4.248,-5.616 0,-3.194 1.124,-5.617 4.248,-5.617 0.842,0 2.527,0.457 3.51,2.562 l 4.211,-2.212 z" - style="fill-rule:evenodd;fill:#b3b3b3;fill-opacity:1" - id="path3572" - inkscape:connector-curvature="0" /> - </g> - </g> - </g> - <g - transform="matrix(0.234375,0,0,0.234364,298.4622,288.9959)" - id="g3832" - style="fill:#b3b3b3;fill-opacity:1"> - <path - d="M 31.1875,0 C 13.904525,0.43835438 0,14.612004 0,32 0,49.663996 14.336004,64 32,64 49.663996,64 64,49.663996 64,32 64,14.336004 49.663996,0 32,0 31.724,0 31.461833,-0.00695801 31.1875,0 z M 31.15625,5.5 C 31.439783,5.49101 31.714297,5.5 32,5.5 46.628003,5.4999998 58.5,17.371998 58.5,32 58.499998,46.628001 46.628002,58.5 32,58.5 17.371999,58.499999 5.5,46.628002 5.5,32 5.4999999,17.657701 16.922915,5.9512829 31.15625,5.5 z" - style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none" - id="path1334" - inkscape:connector-curvature="0" /> - <path - d="m 18.115779,26.784547 -2.740778,0 6.21875,6.96875 6.21875,-6.96875 -2.243852,0 c 0.486099,-3.3998 3.476871,-5.586425 6.931352,-5.3125 0.136556,0.01083 0.267854,0 0.40625,0 5.62743,0 7.84682,4.255865 8.03125,10.53125 0.19247,6.549199 -3.60349,10.620376 -8.03125,10.53125 -4.673386,-0.09221 -6.444049,-2.32751 -7.125,-5.71875 l -8.34375,0 c 1.373177,7.811231 7.123855,12.392036 15.28125,12.40625 9.23458,0.01625 15.906248,-7.709347 15.906248,-17.21875 0,-10.154893 -6.669368,-17.21875 -15.906248,-17.21875 -0.274244,0 -0.541652,-0.01489 -0.8125,0 -0.0656,0.0036 -0.12197,-0.0011 -0.1875,0 -5.772209,0.09597 -13.602929,4.139742 -13.602972,12 z" - style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none" - id="path2371" - inkscape:connector-curvature="0" /> - </g> - </g> -</svg> diff --git a/apps/wolnelektury_core/static/img/listen.png b/apps/wolnelektury_core/static/img/listen.png deleted file mode 100644 index 68627221c..000000000 Binary files a/apps/wolnelektury_core/static/img/listen.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/listen.svg b/apps/wolnelektury_core/static/img/listen.svg deleted file mode 100644 index 714768f54..000000000 --- a/apps/wolnelektury_core/static/img/listen.svg +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - version="1.1" - width="21.03125" - height="20.96875" - id="svg6288"> - <defs - id="defs6290" /> - <metadata - id="metadata6293"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g - transform="translate(-267.1717,-650.13426)" - id="layer1"> - <g - transform="translate(-105.38857,136.37923)" - id="layer1-6" - style="fill:#0d7e85;fill-opacity:1"> - <path - d="m 383.09152,513.75503 c -5.80553,0 -10.53125,4.67683 -10.53125,10.46875 0,5.79192 4.72572,10.5 10.53125,10.5 5.80553,0 10.5,-4.70808 10.5,-10.5 -10e-4,-5.79103 -4.69536,-10.46875 -10.5,-10.46875 z m 3.5,6.59375 0,6.625 c 0.0276,0.0977 0.0625,0.20878 0.0625,0.3125 0,0.82986 -0.92754,1.5 -2.0625,1.5 -1.13496,0 -2.03125,-0.67014 -2.03125,-1.5 0,-0.82986 0.89629,-1.5 2.03125,-1.5 0.35672,0 0.67536,0.0709 0.96875,0.1875 l 0.0312,-4.1875 -4,0.96875 0.0312,4.1875 c 0.0276,0.0977 0.0312,0.20878 0.0312,0.3125 0,0.82986 -0.92754,1.5 -2.0625,1.5 -1.13496,0 -2.03125,-0.67014 -2.03125,-1.5 0,-0.82986 0.89629,-1.5 2.03125,-1.5 0.34893,0 0.67995,0.0756 0.96875,0.1875 l 0,-4.15625 6.03125,-1.4375 z m -7,6.375 c -0.56138,0 -1.03125,0.21931 -1.03125,0.5 0,0.28069 0.46987,0.53125 1.03125,0.53125 0.56138,0 1,-0.25056 1,-0.53125 -1.2e-4,-0.28065 -0.43871,-0.5 -1,-0.5 z m 5,0.0312 c -0.56138,0 -1.03125,0.21931 -1.03125,0.5 0,0.28069 0.46987,0.53125 1.03125,0.53125 0.56138,0 1,-0.25056 1,-0.53125 -1.2e-4,-0.28065 -0.43871,-0.5 -1,-0.5 z" - id="path3184" - style="fill:#0d7e85;fill-opacity:1;stroke:none" /> - </g> - </g> -</svg> diff --git a/apps/wolnelektury_core/static/img/logo-220.png b/apps/wolnelektury_core/static/img/logo-220.png deleted file mode 100644 index 9b15e88a3..000000000 Binary files a/apps/wolnelektury_core/static/img/logo-220.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/logo-bez.png b/apps/wolnelektury_core/static/img/logo-bez.png deleted file mode 100644 index 213c442d4..000000000 Binary files a/apps/wolnelektury_core/static/img/logo-bez.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/logo-big.png b/apps/wolnelektury_core/static/img/logo-big.png deleted file mode 100644 index fae49ea96..000000000 Binary files a/apps/wolnelektury_core/static/img/logo-big.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/logo-fbc.png b/apps/wolnelektury_core/static/img/logo-fbc.png deleted file mode 100644 index c7802d3d3..000000000 Binary files a/apps/wolnelektury_core/static/img/logo-fbc.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/logo-neon.png b/apps/wolnelektury_core/static/img/logo-neon.png deleted file mode 100644 index c729463be..000000000 Binary files a/apps/wolnelektury_core/static/img/logo-neon.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/logo.png b/apps/wolnelektury_core/static/img/logo.png deleted file mode 100644 index 398f45d01..000000000 Binary files a/apps/wolnelektury_core/static/img/logo.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/logo_nck.jpg b/apps/wolnelektury_core/static/img/logo_nck.jpg deleted file mode 100644 index c030f6a9a..000000000 Binary files a/apps/wolnelektury_core/static/img/logo_nck.jpg and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/logo_nck_200horiz_trans.png b/apps/wolnelektury_core/static/img/logo_nck_200horiz_trans.png deleted file mode 100644 index 897a8352b..000000000 Binary files a/apps/wolnelektury_core/static/img/logo_nck_200horiz_trans.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/logo_nck_200trans.png b/apps/wolnelektury_core/static/img/logo_nck_200trans.png deleted file mode 100644 index 2731aacec..000000000 Binary files a/apps/wolnelektury_core/static/img/logo_nck_200trans.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/mobi.png b/apps/wolnelektury_core/static/img/mobi.png deleted file mode 100644 index 1631b896d..000000000 Binary files a/apps/wolnelektury_core/static/img/mobi.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/odt.png b/apps/wolnelektury_core/static/img/odt.png deleted file mode 100644 index c0c2602f1..000000000 Binary files a/apps/wolnelektury_core/static/img/odt.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/payu.png b/apps/wolnelektury_core/static/img/payu.png deleted file mode 100644 index 2e8abf480..000000000 Binary files a/apps/wolnelektury_core/static/img/payu.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/pdf.png b/apps/wolnelektury_core/static/img/pdf.png deleted file mode 100644 index 5fe5bbe23..000000000 Binary files a/apps/wolnelektury_core/static/img/pdf.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/procent.png b/apps/wolnelektury_core/static/img/procent.png deleted file mode 100644 index 3d0f82d81..000000000 Binary files a/apps/wolnelektury_core/static/img/procent.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/progress-pixel.png b/apps/wolnelektury_core/static/img/progress-pixel.png deleted file mode 100644 index 5af1bfdfe..000000000 Binary files a/apps/wolnelektury_core/static/img/progress-pixel.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/read.png b/apps/wolnelektury_core/static/img/read.png deleted file mode 100644 index 1d5ab0e7b..000000000 Binary files a/apps/wolnelektury_core/static/img/read.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/read.svg b/apps/wolnelektury_core/static/img/read.svg deleted file mode 100644 index f3fd5b65c..000000000 --- a/apps/wolnelektury_core/static/img/read.svg +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - version="1.1" - width="21.03125" - height="20.9375" - id="svg6288"> - <defs - id="defs6290" /> - <metadata - id="metadata6293"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g - transform="translate(-225.71498,-640.7418)" - id="layer1"> - <g - transform="translate(-138.76939,118.84837)" - id="layer1-3" - style="fill:#0d7e85;fill-opacity:1"> - <path - d="m 375.01562,521.89343 c -5.80761,0 -10.53125,4.68702 -10.53125,10.46875 0,5.78173 4.72364,10.46875 10.53125,10.46875 5.80762,0 10.5,-4.68702 10.5,-10.46875 0,-5.78173 -4.69238,-10.46875 -10.5,-10.46875 z m -0.5,5.96875 c 0.15292,-0.0191 0.31239,0 0.46875,0 2.5018,0 4.52957,2.4714 6.5625,4.53125 -2.03293,2.12615 -4.0607,4.5 -6.5625,4.5 -2.5018,0 -4.46706,-2.44014 -6.5,-4.5 1.84373,-1.86896 3.73739,-4.2453 6.03125,-4.53125 z m 0.46875,1 c -2.5018,0 -3.50211,1.55979 -5.46875,3.53125 2.03294,2.05986 2.96695,3.4375 5.46875,3.4375 2.5018,0 3.46707,-1.31135 5.5,-3.4375 -2.03293,-2.05985 -2.9982,-3.53125 -5.5,-3.53125 z m 0.0312,1.03125 c 1.37294,0 2.5,1.12096 2.5,2.5 0,1.37904 -1.12706,2.46875 -2.5,2.46875 -1.37294,0 -2.46875,-1.08971 -2.46875,-2.46875 0,-1.37904 1.09581,-2.5 2.46875,-2.5 z m -0.0312,0.96875 c -0.82987,0 -1.5,0.67013 -1.5,1.5 0,0.82986 0.67013,1.5 1.5,1.5 0.82986,0 1.5,-0.67014 1.5,-1.5 0,-0.82987 -0.67014,-1.5 -1.5,-1.5 z" - id="path3144" - style="fill:#0d7e85;fill-opacity:1;stroke:none" /> - </g> - </g> -</svg> diff --git a/apps/wolnelektury_core/static/img/s5/blank.gif b/apps/wolnelektury_core/static/img/s5/blank.gif deleted file mode 100644 index 75b945d25..000000000 Binary files a/apps/wolnelektury_core/static/img/s5/blank.gif and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/s5/bodybg.gif b/apps/wolnelektury_core/static/img/s5/bodybg.gif deleted file mode 100755 index 5f448a16f..000000000 Binary files a/apps/wolnelektury_core/static/img/s5/bodybg.gif and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/s5/iepngfix.htc b/apps/wolnelektury_core/static/img/s5/iepngfix.htc deleted file mode 100644 index bba2db756..000000000 --- a/apps/wolnelektury_core/static/img/s5/iepngfix.htc +++ /dev/null @@ -1,42 +0,0 @@ -<public:component> -<public:attach event="onpropertychange" onevent="doFix()" /> - -<script> - -// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com -// Free usage permitted as long as this notice remains intact. - -// This must be a path to a blank image. That's all the configuration you need here. -var blankImg = 'ui/default/blank.gif'; - -var f = 'DXImageTransform.Microsoft.AlphaImageLoader'; - -function filt(s, m) { - if (filters[f]) { - filters[f].enabled = s ? true : false; - if (s) with (filters[f]) { src = s; sizingMethod = m } - } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")'; -} - -function doFix() { - if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) || - (event && !/(background|src)/.test(event.propertyName))) return; - - if (tagName == 'IMG') { - if ((/\.png$/i).test(src)) { - filt(src, 'image'); // was 'scale' - src = blankImg; - } else if (src.indexOf(blankImg) < 0) filt(); - } else if (style.backgroundImage) { - if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) { - var s = RegExp.$1; - style.backgroundImage = ''; - filt(s, 'crop'); - } else filt(); - } -} - -doFix(); - -</script> -</public:component> \ No newline at end of file diff --git a/apps/wolnelektury_core/static/img/search.png b/apps/wolnelektury_core/static/img/search.png deleted file mode 100644 index 8f032bf0b..000000000 Binary files a/apps/wolnelektury_core/static/img/search.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/social/bigfacebook.png b/apps/wolnelektury_core/static/img/social/bigfacebook.png deleted file mode 100644 index 630416cf2..000000000 Binary files a/apps/wolnelektury_core/static/img/social/bigfacebook.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/social/biggoogle.png b/apps/wolnelektury_core/static/img/social/biggoogle.png deleted file mode 100644 index 19ad19df5..000000000 Binary files a/apps/wolnelektury_core/static/img/social/biggoogle.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/social/bignk.png b/apps/wolnelektury_core/static/img/social/bignk.png deleted file mode 100644 index c119cd117..000000000 Binary files a/apps/wolnelektury_core/static/img/social/bignk.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/social/bigtwitter.png b/apps/wolnelektury_core/static/img/social/bigtwitter.png deleted file mode 100644 index fafbe6412..000000000 Binary files a/apps/wolnelektury_core/static/img/social/bigtwitter.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/social/f.png b/apps/wolnelektury_core/static/img/social/f.png deleted file mode 100644 index 3261c6d7f..000000000 Binary files a/apps/wolnelektury_core/static/img/social/f.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/social/f.svg b/apps/wolnelektury_core/static/img/social/f.svg deleted file mode 100644 index fd25a0b1e..000000000 --- a/apps/wolnelektury_core/static/img/social/f.svg +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - version="1.1" - width="27" - height="27" - id="svg6088"> - <defs - id="defs6090" /> - <metadata - id="metadata6093"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g - transform="translate(-366.81409,-521.12423)" - id="layer1"> - <path - d="m 380.29848,521.12423 c -7.46076,0 -13.48439,6.0339 -13.48439,13.4844 0,7.4505 6.02363,13.5156 13.48439,13.5156 7.46077,0 13.51561,-6.0651 13.51561,-13.5156 0,-7.4505 -6.05484,-13.4844 -13.51561,-13.4844 z m 0.59307,9.489 2.15375,0 0,0.9989 -1.87283,0 c -0.48766,0 -0.99871,0.5039 -1.1237,0.9988 l 2.77804,0 0,1.0301 -2.80925,0 0,4.963 -1.1237,0 0,-4.963 -1.31099,0 0,-1.0301 1.31099,0 c 0,-0.9454 1.05229,-1.9977 1.99769,-1.9977 z" - id="path3774" - style="fill:#281d1c;fill-opacity:1;stroke:none" /> - </g> -</svg> diff --git a/apps/wolnelektury_core/static/img/social/gplus.png b/apps/wolnelektury_core/static/img/social/gplus.png deleted file mode 100644 index c9a98cca4..000000000 Binary files a/apps/wolnelektury_core/static/img/social/gplus.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/social/gplus.svg b/apps/wolnelektury_core/static/img/social/gplus.svg deleted file mode 100644 index ad8584c48..000000000 --- a/apps/wolnelektury_core/static/img/social/gplus.svg +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - version="1.1" - width="27" - height="27" - id="svg6088"> - <defs - id="defs6090" /> - <metadata - id="metadata6093"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g - transform="translate(-370.36041,-525.65913)" - id="layer1"> - <path - d="m 383.86041,525.65913 c -7.4541,0 -13.5,6.0409 -13.5,13.5 0,7.4591 6.0478,13.5 13.5,13.5 7.4541,0 13.5,-6.0409 13.5,-13.5 0,-7.4591 -6.0478,-13.5 -13.5,-13.5 z m -2.3072,9.9375 c 0.7663,0.052 1.408,0.3504 2.1513,0.7812 l -0.031,1.25 c -0.9815,-0.9169 -2.0284,-1.0444 -2.8372,-0.9687 -0.813,0 -2.1513,1.2073 -2.1513,2.375 0,1.0521 1.3098,2.5625 2.4007,2.5625 0.7638,0 1.1307,-0.01 1.5589,-0.125 l -0.031,-1.7812 -1.3095,0 0,-1.0313 2.3384,-0.031 0,3.8437 c -0.7977,0.1841 -1.8035,0.1925 -2.5255,0.1876 -2.1991,-0.015 -3.4719,-1.6067 -3.4919,-3.5313 0.1215,-1.9906 1.8329,-3.4278 3.1178,-3.5 0.2926,-0.04 0.5552,-0.049 0.8106,-0.031 z m 5.3003,1.0625 1.1224,0 0,1.9688 2.1201,0.031 0,1.0312 -2.1201,-0.031 0,2.4375 -1.1224,0 0,-2.4375 -2.1201,0.031 0,-1.0312 2.1201,-0.031 0,-1.9688 z" - id="path3822" - style="fill:#281d1c;fill-opacity:1;stroke:none" /> - </g> -</svg> diff --git a/apps/wolnelektury_core/static/img/social/nk.png b/apps/wolnelektury_core/static/img/social/nk.png deleted file mode 100644 index 736918565..000000000 Binary files a/apps/wolnelektury_core/static/img/social/nk.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/social/nk.svg b/apps/wolnelektury_core/static/img/social/nk.svg deleted file mode 100644 index 143701f10..000000000 --- a/apps/wolnelektury_core/static/img/social/nk.svg +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - version="1.1" - width="27" - height="27" - id="svg6088"> - <defs - id="defs6090" /> - <metadata - id="metadata6093"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g - transform="translate(-361.5,-518.86218)" - id="layer1"> - <path - d="m 375.01561,518.86218 c -7.46077,0 -13.51561,6.0409 -13.51561,13.5 0,7.4591 6.05484,13.5 13.51561,13.5 7.46077,0 13.48439,-6.0409 13.48439,-13.5 0,-7.4591 -6.02362,-13.5 -13.48439,-13.5 z m 0.78035,9.3437 0.93641,0 0,4.9063 2.80925,-2.5625 1.18613,0 -3.02774,2.7813 3.1526,3.1875 -1.21734,0 -2.9029,-2.9063 0,2.9063 -0.93641,0 0,-8.3126 z m -3.87052,2.1876 c 0.6577,0 1.16089,0.2286 1.49826,0.6562 0.33736,0.424 0.49942,1.0484 0.49943,1.875 l 0,3.5938 -0.93642,0 0,-3.5626 c 0,-0.5665 -0.10086,-0.9997 -0.31214,-1.2812 -0.21128,-0.2815 -0.51385,-0.4375 -0.93642,-0.4375 -0.50776,0 -0.92428,0.1928 -1.21734,0.5313 -0.29307,0.3385 -0.43699,0.7906 -0.43699,1.375 l 0,3.375 -0.93642,0 0,-5.9688 0.93642,0 0,0.9063 c 0.22491,-0.3599 0.47706,-0.6031 0.78035,-0.7813 0.30669,-0.1781 0.66256,-0.2812 1.06127,-0.2812 z" - id="path3781" - style="fill:#281d1c;fill-opacity:1;stroke:none" /> - </g> -</svg> diff --git a/apps/wolnelektury_core/static/img/speaker.png b/apps/wolnelektury_core/static/img/speaker.png deleted file mode 100644 index 5831f177a..000000000 Binary files a/apps/wolnelektury_core/static/img/speaker.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/turniej-maly.png b/apps/wolnelektury_core/static/img/turniej-maly.png deleted file mode 100644 index b11f0d676..000000000 Binary files a/apps/wolnelektury_core/static/img/turniej-maly.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/txt.png b/apps/wolnelektury_core/static/img/txt.png deleted file mode 100644 index de699ea24..000000000 Binary files a/apps/wolnelektury_core/static/img/txt.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/wiatrak.png b/apps/wolnelektury_core/static/img/wiatrak.png deleted file mode 100644 index e96a0c1a5..000000000 Binary files a/apps/wolnelektury_core/static/img/wiatrak.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/wl_icon_64.png b/apps/wolnelektury_core/static/img/wl_icon_64.png deleted file mode 100644 index a9dded316..000000000 Binary files a/apps/wolnelektury_core/static/img/wl_icon_64.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/img/zabawnik.png b/apps/wolnelektury_core/static/img/zabawnik.png deleted file mode 100644 index 2a4621693..000000000 Binary files a/apps/wolnelektury_core/static/img/zabawnik.png and /dev/null differ diff --git a/apps/wolnelektury_core/static/js/annoy.js b/apps/wolnelektury_core/static/js/annoy.js deleted file mode 100644 index 3104097a9..000000000 --- a/apps/wolnelektury_core/static/js/annoy.js +++ /dev/null @@ -1,29 +0,0 @@ -(function($) { - $(function() { - - -$("#annoy-on").click(function(e) { - e.preventDefault(); - $("#annoy").slideDown('fast'); - $(this).hide(); - if (Modernizr.localstorage) localStorage.removeItem("annoyed2013"); -}); - -$("#annoy-off").click(function() { - $("#annoy").slideUp('fast'); - $("#annoy-on").show(); - if (Modernizr.localstorage) localStorage["annoyed2013"] = true; -}); - - -if (Modernizr.localstorage) { - if (!localStorage["annoyed2013"]) { - $("#annoy-on").hide(); - $("#annoy").show(); - } -} - - - - }); -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/base.js b/apps/wolnelektury_core/static/js/base.js deleted file mode 100644 index f2a8e262a..000000000 --- a/apps/wolnelektury_core/static/js/base.js +++ /dev/null @@ -1,167 +0,0 @@ -(function($) { - $(function() { - $.fn.toggle_slide = function(p) { - cont = $(this); - short_el = p['short_el'] || $(':first-child', this); - long_el = p['long_el'] || short_el.next(); - button = p['button']; - short_text = p['short_text'], - long_text = p['long_text']; - - var toggle_fun = function(cont, short_el, long_el, button, short_text, long_text) { - var toggle = function() { - if (cont.hasClass('short')) { - cont.animate({"height": long_el.attr("cont_h")+'px'}, {duration: "fast" }).removeClass('short'); - short_el.hide(); - long_el.show(); - if (button && long_text) button.html(long_text); - } else { - cont.animate({"height": short_el.attr("cont_h")+'px'}, {duration: "fast" }).addClass('short'); - long_el.hide(); - short_el.show(); - if (button && short_text) button.html(short_text); - } - return false; - } - return toggle; - } - if (long_el.html().length <= short_el.html().length) - return; - - // ensure long element shown first - long_el.show();short_el.hide(); - long_el.attr("cont_h", $(this).height()).hide(); - short_el.show().attr("cont_h", $(this).height()); - $(this).addClass('short'); - - if (button && short_text) button.html(short_text); - if (button) button.click(toggle_fun(cont, short_el, long_el, button, short_text, long_text)); - }; - - - // Fragments - $('.fragment-with-short').each(function() { - $(this).toggle_slide({ - short_el: $('.fragment-short-text', this), - long_el: $('.fragment-long-text', this), - button: $('.toggle', this) - }) - }); - $('#description').each(function() { - $(this).toggle_slide({ - short_el: $('#description-short', this), - long_el: $('#description-long', this), - button: $(this) - }) - }); - - - - (function() { - var $current = null; - var menu_loaded = false; - $('.hidden-box-wrapper').each(function() { - var $hidden = $('.hidden-box', this); - $('.hidden-box-trigger', this).click(function(event) { - event.preventDefault(); - if ($current == $hidden) { - $current = null; - $hidden.hide('fast'); - } else { - $current && $current.hide('fast'); - $hidden.show('fast'); - $current = $hidden; - if ($(this).hasClass('load-menu') && !menu_loaded) { - $.ajax({ - url: '/katalog/' + LANGUAGE_CODE + '.json', - dataType: "json", - }).done(function(data) { - $.each(data, function(index, value) { - var $menuitem = $('#menu-' + index); - $menuitem.html(value); - var $minisearch = $("<input class='mini-search' style='margin-bottom: 1em' />"); - $minisearch.keyup(function() { - var s = $(this).val().toLowerCase(); - if (s) { - $("li", $menuitem).each(function() { - if ($("a", this).text().toLowerCase().indexOf(s) != -1) - $(this).show(); - else $(this).hide(); - }); - } - else { - $("li", $menuitem).css("display", ""); - } - }); - $menuitem.prepend($minisearch); - }); - menu_loaded = true; - }); - } - } - }); - }); - /* this kinda breaks the whole page. */ - $('body').click(function(e) { - if ($current == null) return; - var p = $(e.target); - while (p.length) { - if (p == $current) - return; - if (p.hasClass('hidden-box-trigger') - || p.hasClass('simple-toggler') - || p.hasClass('mini-search')) - return; - p = p.parent(); - } - $current.hide('fast'); - $current = null; - }); - })(); - - -$('#show-menu').click(function(event) { - event.preventDefault(); - $('#menu').toggle('slow'); -}); -$('#book-list-nav h2').click(function(event) { - event.preventDefault(); - $('#book-list-nav-index').toggle(); -}); - - -$('#themes-list-toggle').click(function(event) { - event.preventDefault(); - $('#themes-list').toggle('slow'); -}); - - - $('.book-list-index').click(function(){ - $('.book-list-show-index').hide('slow'); - if($(this).parent().next('ul:not(:hidden)').length == 0){ - $(this).parent().next('ul').toggle('slow'); - } - return false; - }); - - $('.hoverclick').click(function() {$(this).closest('.hoverget').toggleClass('hover');}); - - $(function(){ - $("#search").search();}); - - $('body').on('click', '.simple-toggler' , function(ev) { - ev.preventDefault(); - var scope = $(this).closest('.simple-toggler-scope'); - scope.find('.simple-hidden-box').each(function(){ - var $this = $(this); - if ($this.is(':hidden')) { - $this.show(); - } else { - $this.hide(); - } - }); - }); - - }); -})(jQuery); - diff --git a/apps/wolnelektury_core/static/js/book.js b/apps/wolnelektury_core/static/js/book.js deleted file mode 100644 index 72d8174fc..000000000 --- a/apps/wolnelektury_core/static/js/book.js +++ /dev/null @@ -1,64 +0,0 @@ -$(function() { - function scrollToAnchor(anchor) { - if (anchor) { - var anchor_name = anchor.slice(1); - var element = $('a[name="' + anchor_name + '"]'); - if (element.length > 0) { - $.scrollTo(element, 500, {offset: {top: -50, left: 0}}); - foot_elem = $('#footnotes a[name="' + anchor_name + '"]'); - if (foot_elem.length > 0) { - $(element).parent().highlightFade('yellow'); - } - window.location.hash = anchor; - } - } - } - - $.highlightFade.defaults.speed = 3000; - $('#toc').hide(); - if ($('#toc li').length == 0) { - $('#menu li a[href="#toc"]').remove(); - } - if ($('#themes li').length == 0) { - $('#menu li a[href="#themes"]').remove(); - } - if ($('#nota_red').length == 0) { - $('#menu li a[href="#nota_red"]').remove(); - } - - // On page load, scroll to anchor - scrollToAnchor(window.location.hash) - - $('#toc, #themes, #book-text').delegate('click', 'a', function(event) { - event.preventDefault(); - $('#menu li a.selected').click(); - scrollToAnchor($(this).attr('href')); - }); - - $('#menu li a.menu').toggle(function() { - $('#menu li a.selected').click(); - $(this).addClass('selected'); - $($(this).attr('href')).slideDown('fast'); - }, function() { - $(this).removeClass('selected'); - $($(this).attr('href')).slideUp('fast'); - }); - - - if (window.getSelection) { - $('.theme-begin').click(function() { - var selection = window.getSelection(); - selection.removeAllRanges(); - var range = document.createRange(); - - var e = $(".theme-end[fid='" + $(this).attr('fid') + "']")[0]; - - if (e) { - range.setStartAfter(this); - range.setEndBefore(e); - selection.addRange(range); - } - }); - } - -}); diff --git a/apps/wolnelektury_core/static/js/book_text/info.js b/apps/wolnelektury_core/static/js/book_text/info.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/wolnelektury_core/static/js/book_text/menu.js b/apps/wolnelektury_core/static/js/book_text/menu.js deleted file mode 100644 index 5bbc1a8d8..000000000 --- a/apps/wolnelektury_core/static/js/book_text/menu.js +++ /dev/null @@ -1,151 +0,0 @@ -(function($){$(function(){ - - -function hide_menu_boxes() { - /* Closes any open menu boxes. */ - $("#menu .active").each(function() { - $(this).removeClass("active"); - $("#" + $(this).attr("data-box")).hide(); - if ($(this).hasClass('dropdown')) { - $($(this).attr('href')).slideUp('fast'); - } - }); - $("#box-underlay").hide(); -} - -function release_menu() { - /* Exits the menu. It only really disappears on small screens. */ - hide_menu_boxes(); - $("body").removeClass("menu-showed"); -} - -/* Show menu */ -$('#menu-toggle-on').click(function(e) { - e.preventDefault(); - var body = $("body"); - /* Just stop hiding the menu. This way, after narrowing the browser, - * menu will still disappear normally. */ - body.removeClass("menu-hidden"); - /* Menu still not visible? Really open it then. */ - if (!$("#menu").is(":visible")) { - body.addClass("menu-showed"); - } -}); - -/* Hide menu */ -$('#menu-toggle-off').click(function(e) { - e.preventDefault(); - /* Just release the menu. This way, after widening the browser, - * menu will still appear normally. */ - release_menu(); - /* Menu still visible after releasing it? Really hide it then. */ - if ($("#menu").is(":visible")) { - $("body").addClass("menu-hidden"); - } -}); - - -/* Exit menu by clicking anywhere else. */ -$("#box-underlay").click(release_menu); - - -/* Toggle hidden box on click. */ -$("#menu a").each(function() { - var boxid = $(this).attr("data-box"); - if (boxid) { - $("#" + $(this).attr("data-box")).hide(); - - $(this).click(function(e) { - e.preventDefault(); - var showing = $(this).hasClass("active"); - hide_menu_boxes(); - if (!showing) { - $("body").addClass("menu-showed"); - $(this).addClass("active"); - $("#box-underlay").show(); - $("#" + $(this).attr("data-box")).show(); - } - }); - } - else if ($(this).hasClass('dropdown')) { - $(this).click(function(e) { - e.preventDefault(); - var showing = $(this).hasClass("active"); - hide_menu_boxes(); - if (!showing) { - $("body").addClass("menu-showed"); - $("#sponsors:not(:hidden)").fadeOut(); - $(this).addClass("active"); - $($(this).attr('href')).slideDown('fast'); - } - }); - } - else if (!$(this).hasClass('button')) { - $(this).click(release_menu); - } -}); - - -/* Show menu item for other versions of text. - * It's only present if there are any. */ -$("#menu-other").show(); - - -/* Load other version of text. */ -$(".display-other").click(function(e) { - e.preventDefault(); - release_menu(); - - $("#other-text").show(); - $("body").addClass('with-other-text'); - - $.ajax($(this).attr('data-other'), { - success: function(text) { - $("#other-text-body").html(text); - $("#other-text-waiter").hide(); - $("#other-text-body").show(); - loaded_text($("#other-text-body")); - } - }); -}); - - -/* Remove other version of text. */ -$(".other-text-close").click(function(e) { - release_menu(); - e.preventDefault(); - $("#other-text").hide(); - $("body").removeClass('with-other-text'); - $("#other-text-body").html(""); -}); - - -/* Release menu after clicking inside TOC. */ -$("#toc a").click(release_menu); - - -if ($('#nota_red').length > 0) { - $("#menu-nota_red").show(); -} - -/* Show themes menu item, if there are any. */ -if ($('#themes li').length > 0) { - $("#menu-themes").show(); -} - -function loaded_text(text) { - /* Attach events to elements inside book texts here. - * This way they'll work for the other text when it's loaded. */ - - $(".theme-begin", text).click(function(e) { - e.preventDefault(); - if ($(this).css("overflow") == "hidden" || $(this).hasClass('showing')) { - $(this).toggleClass("showing"); - } - }); - -} -loaded_text("#book-text"); - - -})})(jQuery); diff --git a/apps/wolnelektury_core/static/js/book_text/note.js b/apps/wolnelektury_core/static/js/book_text/note.js deleted file mode 100644 index 2f0feaaea..000000000 --- a/apps/wolnelektury_core/static/js/book_text/note.js +++ /dev/null @@ -1,10 +0,0 @@ -(function($){$(function(){ - - -if ($('#nota_red li').length > 0) { - $("#menu-nota_red").show(); -} - - - -})})(jQuery); diff --git a/apps/wolnelektury_core/static/js/book_text/settings.js b/apps/wolnelektury_core/static/js/book_text/settings.js deleted file mode 100644 index e398ba3ed..000000000 --- a/apps/wolnelektury_core/static/js/book_text/settings.js +++ /dev/null @@ -1,12 +0,0 @@ -(function($){$(function(){ - - -$("#menu-settings").show(); - -$(".settings-switch").click(function(e) { - e.preventDefault(); - $("body").toggleClass($(this).attr("data-setting")); -}); - - -})})(jQuery); diff --git a/apps/wolnelektury_core/static/js/book_text/toc.js b/apps/wolnelektury_core/static/js/book_text/toc.js deleted file mode 100644 index 31f4e9ffc..000000000 --- a/apps/wolnelektury_core/static/js/book_text/toc.js +++ /dev/null @@ -1,9 +0,0 @@ -(function($){$(function(){ - - -if ($('#toc li').length > 0) { - $('#menu-toc').show(); -} - - -})})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/ierange-m2.js b/apps/wolnelektury_core/static/js/contrib/ierange-m2.js deleted file mode 100644 index e87738b0c..000000000 --- a/apps/wolnelektury_core/static/js/contrib/ierange-m2.js +++ /dev/null @@ -1,502 +0,0 @@ -/* - DOM Ranges for Internet Explorer (m2) - - Copyright (c) 2009 Tim Cameron Ryan - Released under the MIT/X License - */ - -/* - Range reference: - http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html - http://mxr.mozilla.org/mozilla-central/source/content/base/src/nsRange.cpp - https://developer.mozilla.org/En/DOM:Range - Selection reference: - http://trac.webkit.org/browser/trunk/WebCore/page/DOMSelection.cpp - TextRange reference: - http://msdn.microsoft.com/en-us/library/ms535872.aspx - Other links: - http://jorgenhorstink.nl/test/javascript/range/range.js - http://jorgenhorstink.nl/2006/07/05/dom-range-implementation-in-ecmascript-completed/ - http://dylanschiemann.com/articles/dom2Range/dom2RangeExamples.html -*/ - -//[TODO] better exception support - -(function () { // sandbox - -/* - DOM functions - */ - -var DOMUtils = { - findChildPosition: function (node) { - for (var i = 0; node = node.previousSibling; i++) - continue; - return i; - }, - isDataNode: function (node) { - return node && node.nodeValue !== null && node.data !== null; - }, - isAncestorOf: function (parent, node) { - return !DOMUtils.isDataNode(parent) && - (parent.contains(DOMUtils.isDataNode(node) ? node.parentNode : node) || - node.parentNode == parent); - }, - isAncestorOrSelf: function (root, node) { - return DOMUtils.isAncestorOf(root, node) || root == node; - }, - findClosestAncestor: function (root, node) { - if (DOMUtils.isAncestorOf(root, node)) - while (node && node.parentNode != root) - node = node.parentNode; - return node; - }, - getNodeLength: function (node) { - return DOMUtils.isDataNode(node) ? node.length : node.childNodes.length; - }, - splitDataNode: function (node, offset) { - if (!DOMUtils.isDataNode(node)) - return false; - var newNode = node.cloneNode(false); - node.deleteData(offset, node.length); - newNode.deleteData(0, offset); - node.parentNode.insertBefore(newNode, node.nextSibling); - } -}; - -/* - Text Range utilities - functions to simplify text range manipulation in ie - */ - -var TextRangeUtils = { - convertToDOMRange: function (textRange, document) { - function adoptBoundary(domRange, textRange, bStart) { - // iterate backwards through parent element to find anchor location - var cursorNode = document.createElement('a'), cursor = textRange.duplicate(); - cursor.collapse(bStart); - var parent = cursor.parentElement(); - do { - parent.insertBefore(cursorNode, cursorNode.previousSibling); - cursor.moveToElementText(cursorNode); - } while (cursor.compareEndPoints(bStart ? 'StartToStart' : 'StartToEnd', textRange) > 0 && cursorNode.previousSibling); - - // when we exceed or meet the cursor, we've found the node - if (cursor.compareEndPoints(bStart ? 'StartToStart' : 'StartToEnd', textRange) == -1 && cursorNode.nextSibling) { - // data node - cursor.setEndPoint(bStart ? 'EndToStart' : 'EndToEnd', textRange); - domRange[bStart ? 'setStart' : 'setEnd'](cursorNode.nextSibling, cursor.text.length); - } else { - // element - domRange[bStart ? 'setStartBefore' : 'setEndBefore'](cursorNode); - } - cursorNode.parentNode.removeChild(cursorNode); - } - - // return a DOM range - var domRange = new DOMRange(document); - adoptBoundary(domRange, textRange, true); - adoptBoundary(domRange, textRange, false); - return domRange; - }, - - convertFromDOMRange: function (domRange) { - function adoptEndPoint(textRange, domRange, bStart) { - // find anchor node and offset - var container = domRange[bStart ? 'startContainer' : 'endContainer']; - var offset = domRange[bStart ? 'startOffset' : 'endOffset'], textOffset = 0; - var anchorNode = DOMUtils.isDataNode(container) ? container : container.childNodes[offset]; - var anchorParent = DOMUtils.isDataNode(container) ? container.parentNode : container; - // visible data nodes need a text offset - if (container.nodeType == 3 || container.nodeType == 4) - textOffset = offset; - - // create a cursor element node to position range (since we can't select text nodes) - var cursorNode = domRange._document.createElement('a'); - anchorParent.insertBefore(cursorNode, anchorNode); - var cursor = domRange._document.body.createTextRange(); - cursor.moveToElementText(cursorNode); - cursorNode.parentNode.removeChild(cursorNode); - // move range - textRange.setEndPoint(bStart ? 'StartToStart' : 'EndToStart', cursor); - textRange[bStart ? 'moveStart' : 'moveEnd']('character', textOffset); - } - - // return an IE text range - var textRange = domRange._document.body.createTextRange(); - adoptEndPoint(textRange, domRange, true); - adoptEndPoint(textRange, domRange, false); - return textRange; - } -}; - -/* - DOM Range - */ - -function DOMRange(document) { - // save document parameter - this._document = document; - - // initialize range -//[TODO] this should be located at document[0], document[0] - this.startContainer = this.endContainer = document.body; - this.endOffset = DOMUtils.getNodeLength(document.body); -} -DOMRange.START_TO_START = 0; -DOMRange.START_TO_END = 1; -DOMRange.END_TO_END = 2; -DOMRange.END_TO_START = 3; - -DOMRange.prototype = { - // public properties - startContainer: null, - startOffset: 0, - endContainer: null, - endOffset: 0, - commonAncestorContainer: null, - collapsed: false, - // private properties - _document: null, - - // private methods - _refreshProperties: function () { - // collapsed attribute - this.collapsed = (this.startContainer == this.endContainer && this.startOffset == this.endOffset); - // find common ancestor - var node = this.startContainer; - while (node && node != this.endContainer && !DOMUtils.isAncestorOf(node, this.endContainer)) - node = node.parentNode; - this.commonAncestorContainer = node; - }, - - // range methods -//[TODO] collapse if start is after end, end is before start - setStart: function(container, offset) { - this.startContainer = container; - this.startOffset = offset; - this._refreshProperties(); - }, - setEnd: function(container, offset) { - this.endContainer = container; - this.endOffset = offset; - this._refreshProperties(); - }, - setStartBefore: function (refNode) { - // set start to beore this node - this.setStart(refNode.parentNode, DOMUtils.findChildPosition(refNode)); - }, - setStartAfter: function (refNode) { - // select next sibling - this.setStart(refNode.parentNode, DOMUtils.findChildPosition(refNode) + 1); - }, - setEndBefore: function (refNode) { - // set end to beore this node - this.setEnd(refNode.parentNode, DOMUtils.findChildPosition(refNode)); - }, - setEndAfter: function (refNode) { - // select next sibling - this.setEnd(refNode.parentNode, DOMUtils.findChildPosition(refNode) + 1); - }, - selectNode: function (refNode) { - this.setStartBefore(refNode); - this.setEndAfter(refNode); - }, - selectNodeContents: function (refNode) { - this.setStart(refNode, 0); - this.setEnd(refNode, DOMUtils.getNodeLength(refNode)); - }, - collapse: function (toStart) { - if (toStart) - this.setEnd(this.startContainer, this.startOffset); - else - this.setStart(this.endContainer, this.endOffset); - }, - - // editing methods - cloneContents: function () { - // clone subtree - return (function cloneSubtree(iterator) { - for (var node, frag = document.createDocumentFragment(); node = iterator.next(); ) { - node = node.cloneNode(!iterator.hasPartialSubtree()); - if (iterator.hasPartialSubtree()) - node.appendChild(cloneSubtree(iterator.getSubtreeIterator())); - frag.appendChild(node); - } - return frag; - })(new RangeIterator(this)); - }, - extractContents: function () { - // cache range and move anchor points - var range = this.cloneRange(); - if (this.startContainer != this.commonAncestorContainer) - this.setStartAfter(DOMUtils.findClosestAncestor(this.commonAncestorContainer, this.startContainer)); - this.collapse(true); - // extract range - return (function extractSubtree(iterator) { - for (var node, frag = document.createDocumentFragment(); node = iterator.next(); ) { - iterator.hasPartialSubtree() ? node = node.cloneNode(false) : iterator.remove(); - if (iterator.hasPartialSubtree()) - node.appendChild(extractSubtree(iterator.getSubtreeIterator())); - frag.appendChild(node); - } - return frag; - })(new RangeIterator(range)); - }, - deleteContents: function () { - // cache range and move anchor points - var range = this.cloneRange(); - if (this.startContainer != this.commonAncestorContainer) - this.setStartAfter(DOMUtils.findClosestAncestor(this.commonAncestorContainer, this.startContainer)); - this.collapse(true); - // delete range - (function deleteSubtree(iterator) { - while (iterator.next()) - iterator.hasPartialSubtree() ? deleteSubtree(iterator.getSubtreeIterator()) : iterator.remove(); - })(new RangeIterator(range)); - }, - insertNode: function (newNode) { - // set original anchor and insert node - if (DOMUtils.isDataNode(this.startContainer)) { - DOMUtils.splitDataNode(this.startContainer, this.startOffset); - this.startContainer.parentNode.insertBefore(newNode, this.startContainer.nextSibling); - } else { - this.startContainer.insertBefore(newNode, this.startContainer.childNodes[this.startOffset]); - } - // resync start anchor - this.setStart(this.startContainer, this.startOffset); - }, - surroundContents: function (newNode) { - // extract and surround contents - var content = this.extractContents(); - this.insertNode(newNode); - newNode.appendChild(content); - this.selectNode(newNode); - }, - - // other methods - compareBoundaryPoints: function (how, sourceRange) { - // get anchors - var containerA, offsetA, containerB, offsetB; - switch (how) { - case DOMRange.START_TO_START: - case DOMRange.START_TO_END: - containerA = this.startContainer; - offsetA = this.startOffset; - break; - case DOMRange.END_TO_END: - case DOMRange.END_TO_START: - containerA = this.endContainer; - offsetA = this.endOffset; - break; - } - switch (how) { - case DOMRange.START_TO_START: - case DOMRange.END_TO_START: - containerB = sourceRange.startContainer; - offsetB = sourceRange.startOffset; - break; - case DOMRange.START_TO_END: - case DOMRange.END_TO_END: - containerB = sourceRange.endContainer; - offsetB = sourceRange.endOffset; - break; - } - - // compare - return containerA.sourceIndex < containerB.sourceIndex ? -1 : - containerA.sourceIndex == containerB.sourceIndex ? - offsetA < offsetB ? -1 : offsetA == offsetB ? 0 : 1 - : 1; - }, - cloneRange: function () { - // return cloned range - var range = new DOMRange(this._document); - range.setStart(this.startContainer, this.startOffset); - range.setEnd(this.endContainer, this.endOffset); - return range; - }, - detach: function () { -//[TODO] Releases Range from use to improve performance. - }, - toString: function () { - return TextRangeUtils.convertFromDOMRange(this).text; - }, - createContextualFragment: function (tagString) { - // parse the tag string in a context node - var content = (DOMUtils.isDataNode(this.startContainer) ? this.startContainer.parentNode : this.startContainer).cloneNode(false); - content.innerHTML = tagString; - // return a document fragment from the created node - for (var fragment = this._document.createDocumentFragment(); content.firstChild; ) - fragment.appendChild(content.firstChild); - return fragment; - } -}; - -/* - Range iterator - */ - -function RangeIterator(range) { - this.range = range; - if (range.collapsed) - return; - -//[TODO] ensure this works - // get anchors - var root = range.commonAncestorContainer; - this._next = range.startContainer == root && !DOMUtils.isDataNode(range.startContainer) ? - range.startContainer.childNodes[range.startOffset] : - DOMUtils.findClosestAncestor(root, range.startContainer); - this._end = range.endContainer == root && !DOMUtils.isDataNode(range.endContainer) ? - range.endContainer.childNodes[range.endOffset] : - DOMUtils.findClosestAncestor(root, range.endContainer).nextSibling; -} - -RangeIterator.prototype = { - // public properties - range: null, - // private properties - _current: null, - _next: null, - _end: null, - - // public methods - hasNext: function () { - return !!this._next; - }, - next: function () { - // move to next node - var current = this._current = this._next; - this._next = this._current && this._current.nextSibling != this._end ? - this._current.nextSibling : null; - - // check for partial text nodes - if (DOMUtils.isDataNode(this._current)) { - if (this.range.endContainer == this._current) - (current = current.cloneNode(true)).deleteData(this.range.endOffset, current.length - this.range.endOffset); - if (this.range.startContainer == this._current) - (current = current.cloneNode(true)).deleteData(0, this.range.startOffset); - } - return current; - }, - remove: function () { - // check for partial text nodes - if (DOMUtils.isDataNode(this._current) && - (this.range.startContainer == this._current || this.range.endContainer == this._current)) { - var start = this.range.startContainer == this._current ? this.range.startOffset : 0; - var end = this.range.endContainer == this._current ? this.range.endOffset : this._current.length; - this._current.deleteData(start, end - start); - } else - this._current.parentNode.removeChild(this._current); - }, - hasPartialSubtree: function () { - // check if this node be partially selected - return !DOMUtils.isDataNode(this._current) && - (DOMUtils.isAncestorOrSelf(this._current, this.range.startContainer) || - DOMUtils.isAncestorOrSelf(this._current, this.range.endContainer)); - }, - getSubtreeIterator: function () { - // create a new range - var subRange = new DOMRange(this.range._document); - subRange.selectNodeContents(this._current); - // handle anchor points - if (DOMUtils.isAncestorOrSelf(this._current, this.range.startContainer)) - subRange.setStart(this.range.startContainer, this.range.startOffset); - if (DOMUtils.isAncestorOrSelf(this._current, this.range.endContainer)) - subRange.setEnd(this.range.endContainer, this.range.endOffset); - // return iterator - return new RangeIterator(subRange); - } -}; - -/* - DOM Selection - */ - -//[NOTE] This is a very shallow implementation of the Selection object, based on Webkit's -// implementation and without redundant features. Complete selection manipulation is still -// possible with just removeAllRanges/addRange/getRangeAt. - -function DOMSelection(document) { - // save document parameter - this._document = document; - - // add DOM selection handler - var selection = this; - document.attachEvent('onselectionchange', function () { selection._selectionChangeHandler(); }); -} - -DOMSelection.prototype = { - // public properties - rangeCount: 0, - // private properties - _document: null, - - // private methods - _selectionChangeHandler: function () { - // check if there exists a range - this.rangeCount = this._selectionExists(this._document.selection.createRange()) ? 1 : 0; - }, - _selectionExists: function (textRange) { - // checks if a created text range exists or is an editable cursor - return textRange.compareEndPoints('StartToEnd', textRange) != 0 || - textRange.parentElement().isContentEditable; - }, - - // public methods - addRange: function (range) { - // add range or combine with existing range - var selection = this._document.selection.createRange(), textRange = TextRangeUtils.convertFromDOMRange(range); - if (!this._selectionExists(selection)) - { - // select range - textRange.select(); - } - else - { - // only modify range if it intersects with current range - if (textRange.compareEndPoints('StartToStart', selection) == -1) - if (textRange.compareEndPoints('StartToEnd', selection) > -1 && - textRange.compareEndPoints('EndToEnd', selection) == -1) - selection.setEndPoint('StartToStart', textRange); - else - if (textRange.compareEndPoints('EndToStart', selection) < 1 && - textRange.compareEndPoints('EndToEnd', selection) > -1) - selection.setEndPoint('EndToEnd', textRange); - selection.select(); - } - }, - removeAllRanges: function () { - // remove all ranges - this._document.selection.empty(); - }, - getRangeAt: function (index) { - // return any existing selection, or a cursor position in content editable mode - var textRange = this._document.selection.createRange(); - if (this._selectionExists(textRange)) - return TextRangeUtils.convertToDOMRange(textRange, this._document); - return null; - }, - toString: function () { - // get selection text - return this._document.selection.createRange().text; - } -}; - -/* - scripting hooks - */ - -document.createRange = function () { - return new DOMRange(document); -}; - -var selection = new DOMSelection(document); -window.getSelection = function () { - return selection; -}; - -//[TODO] expose DOMRange/DOMSelection to window.? - -})(); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery-ui-1.8.16.custom.min.js b/apps/wolnelektury_core/static/js/contrib/jquery-ui-1.8.16.custom.min.js deleted file mode 100644 index a9c6fa316..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery-ui-1.8.16.custom.min.js +++ /dev/null @@ -1,149 +0,0 @@ -/*! - * jQuery UI 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI - */ -(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.16", -keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({propAttr:c.fn.prop||c.fn.attr,_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d= -this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this, -"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart": -"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight, -outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a, -"tabindex"),d=isNaN(b);return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&& -a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&& -c.ui.isOverAxis(b,e,i)}})}})(jQuery); -;/*! - * jQuery UI Widget 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Widget - */ -(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)try{b(d).triggerHandler("remove")}catch(e){}k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(d){}});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]= -function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)): -d;if(e&&d.charAt(0)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options= -b.extend(true,{},this.options,this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+ -"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled", -c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery); -;/*! - * jQuery UI Mouse 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Mouse - * - * Depends: - * jquery.ui.widget.js - */ -(function(b){var d=false;b(document).mouseup(function(){d=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+ -this.widgetName)},_mouseDown:function(a){if(!d){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,f=a.which==1,g=typeof this.options.cancel=="string"&&a.target.nodeName?b(a.target).closest(this.options.cancel).length:false;if(!f||g||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted= -this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(e){return c._mouseMove(e)};this._mouseUpDelegate=function(e){return c._mouseUp(e)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return d=true}},_mouseMove:function(a){if(b.browser.msie&& -!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted= -false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); -;/* - * jQuery UI Position 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Position - */ -(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY, -left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+= -k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-= -m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left= -d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+= -a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b), -g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery); -;/* - * jQuery UI Draggable 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Draggables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== -"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b= -this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;if(b.iframeFix)d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options; -this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}); -this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);d.ui.ddmanager&&d.ui.ddmanager.dragStart(this,a);return true}, -_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b= -false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration, -10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});d.ui.ddmanager&&d.ui.ddmanager.dragStop(this,a);return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle|| -!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&& -a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent= -this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"), -10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"), -10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[a.containment=="document"?0:d(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,a.containment=="document"?0:d(window).scrollTop()-this.offset.relative.top-this.offset.parent.top, -(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!= -"hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"), -10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+ -this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&& -!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.left<g[0])e=g[0]+this.offset.click.left; -if(a.pageY-this.offset.click.top<g[1])h=g[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>g[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=b.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1]:this.originalPageY;h=g?!(h-this.offset.click.top<g[1]||h-this.offset.click.top>g[3])?h:!(h-this.offset.click.top<g[1])?h-b.grid[1]:h+b.grid[1]:h;e=b.grid[0]?this.originalPageX+Math.round((e-this.originalPageX)/ -b.grid[0])*b.grid[0]:this.originalPageX;e=g?!(e-this.offset.click.left<g[0]||e-this.offset.click.left>g[2])?e:!(e-this.offset.click.left<g[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version< -526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b, -c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.16"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert}); -h.refreshPositions();h._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval= -false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true); -this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top; -c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&& -this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity= -a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!= -"x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left< -c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()- -c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this, -width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,h=b.offset.left,g=h+c.helperProportions.width,n=b.offset.top,o=n+c.helperProportions.height,i=c.snapElements.length-1;i>=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e<h&&h<l+e&&k-e<n&&n<m+e||j-e<h&&h<l+e&&k-e<o&&o<m+e||j-e<g&&g<l+e&&k-e<n&&n<m+e||j-e<g&&g<l+e&&k-e<o&& -o<m+e){if(f.snapMode!="inner"){var p=Math.abs(k-o)<=e,q=Math.abs(m-n)<=e,r=Math.abs(j-g)<=e,s=Math.abs(l-h)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l}).left-c.margins.left}var t= -p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(k-n)<=e;q=Math.abs(m-o)<=e;r=Math.abs(j-h)<=e;s=Math.abs(l-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[i].snapping&& -(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=p||q||r||s||t}else{c.snapElements[i].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"), -10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery); -;/* - * jQuery UI Autocomplete 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Autocomplete - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.position.js - */ -(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.propAttr("readOnly"))){g= -false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!= -a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)}; -this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&& -a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"); -d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&& -b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source= -this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close(); -this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label|| -b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new d.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this; -d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, -"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery); -(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", --1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); -this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b, -this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active|| -this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active|| -this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[d.fn.prop?"prop":"attr"]("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery); -; \ No newline at end of file diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.autocomplete.js b/apps/wolnelektury_core/static/js/contrib/jquery.autocomplete.js deleted file mode 100644 index 6f46e1b9c..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.autocomplete.js +++ /dev/null @@ -1,828 +0,0 @@ -/* - * jQuery Autocomplete plugin 1.1 - * - * Copyright (c) 2009 Jörn Zaefferer - * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - * Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $ - */ - -/* - * Modified by Radek Czajka, Fundacja Nowoczesna Polska, 2010-05-10: - * escape regex for word start checking in matchSubset - */ - -;(function($) { - -$.fn.extend({ - autocomplete: function(urlOrData, options) { - var isUrl = typeof urlOrData == "string"; - options = $.extend({}, $.Autocompleter.defaults, { - url: isUrl ? urlOrData : null, - data: isUrl ? null : urlOrData, - delay: isUrl ? $.Autocompleter.defaults.delay : 10, - max: options && !options.scroll ? 10 : 150 - }, options); - - // if highlight is set to false, replace it with a do-nothing function - options.highlight = options.highlight || function(value) { return value; }; - - // if the formatMatch option is not specified, then use formatItem for backwards compatibility - options.formatMatch = options.formatMatch || options.formatItem; - - return this.each(function() { - new $.Autocompleter(this, options); - }); - }, - result: function(handler) { - return this.bind("result", handler); - }, - search: function(handler) { - return this.trigger("search", [handler]); - }, - flushCache: function() { - return this.trigger("flushCache"); - }, - setOptions: function(options){ - return this.trigger("setOptions", [options]); - }, - unautocomplete: function() { - return this.trigger("unautocomplete"); - } -}); - -$.Autocompleter = function(input, options) { - - var KEY = { - UP: 38, - DOWN: 40, - DEL: 46, - TAB: 9, - RETURN: 13, - ESC: 27, - COMMA: 188, - PAGEUP: 33, - PAGEDOWN: 34, - BACKSPACE: 8 - }; - - // Create $ object for input element - var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass); - - var timeout; - var previousValue = ""; - var cache = $.Autocompleter.Cache(options); - var hasFocus = 0; - var lastKeyPressCode; - var config = { - mouseDownOnSelect: false - }; - var select = $.Autocompleter.Select(options, input, selectCurrent, config); - - var blockSubmit; - - // prevent form submit in opera when selecting with return key - $.browser.opera && $(input.form).bind("submit.autocomplete", function() { - if (blockSubmit) { - blockSubmit = false; - return false; - } - }); - - // only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all - $input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) { - // a keypress means the input has focus - // avoids issue where input had focus before the autocomplete was applied - hasFocus = 1; - // track last key pressed - lastKeyPressCode = event.keyCode; - switch(event.keyCode) { - - case KEY.UP: - event.preventDefault(); - if ( select.visible() ) { - select.prev(); - } else { - onChange(0, true); - } - break; - - case KEY.DOWN: - event.preventDefault(); - if ( select.visible() ) { - select.next(); - } else { - onChange(0, true); - } - break; - - case KEY.PAGEUP: - event.preventDefault(); - if ( select.visible() ) { - select.pageUp(); - } else { - onChange(0, true); - } - break; - - case KEY.PAGEDOWN: - event.preventDefault(); - if ( select.visible() ) { - select.pageDown(); - } else { - onChange(0, true); - } - break; - - // matches also semicolon - case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA: - case KEY.TAB: - case KEY.RETURN: - if( selectCurrent() ) { - // stop default to prevent a form submit, Opera needs special handling - event.preventDefault(); - blockSubmit = true; - return false; - } - break; - - case KEY.ESC: - select.hide(); - break; - - default: - clearTimeout(timeout); - timeout = setTimeout(onChange, options.delay); - break; - } - }).focus(function(){ - // track whether the field has focus, we shouldn't process any - // results if the field no longer has focus - hasFocus++; - }).blur(function() { - hasFocus = 0; - if (!config.mouseDownOnSelect) { - hideResults(); - } - }).click(function() { - // show select when clicking in a focused field - if ( hasFocus++ > 1 && !select.visible() ) { - onChange(0, true); - } - }).bind("search", function() { - // TODO why not just specifying both arguments? - var fn = (arguments.length > 1) ? arguments[1] : null; - function findValueCallback(q, data) { - var result; - if( data && data.length ) { - for (var i=0; i < data.length; i++) { - if( data[i].result.toLowerCase() == q.toLowerCase() ) { - result = data[i]; - break; - } - } - } - if( typeof fn == "function" ) fn(result); - else $input.trigger("result", result && [result.data, result.value]); - } - $.each(trimWords($input.val()), function(i, value) { - request(value, findValueCallback, findValueCallback); - }); - }).bind("flushCache", function() { - cache.flush(); - }).bind("setOptions", function() { - $.extend(options, arguments[1]); - // if we've updated the data, repopulate - if ( "data" in arguments[1] ) - cache.populate(); - }).bind("unautocomplete", function() { - select.unbind(); - $input.unbind(); - $(input.form).unbind(".autocomplete"); - }); - - - function selectCurrent() { - var selected = select.selected(); - if( !selected ) - return false; - - var v = selected.result; - previousValue = v; - - if ( options.multiple ) { - var words = trimWords($input.val()); - if ( words.length > 1 ) { - var seperator = options.multipleSeparator.length; - var cursorAt = $(input).selection().start; - var wordAt, progress = 0; - $.each(words, function(i, word) { - progress += word.length; - if (cursorAt <= progress) { - wordAt = i; - return false; - } - progress += seperator; - }); - words[wordAt] = v; - // TODO this should set the cursor to the right position, but it gets overriden somewhere - //$.Autocompleter.Selection(input, progress + seperator, progress + seperator); - v = words.join( options.multipleSeparator ); - } - v += options.multipleSeparator; - } - - $input.val(v); - hideResultsNow(); - $input.trigger("result", [selected.data, selected.value]); - return true; - } - - function onChange(crap, skipPrevCheck) { - if( lastKeyPressCode == KEY.DEL ) { - select.hide(); - return; - } - - var currentValue = $input.val(); - - if ( !skipPrevCheck && currentValue == previousValue ) - return; - - previousValue = currentValue; - - currentValue = lastWord(currentValue); - if ( currentValue.length >= options.minChars) { - $input.addClass(options.loadingClass); - if (!options.matchCase) - currentValue = currentValue.toLowerCase(); - request(currentValue, receiveData, hideResultsNow); - } else { - stopLoading(); - select.hide(); - } - }; - - function trimWords(value) { - if (!value) - return [""]; - if (!options.multiple) - return [$.trim(value)]; - return $.map(value.split(options.multipleSeparator), function(word) { - return $.trim(value).length ? $.trim(word) : null; - }); - } - - function lastWord(value) { - if ( !options.multiple ) - return value; - var words = trimWords(value); - if (words.length == 1) - return words[0]; - var cursorAt = $(input).selection().start; - if (cursorAt == value.length) { - words = trimWords(value) - } else { - words = trimWords(value.replace(value.substring(cursorAt), "")); - } - return words[words.length - 1]; - } - - // fills in the input box w/the first match (assumed to be the best match) - // q: the term entered - // sValue: the first matching result - function autoFill(q, sValue){ - // autofill in the complete box w/the first match as long as the user hasn't entered in more data - // if the last user key pressed was backspace, don't autofill - if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE ) { - // fill in the value (keep the case the user has typed) - $input.val($input.val() + sValue.substring(lastWord(previousValue).length)); - // select the portion of the value not typed by the user (so the next character will erase) - $(input).selection(previousValue.length, previousValue.length + sValue.length); - } - }; - - function hideResults() { - clearTimeout(timeout); - timeout = setTimeout(hideResultsNow, 200); - }; - - function hideResultsNow() { - var wasVisible = select.visible(); - select.hide(); - clearTimeout(timeout); - stopLoading(); - if (options.mustMatch) { - // call search and run callback - $input.search( - function (result){ - // if no value found, clear the input box - if( !result ) { - if (options.multiple) { - var words = trimWords($input.val()).slice(0, -1); - $input.val( words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : "") ); - } - else { - $input.val( "" ); - $input.trigger("result", null); - } - } - } - ); - } - }; - - function receiveData(q, data) { - if ( data && data.length && hasFocus ) { - stopLoading(); - select.display(data, q); - autoFill(q, data[0].value); - select.show(); - } else { - hideResultsNow(); - } - }; - - function request(term, success, failure) { - if (!options.matchCase) - term = term.toLowerCase(); - var data = cache.load(term); - // recieve the cached data - if (data && data.length) { - success(term, data); - // if an AJAX url has been supplied, try loading the data now - } else if( (typeof options.url == "string") && (options.url.length > 0) ){ - - var extraParams = { - timestamp: +new Date() - }; - $.each(options.extraParams, function(key, param) { - extraParams[key] = typeof param == "function" ? param() : param; - }); - - $.ajax({ - // try to leverage ajaxQueue plugin to abort previous requests - mode: "abort", - // limit abortion to this input - port: "autocomplete" + input.name, - dataType: options.dataType, - url: options.url, - data: $.extend({ - q: lastWord(term), - limit: options.max - }, extraParams), - success: function(data) { - var parsed = options.parse && options.parse(data) || parse(data); - cache.add(term, parsed); - success(term, parsed); - } - }); - } else { - // if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match - select.emptyList(); - failure(term); - } - }; - - function parse(data) { - var parsed = []; - var rows = data.split("\n"); - for (var i=0; i < rows.length; i++) { - var row = $.trim(rows[i]); - if (row) { - row = row.split("|"); - parsed[parsed.length] = { - data: row, - value: row[0], - result: options.formatResult && options.formatResult(row, row[0]) || row[0] - }; - } - } - return parsed; - }; - - function stopLoading() { - $input.removeClass(options.loadingClass); - }; - -}; - -$.Autocompleter.defaults = { - inputClass: "ac_input", - resultsClass: "ac_results", - loadingClass: "ac_loading", - minChars: 1, - delay: 400, - matchCase: false, - matchSubset: true, - matchContains: false, - cacheLength: 10, - max: 100, - mustMatch: false, - extraParams: {}, - selectFirst: true, - formatItem: function(row) { return row[0]; }, - formatMatch: null, - autoFill: false, - width: 0, - multiple: false, - multipleSeparator: ", ", - regex_escape: function(term) { - term = term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1"); - /* no polish diacritics; should be more locale-aware */ - term = term.replace(/a/g, '[aÄ ]') - .replace(/c/g, '[cÄ]') - .replace(/e/g, '[eÄ]') - .replace(/l/g, '[lÅ]') - .replace(/n/g, '[nÅ]') - .replace(/o/g, '[oó]') - .replace(/s/g, '[sÅ]') - .replace(/z/g, '[zźż]'); - return term; - }, - highlight: function(value, term) { - term = $.Autocompleter.defaults.regex_escape(term); - return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>"); - }, - scroll: true, - scrollHeight: 180 -}; - -$.Autocompleter.Cache = function(options) { - - var data = {}; - var length = 0; - - function matchSubset(s, sub) { - if (!options.matchCase) - s = s.toLowerCase(); - var i = s.indexOf(sub); - if (options.matchContains == "word"){ - query = $.Autocompleter.defaults.regex_escape(sub.toLowerCase()); - i = s.toLowerCase().search("\\b" + query); - } - if (i == -1) return false; - return i == 0 || options.matchContains; - }; - - function add(q, value) { - if (length > options.cacheLength){ - flush(); - } - if (!data[q]){ - length++; - } - data[q] = value; - } - - function populate(){ - if( !options.data ) return false; - // track the matches - var stMatchSets = {}, - nullData = 0; - - // no url was specified, we need to adjust the cache length to make sure it fits the local data store - if( !options.url ) options.cacheLength = 1; - - // track all options for minChars = 0 - stMatchSets[""] = []; - - // loop through the array and create a lookup structure - for ( var i = 0, ol = options.data.length; i < ol; i++ ) { - var rawValue = options.data[i]; - // if rawValue is a string, make an array otherwise just reference the array - rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue; - - var value = options.formatMatch(rawValue, i+1, options.data.length); - if ( value === false ) - continue; - - var firstChar = value.charAt(0).toLowerCase(); - // if no lookup array for this character exists, look it up now - if( !stMatchSets[firstChar] ) - stMatchSets[firstChar] = []; - - // if the match is a string - var row = { - value: value, - data: rawValue, - result: options.formatResult && options.formatResult(rawValue) || value - }; - - // push the current match into the set list - stMatchSets[firstChar].push(row); - - // keep track of minChars zero items - if ( nullData++ < options.max ) { - stMatchSets[""].push(row); - } - }; - - // add the data items to the cache - $.each(stMatchSets, function(i, value) { - // increase the cache size - options.cacheLength++; - // add to the cache - add(i, value); - }); - } - - // populate any existing data - setTimeout(populate, 25); - - function flush(){ - data = {}; - length = 0; - } - - return { - flush: flush, - add: add, - populate: populate, - load: function(q) { - if (!options.cacheLength || !length) - return null; - /* - * if dealing w/local data and matchContains than we must make sure - * to loop through all the data collections looking for matches - */ - if( !options.url && options.matchContains ){ - // track all matches - var csub = []; - // loop through all the data grids for matches - for( var k in data ){ - // don't search through the stMatchSets[""] (minChars: 0) cache - // this prevents duplicates - if( k.length > 0 ){ - var c = data[k]; - $.each(c, function(i, x) { - // if we've got a match, add it to the array - if (matchSubset(x.value, q)) { - csub.push(x); - } - }); - } - } - return csub; - } else - // if the exact item exists, use it - if (data[q]){ - return data[q]; - } else - if (options.matchSubset) { - for (var i = q.length - 1; i >= options.minChars; i--) { - var c = data[q.substr(0, i)]; - if (c) { - var csub = []; - $.each(c, function(i, x) { - if (matchSubset(x.value, q)) { - csub[csub.length] = x; - } - }); - return csub; - } - } - } - return null; - } - }; -}; - -$.Autocompleter.Select = function (options, input, select, config) { - var CLASSES = { - ACTIVE: "ac_over" - }; - - var listItems, - active = -1, - data, - term = "", - needsInit = true, - element, - list; - - // Create results - function init() { - if (!needsInit) - return; - element = $("<div/>") - .hide() - .addClass(options.resultsClass) - .css("position", "absolute") - .appendTo(document.body); - - list = $("<ul/>").appendTo(element).mouseover( function(event) { - if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') { - active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event)); - $(target(event)).addClass(CLASSES.ACTIVE); - } - }).click(function(event) { - $(target(event)).addClass(CLASSES.ACTIVE); - select(); - // TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus - input.focus(); - return false; - }).mousedown(function() { - config.mouseDownOnSelect = true; - }).mouseup(function() { - config.mouseDownOnSelect = false; - }); - - if( options.width > 0 ) - element.css("width", options.width); - - needsInit = false; - } - - function target(event) { - var element = event.target; - while(element && element.tagName != "LI") - element = element.parentNode; - // more fun with IE, sometimes event.target is empty, just ignore it then - if(!element) - return []; - return element; - } - - function moveSelect(step) { - listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE); - movePosition(step); - var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE); - if(options.scroll) { - var offset = 0; - listItems.slice(0, active).each(function() { - offset += this.offsetHeight; - }); - if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) { - list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight()); - } else if(offset < list.scrollTop()) { - list.scrollTop(offset); - } - } - }; - - function movePosition(step) { - active += step; - if (active < 0) { - active = listItems.size() - 1; - } else if (active >= listItems.size()) { - active = 0; - } - } - - function limitNumberOfItems(available) { - return options.max && options.max < available - ? options.max - : available; - } - - function fillList() { - list.empty(); - var max = limitNumberOfItems(data.length); - for (var i=0; i < max; i++) { - if (!data[i]) - continue; - var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term); - if ( formatted === false ) - continue; - var li = $("<li/>").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0]; - $.data(li, "ac_data", data[i]); - } - listItems = list.find("li"); - if ( options.selectFirst ) { - listItems.slice(0, 1).addClass(CLASSES.ACTIVE); - active = 0; - } - // apply bgiframe if available - if ( $.fn.bgiframe ) - list.bgiframe(); - } - - return { - display: function(d, q) { - init(); - data = d; - term = q; - fillList(); - }, - next: function() { - moveSelect(1); - }, - prev: function() { - moveSelect(-1); - }, - pageUp: function() { - if (active != 0 && active - 8 < 0) { - moveSelect( -active ); - } else { - moveSelect(-8); - } - }, - pageDown: function() { - if (active != listItems.size() - 1 && active + 8 > listItems.size()) { - moveSelect( listItems.size() - 1 - active ); - } else { - moveSelect(8); - } - }, - hide: function() { - element && element.hide(); - listItems && listItems.removeClass(CLASSES.ACTIVE); - active = -1; - }, - visible : function() { - return element && element.is(":visible"); - }, - current: function() { - return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]); - }, - show: function() { - var offset = $(input).offset(); - element.css({ - width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(), - top: offset.top + input.offsetHeight, - left: offset.left - }).show(); - if(options.scroll) { - list.scrollTop(0); - list.css({ - maxHeight: options.scrollHeight, - overflow: 'auto' - }); - - if($.browser.msie && typeof document.body.style.maxHeight === "undefined") { - var listHeight = 0; - listItems.each(function() { - listHeight += this.offsetHeight; - }); - var scrollbarsVisible = listHeight > options.scrollHeight; - list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight ); - if (!scrollbarsVisible) { - // IE doesn't recalculate width when scrollbar disappears - listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) ); - } - } - - } - }, - selected: function() { - var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE); - return selected && selected.length && $.data(selected[0], "ac_data"); - }, - emptyList: function (){ - list && list.empty(); - }, - unbind: function() { - element && element.remove(); - } - }; -}; - -$.fn.selection = function(start, end) { - if (start !== undefined) { - return this.each(function() { - if( this.createTextRange ){ - var selRange = this.createTextRange(); - if (end === undefined || start == end) { - selRange.move("character", start); - selRange.select(); - } else { - selRange.collapse(true); - selRange.moveStart("character", start); - selRange.moveEnd("character", end); - selRange.select(); - } - } else if( this.setSelectionRange ){ - this.setSelectionRange(start, end); - } else if( this.selectionStart ){ - this.selectionStart = start; - this.selectionEnd = end; - } - }); - } - var field = this[0]; - if ( field.createTextRange ) { - var range = document.selection.createRange(), - orig = field.value, - teststring = "<->", - textLength = range.text.length; - range.text = teststring; - var caretAt = field.value.indexOf(teststring); - field.value = orig; - this.selection(caretAt, caretAt + textLength); - return { - start: caretAt, - end: caretAt + textLength - } - } else if( field.selectionStart !== undefined ){ - return { - start: field.selectionStart, - end: field.selectionEnd - } - } -}; - -})(jQuery); \ No newline at end of file diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-de.js b/apps/wolnelektury_core/static/js/contrib/jquery.countdown-de.js deleted file mode 100644 index 5a3f43d78..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-de.js +++ /dev/null @@ -1,12 +0,0 @@ -/* http://keith-wood.name/countdown.html - German initialisation for the jQuery countdown extension - Written by Keith Wood (kbwood@virginbroadband.com.au) Jan 2008. */ -(function($) { - $.countdown.regional['de'] = { - labels: ['Jahren', 'Monate', 'Wochen', 'Tage', 'Stunden', 'Minuten', 'Sekunden'], - labels1: ['Jahre', 'Monat', 'Woche', 'Tag', 'Stunde', 'Minute', 'Sekunde'], - compactLabels: ['J', 'M', 'W', 'T'], - whichLabels: null, - timeSeparator: ':', isRTL: false}; - $.countdown.setDefaults($.countdown.regional['de']); -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-es.js b/apps/wolnelektury_core/static/js/contrib/jquery.countdown-es.js deleted file mode 100644 index 362f58c7d..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-es.js +++ /dev/null @@ -1,12 +0,0 @@ -/* http://keith-wood.name/countdown.html - * Spanish initialisation for the jQuery countdown extension - * Written by Sergio Carracedo Martinez webmaster@neodisenoweb.com (2008) */ -(function($) { - $.countdown.regional['es'] = { - labels: ['Años', 'Meses', 'Semanas', 'Dias', 'Horas', 'Minutos', 'Segundos'], - labels1: ['Años', 'Meses', 'Semanas', 'Dias', 'Horas', 'Minutos', 'Segundos'], - compactLabels: ['a', 'm', 's', 'g'], - whichLabels: null, - timeSeparator: ':', isRTL: false}; - $.countdown.setDefaults($.countdown.regional['es']); -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-fr.js b/apps/wolnelektury_core/static/js/contrib/jquery.countdown-fr.js deleted file mode 100644 index 70e17def7..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-fr.js +++ /dev/null @@ -1,12 +0,0 @@ -/* http://keith-wood.name/countdown.html - French initialisation for the jQuery countdown extension - Written by Keith Wood (kbwood{at}iinet.com.au) Jan 2008. */ -(function($) { - $.countdown.regional['fr'] = { - labels: ['Années', 'Mois', 'Semaines', 'Jours', 'Heures', 'Minutes', 'Secondes'], - labels1: ['Année', 'Mois', 'Semaine', 'Jour', 'Heure', 'Minute', 'Seconde'], - compactLabels: ['a', 'm', 's', 'j'], - whichLabels: null, - timeSeparator: ':', isRTL: false}; - $.countdown.setDefaults($.countdown.regional['fr']); -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-lt.js b/apps/wolnelektury_core/static/js/contrib/jquery.countdown-lt.js deleted file mode 100644 index ee11c71c5..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-lt.js +++ /dev/null @@ -1,12 +0,0 @@ -/* http://keith-wood.name/countdown.html - * Lithuanian localisation for the jQuery countdown extension - * Written by Moacir P. de Sá Pereira (moacir{at}gmail.com) (2009) */ -(function($) { - $.countdown.regional['lt'] = { - labels: ['Metų', 'MÄnesių', 'SavaiÄių', 'Dienų', 'Valandų', 'MinuÄių', 'Sekundžių'], - labels1: ['Metai', 'MÄnuo', 'SavaitÄ', 'Diena', 'Valanda', 'MinutÄ', 'SekundÄ'], - compactLabels: ['m', 'm', 's', 'd'], - whichLabels: null, - timeSeparator: ':', isRTL: false}; - $.countdown.setDefaults($.countdown.regional['lt']); -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-pl.js b/apps/wolnelektury_core/static/js/contrib/jquery.countdown-pl.js deleted file mode 100644 index 6860a4bab..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-pl.js +++ /dev/null @@ -1,17 +0,0 @@ -/* http://keith-wood.name/countdown.html - * Polish initialisation for the jQuery countdown extension - * Written by Pawel Lewtak lewtak@gmail.com (2008) */ -(function($) { - $.countdown.regional['pl'] = { - labels: ['lat', 'miesiÄcy', 'tygodni', 'dni', 'godzin', 'minut', 'sekund'], - labels1: ['rok', 'miesiÄ c', 'tydzieÅ', 'dzieÅ', 'godzina', 'minuta', 'sekunda'], - labels2: ['lata', 'miesiÄ ce', 'tygodnie', 'dni', 'godziny', 'minuty', 'sekundy'], - compactLabels: ['l', 'm', 't', 'd'], compactLabels1: ['r', 'm', 't', 'd'], - whichLabels: function(amount) { - var units = amount % 10; - var tens = Math.floor((amount % 100) / 10); - return (amount == 1 ? 1 : (units >= 2 && units <= 4 && tens != 1 ? 2 : 0)); - }, - timeSeparator: ':', isRTL: false}; - $.countdown.setDefaults($.countdown.regional['pl']); -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-ru.js b/apps/wolnelektury_core/static/js/contrib/jquery.countdown-ru.js deleted file mode 100644 index badd3eb01..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-ru.js +++ /dev/null @@ -1,12 +0,0 @@ -/* http://keith-wood.name/countdown.html - * Russian initialisation for the jQuery countdown extension - * Written by Dominus i3rixon@gmail.com (2008) */ -(function($) { - $.countdown.regional['ru'] = { - labels: ['ÐеÑ', 'ÐеÑÑÑев', 'ÐеделÑ', 'Ðней', 'ЧаÑов', 'ÐинÑÑ', 'СекÑнд'], - labels1: ['Ðод', 'ÐеÑÑÑ', 'ÐеделÑ', 'ÐенÑ', 'ЧаÑ', 'ÐинÑÑа', 'СекÑнда'], - compactLabels: ['l', 'm', 'n', 'd'], compactLabels1: ['g', 'm', 'n', 'd'], - whichLabels: null, - timeSeparator: ':', isRTL: false}; - $.countdown.setDefaults($.countdown.regional['ru']); -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-uk.js b/apps/wolnelektury_core/static/js/contrib/jquery.countdown-uk.js deleted file mode 100644 index c98791e53..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.countdown-uk.js +++ /dev/null @@ -1,12 +0,0 @@ -/* http://keith-wood.name/countdown.html - * Ukrainian initialisation for the jQuery countdown extension - * Written by Goloborodko M misha.gm@gmail.com (2009) */ -(function($) { - $.countdown.regional['uk'] = { - labels: ['РокÑв', 'ÐÑÑÑÑÑв', 'ТижднÑв', 'ÐнÑв', 'Ðодин', 'Хвилин', 'СекÑнд'], - labels1: ['Ð Ñк', 'ÐÑÑÑÑÑ', 'ТижденÑ', 'ÐенÑ', 'Ðодина', 'Хвилина', 'СекÑнда'], - compactLabels: ['r', 'm', 't', 'd'], - whichLabels: null, - timeSeparator: ':', isRTL: false}; - $.countdown.setDefaults($.countdown.regional['uk']); -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.countdown.js b/apps/wolnelektury_core/static/js/contrib/jquery.countdown.js deleted file mode 100644 index f9c58d370..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.countdown.js +++ /dev/null @@ -1,759 +0,0 @@ -/* http://keith-wood.name/countdown.html - Countdown for jQuery v1.5.8. - Written by Keith Wood (kbwood{at}iinet.com.au) January 2008. - Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and - MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. - Please attribute the author if you use it. */ - -/* Display a countdown timer. - Attach it with options like: - $('div selector').countdown( - {until: new Date(2009, 1 - 1, 1, 0, 0, 0), onExpiry: happyNewYear}); */ - -(function($) { // Hide scope, no $ conflict - -/* Countdown manager. */ -function Countdown() { - this.regional = []; // Available regional settings, indexed by language code - this.regional[''] = { // Default regional settings - // The display texts for the counters - labels: ['Years', 'Months', 'Weeks', 'Days', 'Hours', 'Minutes', 'Seconds'], - // The display texts for the counters if only one - labels1: ['Year', 'Month', 'Week', 'Day', 'Hour', 'Minute', 'Second'], - compactLabels: ['y', 'm', 'w', 'd'], // The compact texts for the counters - whichLabels: null, // Function to determine which labels to use - timeSeparator: ':', // Separator for time periods - isRTL: false // True for right-to-left languages, false for left-to-right - }; - this._defaults = { - until: null, // new Date(year, mth - 1, day, hr, min, sec) - date/time to count down to - // or numeric for seconds offset, or string for unit offset(s): - // 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds - since: null, // new Date(year, mth - 1, day, hr, min, sec) - date/time to count up from - // or numeric for seconds offset, or string for unit offset(s): - // 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds - timezone: null, // The timezone (hours or minutes from GMT) for the target times, - // or null for client local - serverSync: null, // A function to retrieve the current server time for synchronisation - format: 'dHMS', // Format for display - upper case for always, lower case only if non-zero, - // 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds - layout: '', // Build your own layout for the countdown - compact: false, // True to display in a compact format, false for an expanded one - significant: 0, // The number of periods with values to show, zero for all - description: '', // The description displayed for the countdown - expiryUrl: '', // A URL to load upon expiry, replacing the current page - expiryText: '', // Text to display upon expiry, replacing the countdown - alwaysExpire: false, // True to trigger onExpiry even if never counted down - onExpiry: null, // Callback when the countdown expires - - // receives no parameters and 'this' is the containing division - onTick: null, // Callback when the countdown is updated - - // receives int[7] being the breakdown by period (based on format) - // and 'this' is the containing division - tickInterval: 1 // Interval (seconds) between onTick callbacks - }; - $.extend(this._defaults, this.regional['']); - this._serverSyncs = []; -} - -var PROP_NAME = 'countdown'; - -var Y = 0; // Years -var O = 1; // Months -var W = 2; // Weeks -var D = 3; // Days -var H = 4; // Hours -var M = 5; // Minutes -var S = 6; // Seconds - -$.extend(Countdown.prototype, { - /* Class name added to elements to indicate already configured with countdown. */ - markerClassName: 'hasCountdown', - - /* Shared timer for all countdowns. */ - _timer: setInterval(function() { $.countdown._updateTargets(); }, 980), - /* List of currently active countdown targets. */ - _timerTargets: [], - - /* Override the default settings for all instances of the countdown widget. - @param options (object) the new settings to use as defaults */ - setDefaults: function(options) { - this._resetExtraLabels(this._defaults, options); - extendRemove(this._defaults, options || {}); - }, - - /* Convert a date/time to UTC. - @param tz (number) the hour or minute offset from GMT, e.g. +9, -360 - @param year (Date) the date/time in that timezone or - (number) the year in that timezone - @param month (number, optional) the month (0 - 11) (omit if year is a Date) - @param day (number, optional) the day (omit if year is a Date) - @param hours (number, optional) the hour (omit if year is a Date) - @param mins (number, optional) the minute (omit if year is a Date) - @param secs (number, optional) the second (omit if year is a Date) - @param ms (number, optional) the millisecond (omit if year is a Date) - @return (Date) the equivalent UTC date/time */ - UTCDate: function(tz, year, month, day, hours, mins, secs, ms) { - if (typeof year == 'object' && year.constructor == Date) { - ms = year.getMilliseconds(); - secs = year.getSeconds(); - mins = year.getMinutes(); - hours = year.getHours(); - day = year.getDate(); - month = year.getMonth(); - year = year.getFullYear(); - } - var d = new Date(); - d.setUTCFullYear(year); - d.setUTCDate(1); - d.setUTCMonth(month || 0); - d.setUTCDate(day || 1); - d.setUTCHours(hours || 0); - d.setUTCMinutes((mins || 0) - (Math.abs(tz) < 30 ? tz * 60 : tz)); - d.setUTCSeconds(secs || 0); - d.setUTCMilliseconds(ms || 0); - return d; - }, - - /* Convert a set of periods into seconds. - Averaged for months and years. - @param periods (number[7]) the periods per year/month/week/day/hour/minute/second - @return (number) the corresponding number of seconds */ - periodsToSeconds: function(periods) { - return periods[0] * 31557600 + periods[1] * 2629800 + periods[2] * 604800 + - periods[3] * 86400 + periods[4] * 3600 + periods[5] * 60 + periods[6]; - }, - - /* Retrieve one or more settings values. - @param name (string, optional) the name of the setting to retrieve - or 'all' for all instance settings or omit for all default settings - @return (any) the requested setting(s) */ - _settingsCountdown: function(target, name) { - if (!name) { - return $.countdown._defaults; - } - var inst = $.data(target, PROP_NAME); - return (name == 'all' ? inst.options : inst.options[name]); - }, - - /* Attach the countdown widget to a div. - @param target (element) the containing division - @param options (object) the initial settings for the countdown */ - _attachCountdown: function(target, options) { - var $target = $(target); - if ($target.hasClass(this.markerClassName)) { - return; - } - $target.addClass(this.markerClassName); - var inst = {options: $.extend({}, options), - _periods: [0, 0, 0, 0, 0, 0, 0]}; - $.data(target, PROP_NAME, inst); - this._changeCountdown(target); - }, - - /* Add a target to the list of active ones. - @param target (element) the countdown target */ - _addTarget: function(target) { - if (!this._hasTarget(target)) { - this._timerTargets.push(target); - } - }, - - /* See if a target is in the list of active ones. - @param target (element) the countdown target - @return (boolean) true if present, false if not */ - _hasTarget: function(target) { - return ($.inArray(target, this._timerTargets) > -1); - }, - - /* Remove a target from the list of active ones. - @param target (element) the countdown target */ - _removeTarget: function(target) { - this._timerTargets = $.map(this._timerTargets, - function(value) { return (value == target ? null : value); }); // delete entry - }, - - /* Update each active timer target. */ - _updateTargets: function() { - for (var i = this._timerTargets.length - 1; i >= 0; i--) { - this._updateCountdown(this._timerTargets[i]); - } - }, - - /* Redisplay the countdown with an updated display. - @param target (jQuery) the containing division - @param inst (object) the current settings for this instance */ - _updateCountdown: function(target, inst) { - var $target = $(target); - inst = inst || $.data(target, PROP_NAME); - if (!inst) { - return; - } - $target.html(this._generateHTML(inst)); - $target[(this._get(inst, 'isRTL') ? 'add' : 'remove') + 'Class']('countdown_rtl'); - var onTick = this._get(inst, 'onTick'); - if (onTick) { - var periods = inst._hold != 'lap' ? inst._periods : - this._calculatePeriods(inst, inst._show, this._get(inst, 'significant'), new Date()); - var tickInterval = this._get(inst, 'tickInterval'); - if (tickInterval == 1 || this.periodsToSeconds(periods) % tickInterval == 0) { - onTick.apply(target, [periods]); - } - } - var expired = inst._hold != 'pause' && - (inst._since ? inst._now.getTime() < inst._since.getTime() : - inst._now.getTime() >= inst._until.getTime()); - if (expired && !inst._expiring) { - inst._expiring = true; - if (this._hasTarget(target) || this._get(inst, 'alwaysExpire')) { - this._removeTarget(target); - var onExpiry = this._get(inst, 'onExpiry'); - if (onExpiry) { - onExpiry.apply(target, []); - } - var expiryText = this._get(inst, 'expiryText'); - if (expiryText) { - var layout = this._get(inst, 'layout'); - inst.options.layout = expiryText; - this._updateCountdown(target, inst); - inst.options.layout = layout; - } - var expiryUrl = this._get(inst, 'expiryUrl'); - if (expiryUrl) { - window.location = expiryUrl; - } - } - inst._expiring = false; - } - else if (inst._hold == 'pause') { - this._removeTarget(target); - } - $.data(target, PROP_NAME, inst); - }, - - /* Reconfigure the settings for a countdown div. - @param target (element) the containing division - @param options (object) the new settings for the countdown or - (string) an individual property name - @param value (any) the individual property value - (omit if options is an object) */ - _changeCountdown: function(target, options, value) { - options = options || {}; - if (typeof options == 'string') { - var name = options; - options = {}; - options[name] = value; - } - var inst = $.data(target, PROP_NAME); - if (inst) { - this._resetExtraLabels(inst.options, options); - extendRemove(inst.options, options); - this._adjustSettings(target, inst); - $.data(target, PROP_NAME, inst); - var now = new Date(); - if ((inst._since && inst._since < now) || - (inst._until && inst._until > now)) { - this._addTarget(target); - } - this._updateCountdown(target, inst); - } - }, - - /* Reset any extra labelsn and compactLabelsn entries if changing labels. - @param base (object) the options to be updated - @param options (object) the new option values */ - _resetExtraLabels: function(base, options) { - var changingLabels = false; - for (var n in options) { - if (n != 'whichLabels' && n.match(/[Ll]abels/)) { - changingLabels = true; - break; - } - } - if (changingLabels) { - for (var n in base) { // Remove custom numbered labels - if (n.match(/[Ll]abels[0-9]/)) { - base[n] = null; - } - } - } - }, - - /* Calculate interal settings for an instance. - @param target (element) the containing division - @param inst (object) the current settings for this instance */ - _adjustSettings: function(target, inst) { - var now; - var serverSync = this._get(inst, 'serverSync'); - var serverOffset = 0; - var serverEntry = null; - for (var i = 0; i < this._serverSyncs.length; i++) { - if (this._serverSyncs[i][0] == serverSync) { - serverEntry = this._serverSyncs[i][1]; - break; - } - } - if (serverEntry != null) { - serverOffset = (serverSync ? serverEntry : 0); - now = new Date(); - } - else { - var serverResult = (serverSync ? serverSync.apply(target, []) : null); - now = new Date(); - serverOffset = (serverResult ? now.getTime() - serverResult.getTime() : 0); - this._serverSyncs.push([serverSync, serverOffset]); - } - var timezone = this._get(inst, 'timezone'); - timezone = (timezone == null ? -now.getTimezoneOffset() : timezone); - inst._since = this._get(inst, 'since'); - if (inst._since != null) { - inst._since = this.UTCDate(timezone, this._determineTime(inst._since, null)); - if (inst._since && serverOffset) { - inst._since.setMilliseconds(inst._since.getMilliseconds() + serverOffset); - } - } - inst._until = this.UTCDate(timezone, this._determineTime(this._get(inst, 'until'), now)); - if (serverOffset) { - inst._until.setMilliseconds(inst._until.getMilliseconds() + serverOffset); - } - inst._show = this._determineShow(inst); - }, - - /* Remove the countdown widget from a div. - @param target (element) the containing division */ - _destroyCountdown: function(target) { - var $target = $(target); - if (!$target.hasClass(this.markerClassName)) { - return; - } - this._removeTarget(target); - $target.removeClass(this.markerClassName).empty(); - $.removeData(target, PROP_NAME); - }, - - /* Pause a countdown widget at the current time. - Stop it running but remember and display the current time. - @param target (element) the containing division */ - _pauseCountdown: function(target) { - this._hold(target, 'pause'); - }, - - /* Pause a countdown widget at the current time. - Stop the display but keep the countdown running. - @param target (element) the containing division */ - _lapCountdown: function(target) { - this._hold(target, 'lap'); - }, - - /* Resume a paused countdown widget. - @param target (element) the containing division */ - _resumeCountdown: function(target) { - this._hold(target, null); - }, - - /* Pause or resume a countdown widget. - @param target (element) the containing division - @param hold (string) the new hold setting */ - _hold: function(target, hold) { - var inst = $.data(target, PROP_NAME); - if (inst) { - if (inst._hold == 'pause' && !hold) { - inst._periods = inst._savePeriods; - var sign = (inst._since ? '-' : '+'); - inst[inst._since ? '_since' : '_until'] = - this._determineTime(sign + inst._periods[0] + 'y' + - sign + inst._periods[1] + 'o' + sign + inst._periods[2] + 'w' + - sign + inst._periods[3] + 'd' + sign + inst._periods[4] + 'h' + - sign + inst._periods[5] + 'm' + sign + inst._periods[6] + 's'); - this._addTarget(target); - } - inst._hold = hold; - inst._savePeriods = (hold == 'pause' ? inst._periods : null); - $.data(target, PROP_NAME, inst); - this._updateCountdown(target, inst); - } - }, - - /* Return the current time periods. - @param target (element) the containing division - @return (number[7]) the current periods for the countdown */ - _getTimesCountdown: function(target) { - var inst = $.data(target, PROP_NAME); - return (!inst ? null : (!inst._hold ? inst._periods : - this._calculatePeriods(inst, inst._show, this._get(inst, 'significant'), new Date()))); - }, - - /* Get a setting value, defaulting if necessary. - @param inst (object) the current settings for this instance - @param name (string) the name of the required setting - @return (any) the setting's value or a default if not overridden */ - _get: function(inst, name) { - return (inst.options[name] != null ? - inst.options[name] : $.countdown._defaults[name]); - }, - - /* A time may be specified as an exact value or a relative one. - @param setting (string or number or Date) - the date/time value - as a relative or absolute value - @param defaultTime (Date) the date/time to use if no other is supplied - @return (Date) the corresponding date/time */ - _determineTime: function(setting, defaultTime) { - var offsetNumeric = function(offset) { // e.g. +300, -2 - var time = new Date(); - time.setTime(time.getTime() + offset * 1000); - return time; - }; - var offsetString = function(offset) { // e.g. '+2d', '-4w', '+3h +30m' - offset = offset.toLowerCase(); - var time = new Date(); - var year = time.getFullYear(); - var month = time.getMonth(); - var day = time.getDate(); - var hour = time.getHours(); - var minute = time.getMinutes(); - var second = time.getSeconds(); - var pattern = /([+-]?[0-9]+)\s*(s|m|h|d|w|o|y)?/g; - var matches = pattern.exec(offset); - while (matches) { - switch (matches[2] || 's') { - case 's': second += parseInt(matches[1], 10); break; - case 'm': minute += parseInt(matches[1], 10); break; - case 'h': hour += parseInt(matches[1], 10); break; - case 'd': day += parseInt(matches[1], 10); break; - case 'w': day += parseInt(matches[1], 10) * 7; break; - case 'o': - month += parseInt(matches[1], 10); - day = Math.min(day, $.countdown._getDaysInMonth(year, month)); - break; - case 'y': - year += parseInt(matches[1], 10); - day = Math.min(day, $.countdown._getDaysInMonth(year, month)); - break; - } - matches = pattern.exec(offset); - } - return new Date(year, month, day, hour, minute, second, 0); - }; - var time = (setting == null ? defaultTime : - (typeof setting == 'string' ? offsetString(setting) : - (typeof setting == 'number' ? offsetNumeric(setting) : setting))); - if (time) time.setMilliseconds(0); - return time; - }, - - /* Determine the number of days in a month. - @param year (number) the year - @param month (number) the month - @return (number) the days in that month */ - _getDaysInMonth: function(year, month) { - return 32 - new Date(year, month, 32).getDate(); - }, - - /* Determine which set of labels should be used for an amount. - @param num (number) the amount to be displayed - @return (number) the set of labels to be used for this amount */ - _normalLabels: function(num) { - return num; - }, - - /* Generate the HTML to display the countdown widget. - @param inst (object) the current settings for this instance - @return (string) the new HTML for the countdown display */ - _generateHTML: function(inst) { - // Determine what to show - var significant = this._get(inst, 'significant'); - inst._periods = (inst._hold ? inst._periods : - this._calculatePeriods(inst, inst._show, significant, new Date())); - // Show all 'asNeeded' after first non-zero value - var shownNonZero = false; - var showCount = 0; - var sigCount = significant; - var show = $.extend({}, inst._show); - for (var period = Y; period <= S; period++) { - shownNonZero |= (inst._show[period] == '?' && inst._periods[period] > 0); - show[period] = (inst._show[period] == '?' && !shownNonZero ? null : inst._show[period]); - showCount += (show[period] ? 1 : 0); - sigCount -= (inst._periods[period] > 0 ? 1 : 0); - } - var showSignificant = [false, false, false, false, false, false, false]; - for (var period = S; period >= Y; period--) { // Determine significant periods - if (inst._show[period]) { - if (inst._periods[period]) { - showSignificant[period] = true; - } - else { - showSignificant[period] = sigCount > 0; - sigCount--; - } - } - } - var compact = this._get(inst, 'compact'); - var layout = this._get(inst, 'layout'); - var labels = (compact ? this._get(inst, 'compactLabels') : this._get(inst, 'labels')); - var whichLabels = this._get(inst, 'whichLabels') || this._normalLabels; - var timeSeparator = this._get(inst, 'timeSeparator'); - var description = this._get(inst, 'description') || ''; - var showCompact = function(period) { - var labelsNum = $.countdown._get(inst, - 'compactLabels' + whichLabels(inst._periods[period])); - return (show[period] ? inst._periods[period] + - (labelsNum ? labelsNum[period] : labels[period]) + ' ' : ''); - }; - var showFull = function(period) { - var labelsNum = $.countdown._get(inst, 'labels' + whichLabels(inst._periods[period])); - return ((!significant && show[period]) || (significant && showSignificant[period]) ? - '<span class="countdown_section"><span class="countdown_amount">' + - inst._periods[period] + '</span><br/>' + - (labelsNum ? labelsNum[period] : labels[period]) + '</span>' : ''); - }; - return (layout ? this._buildLayout(inst, show, layout, compact, significant, showSignificant) : - ((compact ? // Compact version - '<span class="countdown_row countdown_amount' + - (inst._hold ? ' countdown_holding' : '') + '">' + - showCompact(Y) + showCompact(O) + showCompact(W) + showCompact(D) + - (show[H] ? this._minDigits(inst._periods[H], 2) : '') + - (show[M] ? (show[H] ? timeSeparator : '') + - this._minDigits(inst._periods[M], 2) : '') + - (show[S] ? (show[H] || show[M] ? timeSeparator : '') + - this._minDigits(inst._periods[S], 2) : '') : - // Full version - '<span class="countdown_row countdown_show' + (significant || showCount) + - (inst._hold ? ' countdown_holding' : '') + '">' + - showFull(Y) + showFull(O) + showFull(W) + showFull(D) + - showFull(H) + showFull(M) + showFull(S)) + '</span>' + - (description ? '<span class="countdown_row countdown_descr">' + description + '</span>' : ''))); - }, - - /* Construct a custom layout. - @param inst (object) the current settings for this instance - @param show (string[7]) flags indicating which periods are requested - @param layout (string) the customised layout - @param compact (boolean) true if using compact labels - @param significant (number) the number of periods with values to show, zero for all - @param showSignificant (boolean[7]) other periods to show for significance - @return (string) the custom HTML */ - _buildLayout: function(inst, show, layout, compact, significant, showSignificant) { - var labels = this._get(inst, (compact ? 'compactLabels' : 'labels')); - var whichLabels = this._get(inst, 'whichLabels') || this._normalLabels; - var labelFor = function(index) { - return ($.countdown._get(inst, - (compact ? 'compactLabels' : 'labels') + whichLabels(inst._periods[index])) || - labels)[index]; - }; - var digit = function(value, position) { - return Math.floor(value / position) % 10; - }; - var subs = {desc: this._get(inst, 'description'), sep: this._get(inst, 'timeSeparator'), - yl: labelFor(Y), yn: inst._periods[Y], ynn: this._minDigits(inst._periods[Y], 2), - ynnn: this._minDigits(inst._periods[Y], 3), y1: digit(inst._periods[Y], 1), - y10: digit(inst._periods[Y], 10), y100: digit(inst._periods[Y], 100), - y1000: digit(inst._periods[Y], 1000), - ol: labelFor(O), on: inst._periods[O], onn: this._minDigits(inst._periods[O], 2), - onnn: this._minDigits(inst._periods[O], 3), o1: digit(inst._periods[O], 1), - o10: digit(inst._periods[O], 10), o100: digit(inst._periods[O], 100), - o1000: digit(inst._periods[O], 1000), - wl: labelFor(W), wn: inst._periods[W], wnn: this._minDigits(inst._periods[W], 2), - wnnn: this._minDigits(inst._periods[W], 3), w1: digit(inst._periods[W], 1), - w10: digit(inst._periods[W], 10), w100: digit(inst._periods[W], 100), - w1000: digit(inst._periods[W], 1000), - dl: labelFor(D), dn: inst._periods[D], dnn: this._minDigits(inst._periods[D], 2), - dnnn: this._minDigits(inst._periods[D], 3), d1: digit(inst._periods[D], 1), - d10: digit(inst._periods[D], 10), d100: digit(inst._periods[D], 100), - d1000: digit(inst._periods[D], 1000), - hl: labelFor(H), hn: inst._periods[H], hnn: this._minDigits(inst._periods[H], 2), - hnnn: this._minDigits(inst._periods[H], 3), h1: digit(inst._periods[H], 1), - h10: digit(inst._periods[H], 10), h100: digit(inst._periods[H], 100), - h1000: digit(inst._periods[H], 1000), - ml: labelFor(M), mn: inst._periods[M], mnn: this._minDigits(inst._periods[M], 2), - mnnn: this._minDigits(inst._periods[M], 3), m1: digit(inst._periods[M], 1), - m10: digit(inst._periods[M], 10), m100: digit(inst._periods[M], 100), - m1000: digit(inst._periods[M], 1000), - sl: labelFor(S), sn: inst._periods[S], snn: this._minDigits(inst._periods[S], 2), - snnn: this._minDigits(inst._periods[S], 3), s1: digit(inst._periods[S], 1), - s10: digit(inst._periods[S], 10), s100: digit(inst._periods[S], 100), - s1000: digit(inst._periods[S], 1000)}; - var html = layout; - // Replace period containers: {p<}...{p>} - for (var i = Y; i <= S; i++) { - var period = 'yowdhms'.charAt(i); - var re = new RegExp('\\{' + period + '<\\}(.*)\\{' + period + '>\\}', 'g'); - html = html.replace(re, ((!significant && show[i]) || - (significant && showSignificant[i]) ? '$1' : '')); - } - // Replace period values: {pn} - $.each(subs, function(n, v) { - var re = new RegExp('\\{' + n + '\\}', 'g'); - html = html.replace(re, v); - }); - return html; - }, - - /* Ensure a numeric value has at least n digits for display. - @param value (number) the value to display - @param len (number) the minimum length - @return (string) the display text */ - _minDigits: function(value, len) { - value = '' + value; - if (value.length >= len) { - return value; - } - value = '0000000000' + value; - return value.substr(value.length - len); - }, - - /* Translate the format into flags for each period. - @param inst (object) the current settings for this instance - @return (string[7]) flags indicating which periods are requested (?) or - required (!) by year, month, week, day, hour, minute, second */ - _determineShow: function(inst) { - var format = this._get(inst, 'format'); - var show = []; - show[Y] = (format.match('y') ? '?' : (format.match('Y') ? '!' : null)); - show[O] = (format.match('o') ? '?' : (format.match('O') ? '!' : null)); - show[W] = (format.match('w') ? '?' : (format.match('W') ? '!' : null)); - show[D] = (format.match('d') ? '?' : (format.match('D') ? '!' : null)); - show[H] = (format.match('h') ? '?' : (format.match('H') ? '!' : null)); - show[M] = (format.match('m') ? '?' : (format.match('M') ? '!' : null)); - show[S] = (format.match('s') ? '?' : (format.match('S') ? '!' : null)); - return show; - }, - - /* Calculate the requested periods between now and the target time. - @param inst (object) the current settings for this instance - @param show (string[7]) flags indicating which periods are requested/required - @param significant (number) the number of periods with values to show, zero for all - @param now (Date) the current date and time - @return (number[7]) the current time periods (always positive) - by year, month, week, day, hour, minute, second */ - _calculatePeriods: function(inst, show, significant, now) { - // Find endpoints - inst._now = now; - inst._now.setMilliseconds(0); - var until = new Date(inst._now.getTime()); - if (inst._since) { - if (now.getTime() < inst._since.getTime()) { - inst._now = now = until; - } - else { - now = inst._since; - } - } - else { - until.setTime(inst._until.getTime()); - if (now.getTime() > inst._until.getTime()) { - inst._now = now = until; - } - } - // Calculate differences by period - var periods = [0, 0, 0, 0, 0, 0, 0]; - if (show[Y] || show[O]) { - // Treat end of months as the same - var lastNow = $.countdown._getDaysInMonth(now.getFullYear(), now.getMonth()); - var lastUntil = $.countdown._getDaysInMonth(until.getFullYear(), until.getMonth()); - var sameDay = (until.getDate() == now.getDate() || - (until.getDate() >= Math.min(lastNow, lastUntil) && - now.getDate() >= Math.min(lastNow, lastUntil))); - var getSecs = function(date) { - return (date.getHours() * 60 + date.getMinutes()) * 60 + date.getSeconds(); - }; - var months = Math.max(0, - (until.getFullYear() - now.getFullYear()) * 12 + until.getMonth() - now.getMonth() + - ((until.getDate() < now.getDate() && !sameDay) || - (sameDay && getSecs(until) < getSecs(now)) ? -1 : 0)); - periods[Y] = (show[Y] ? Math.floor(months / 12) : 0); - periods[O] = (show[O] ? months - periods[Y] * 12 : 0); - // Adjust for months difference and end of month if necessary - now = new Date(now.getTime()); - var wasLastDay = (now.getDate() == lastNow); - var lastDay = $.countdown._getDaysInMonth(now.getFullYear() + periods[Y], - now.getMonth() + periods[O]); - if (now.getDate() > lastDay) { - now.setDate(lastDay); - } - now.setFullYear(now.getFullYear() + periods[Y]); - now.setMonth(now.getMonth() + periods[O]); - if (wasLastDay) { - now.setDate(lastDay); - } - } - var diff = Math.floor((until.getTime() - now.getTime()) / 1000); - var extractPeriod = function(period, numSecs) { - periods[period] = (show[period] ? Math.floor(diff / numSecs) : 0); - diff -= periods[period] * numSecs; - }; - extractPeriod(W, 604800); - extractPeriod(D, 86400); - extractPeriod(H, 3600); - extractPeriod(M, 60); - extractPeriod(S, 1); - if (diff > 0 && !inst._since) { // Round up if left overs - var multiplier = [1, 12, 4.3482, 7, 24, 60, 60]; - var lastShown = S; - var max = 1; - for (var period = S; period >= Y; period--) { - if (show[period]) { - if (periods[lastShown] >= max) { - periods[lastShown] = 0; - diff = 1; - } - if (diff > 0) { - periods[period]++; - diff = 0; - lastShown = period; - max = 1; - } - } - max *= multiplier[period]; - } - } - if (significant) { // Zero out insignificant periods - for (var period = Y; period <= S; period++) { - if (significant && periods[period]) { - significant--; - } - else if (!significant) { - periods[period] = 0; - } - } - } - return periods; - } -}); - -/* jQuery extend now ignores nulls! - @param target (object) the object to update - @param props (object) the new settings - @return (object) the updated object */ -function extendRemove(target, props) { - $.extend(target, props); - for (var name in props) { - if (props[name] == null) { - target[name] = null; - } - } - return target; -} - -/* Process the countdown functionality for a jQuery selection. - @param command (string) the command to run (optional, default 'attach') - @param options (object) the new settings to use for these countdown instances - @return (jQuery) for chaining further calls */ -$.fn.countdown = function(options) { - var otherArgs = Array.prototype.slice.call(arguments, 1); - if (options == 'getTimes' || options == 'settings') { - return $.countdown['_' + options + 'Countdown']. - apply($.countdown, [this[0]].concat(otherArgs)); - } - return this.each(function() { - if (typeof options == 'string') { - $.countdown['_' + options + 'Countdown'].apply($.countdown, [this].concat(otherArgs)); - } - else { - $.countdown._attachCountdown(this, options); - } - }); -}; - -/* Initialise the countdown functionality. */ -$.countdown = new Countdown(); // singleton instance - -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.cycle.min.js b/apps/wolnelektury_core/static/js/contrib/jquery.cycle.min.js deleted file mode 100644 index 9311b63fe..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.cycle.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * jQuery Cycle Lite Plugin - * http://malsup.com/jquery/cycle/lite/ - * Copyright (c) 2008 M. Alsup - * Version: 1.0 (06/08/2008) - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * Requires: jQuery v1.2.3 or later - */ -(function(D){var A="Lite-1.0";D.fn.cycle=function(E){return this.each(function(){E=E||{};if(this.cycleTimeout){clearTimeout(this.cycleTimeout)}this.cycleTimeout=0;this.cyclePause=0;var I=D(this);var J=E.slideExpr?D(E.slideExpr,this):I.children();var G=J.get();if(G.length<2){if(window.console&&window.console.log){window.console.log("terminating; too few slides: "+G.length)}return }var H=D.extend({},D.fn.cycle.defaults,E||{},D.metadata?I.metadata():D.meta?I.data():{});H.before=H.before?[H.before]:[];H.after=H.after?[H.after]:[];H.after.unshift(function(){H.busy=0});var F=this.className;H.width=parseInt((F.match(/w:(\d+)/)||[])[1])||H.width;H.height=parseInt((F.match(/h:(\d+)/)||[])[1])||H.height;H.timeout=parseInt((F.match(/t:(\d+)/)||[])[1])||H.timeout;if(I.css("position")=="static"){I.css("position","relative")}if(H.width){I.width(H.width)}if(H.height&&H.height!="auto"){I.height(H.height)}var K=0;J.css({position:"absolute",top:0,left:0}).hide().each(function(M){D(this).css("z-index",G.length-M)});D(G[K]).css("opacity",1).show();if(D.browser.msie){G[K].style.removeAttribute("filter")}if(H.fit&&H.width){J.width(H.width)}if(H.fit&&H.height&&H.height!="auto"){J.height(H.height)}if(H.pause){I.hover(function(){this.cyclePause=1},function(){this.cyclePause=0})}D.fn.cycle.transitions.fade(I,J,H);J.each(function(){var M=D(this);this.cycleH=(H.fit&&H.height)?H.height:M.height();this.cycleW=(H.fit&&H.width)?H.width:M.width()});J.not(":eq("+K+")").css({opacity:0});if(H.cssFirst){D(J[K]).css(H.cssFirst)}if(H.timeout){if(H.speed.constructor==String){H.speed={slow:600,fast:200}[H.speed]||400}if(!H.sync){H.speed=H.speed/2}while((H.timeout-H.speed)<250){H.timeout+=H.speed}}H.speedIn=H.speed;H.speedOut=H.speed;H.slideCount=G.length;H.currSlide=K;H.nextSlide=1;var L=J[K];if(H.before.length){H.before[0].apply(L,[L,L,H,true])}if(H.after.length>1){H.after[1].apply(L,[L,L,H,true])}if(H.click&&!H.next){H.next=H.click}if(H.next){D(H.next).bind("click",function(){return C(G,H,H.rev?-1:1)})}if(H.prev){D(H.prev).bind("click",function(){return C(G,H,H.rev?1:-1)})}if(H.timeout){this.cycleTimeout=setTimeout(function(){B(G,H,0,!H.rev)},H.timeout+(H.delay||0))}})};function B(J,E,I,K){if(E.busy){return }var H=J[0].parentNode,M=J[E.currSlide],L=J[E.nextSlide];if(H.cycleTimeout===0&&!I){return }if(I||!H.cyclePause){if(E.before.length){D.each(E.before,function(N,O){O.apply(L,[M,L,E,K])})}var F=function(){if(D.browser.msie){this.style.removeAttribute("filter")}D.each(E.after,function(N,O){O.apply(L,[M,L,E,K])})};if(E.nextSlide!=E.currSlide){E.busy=1;D.fn.cycle.custom(M,L,E,F)}var G=(E.nextSlide+1)==J.length;E.nextSlide=G?0:E.nextSlide+1;E.currSlide=G?J.length-1:E.nextSlide-1}if(E.timeout){H.cycleTimeout=setTimeout(function(){B(J,E,0,!E.rev)},E.timeout)}}function C(E,F,I){var H=E[0].parentNode,G=H.cycleTimeout;if(G){clearTimeout(G);H.cycleTimeout=0}F.nextSlide=F.currSlide+I;if(F.nextSlide<0){F.nextSlide=E.length-1}else{if(F.nextSlide>=E.length){F.nextSlide=0}}B(E,F,1,I>=0);return false}D.fn.cycle.custom=function(K,H,I,E){var J=D(K),G=D(H);G.css({opacity:0});var F=function(){G.animate({opacity:1},I.speedIn,I.easeIn,E)};J.animate({opacity:0},I.speedOut,I.easeOut,function(){J.css({display:"none"});if(!I.sync){F()}});if(I.sync){F()}};D.fn.cycle.transitions={fade:function(F,G,E){G.not(":eq(0)").css("opacity",0);E.before.push(function(){D(this).show()})}};D.fn.cycle.ver=function(){return A};D.fn.cycle.defaults={timeout:4000,speed:1000,next:null,prev:null,before:null,after:null,height:"auto",sync:1,fit:0,pause:0,delay:0,slideExpr:null}})(jQuery); \ No newline at end of file diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.eventdelegation.js b/apps/wolnelektury_core/static/js/contrib/jquery.eventdelegation.js deleted file mode 100644 index 52fce074a..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.eventdelegation.js +++ /dev/null @@ -1,55 +0,0 @@ -/* - * jQuery Event Delegation Plugin - jquery.eventdelegation.js - * Fast flexible event handling - * - * January 2008 - Randy Morey (http://dev.distilldesign.com/) - */ - -(function ($) { - /* setup list of allowed events for event delegation - * only events that bubble are appropriate - */ - var allowed = {}; - $.each([ - 'click', - 'dblclick', - 'mousedown', - 'mouseup', - 'mousemove', - 'mouseover', - 'mouseout', - 'keydown', - 'keypress', - 'keyup' - ], function(i, eventName) { - allowed[eventName] = true; - }); - - $.fn.extend({ - delegate: function (event, selector, f) { - return $(this).each(function () { - if (allowed[event]) - $(this).bind(event, function (e) { - var el = $(e.target), - result = false; - - while (!$(el).is('body')) { - if ($(el).is(selector)) { - result = f.apply($(el)[0], [e]); - if (result === false) - e.preventDefault(); - return; - } - - el = $(el).parent(); - } - }); - }); - }, - undelegate: function (event) { - return $(this).each(function () { - $(this).unbind(event); - }); - } - }); -})(jQuery); \ No newline at end of file diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.form.js b/apps/wolnelektury_core/static/js/contrib/jquery.form.js deleted file mode 100644 index 36af6b199..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.form.js +++ /dev/null @@ -1,601 +0,0 @@ -/* - * jQuery Form Plugin - * version: 2.12 (06/07/2008) - * @requires jQuery v1.2.2 or later - * - * Examples and documentation at: http://malsup.com/jquery/form/ - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - * Revision: $Id$ - */ -(function($) { - -/* - Usage Note: - ----------- - Do not use both ajaxSubmit and ajaxForm on the same form. These - functions are intended to be exclusive. Use ajaxSubmit if you want - to bind your own submit handler to the form. For example, - - $(document).ready(function() { - $('#myForm').bind('submit', function() { - $(this).ajaxSubmit({ - target: '#output' - }); - return false; // <-- important! - }); - }); - - Use ajaxForm when you want the plugin to manage all the event binding - for you. For example, - - $(document).ready(function() { - $('#myForm').ajaxForm({ - target: '#output' - }); - }); - - When using ajaxForm, the ajaxSubmit function will be invoked for you - at the appropriate time. -*/ - -/** - * ajaxSubmit() provides a mechanism for immediately submitting - * an HTML form using AJAX. - */ -$.fn.ajaxSubmit = function(options) { - // fast fail if nothing selected (http://dev.jquery.com/ticket/2752) - if (!this.length) { - log('ajaxSubmit: skipping submit process - no element selected'); - return this; - } - - if (typeof options == 'function') - options = { success: options }; - - options = $.extend({ - url: this.attr('action') || window.location.toString(), - type: this.attr('method') || 'GET' - }, options || {}); - - // hook for manipulating the form data before it is extracted; - // convenient for use with rich editors like tinyMCE or FCKEditor - var veto = {}; - this.trigger('form-pre-serialize', [this, options, veto]); - if (veto.veto) { - log('ajaxSubmit: submit vetoed via form-pre-serialize trigger'); - return this; - } - - var a = this.formToArray(options.semantic); - if (options.data) { - options.extraData = options.data; - for (var n in options.data) - a.push( { name: n, value: options.data[n] } ); - } - - // give pre-submit callback an opportunity to abort the submit - if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) { - log('ajaxSubmit: submit aborted via beforeSubmit callback'); - return this; - } - - // fire vetoable 'validate' event - this.trigger('form-submit-validate', [a, this, options, veto]); - if (veto.veto) { - log('ajaxSubmit: submit vetoed via form-submit-validate trigger'); - return this; - } - - var q = $.param(a); - - if (options.type.toUpperCase() == 'GET') { - options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q; - options.data = null; // data is null for 'get' - } - else - options.data = q; // data is the query string for 'post' - - var $form = this, callbacks = []; - if (options.resetForm) callbacks.push(function() { $form.resetForm(); }); - if (options.clearForm) callbacks.push(function() { $form.clearForm(); }); - - // perform a load on the target only if dataType is not provided - if (!options.dataType && options.target) { - var oldSuccess = options.success || function(){}; - callbacks.push(function(data) { - $(options.target).html(data).each(oldSuccess, arguments); - }); - } - else if (options.success) - callbacks.push(options.success); - - options.success = function(data, status) { - for (var i=0, max=callbacks.length; i < max; i++) - callbacks[i](data, status, $form); - }; - - // are there files to upload? - var files = $('input:file', this).fieldValue(); - var found = false; - for (var j=0; j < files.length; j++) - if (files[j]) - found = true; - - // options.iframe allows user to force iframe mode - if (options.iframe || found) { - // hack to fix Safari hang (thanks to Tim Molendijk for this) - // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d - if ($.browser.safari && options.closeKeepAlive) - $.get(options.closeKeepAlive, fileUpload); - else - fileUpload(); - } - else - $.ajax(options); - - // fire 'notify' event - this.trigger('form-submit-notify', [this, options]); - return this; - - - // private function for handling file uploads (hat tip to YAHOO!) - function fileUpload() { - var form = $form[0]; - - if ($(':input[@name=submit]', form).length) { - alert('Error: Form elements must not be named "submit".'); - return; - } - - var opts = $.extend({}, $.ajaxSettings, options); - - var id = 'jqFormIO' + (new Date().getTime()); - var $io = $('<iframe id="' + id + '" name="' + id + '" />'); - var io = $io[0]; - - if ($.browser.msie || $.browser.opera) - io.src = 'javascript:false;document.write("");'; - $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' }); - - var xhr = { // mock object - responseText: null, - responseXML: null, - status: 0, - statusText: 'n/a', - getAllResponseHeaders: function() {}, - getResponseHeader: function() {}, - setRequestHeader: function() {} - }; - - var g = opts.global; - // trigger ajax global events so that activity/block indicators work like normal - if (g && ! $.active++) $.event.trigger("ajaxStart"); - if (g) $.event.trigger("ajaxSend", [xhr, opts]); - - var cbInvoked = 0; - var timedOut = 0; - - // add submitting element to data if we know it - var sub = form.clk; - if (sub) { - var n = sub.name; - if (n && !sub.disabled) { - options.extraData = options.extraData || {}; - options.extraData[n] = sub.value; - if (sub.type == "image") { - options.extraData[name+'.x'] = form.clk_x; - options.extraData[name+'.y'] = form.clk_y; - } - } - } - - // take a breath so that pending repaints get some cpu time before the upload starts - setTimeout(function() { - // make sure form attrs are set - var t = $form.attr('target'), a = $form.attr('action'); - $form.attr({ - target: id, - encoding: 'multipart/form-data', - enctype: 'multipart/form-data', - method: 'POST', - action: opts.url - }); - - // support timout - if (opts.timeout) - setTimeout(function() { timedOut = true; cb(); }, opts.timeout); - - // add "extra" data to form if provided in options - var extraInputs = []; - try { - if (options.extraData) - for (var n in options.extraData) - extraInputs.push( - $('<input type="hidden" name="'+n+'" value="'+options.extraData[n]+'" />') - .appendTo(form)[0]); - - // add iframe to doc and submit the form - $io.appendTo('body'); - io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false); - form.submit(); - } - finally { - // reset attrs and remove "extra" input elements - $form.attr('action', a); - t ? $form.attr('target', t) : $form.removeAttr('target'); - $(extraInputs).remove(); - } - }, 10); - - function cb() { - if (cbInvoked++) return; - - io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false); - - var operaHack = 0; - var ok = true; - try { - if (timedOut) throw 'timeout'; - // extract the server response from the iframe - var data, doc; - - doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document; - - if (doc.body == null && !operaHack && $.browser.opera) { - // In Opera 9.2.x the iframe DOM is not always traversable when - // the onload callback fires so we give Opera 100ms to right itself - operaHack = 1; - cbInvoked--; - setTimeout(cb, 100); - return; - } - - xhr.responseText = doc.body ? doc.body.innerHTML : null; - xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc; - xhr.getResponseHeader = function(header){ - var headers = {'content-type': opts.dataType}; - return headers[header]; - }; - - if (opts.dataType == 'json' || opts.dataType == 'script') { - var ta = doc.getElementsByTagName('textarea')[0]; - xhr.responseText = ta ? ta.value : xhr.responseText; - } - else if (opts.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) { - xhr.responseXML = toXml(xhr.responseText); - } - data = $.httpData(xhr, opts.dataType); - } - catch(e){ - ok = false; - $.handleError(opts, xhr, 'error', e); - } - - // ordering of these callbacks/triggers is odd, but that's how $.ajax does it - if (ok) { - opts.success(data, 'success'); - if (g) $.event.trigger("ajaxSuccess", [xhr, opts]); - } - if (g) $.event.trigger("ajaxComplete", [xhr, opts]); - if (g && ! --$.active) $.event.trigger("ajaxStop"); - if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error'); - - // clean up - setTimeout(function() { - $io.remove(); - xhr.responseXML = null; - }, 100); - }; - - function toXml(s, doc) { - if (window.ActiveXObject) { - doc = new ActiveXObject('Microsoft.XMLDOM'); - doc.async = 'false'; - doc.loadXML(s); - } - else - doc = (new DOMParser()).parseFromString(s, 'text/xml'); - return (doc && doc.documentElement && doc.documentElement.tagName != 'parsererror') ? doc : null; - }; - }; -}; - -/** - * ajaxForm() provides a mechanism for fully automating form submission. - * - * The advantages of using this method instead of ajaxSubmit() are: - * - * 1: This method will include coordinates for <input type="image" /> elements (if the element - * is used to submit the form). - * 2. This method will include the submit element's name/value data (for the element that was - * used to submit the form). - * 3. This method binds the submit() method to the form for you. - * - * The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely - * passes the options argument along after properly binding events for submit elements and - * the form itself. - */ -$.fn.ajaxForm = function(options) { - return this.ajaxFormUnbind().bind('submit.form-plugin',function() { - $(this).ajaxSubmit(options); - return false; - }).each(function() { - // store options in hash - $(":submit,input:image", this).bind('click.form-plugin',function(e) { - var $form = this.form; - $form.clk = this; - if (this.type == 'image') { - if (e.offsetX != undefined) { - $form.clk_x = e.offsetX; - $form.clk_y = e.offsetY; - } else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin - var offset = $(this).offset(); - $form.clk_x = e.pageX - offset.left; - $form.clk_y = e.pageY - offset.top; - } else { - $form.clk_x = e.pageX - this.offsetLeft; - $form.clk_y = e.pageY - this.offsetTop; - } - } - // clear form vars - setTimeout(function() { $form.clk = $form.clk_x = $form.clk_y = null; }, 10); - }); - }); -}; - -// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm -$.fn.ajaxFormUnbind = function() { - this.unbind('submit.form-plugin'); - return this.each(function() { - $(":submit,input:image", this).unbind('click.form-plugin'); - }); - -}; - -/** - * formToArray() gathers form element data into an array of objects that can - * be passed to any of the following ajax functions: $.get, $.post, or load. - * Each object in the array has both a 'name' and 'value' property. An example of - * an array for a simple login form might be: - * - * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ] - * - * It is this array that is passed to pre-submit callback functions provided to the - * ajaxSubmit() and ajaxForm() methods. - */ -$.fn.formToArray = function(semantic) { - var a = []; - if (this.length == 0) return a; - - var form = this[0]; - var els = semantic ? form.getElementsByTagName('*') : form.elements; - if (!els) return a; - for(var i=0, max=els.length; i < max; i++) { - var el = els[i]; - var n = el.name; - if (!n) continue; - - if (semantic && form.clk && el.type == "image") { - // handle image inputs on the fly when semantic == true - if(!el.disabled && form.clk == el) - a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y}); - continue; - } - - var v = $.fieldValue(el, true); - if (v && v.constructor == Array) { - for(var j=0, jmax=v.length; j < jmax; j++) - a.push({name: n, value: v[j]}); - } - else if (v !== null && typeof v != 'undefined') - a.push({name: n, value: v}); - } - - if (!semantic && form.clk) { - // input type=='image' are not found in elements array! handle them here - var inputs = form.getElementsByTagName("input"); - for(var i=0, max=inputs.length; i < max; i++) { - var input = inputs[i]; - var n = input.name; - if(n && !input.disabled && input.type == "image" && form.clk == input) - a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y}); - } - } - return a; -}; - -/** - * Serializes form data into a 'submittable' string. This method will return a string - * in the format: name1=value1&name2=value2 - */ -$.fn.formSerialize = function(semantic) { - //hand off to jQuery.param for proper encoding - return $.param(this.formToArray(semantic)); -}; - -/** - * Serializes all field elements in the jQuery object into a query string. - * This method will return a string in the format: name1=value1&name2=value2 - */ -$.fn.fieldSerialize = function(successful) { - var a = []; - this.each(function() { - var n = this.name; - if (!n) return; - var v = $.fieldValue(this, successful); - if (v && v.constructor == Array) { - for (var i=0,max=v.length; i < max; i++) - a.push({name: n, value: v[i]}); - } - else if (v !== null && typeof v != 'undefined') - a.push({name: this.name, value: v}); - }); - //hand off to jQuery.param for proper encoding - return $.param(a); -}; - -/** - * Returns the value(s) of the element in the matched set. For example, consider the following form: - * - * <form><fieldset> - * <input name="A" type="text" /> - * <input name="A" type="text" /> - * <input name="B" type="checkbox" value="B1" /> - * <input name="B" type="checkbox" value="B2"/> - * <input name="C" type="radio" value="C1" /> - * <input name="C" type="radio" value="C2" /> - * </fieldset></form> - * - * var v = $(':text').fieldValue(); - * // if no values are entered into the text inputs - * v == ['',''] - * // if values entered into the text inputs are 'foo' and 'bar' - * v == ['foo','bar'] - * - * var v = $(':checkbox').fieldValue(); - * // if neither checkbox is checked - * v === undefined - * // if both checkboxes are checked - * v == ['B1', 'B2'] - * - * var v = $(':radio').fieldValue(); - * // if neither radio is checked - * v === undefined - * // if first radio is checked - * v == ['C1'] - * - * The successful argument controls whether or not the field element must be 'successful' - * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls). - * The default value of the successful argument is true. If this value is false the value(s) - * for each element is returned. - * - * Note: This method *always* returns an array. If no valid value can be determined the - * array will be empty, otherwise it will contain one or more values. - */ -$.fn.fieldValue = function(successful) { - for (var val=[], i=0, max=this.length; i < max; i++) { - var el = this[i]; - var v = $.fieldValue(el, successful); - if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) - continue; - v.constructor == Array ? $.merge(val, v) : val.push(v); - } - return val; -}; - -/** - * Returns the value of the field element. - */ -$.fieldValue = function(el, successful) { - var n = el.name, t = el.type, tag = el.tagName.toLowerCase(); - if (typeof successful == 'undefined') successful = true; - - if (successful && (!n || el.disabled || t == 'reset' || t == 'button' || - (t == 'checkbox' || t == 'radio') && !el.checked || - (t == 'submit' || t == 'image') && el.form && el.form.clk != el || - tag == 'select' && el.selectedIndex == -1)) - return null; - - if (tag == 'select') { - var index = el.selectedIndex; - if (index < 0) return null; - var a = [], ops = el.options; - var one = (t == 'select-one'); - var max = (one ? index+1 : ops.length); - for(var i=(one ? index : 0); i < max; i++) { - var op = ops[i]; - if (op.selected) { - // extra pain for IE... - var v = $.browser.msie && !(op.attributes['value'].specified) ? op.text : op.value; - if (one) return v; - a.push(v); - } - } - return a; - } - return el.value; -}; - -/** - * Clears the form data. Takes the following actions on the form's input fields: - * - input text fields will have their 'value' property set to the empty string - * - select elements will have their 'selectedIndex' property set to -1 - * - checkbox and radio inputs will have their 'checked' property set to false - * - inputs of type submit, button, reset, and hidden will *not* be effected - * - button elements will *not* be effected - */ -$.fn.clearForm = function() { - return this.each(function() { - $('input,select,textarea', this).clearFields(); - }); -}; - -/** - * Clears the selected form elements. - */ -$.fn.clearFields = $.fn.clearInputs = function() { - return this.each(function() { - var t = this.type, tag = this.tagName.toLowerCase(); - if (t == 'text' || t == 'password' || tag == 'textarea') - this.value = ''; - else if (t == 'checkbox' || t == 'radio') - this.checked = false; - else if (tag == 'select') - this.selectedIndex = -1; - }); -}; - -/** - * Resets the form data. Causes all form elements to be reset to their original value. - */ -$.fn.resetForm = function() { - return this.each(function() { - // guard against an input with the name of 'reset' - // note that IE reports the reset function as an 'object' - if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) - this.reset(); - }); -}; - -/** - * Enables or disables any matching elements. - */ -$.fn.enable = function(b) { - if (b == undefined) b = true; - return this.each(function() { - this.disabled = !b - }); -}; - -/** - * Checks/unchecks any matching checkboxes or radio buttons and - * selects/deselects and matching option elements. - */ -$.fn.select = function(select) { - if (select == undefined) select = true; - return this.each(function() { - var t = this.type; - if (t == 'checkbox' || t == 'radio') - this.checked = select; - else if (this.tagName.toLowerCase() == 'option') { - var $sel = $(this).parent('select'); - if (select && $sel[0] && $sel[0].type == 'select-one') { - // deselect all other options - $sel.find('option').select(false); - } - this.selected = select; - } - }); -}; - -// helper fn for console logging -// set $.fn.ajaxSubmit.debug to true to enable debug logging -function log() { - if ($.fn.ajaxSubmit.debug && window.console && window.console.log) - window.console.log('[jquery.form] ' + Array.prototype.join.call(arguments,'')); -}; - -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.highlightfade.js b/apps/wolnelektury_core/static/js/contrib/jquery.highlightfade.js deleted file mode 100644 index bbe39f074..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.highlightfade.js +++ /dev/null @@ -1,150 +0,0 @@ -/** - * jQuery Plugin highlightFade (jquery.offput.ca/highlightFade) - * (c) 2006 Blair Mitchelmore (offput.ca) blair@offput.ca - */ -/** - * This is version 0.7 of my highlightFade plugin. It follows the yellow fade technique of Web 2.0 fame - * but expands it to allow any starting colour and allows you to specify the end colour as well. - * - * For the moment, I'm done with this plug-in. Unless I come upon a really cool feature it should have - * this plug-in will only receive updates to ensure future compatibility with jQuery. - * - * As of now (Aug. 16, 2006) the plugin has been written with the 1.0.1 release of jQuery (rev 249) which - * is available from http://jquery.com/src/jquery-1.0.1.js - * - * A note regarding rgb() syntax: I noticed that most browsers implement rgb syntax as either an integer - * (0-255) or percentage (0-100%) value for each field, that is, rgb(i/p,i/p,i/p); however, the W3C - * standard clearly defines it as "either three integer values or three percentage values" [http://www.w3.org/TR/CSS21/syndata.html] - * which I choose to follow despite the error redundancy of the typical behaviour browsers employ. - * - * Changelog: - * - * 0.7: - * - Added the awesome custom attribute support written by George Adamson (slightly modified) - * - Removed bgColor plugin dependency seeing as attr is customizable now... - * 0.6: - * - Abstracted getBGColor into its own plugin with optional test and data retrieval functions - * - Converted all $ references to jQuery references as John's code seems to be shifting away - * from that and I don't want to have to update this for a long time. - * 0.5: - * - Added simple argument syntax for only specifying start colour of event - * - Removed old style argument syntax - * - Added 'interval', 'final, and 'end' properties - * - Renamed 'color' property to 'start' - * - Added second argument to $.highlightFade.getBGColor to bypass the e.highlighting check - * 0.4: - * - Added rgb(%,%,%) color syntax - * 0.3: - * - Fixed bug when event was called while parent was also running event corrupting the - * the background colour of the child - * 0.2: - * - Fixed bug where an unspecified onComplete function made the page throw continuous errors - * - Fixed bug where multiple events on the same element would speed each subsequent event - * 0.1: - * - Initial Release - * - * @author Blair Mitchelmore (blair@offput.ca) - * @version 0.5 - */ -jQuery.fn.highlightFade = function(settings) { - var o = (settings && settings.constructor == String) ? {start: settings} : settings || {}; - var d = jQuery.highlightFade.defaults; - var i = o['interval'] || d['interval']; - var a = o['attr'] || d['attr']; - var ts = { - 'linear': function(s,e,t,c) { return parseInt(s+(c/t)*(e-s)); }, - 'sinusoidal': function(s,e,t,c) { return parseInt(s+Math.sin(((c/t)*90)*(Math.PI/180))*(e-s)); }, - 'exponential': function(s,e,t,c) { return parseInt(s+(Math.pow(c/t,2))*(e-s)); } - }; - var t = (o['iterator'] && o['iterator'].constructor == Function) ? o['iterator'] : ts[o['iterator']] || ts[d['iterator']] || ts['linear']; - if (d['iterator'] && d['iterator'].constructor == Function) t = d['iterator']; - return this.each(function() { - if (!this.highlighting) this.highlighting = {}; - var e = (this.highlighting[a]) ? this.highlighting[a].end : jQuery.highlightFade.getBaseValue(this,a) || [255,255,255]; - var c = jQuery.highlightFade.getRGB(o['start'] || o['colour'] || o['color'] || d['start'] || [255,255,128]); - var s = jQuery.speed(o['speed'] || d['speed']); - var r = o['final'] || (this.highlighting[a] && this.highlighting[a].orig) ? this.highlighting[a].orig : jQuery.curCSS(this,a); - if (o['end'] || d['end']) r = jQuery.highlightFade.asRGBString(e = jQuery.highlightFade.getRGB(o['end'] || d['end'])); - if (typeof o['final'] != 'undefined') r = o['final']; - if (this.highlighting[a] && this.highlighting[a].timer) window.clearInterval(this.highlighting[a].timer); - this.highlighting[a] = { steps: ((s.duration) / i), interval: i, currentStep: 0, start: c, end: e, orig: r, attr: a }; - jQuery.highlightFade(this,a,o['complete'],t); - }); -}; - -jQuery.highlightFade = function(e,a,o,t) { - e.highlighting[a].timer = window.setInterval(function() { - var newR = t(e.highlighting[a].start[0],e.highlighting[a].end[0],e.highlighting[a].steps,e.highlighting[a].currentStep); - var newG = t(e.highlighting[a].start[1],e.highlighting[a].end[1],e.highlighting[a].steps,e.highlighting[a].currentStep); - var newB = t(e.highlighting[a].start[2],e.highlighting[a].end[2],e.highlighting[a].steps,e.highlighting[a].currentStep); - jQuery(e).css(a,jQuery.highlightFade.asRGBString([newR,newG,newB])); - if (e.highlighting[a].currentStep++ >= e.highlighting[a].steps) { - jQuery(e).css(a,e.highlighting[a].orig || ''); - window.clearInterval(e.highlighting[a].timer); - e.highlighting[a] = null; - if (o && o.constructor == Function) o.call(e); - } - },e.highlighting[a].interval); -}; - -jQuery.highlightFade.defaults = { - start: [255,255,128], - interval: 50, - speed: 400, - attr: 'backgroundColor' -}; - -jQuery.highlightFade.getRGB = function(c,d) { - var result; - if (c && c.constructor == Array && c.length == 3) return c; - if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c)) - return [parseInt(result[1]),parseInt(result[2]),parseInt(result[3])]; - else if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c)) - return [parseFloat(result[1])*2.55,parseFloat(result[2])*2.55,parseFloat(result[3])*2.55]; - else if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c)) - return [parseInt("0x" + result[1]),parseInt("0x" + result[2]),parseInt("0x" + result[3])]; - else if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c)) - return [parseInt("0x"+ result[1] + result[1]),parseInt("0x" + result[2] + result[2]),parseInt("0x" + result[3] + result[3])]; - else - return jQuery.highlightFade.checkColorName(c) || d || null; -}; - -jQuery.highlightFade.asRGBString = function(a) { - return "rgb(" + a.join(",") + ")"; -}; - -jQuery.highlightFade.getBaseValue = function(e,a,b) { - var s, t; - b = b || false; - t = a = a || jQuery.highlightFade.defaults['attr']; - do { - s = jQuery(e).css(t || 'backgroundColor'); - if ((s != '' && s != 'transparent') || (e.tagName.toLowerCase() == "body") || (!b && e.highlighting && e.highlighting[a] && e.highlighting[a].end)) break; - t = false; - } while (e = e.parentNode); - if (!b && e.highlighting && e.highlighting[a] && e.highlighting[a].end) s = e.highlighting[a].end; - if (s == undefined || s == '' || s == 'transparent') s = [255,255,255]; - return jQuery.highlightFade.getRGB(s); -}; - -jQuery.highlightFade.checkColorName = function(c) { - if (!c) return null; - switch(c.replace(/^\s*|\s*$/g,'').toLowerCase()) { - case 'aqua': return [0,255,255]; - case 'black': return [0,0,0]; - case 'blue': return [0,0,255]; - case 'fuchsia': return [255,0,255]; - case 'gray': return [128,128,128]; - case 'green': return [0,128,0]; - case 'lime': return [0,255,0]; - case 'maroon': return [128,0,0]; - case 'navy': return [0,0,128]; - case 'olive': return [128,128,0]; - case 'purple': return [128,0,128]; - case 'red': return [255,0,0]; - case 'silver': return [192,192,192]; - case 'teal': return [0,128,128]; - case 'white': return [255,255,255]; - case 'yellow': return [255,255,0]; - } -}; diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.jqmodal.js b/apps/wolnelektury_core/static/js/contrib/jquery.jqmodal.js deleted file mode 100644 index 3aac816e7..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.jqmodal.js +++ /dev/null @@ -1,69 +0,0 @@ -/* - * jqModal - Minimalist Modaling with jQuery - * (http://dev.iceburg.net/jquery/jqModal/) - * - * Copyright (c) 2007,2008 Brice Burgess <bhb@iceburg.net> - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - * $Version: 03/01/2009 +r14 - */ -(function($) { -$.fn.jqm=function(o){ -var p={ -overlay: 50, -overlayClass: 'jqmOverlay', -closeClass: 'jqmClose', -trigger: '.jqModal', -ajax: F, -ajaxText: '', -target: F, -modal: F, -toTop: F, -onShow: F, -onHide: F, -onLoad: F -}; -return this.each(function(){if(this._jqm)return H[this._jqm].c=$.extend({},H[this._jqm].c,o);s++;this._jqm=s; -H[s]={c:$.extend(p,$.jqm.params,o),a:F,w:$(this).addClass('jqmID'+s),s:s}; -if(p.trigger)$(this).jqmAddTrigger(p.trigger); -});}; - -$.fn.jqmAddClose=function(e){return hs(this,e,'jqmHide');}; -$.fn.jqmAddTrigger=function(e){return hs(this,e,'jqmShow');}; -$.fn.jqmShow=function(t){return this.each(function(){t=t||window.event;$.jqm.open(this._jqm,t);});}; -$.fn.jqmHide=function(t){return this.each(function(){t=t||window.event;$.jqm.close(this._jqm,t)});}; - -$.jqm = { -hash:{}, -open:function(s,t){var h=H[s],c=h.c,cc='.'+c.closeClass,z=(parseInt(h.w.css('z-index'))),z=(z>0)?z:3000,o=$('<div></div>').css({height:'100%',width:'100%',position:'fixed',left:0,top:0,'z-index':z-1,opacity:c.overlay/100});if(h.a)return F;h.t=t;h.a=true;h.w.css('z-index',z); - if(c.modal) {if(!A[0])L('bind');A.push(s);} - else if(c.overlay > 0)h.w.jqmAddClose(o); - else o=F; - - h.o=(o)?o.addClass(c.overlayClass).prependTo('body'):F; - if(ie6){$('html,body').css({height:'100%',width:'100%'});if(o){o=o.css({position:'absolute'})[0];for(var y in {Top:1,Left:1})o.style.setExpression(y.toLowerCase(),"(_=(document.documentElement.scroll"+y+" || document.body.scroll"+y+"))+'px'");}} - - if(c.ajax) {var r=c.target||h.w,u=c.ajax,r=(typeof r == 'string')?$(r,h.w):$(r),u=(u.substr(0,1) == '@')?$(t).attr(u.substring(1)):u; - r.html(c.ajaxText).load(u,function(){if(c.onLoad)c.onLoad.call(this,h);if(cc)h.w.jqmAddClose($(cc,h.w));e(h);});} - else if(cc)h.w.jqmAddClose($(cc,h.w)); - - if(c.toTop&&h.o)h.w.before('<span id="jqmP'+h.w[0]._jqm+'"></span>').insertAfter(h.o); - (c.onShow)?c.onShow(h):h.w.show();e(h);return F; -}, -close:function(s){var h=H[s];if(!h.a)return F;h.a=F; - if(A[0]){A.pop();if(!A[0])L('unbind');} - if(h.c.toTop&&h.o)$('#jqmP'+h.w[0]._jqm).after(h.w).remove(); - if(h.c.onHide)h.c.onHide(h);else{h.w.hide();if(h.o)h.o.remove();} return F; -}, -params:{}}; -var s=0,H=$.jqm.hash,A=[],ie6=$.browser.msie&&($.browser.version == "6.0"),F=false, -i=$('<iframe src="javascript:false;document.write(\'\');" class="jqm"></iframe>').css({opacity:0}), -e=function(h){if(ie6)if(h.o)h.o.html('<p style="width:100%;height:100%"/>').prepend(i);else if(!$('iframe.jqm',h.w)[0])h.w.prepend(i); f(h);}, -f=function(h){try{$(':input:visible',h.w)[0].focus();}catch(_){}}, -L=function(t){$()[t]("keypress",m)[t]("keydown",m)[t]("mousedown",m);}, -m=function(e){var h=H[A[A.length-1]],r=(!$(e.target).parents('.jqmID'+h.s)[0]);if(r)f(h);return !r;}, -hs=function(w,t,c){return w.each(function(){var s=this._jqm;$(t).each(function() { - if(!this[c]){this[c]=[];$(this).click(function(){for(var i in {jqmShow:1,jqmHide:1})for(var s in this[i])if(H[this[i][s]])H[this[i][s]].w[i](this);return F;});}this[c].push(s);});});}; -})(jQuery); \ No newline at end of file diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.js b/apps/wolnelektury_core/static/js/contrib/jquery.js deleted file mode 100644 index 7c2430802..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.js +++ /dev/null @@ -1,154 +0,0 @@ -/*! - * jQuery JavaScript Library v1.4.2 - * http://jquery.com/ - * - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Sat Feb 13 22:33:48 2010 -0500 - */ -(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i? -e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r= -j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g, -"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e= -true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, -Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& -(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, -a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== -"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, -function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)|| -c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded", -L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype, -"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+ -a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f], -d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]=== -a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&& -!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari= -true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>"; -var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, -parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= -false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= -s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, -applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; -else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, -a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== -w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, -cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ", -i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ", -" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className= -this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i= -e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= -c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); -a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, -function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); -k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), -C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!= -null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type= -e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& -f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; -if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), -fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop|| -d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this, -"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent= -a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y, -isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit= -{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}}; -if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", -e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, -"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, -d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&& -!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}}, -toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector, -u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "), -function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q]; -if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, -e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); -t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| -g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[]; -for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length- -1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, -CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}}, -relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]= -l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[]; -h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, -CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, -g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, -text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, -setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= -h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m= -m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== -"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, -h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition|| -!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m= -h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& -q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>"; -if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); -(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: -function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/, -gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length; -c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= -{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== -"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", -d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? -a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== -1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)? -a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= -c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, -wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, -prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, -this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); -return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, -""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&& -this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]|| -u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length=== -1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); -return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", -""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= -c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? -c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= -function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= -Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, -"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= -a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= -a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== -"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, -serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), -function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, -global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& -e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? -"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== -false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= -false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", -c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| -d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); -g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== -1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== -"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; -if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay"); -this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a], -"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)}, -animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing= -j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]); -this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== -"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| -c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; -this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= -this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, -e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length|| -c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement? -function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b= -this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle; -k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&& -f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>"; -a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); -c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, -d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- -f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": -"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in -e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/apps/wolnelektury_core/static/js/contrib/jquery.scrollto.js b/apps/wolnelektury_core/static/js/contrib/jquery.scrollto.js deleted file mode 100644 index c403ab9df..000000000 --- a/apps/wolnelektury_core/static/js/contrib/jquery.scrollto.js +++ /dev/null @@ -1,194 +0,0 @@ -/** - * jQuery.ScrollTo - * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com - * Dual licensed under MIT and GPL. - * Date: 9/11/2008 - * - * @projectDescription Easy element scrolling using jQuery. - * http://flesler.blogspot.com/2007/10/jqueryscrollto.html - * Tested with jQuery 1.2.6. On FF 2/3, IE 6/7, Opera 9.2/5 and Safari 3. on Windows. - * - * @author Ariel Flesler - * @version 1.4 - * - * @id jQuery.scrollTo - * @id jQuery.fn.scrollTo - * @param {String, Number, DOMElement, jQuery, Object} target Where to scroll the matched elements. - * The different options for target are: - * - A number position (will be applied to all axes). - * - A string position ('44', '100px', '+=90', etc ) will be applied to all axes - * - A jQuery/DOM element ( logically, child of the element to scroll ) - * - A string selector, that will be relative to the element to scroll ( 'li:eq(2)', etc ) - * - A hash { top:x, left:y }, x and y can be any kind of number/string like above. - * @param {Number} duration The OVERALL length of the animation, this argument can be the settings object instead. - * @param {Object,Function} settings Optional set of settings or the onAfter callback. - * @option {String} axis Which axis must be scrolled, use 'x', 'y', 'xy' or 'yx'. - * @option {Number} duration The OVERALL length of the animation. - * @option {String} easing The easing method for the animation. - * @option {Boolean} margin If true, the margin of the target element will be deducted from the final position. - * @option {Object, Number} offset Add/deduct from the end position. One number for both axes or { top:x, left:y }. - * @option {Object, Number} over Add/deduct the height/width multiplied by 'over', can be { top:x, left:y } when using both axes. - * @option {Boolean} queue If true, and both axis are given, the 2nd axis will only be animated after the first one ends. - * @option {Function} onAfter Function to be called after the scrolling ends. - * @option {Function} onAfterFirst If queuing is activated, this function will be called after the first scrolling ends. - * @return {jQuery} Returns the same jQuery object, for chaining. - * - * @desc Scroll to a fixed position - * @example $('div').scrollTo( 340 ); - * - * @desc Scroll relatively to the actual position - * @example $('div').scrollTo( '+=340px', { axis:'y' } ); - * - * @dec Scroll using a selector (relative to the scrolled element) - * @example $('div').scrollTo( 'p.paragraph:eq(2)', 500, { easing:'swing', queue:true, axis:'xy' } ); - * - * @ Scroll to a DOM element (same for jQuery object) - * @example var second_child = document.getElementById('container').firstChild.nextSibling; - * $('#container').scrollTo( second_child, { duration:500, axis:'x', onAfter:function(){ - * alert('scrolled!!'); - * }}); - * - * @desc Scroll on both axes, to different values - * @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } ); - */ -;(function( $ ){ - - var $scrollTo = $.scrollTo = function( target, duration, settings ){ - $(window).scrollTo( target, duration, settings ); - }; - - $scrollTo.defaults = { - axis:'y', - duration:1 - }; - - // Returns the element that needs to be animated to scroll the window. - // Kept for backwards compatibility (specially for localScroll & serialScroll) - $scrollTo.window = function( scope ){ - return $(window).scrollable(); - }; - - // Hack, hack, hack... stay away! - // Returns the real elements to scroll (supports window/iframes, documents and regular nodes) - $.fn.scrollable = function(){ - return this.map(function(){ - // Just store it, we might need it - var win = this.parentWindow || this.defaultView, - // If it's a document, get its iframe or the window if it's THE document - elem = this.nodeName == '#document' ? win.frameElement || win : this, - // Get the corresponding document - doc = elem.contentDocument || (elem.contentWindow || elem).document, - isWin = elem.setInterval; - - return elem.nodeName == 'IFRAME' || isWin && $.browser.safari ? doc.body - : isWin ? doc.documentElement - : this; - }); - }; - - $.fn.scrollTo = function( target, duration, settings ){ - if( typeof duration == 'object' ){ - settings = duration; - duration = 0; - } - if( typeof settings == 'function' ) - settings = { onAfter:settings }; - - settings = $.extend( {}, $scrollTo.defaults, settings ); - // Speed is still recognized for backwards compatibility - duration = duration || settings.speed || settings.duration; - // Make sure the settings are given right - settings.queue = settings.queue && settings.axis.length > 1; - - if( settings.queue ) - // Let's keep the overall duration - duration /= 2; - settings.offset = both( settings.offset ); - settings.over = both( settings.over ); - - return this.scrollable().each(function(){ - var elem = this, - $elem = $(elem), - targ = target, toff, attr = {}, - win = $elem.is('html,body'); - - switch( typeof targ ){ - // A number will pass the regex - case 'number': - case 'string': - if( /^([+-]=)?\d+(px)?$/.test(targ) ){ - targ = both( targ ); - // We are done - break; - } - // Relative selector, no break! - targ = $(targ,this); - case 'object': - // DOMElement / jQuery - if( targ.is || targ.style ) - // Get the real position of the target - toff = (targ = $(targ)).offset(); - } - $.each( settings.axis.split(''), function( i, axis ){ - var Pos = axis == 'x' ? 'Left' : 'Top', - pos = Pos.toLowerCase(), - key = 'scroll' + Pos, - old = elem[key], - Dim = axis == 'x' ? 'Width' : 'Height', - dim = Dim.toLowerCase(); - - if( toff ){// jQuery / DOMElement - attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] ); - - // If it's a dom element, reduce the margin - if( settings.margin ){ - attr[key] -= parseInt(targ.css('margin'+Pos)) || 0; - attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0; - } - - attr[key] += settings.offset[pos] || 0; - - if( settings.over[pos] ) - // Scroll to a fraction of its width/height - attr[key] += targ[dim]() * settings.over[pos]; - }else - attr[key] = targ[pos]; - - // Number or 'number' - if( /^\d+$/.test(attr[key]) ) - // Check the limits - attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max(Dim) ); - - // Queueing axes - if( !i && settings.queue ){ - // Don't waste time animating, if there's no need. - if( old != attr[key] ) - // Intermediate animation - animate( settings.onAfterFirst ); - // Don't animate this axis again in the next iteration. - delete attr[key]; - } - }); - animate( settings.onAfter ); - - function animate( callback ){ - $elem.animate( attr, duration, settings.easing, callback && function(){ - callback.call(this, target, settings); - }); - }; - function max( Dim ){ - var attr ='scroll'+Dim, - doc = elem.ownerDocument; - - return win - ? Math.max( doc.documentElement[attr], doc.body[attr] ) - : elem[attr]; - }; - }).end(); - }; - - function both( val ){ - return typeof val == 'object' ? val : { top:val, left:val }; - }; - -})( jQuery ); \ No newline at end of file diff --git a/apps/wolnelektury_core/static/js/contrib/modernizr.custom.19652.js b/apps/wolnelektury_core/static/js/contrib/modernizr.custom.19652.js deleted file mode 100644 index 7ad5743b9..000000000 --- a/apps/wolnelektury_core/static/js/contrib/modernizr.custom.19652.js +++ /dev/null @@ -1,4 +0,0 @@ -/* Modernizr 2.6.2 (Custom Build) | MIT & BSD - * Build: http://modernizr.com/download/#-input-localstorage - */ -;window.Modernizr=function(a,b,c){function t(a){i.cssText=a}function u(a,b){return t(prefixes.join(a+";")+(b||""))}function v(a,b){return typeof a===b}function w(a,b){return!!~(""+a).indexOf(b)}function x(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:v(f,"function")?f.bind(d||b):f}return!1}function y(){e.input=function(c){for(var d=0,e=c.length;d<e;d++)n[c[d]]=c[d]in j;return n.list&&(n.list=!!b.createElement("datalist")&&!!a.HTMLDataListElement),n}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" "))}var d="2.6.2",e={},f=b.documentElement,g="modernizr",h=b.createElement(g),i=h.style,j=b.createElement("input"),k={}.toString,l={},m={},n={},o=[],p=o.slice,q,r={}.hasOwnProperty,s;!v(r,"undefined")&&!v(r.call,"undefined")?s=function(a,b){return r.call(a,b)}:s=function(a,b){return b in a&&v(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=p.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(p.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(p.call(arguments)))};return e}),l.localstorage=function(){try{return localStorage.setItem(g,g),localStorage.removeItem(g),!0}catch(a){return!1}};for(var z in l)s(l,z)&&(q=z.toLowerCase(),e[q]=l[z](),o.push((e[q]?"":"no-")+q));return e.input||y(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)s(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof enableClasses!="undefined"&&enableClasses&&(f.className+=" "+(b?"":"no-")+a),e[a]=b}return e},t(""),h=j=null,e._version=d,e}(this,this.document); diff --git a/apps/wolnelektury_core/static/js/contrib/progressSpin.min.js b/apps/wolnelektury_core/static/js/contrib/progressSpin.min.js deleted file mode 100644 index 57b590786..000000000 --- a/apps/wolnelektury_core/static/js/contrib/progressSpin.min.js +++ /dev/null @@ -1 +0,0 @@ -/* https://github.com/mateagar/progressSpin */(function(e){e.fn.progressSpin=function(t){function f(e,t){var i=1-t;var s=Raphael.getRGB(n.activeColor);var o=Raphael.getRGB(n.fillColor);var u=Math.floor(s.r*t+o.r*i);var a=Math.floor(s.g*t+o.g*i);var f=Math.floor(s.b*t+o.b*i);var l=Raphael.rgb(u,a,f);r[e].attr("fill",l)}function l(e){e=e%12;if(e<0){e+=12}return e}if(this.getOptions){return this}var n=e.extend({},e.fn.progressSpin.defaults,t);var r=[];var i=false;var s=null;var o=0;var u=null;var a=this;this.getOptions=function(){return n};this.getVisible=function(){return i};this.getAnimating=function(){return s!=null};this.getCurrentStep=function(){return o};this.setCurrentStep=function(e){if(this.getAnimating()){this.stop(false);o=l(e);this.start()}else{o=l(e)}};this.start=function(){if(this.getAnimating()){}else{this.show();f(o,1);var e=1/(n.tailCount+1);var t=0;var r=n.tailCount;s=setInterval(function(){if(t<r){t++}o=l(o+1);var n=1;for(var i=0;i<=t+1;i++){var s=l(o-i);f(s,1-i*e)}},Math.floor(n.cycleTime/12))}};this.stop=function(e){if(e==null){e=true}if(s){clearInterval(s);s=null}var t=n.fillColor;r.forEach(function(e){e.attr("fill",t)});if(e){this.hide()}};this.show=function(){if(r.length==0){this.render()}else{if(i){}else{r.forEach(function(e){e.show()});i=true}}};this.hide=function(){if(this.getAnimating()){this.stop(false)}if(i){r.forEach(function(e){e.hide()})}i=false};this.render=function(){if(this.getAnimating()){this.stop(false)}if(u){r=[];u.clear();u.setSize(this.width(),this.height())}else{u=Raphael(this.get(0),this.width(),this.height())}var e=Math.floor(this.width()/2);var t=Math.floor(this.height()/2);var s=e;if(t<s){s=t}var o=e-Math.floor(n.stepWidth/2);var a=t-s;var f=s-Math.floor(s*n.knockOutRatio);var l=u.rect(o,a,n.stepWidth,f,n.cornerRadius);l.attr("fill",n.fillColor);l.attr("stroke-width",0);r[0]=l;var c=30;for(var h=1;h<=11;h++){var p=l.clone();p.transform("r"+c+","+e+","+t);r[h]=p;c+=30}i=true};return this};e.fn.progressSpin.defaults={activeColor:"#000000",fillColor:"#aaaaaa",cycleTime:1e3,tailCount:6,stepWidth:5,cornerRadius:2,knockOutRatio:.5}})(jQuery); diff --git a/apps/wolnelektury_core/static/js/contrib/raphael-min.js b/apps/wolnelektury_core/static/js/contrib/raphael-min.js deleted file mode 100644 index 404f8b24b..000000000 --- a/apps/wolnelektury_core/static/js/contrib/raphael-min.js +++ /dev/null @@ -1,11 +0,0 @@ -// ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ \\ -// â Raphaël 2.1.2 - JavaScript Vector Library â \\ -// âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⤠\\ -// â Copyright © 2008-2012 Dmitry Baranovskiy (http://raphaeljs.com) â \\ -// â Copyright © 2008-2012 Sencha Labs (http://sencha.com) â \\ -// âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⤠\\ -// â Licensed under the MIT (http://raphaeljs.com/license.html) license.â \\ -// ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ \\ -!function(a){var b,c,d="0.4.2",e="hasOwnProperty",f=/[\.\/]/,g="*",h=function(){},i=function(a,b){return a-b},j={n:{}},k=function(a,d){a=String(a);var e,f=c,g=Array.prototype.slice.call(arguments,2),h=k.listeners(a),j=0,l=[],m={},n=[],o=b;b=a,c=0;for(var p=0,q=h.length;q>p;p++)"zIndex"in h[p]&&(l.push(h[p].zIndex),h[p].zIndex<0&&(m[h[p].zIndex]=h[p]));for(l.sort(i);l[j]<0;)if(e=m[l[j++]],n.push(e.apply(d,g)),c)return c=f,n;for(p=0;q>p;p++)if(e=h[p],"zIndex"in e)if(e.zIndex==l[j]){if(n.push(e.apply(d,g)),c)break;do if(j++,e=m[l[j]],e&&n.push(e.apply(d,g)),c)break;while(e)}else m[e.zIndex]=e;else if(n.push(e.apply(d,g)),c)break;return c=f,b=o,n.length?n:null};k._events=j,k.listeners=function(a){var b,c,d,e,h,i,k,l,m=a.split(f),n=j,o=[n],p=[];for(e=0,h=m.length;h>e;e++){for(l=[],i=0,k=o.length;k>i;i++)for(n=o[i].n,c=[n[m[e]],n[g]],d=2;d--;)b=c[d],b&&(l.push(b),p=p.concat(b.f||[]));o=l}return p},k.on=function(a,b){if(a=String(a),"function"!=typeof b)return function(){};for(var c=a.split(f),d=j,e=0,g=c.length;g>e;e++)d=d.n,d=d.hasOwnProperty(c[e])&&d[c[e]]||(d[c[e]]={n:{}});for(d.f=d.f||[],e=0,g=d.f.length;g>e;e++)if(d.f[e]==b)return h;return d.f.push(b),function(a){+a==+a&&(b.zIndex=+a)}},k.f=function(a){var b=[].slice.call(arguments,1);return function(){k.apply(null,[a,null].concat(b).concat([].slice.call(arguments,0)))}},k.stop=function(){c=1},k.nt=function(a){return a?new RegExp("(?:\\.|\\/|^)"+a+"(?:\\.|\\/|$)").test(b):b},k.nts=function(){return b.split(f)},k.off=k.unbind=function(a,b){if(!a)return k._events=j={n:{}},void 0;var c,d,h,i,l,m,n,o=a.split(f),p=[j];for(i=0,l=o.length;l>i;i++)for(m=0;m<p.length;m+=h.length-2){if(h=[m,1],c=p[m].n,o[i]!=g)c[o[i]]&&h.push(c[o[i]]);else for(d in c)c[e](d)&&h.push(c[d]);p.splice.apply(p,h)}for(i=0,l=p.length;l>i;i++)for(c=p[i];c.n;){if(b){if(c.f){for(m=0,n=c.f.length;n>m;m++)if(c.f[m]==b){c.f.splice(m,1);break}!c.f.length&&delete c.f}for(d in c.n)if(c.n[e](d)&&c.n[d].f){var q=c.n[d].f;for(m=0,n=q.length;n>m;m++)if(q[m]==b){q.splice(m,1);break}!q.length&&delete c.n[d].f}}else{delete c.f;for(d in c.n)c.n[e](d)&&c.n[d].f&&delete c.n[d].f}c=c.n}},k.once=function(a,b){var c=function(){return k.unbind(a,c),b.apply(this,arguments)};return k.on(a,c)},k.version=d,k.toString=function(){return"You are running Eve "+d},"undefined"!=typeof module&&module.exports?module.exports=k:"undefined"!=typeof define?define("eve",[],function(){return k}):a.eve=k}(this),function(a,b){"function"==typeof define&&define.amd?define(["eve"],function(c){return b(a,c)}):b(a,a.eve)}(this,function(a,b){function c(a){if(c.is(a,"function"))return u?a():b.on("raphael.DOMload",a);if(c.is(a,V))return c._engine.create[D](c,a.splice(0,3+c.is(a[0],T))).add(a);var d=Array.prototype.slice.call(arguments,0);if(c.is(d[d.length-1],"function")){var e=d.pop();return u?e.call(c._engine.create[D](c,d)):b.on("raphael.DOMload",function(){e.call(c._engine.create[D](c,d))})}return c._engine.create[D](c,arguments)}function d(a){if("function"==typeof a||Object(a)!==a)return a;var b=new a.constructor;for(var c in a)a[z](c)&&(b[c]=d(a[c]));return b}function e(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return a.push(a.splice(c,1)[0])}function f(a,b,c){function d(){var f=Array.prototype.slice.call(arguments,0),g=f.join("â"),h=d.cache=d.cache||{},i=d.count=d.count||[];return h[z](g)?(e(i,g),c?c(h[g]):h[g]):(i.length>=1e3&&delete h[i.shift()],i.push(g),h[g]=a[D](b,f),c?c(h[g]):h[g])}return d}function g(){return this.hex}function h(a,b){for(var c=[],d=0,e=a.length;e-2*!b>d;d+=2){var f=[{x:+a[d-2],y:+a[d-1]},{x:+a[d],y:+a[d+1]},{x:+a[d+2],y:+a[d+3]},{x:+a[d+4],y:+a[d+5]}];b?d?e-4==d?f[3]={x:+a[0],y:+a[1]}:e-2==d&&(f[2]={x:+a[0],y:+a[1]},f[3]={x:+a[2],y:+a[3]}):f[0]={x:+a[e-2],y:+a[e-1]}:e-4==d?f[3]=f[2]:d||(f[0]={x:+a[d],y:+a[d+1]}),c.push(["C",(-f[0].x+6*f[1].x+f[2].x)/6,(-f[0].y+6*f[1].y+f[2].y)/6,(f[1].x+6*f[2].x-f[3].x)/6,(f[1].y+6*f[2].y-f[3].y)/6,f[2].x,f[2].y])}return c}function i(a,b,c,d,e){var f=-3*b+9*c-9*d+3*e,g=a*f+6*b-12*c+6*d;return a*g-3*b+3*c}function j(a,b,c,d,e,f,g,h,j){null==j&&(j=1),j=j>1?1:0>j?0:j;for(var k=j/2,l=12,m=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],n=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],o=0,p=0;l>p;p++){var q=k*m[p]+k,r=i(q,a,c,e,g),s=i(q,b,d,f,h),t=r*r+s*s;o+=n[p]*N.sqrt(t)}return k*o}function k(a,b,c,d,e,f,g,h,i){if(!(0>i||j(a,b,c,d,e,f,g,h)<i)){var k,l=1,m=l/2,n=l-m,o=.01;for(k=j(a,b,c,d,e,f,g,h,n);Q(k-i)>o;)m/=2,n+=(i>k?1:-1)*m,k=j(a,b,c,d,e,f,g,h,n);return n}}function l(a,b,c,d,e,f,g,h){if(!(O(a,c)<P(e,g)||P(a,c)>O(e,g)||O(b,d)<P(f,h)||P(b,d)>O(f,h))){var i=(a*d-b*c)*(e-g)-(a-c)*(e*h-f*g),j=(a*d-b*c)*(f-h)-(b-d)*(e*h-f*g),k=(a-c)*(f-h)-(b-d)*(e-g);if(k){var l=i/k,m=j/k,n=+l.toFixed(2),o=+m.toFixed(2);if(!(n<+P(a,c).toFixed(2)||n>+O(a,c).toFixed(2)||n<+P(e,g).toFixed(2)||n>+O(e,g).toFixed(2)||o<+P(b,d).toFixed(2)||o>+O(b,d).toFixed(2)||o<+P(f,h).toFixed(2)||o>+O(f,h).toFixed(2)))return{x:l,y:m}}}}function m(a,b,d){var e=c.bezierBBox(a),f=c.bezierBBox(b);if(!c.isBBoxIntersect(e,f))return d?0:[];for(var g=j.apply(0,a),h=j.apply(0,b),i=O(~~(g/5),1),k=O(~~(h/5),1),m=[],n=[],o={},p=d?0:[],q=0;i+1>q;q++){var r=c.findDotsAtSegment.apply(c,a.concat(q/i));m.push({x:r.x,y:r.y,t:q/i})}for(q=0;k+1>q;q++)r=c.findDotsAtSegment.apply(c,b.concat(q/k)),n.push({x:r.x,y:r.y,t:q/k});for(q=0;i>q;q++)for(var s=0;k>s;s++){var t=m[q],u=m[q+1],v=n[s],w=n[s+1],x=Q(u.x-t.x)<.001?"y":"x",y=Q(w.x-v.x)<.001?"y":"x",z=l(t.x,t.y,u.x,u.y,v.x,v.y,w.x,w.y);if(z){if(o[z.x.toFixed(4)]==z.y.toFixed(4))continue;o[z.x.toFixed(4)]=z.y.toFixed(4);var A=t.t+Q((z[x]-t[x])/(u[x]-t[x]))*(u.t-t.t),B=v.t+Q((z[y]-v[y])/(w[y]-v[y]))*(w.t-v.t);A>=0&&1.001>=A&&B>=0&&1.001>=B&&(d?p++:p.push({x:z.x,y:z.y,t1:P(A,1),t2:P(B,1)}))}}return p}function n(a,b,d){a=c._path2curve(a),b=c._path2curve(b);for(var e,f,g,h,i,j,k,l,n,o,p=d?0:[],q=0,r=a.length;r>q;q++){var s=a[q];if("M"==s[0])e=i=s[1],f=j=s[2];else{"C"==s[0]?(n=[e,f].concat(s.slice(1)),e=n[6],f=n[7]):(n=[e,f,e,f,i,j,i,j],e=i,f=j);for(var t=0,u=b.length;u>t;t++){var v=b[t];if("M"==v[0])g=k=v[1],h=l=v[2];else{"C"==v[0]?(o=[g,h].concat(v.slice(1)),g=o[6],h=o[7]):(o=[g,h,g,h,k,l,k,l],g=k,h=l);var w=m(n,o,d);if(d)p+=w;else{for(var x=0,y=w.length;y>x;x++)w[x].segment1=q,w[x].segment2=t,w[x].bez1=n,w[x].bez2=o;p=p.concat(w)}}}}}return p}function o(a,b,c,d,e,f){null!=a?(this.a=+a,this.b=+b,this.c=+c,this.d=+d,this.e=+e,this.f=+f):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function p(){return this.x+H+this.y+H+this.width+" à "+this.height}function q(a,b,c,d,e,f){function g(a){return((l*a+k)*a+j)*a}function h(a,b){var c=i(a,b);return((o*c+n)*c+m)*c}function i(a,b){var c,d,e,f,h,i;for(e=a,i=0;8>i;i++){if(f=g(e)-a,Q(f)<b)return e;if(h=(3*l*e+2*k)*e+j,Q(h)<1e-6)break;e-=f/h}if(c=0,d=1,e=a,c>e)return c;if(e>d)return d;for(;d>c;){if(f=g(e),Q(f-a)<b)return e;a>f?c=e:d=e,e=(d-c)/2+c}return e}var j=3*b,k=3*(d-b)-j,l=1-j-k,m=3*c,n=3*(e-c)-m,o=1-m-n;return h(a,1/(200*f))}function r(a,b){var c=[],d={};if(this.ms=b,this.times=1,a){for(var e in a)a[z](e)&&(d[_(e)]=a[e],c.push(_(e)));c.sort(lb)}this.anim=d,this.top=c[c.length-1],this.percents=c}function s(a,d,e,f,g,h){e=_(e);var i,j,k,l,m,n,p=a.ms,r={},s={},t={};if(f)for(v=0,x=ic.length;x>v;v++){var u=ic[v];if(u.el.id==d.id&&u.anim==a){u.percent!=e?(ic.splice(v,1),k=1):j=u,d.attr(u.totalOrigin);break}}else f=+s;for(var v=0,x=a.percents.length;x>v;v++){if(a.percents[v]==e||a.percents[v]>f*a.top){e=a.percents[v],m=a.percents[v-1]||0,p=p/a.top*(e-m),l=a.percents[v+1],i=a.anim[e];break}f&&d.attr(a.anim[a.percents[v]])}if(i){if(j)j.initstatus=f,j.start=new Date-j.ms*f;else{for(var y in i)if(i[z](y)&&(db[z](y)||d.paper.customAttributes[z](y)))switch(r[y]=d.attr(y),null==r[y]&&(r[y]=cb[y]),s[y]=i[y],db[y]){case T:t[y]=(s[y]-r[y])/p;break;case"colour":r[y]=c.getRGB(r[y]);var A=c.getRGB(s[y]);t[y]={r:(A.r-r[y].r)/p,g:(A.g-r[y].g)/p,b:(A.b-r[y].b)/p};break;case"path":var B=Kb(r[y],s[y]),C=B[1];for(r[y]=B[0],t[y]=[],v=0,x=r[y].length;x>v;v++){t[y][v]=[0];for(var D=1,F=r[y][v].length;F>D;D++)t[y][v][D]=(C[v][D]-r[y][v][D])/p}break;case"transform":var G=d._,H=Pb(G[y],s[y]);if(H)for(r[y]=H.from,s[y]=H.to,t[y]=[],t[y].real=!0,v=0,x=r[y].length;x>v;v++)for(t[y][v]=[r[y][v][0]],D=1,F=r[y][v].length;F>D;D++)t[y][v][D]=(s[y][v][D]-r[y][v][D])/p;else{var K=d.matrix||new o,L={_:{transform:G.transform},getBBox:function(){return d.getBBox(1)}};r[y]=[K.a,K.b,K.c,K.d,K.e,K.f],Nb(L,s[y]),s[y]=L._.transform,t[y]=[(L.matrix.a-K.a)/p,(L.matrix.b-K.b)/p,(L.matrix.c-K.c)/p,(L.matrix.d-K.d)/p,(L.matrix.e-K.e)/p,(L.matrix.f-K.f)/p]}break;case"csv":var M=I(i[y])[J](w),N=I(r[y])[J](w);if("clip-rect"==y)for(r[y]=N,t[y]=[],v=N.length;v--;)t[y][v]=(M[v]-r[y][v])/p;s[y]=M;break;default:for(M=[][E](i[y]),N=[][E](r[y]),t[y]=[],v=d.paper.customAttributes[y].length;v--;)t[y][v]=((M[v]||0)-(N[v]||0))/p}var O=i.easing,P=c.easing_formulas[O];if(!P)if(P=I(O).match(Z),P&&5==P.length){var Q=P;P=function(a){return q(a,+Q[1],+Q[2],+Q[3],+Q[4],p)}}else P=nb;if(n=i.start||a.start||+new Date,u={anim:a,percent:e,timestamp:n,start:n+(a.del||0),status:0,initstatus:f||0,stop:!1,ms:p,easing:P,from:r,diff:t,to:s,el:d,callback:i.callback,prev:m,next:l,repeat:h||a.times,origin:d.attr(),totalOrigin:g},ic.push(u),f&&!j&&!k&&(u.stop=!0,u.start=new Date-p*f,1==ic.length))return kc();k&&(u.start=new Date-u.ms*f),1==ic.length&&jc(kc)}b("raphael.anim.start."+d.id,d,a)}}function t(a){for(var b=0;b<ic.length;b++)ic[b].el.paper==a&&ic.splice(b--,1)}c.version="2.1.2",c.eve=b;var u,v,w=/[, ]+/,x={circle:1,rect:1,path:1,ellipse:1,text:1,image:1},y=/\{(\d+)\}/g,z="hasOwnProperty",A={doc:document,win:a},B={was:Object.prototype[z].call(A.win,"Raphael"),is:A.win.Raphael},C=function(){this.ca=this.customAttributes={}},D="apply",E="concat",F="ontouchstart"in A.win||A.win.DocumentTouch&&A.doc instanceof DocumentTouch,G="",H=" ",I=String,J="split",K="click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel"[J](H),L={mousedown:"touchstart",mousemove:"touchmove",mouseup:"touchend"},M=I.prototype.toLowerCase,N=Math,O=N.max,P=N.min,Q=N.abs,R=N.pow,S=N.PI,T="number",U="string",V="array",W=Object.prototype.toString,X=(c._ISURL=/^url\(['"]?([^\)]+?)['"]?\)$/i,/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i),Y={NaN:1,Infinity:1,"-Infinity":1},Z=/^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/,$=N.round,_=parseFloat,ab=parseInt,bb=I.prototype.toUpperCase,cb=c._availableAttrs={"arrow-end":"none","arrow-start":"none",blur:0,"clip-rect":"0 0 1e9 1e9",cursor:"default",cx:0,cy:0,fill:"#fff","fill-opacity":1,font:'10px "Arial"',"font-family":'"Arial"',"font-size":"10","font-style":"normal","font-weight":400,gradient:0,height:0,href:"http://raphaeljs.com/","letter-spacing":0,opacity:1,path:"M0,0",r:0,rx:0,ry:0,src:"",stroke:"#000","stroke-dasharray":"","stroke-linecap":"butt","stroke-linejoin":"butt","stroke-miterlimit":0,"stroke-opacity":1,"stroke-width":1,target:"_blank","text-anchor":"middle",title:"Raphael",transform:"",width:0,x:0,y:0},db=c._availableAnimAttrs={blur:T,"clip-rect":"csv",cx:T,cy:T,fill:"colour","fill-opacity":T,"font-size":T,height:T,opacity:T,path:"path",r:T,rx:T,ry:T,stroke:"colour","stroke-opacity":T,"stroke-width":T,transform:"transform",width:T,x:T,y:T},eb=/[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/,fb={hs:1,rg:1},gb=/,?([achlmqrstvxz]),?/gi,hb=/([achlmrqstvz])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/gi,ib=/([rstm])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/gi,jb=/(-?\d*\.?\d*(?:e[\-+]?\d+)?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/gi,kb=(c._radial_gradient=/^r(?:\(([^,]+?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*([^\)]+?)\))?/,{}),lb=function(a,b){return _(a)-_(b)},mb=function(){},nb=function(a){return a},ob=c._rectPath=function(a,b,c,d,e){return e?[["M",a+e,b],["l",c-2*e,0],["a",e,e,0,0,1,e,e],["l",0,d-2*e],["a",e,e,0,0,1,-e,e],["l",2*e-c,0],["a",e,e,0,0,1,-e,-e],["l",0,2*e-d],["a",e,e,0,0,1,e,-e],["z"]]:[["M",a,b],["l",c,0],["l",0,d],["l",-c,0],["z"]]},pb=function(a,b,c,d){return null==d&&(d=c),[["M",a,b],["m",0,-d],["a",c,d,0,1,1,0,2*d],["a",c,d,0,1,1,0,-2*d],["z"]]},qb=c._getPath={path:function(a){return a.attr("path")},circle:function(a){var b=a.attrs;return pb(b.cx,b.cy,b.r)},ellipse:function(a){var b=a.attrs;return pb(b.cx,b.cy,b.rx,b.ry)},rect:function(a){var b=a.attrs;return ob(b.x,b.y,b.width,b.height,b.r)},image:function(a){var b=a.attrs;return ob(b.x,b.y,b.width,b.height)},text:function(a){var b=a._getBBox();return ob(b.x,b.y,b.width,b.height)},set:function(a){var b=a._getBBox();return ob(b.x,b.y,b.width,b.height)}},rb=c.mapPath=function(a,b){if(!b)return a;var c,d,e,f,g,h,i;for(a=Kb(a),e=0,g=a.length;g>e;e++)for(i=a[e],f=1,h=i.length;h>f;f+=2)c=b.x(i[f],i[f+1]),d=b.y(i[f],i[f+1]),i[f]=c,i[f+1]=d;return a};if(c._g=A,c.type=A.win.SVGAngle||A.doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")?"SVG":"VML","VML"==c.type){var sb,tb=A.doc.createElement("div");if(tb.innerHTML='<v:shape adj="1"/>',sb=tb.firstChild,sb.style.behavior="url(#default#VML)",!sb||"object"!=typeof sb.adj)return c.type=G;tb=null}c.svg=!(c.vml="VML"==c.type),c._Paper=C,c.fn=v=C.prototype=c.prototype,c._id=0,c._oid=0,c.is=function(a,b){return b=M.call(b),"finite"==b?!Y[z](+a):"array"==b?a instanceof Array:"null"==b&&null===a||b==typeof a&&null!==a||"object"==b&&a===Object(a)||"array"==b&&Array.isArray&&Array.isArray(a)||W.call(a).slice(8,-1).toLowerCase()==b},c.angle=function(a,b,d,e,f,g){if(null==f){var h=a-d,i=b-e;return h||i?(180+180*N.atan2(-i,-h)/S+360)%360:0}return c.angle(a,b,f,g)-c.angle(d,e,f,g)},c.rad=function(a){return a%360*S/180},c.deg=function(a){return 180*a/S%360},c.snapTo=function(a,b,d){if(d=c.is(d,"finite")?d:10,c.is(a,V)){for(var e=a.length;e--;)if(Q(a[e]-b)<=d)return a[e]}else{a=+a;var f=b%a;if(d>f)return b-f;if(f>a-d)return b-f+a}return b},c.createUUID=function(a,b){return function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(a,b).toUpperCase()}}(/[xy]/g,function(a){var b=0|16*N.random(),c="x"==a?b:8|3&b;return c.toString(16)}),c.setWindow=function(a){b("raphael.setWindow",c,A.win,a),A.win=a,A.doc=A.win.document,c._engine.initWin&&c._engine.initWin(A.win)};var ub=function(a){if(c.vml){var b,d=/^\s+|\s+$/g;try{var e=new ActiveXObject("htmlfile");e.write("<body>"),e.close(),b=e.body}catch(g){b=createPopup().document.body}var h=b.createTextRange();ub=f(function(a){try{b.style.color=I(a).replace(d,G);var c=h.queryCommandValue("ForeColor");return c=(255&c)<<16|65280&c|(16711680&c)>>>16,"#"+("000000"+c.toString(16)).slice(-6)}catch(e){return"none"}})}else{var i=A.doc.createElement("i");i.title="Raphaël Colour Picker",i.style.display="none",A.doc.body.appendChild(i),ub=f(function(a){return i.style.color=a,A.doc.defaultView.getComputedStyle(i,G).getPropertyValue("color")})}return ub(a)},vb=function(){return"hsb("+[this.h,this.s,this.b]+")"},wb=function(){return"hsl("+[this.h,this.s,this.l]+")"},xb=function(){return this.hex},yb=function(a,b,d){if(null==b&&c.is(a,"object")&&"r"in a&&"g"in a&&"b"in a&&(d=a.b,b=a.g,a=a.r),null==b&&c.is(a,U)){var e=c.getRGB(a);a=e.r,b=e.g,d=e.b}return(a>1||b>1||d>1)&&(a/=255,b/=255,d/=255),[a,b,d]},zb=function(a,b,d,e){a*=255,b*=255,d*=255;var f={r:a,g:b,b:d,hex:c.rgb(a,b,d),toString:xb};return c.is(e,"finite")&&(f.opacity=e),f};c.color=function(a){var b;return c.is(a,"object")&&"h"in a&&"s"in a&&"b"in a?(b=c.hsb2rgb(a),a.r=b.r,a.g=b.g,a.b=b.b,a.hex=b.hex):c.is(a,"object")&&"h"in a&&"s"in a&&"l"in a?(b=c.hsl2rgb(a),a.r=b.r,a.g=b.g,a.b=b.b,a.hex=b.hex):(c.is(a,"string")&&(a=c.getRGB(a)),c.is(a,"object")&&"r"in a&&"g"in a&&"b"in a?(b=c.rgb2hsl(a),a.h=b.h,a.s=b.s,a.l=b.l,b=c.rgb2hsb(a),a.v=b.b):(a={hex:"none"},a.r=a.g=a.b=a.h=a.s=a.v=a.l=-1)),a.toString=xb,a},c.hsb2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"b"in a&&(c=a.b,b=a.s,a=a.h,d=a.o),a*=360;var e,f,g,h,i;return a=a%360/60,i=c*b,h=i*(1-Q(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a],zb(e,f,g,d)},c.hsl2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"l"in a&&(c=a.l,b=a.s,a=a.h),(a>1||b>1||c>1)&&(a/=360,b/=100,c/=100),a*=360;var e,f,g,h,i;return a=a%360/60,i=2*b*(.5>c?c:1-c),h=i*(1-Q(a%2-1)),e=f=g=c-i/2,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a],zb(e,f,g,d)},c.rgb2hsb=function(a,b,c){c=yb(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;return f=O(a,b,c),g=f-P(a,b,c),d=0==g?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=60*((d+360)%6)/360,e=0==g?0:g/f,{h:d,s:e,b:f,toString:vb}},c.rgb2hsl=function(a,b,c){c=yb(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;return g=O(a,b,c),h=P(a,b,c),i=g-h,d=0==i?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=60*((d+360)%6)/360,f=(g+h)/2,e=0==i?0:.5>f?i/(2*f):i/(2-2*f),{h:d,s:e,l:f,toString:wb}},c._path2string=function(){return this.join(",").replace(gb,"$1")},c._preload=function(a,b){var c=A.doc.createElement("img");c.style.cssText="position:absolute;left:-9999em;top:-9999em",c.onload=function(){b.call(this),this.onload=null,A.doc.body.removeChild(this)},c.onerror=function(){A.doc.body.removeChild(this)},A.doc.body.appendChild(c),c.src=a},c.getRGB=f(function(a){if(!a||(a=I(a)).indexOf("-")+1)return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:g};if("none"==a)return{r:-1,g:-1,b:-1,hex:"none",toString:g};!(fb[z](a.toLowerCase().substring(0,2))||"#"==a.charAt())&&(a=ub(a));var b,d,e,f,h,i,j=a.match(X);return j?(j[2]&&(e=ab(j[2].substring(5),16),d=ab(j[2].substring(3,5),16),b=ab(j[2].substring(1,3),16)),j[3]&&(e=ab((h=j[3].charAt(3))+h,16),d=ab((h=j[3].charAt(2))+h,16),b=ab((h=j[3].charAt(1))+h,16)),j[4]&&(i=j[4][J](eb),b=_(i[0]),"%"==i[0].slice(-1)&&(b*=2.55),d=_(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=_(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),"rgba"==j[1].toLowerCase().slice(0,4)&&(f=_(i[3])),i[3]&&"%"==i[3].slice(-1)&&(f/=100)),j[5]?(i=j[5][J](eb),b=_(i[0]),"%"==i[0].slice(-1)&&(b*=2.55),d=_(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=_(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),("deg"==i[0].slice(-3)||"°"==i[0].slice(-1))&&(b/=360),"hsba"==j[1].toLowerCase().slice(0,4)&&(f=_(i[3])),i[3]&&"%"==i[3].slice(-1)&&(f/=100),c.hsb2rgb(b,d,e,f)):j[6]?(i=j[6][J](eb),b=_(i[0]),"%"==i[0].slice(-1)&&(b*=2.55),d=_(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=_(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),("deg"==i[0].slice(-3)||"°"==i[0].slice(-1))&&(b/=360),"hsla"==j[1].toLowerCase().slice(0,4)&&(f=_(i[3])),i[3]&&"%"==i[3].slice(-1)&&(f/=100),c.hsl2rgb(b,d,e,f)):(j={r:b,g:d,b:e,toString:g},j.hex="#"+(16777216|e|d<<8|b<<16).toString(16).slice(1),c.is(f,"finite")&&(j.opacity=f),j)):{r:-1,g:-1,b:-1,hex:"none",error:1,toString:g}},c),c.hsb=f(function(a,b,d){return c.hsb2rgb(a,b,d).hex}),c.hsl=f(function(a,b,d){return c.hsl2rgb(a,b,d).hex}),c.rgb=f(function(a,b,c){return"#"+(16777216|c|b<<8|a<<16).toString(16).slice(1)}),c.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||.75},c=this.hsb2rgb(b.h,b.s,b.b);return b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b})),c.hex},c.getColor.reset=function(){delete this.start},c.parsePathString=function(a){if(!a)return null;var b=Ab(a);if(b.arr)return Cb(b.arr);var d={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},e=[];return c.is(a,V)&&c.is(a[0],V)&&(e=Cb(a)),e.length||I(a).replace(hb,function(a,b,c){var f=[],g=b.toLowerCase();if(c.replace(jb,function(a,b){b&&f.push(+b)}),"m"==g&&f.length>2&&(e.push([b][E](f.splice(0,2))),g="l",b="m"==b?"l":"L"),"r"==g)e.push([b][E](f));else for(;f.length>=d[g]&&(e.push([b][E](f.splice(0,d[g]))),d[g]););}),e.toString=c._path2string,b.arr=Cb(e),e},c.parseTransformString=f(function(a){if(!a)return null;var b=[];return c.is(a,V)&&c.is(a[0],V)&&(b=Cb(a)),b.length||I(a).replace(ib,function(a,c,d){var e=[];M.call(c),d.replace(jb,function(a,b){b&&e.push(+b)}),b.push([c][E](e))}),b.toString=c._path2string,b});var Ab=function(a){var b=Ab.ps=Ab.ps||{};return b[a]?b[a].sleep=100:b[a]={sleep:100},setTimeout(function(){for(var c in b)b[z](c)&&c!=a&&(b[c].sleep--,!b[c].sleep&&delete b[c])}),b[a]};c.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=R(j,3),l=R(j,2),m=i*i,n=m*i,o=k*a+3*l*i*c+3*j*i*i*e+n*g,p=k*b+3*l*i*d+3*j*i*i*f+n*h,q=a+2*i*(c-a)+m*(e-2*c+a),r=b+2*i*(d-b)+m*(f-2*d+b),s=c+2*i*(e-c)+m*(g-2*e+c),t=d+2*i*(f-d)+m*(h-2*f+d),u=j*a+i*c,v=j*b+i*d,w=j*e+i*g,x=j*f+i*h,y=90-180*N.atan2(q-s,r-t)/S;return(q>s||t>r)&&(y+=180),{x:o,y:p,m:{x:q,y:r},n:{x:s,y:t},start:{x:u,y:v},end:{x:w,y:x},alpha:y}},c.bezierBBox=function(a,b,d,e,f,g,h,i){c.is(a,"array")||(a=[a,b,d,e,f,g,h,i]);var j=Jb.apply(null,a);return{x:j.min.x,y:j.min.y,x2:j.max.x,y2:j.max.y,width:j.max.x-j.min.x,height:j.max.y-j.min.y}},c.isPointInsideBBox=function(a,b,c){return b>=a.x&&b<=a.x2&&c>=a.y&&c<=a.y2},c.isBBoxIntersect=function(a,b){var d=c.isPointInsideBBox;return d(b,a.x,a.y)||d(b,a.x2,a.y)||d(b,a.x,a.y2)||d(b,a.x2,a.y2)||d(a,b.x,b.y)||d(a,b.x2,b.y)||d(a,b.x,b.y2)||d(a,b.x2,b.y2)||(a.x<b.x2&&a.x>b.x||b.x<a.x2&&b.x>a.x)&&(a.y<b.y2&&a.y>b.y||b.y<a.y2&&b.y>a.y)},c.pathIntersection=function(a,b){return n(a,b)},c.pathIntersectionNumber=function(a,b){return n(a,b,1)},c.isPointInsidePath=function(a,b,d){var e=c.pathBBox(a);return c.isPointInsideBBox(e,b,d)&&1==n(a,[["M",b,d],["H",e.x2+10]],1)%2},c._removedFactory=function(a){return function(){b("raphael.log",null,"Raphaël: you are calling to method â"+a+"â of removed object",a)}};var Bb=c.pathBBox=function(a){var b=Ab(a);if(b.bbox)return d(b.bbox);if(!a)return{x:0,y:0,width:0,height:0,x2:0,y2:0};a=Kb(a);for(var c,e=0,f=0,g=[],h=[],i=0,j=a.length;j>i;i++)if(c=a[i],"M"==c[0])e=c[1],f=c[2],g.push(e),h.push(f);else{var k=Jb(e,f,c[1],c[2],c[3],c[4],c[5],c[6]);g=g[E](k.min.x,k.max.x),h=h[E](k.min.y,k.max.y),e=c[5],f=c[6]}var l=P[D](0,g),m=P[D](0,h),n=O[D](0,g),o=O[D](0,h),p=n-l,q=o-m,r={x:l,y:m,x2:n,y2:o,width:p,height:q,cx:l+p/2,cy:m+q/2};return b.bbox=d(r),r},Cb=function(a){var b=d(a);return b.toString=c._path2string,b},Db=c._pathToRelative=function(a){var b=Ab(a);if(b.rel)return Cb(b.rel);c.is(a,V)&&c.is(a&&a[0],V)||(a=c.parsePathString(a));var d=[],e=0,f=0,g=0,h=0,i=0;"M"==a[0][0]&&(e=a[0][1],f=a[0][2],g=e,h=f,i++,d.push(["M",e,f]));for(var j=i,k=a.length;k>j;j++){var l=d[j]=[],m=a[j];if(m[0]!=M.call(m[0]))switch(l[0]=M.call(m[0]),l[0]){case"a":l[1]=m[1],l[2]=m[2],l[3]=m[3],l[4]=m[4],l[5]=m[5],l[6]=+(m[6]-e).toFixed(3),l[7]=+(m[7]-f).toFixed(3);break;case"v":l[1]=+(m[1]-f).toFixed(3);break;case"m":g=m[1],h=m[2];default:for(var n=1,o=m.length;o>n;n++)l[n]=+(m[n]-(n%2?e:f)).toFixed(3)}else{l=d[j]=[],"m"==m[0]&&(g=m[1]+e,h=m[2]+f);for(var p=0,q=m.length;q>p;p++)d[j][p]=m[p]}var r=d[j].length;switch(d[j][0]){case"z":e=g,f=h;break;case"h":e+=+d[j][r-1];break;case"v":f+=+d[j][r-1];break;default:e+=+d[j][r-2],f+=+d[j][r-1]}}return d.toString=c._path2string,b.rel=Cb(d),d},Eb=c._pathToAbsolute=function(a){var b=Ab(a);if(b.abs)return Cb(b.abs);if(c.is(a,V)&&c.is(a&&a[0],V)||(a=c.parsePathString(a)),!a||!a.length)return[["M",0,0]];var d=[],e=0,f=0,g=0,i=0,j=0;"M"==a[0][0]&&(e=+a[0][1],f=+a[0][2],g=e,i=f,j++,d[0]=["M",e,f]);for(var k,l,m=3==a.length&&"M"==a[0][0]&&"R"==a[1][0].toUpperCase()&&"Z"==a[2][0].toUpperCase(),n=j,o=a.length;o>n;n++){if(d.push(k=[]),l=a[n],l[0]!=bb.call(l[0]))switch(k[0]=bb.call(l[0]),k[0]){case"A":k[1]=l[1],k[2]=l[2],k[3]=l[3],k[4]=l[4],k[5]=l[5],k[6]=+(l[6]+e),k[7]=+(l[7]+f);break;case"V":k[1]=+l[1]+f;break;case"H":k[1]=+l[1]+e;break;case"R":for(var p=[e,f][E](l.slice(1)),q=2,r=p.length;r>q;q++)p[q]=+p[q]+e,p[++q]=+p[q]+f;d.pop(),d=d[E](h(p,m));break;case"M":g=+l[1]+e,i=+l[2]+f;default:for(q=1,r=l.length;r>q;q++)k[q]=+l[q]+(q%2?e:f)}else if("R"==l[0])p=[e,f][E](l.slice(1)),d.pop(),d=d[E](h(p,m)),k=["R"][E](l.slice(-2));else for(var s=0,t=l.length;t>s;s++)k[s]=l[s];switch(k[0]){case"Z":e=g,f=i;break;case"H":e=k[1];break;case"V":f=k[1];break;case"M":g=k[k.length-2],i=k[k.length-1];default:e=k[k.length-2],f=k[k.length-1]}}return d.toString=c._path2string,b.abs=Cb(d),d},Fb=function(a,b,c,d){return[a,b,c,d,c,d]},Gb=function(a,b,c,d,e,f){var g=1/3,h=2/3;return[g*a+h*c,g*b+h*d,g*e+h*c,g*f+h*d,e,f]},Hb=function(a,b,c,d,e,g,h,i,j,k){var l,m=120*S/180,n=S/180*(+e||0),o=[],p=f(function(a,b,c){var d=a*N.cos(c)-b*N.sin(c),e=a*N.sin(c)+b*N.cos(c);return{x:d,y:e}});if(k)y=k[0],z=k[1],w=k[2],x=k[3];else{l=p(a,b,-n),a=l.x,b=l.y,l=p(i,j,-n),i=l.x,j=l.y;var q=(N.cos(S/180*e),N.sin(S/180*e),(a-i)/2),r=(b-j)/2,s=q*q/(c*c)+r*r/(d*d);s>1&&(s=N.sqrt(s),c=s*c,d=s*d);var t=c*c,u=d*d,v=(g==h?-1:1)*N.sqrt(Q((t*u-t*r*r-u*q*q)/(t*r*r+u*q*q))),w=v*c*r/d+(a+i)/2,x=v*-d*q/c+(b+j)/2,y=N.asin(((b-x)/d).toFixed(9)),z=N.asin(((j-x)/d).toFixed(9));y=w>a?S-y:y,z=w>i?S-z:z,0>y&&(y=2*S+y),0>z&&(z=2*S+z),h&&y>z&&(y-=2*S),!h&&z>y&&(z-=2*S)}var A=z-y;if(Q(A)>m){var B=z,C=i,D=j;z=y+m*(h&&z>y?1:-1),i=w+c*N.cos(z),j=x+d*N.sin(z),o=Hb(i,j,c,d,e,0,h,C,D,[z,B,w,x])}A=z-y;var F=N.cos(y),G=N.sin(y),H=N.cos(z),I=N.sin(z),K=N.tan(A/4),L=4/3*c*K,M=4/3*d*K,O=[a,b],P=[a+L*G,b-M*F],R=[i+L*I,j-M*H],T=[i,j];if(P[0]=2*O[0]-P[0],P[1]=2*O[1]-P[1],k)return[P,R,T][E](o);o=[P,R,T][E](o).join()[J](",");for(var U=[],V=0,W=o.length;W>V;V++)U[V]=V%2?p(o[V-1],o[V],n).y:p(o[V],o[V+1],n).x;return U},Ib=function(a,b,c,d,e,f,g,h,i){var j=1-i;return{x:R(j,3)*a+3*R(j,2)*i*c+3*j*i*i*e+R(i,3)*g,y:R(j,3)*b+3*R(j,2)*i*d+3*j*i*i*f+R(i,3)*h}},Jb=f(function(a,b,c,d,e,f,g,h){var i,j=e-2*c+a-(g-2*e+c),k=2*(c-a)-2*(e-c),l=a-c,m=(-k+N.sqrt(k*k-4*j*l))/2/j,n=(-k-N.sqrt(k*k-4*j*l))/2/j,o=[b,h],p=[a,g];return Q(m)>"1e12"&&(m=.5),Q(n)>"1e12"&&(n=.5),m>0&&1>m&&(i=Ib(a,b,c,d,e,f,g,h,m),p.push(i.x),o.push(i.y)),n>0&&1>n&&(i=Ib(a,b,c,d,e,f,g,h,n),p.push(i.x),o.push(i.y)),j=f-2*d+b-(h-2*f+d),k=2*(d-b)-2*(f-d),l=b-d,m=(-k+N.sqrt(k*k-4*j*l))/2/j,n=(-k-N.sqrt(k*k-4*j*l))/2/j,Q(m)>"1e12"&&(m=.5),Q(n)>"1e12"&&(n=.5),m>0&&1>m&&(i=Ib(a,b,c,d,e,f,g,h,m),p.push(i.x),o.push(i.y)),n>0&&1>n&&(i=Ib(a,b,c,d,e,f,g,h,n),p.push(i.x),o.push(i.y)),{min:{x:P[D](0,p),y:P[D](0,o)},max:{x:O[D](0,p),y:O[D](0,o)}}}),Kb=c._path2curve=f(function(a,b){var c=!b&&Ab(a);if(!b&&c.curve)return Cb(c.curve);for(var d=Eb(a),e=b&&Eb(b),f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},h=(function(a,b,c){var d,e;if(!a)return["C",b.x,b.y,b.x,b.y,b.x,b.y];switch(!(a[0]in{T:1,Q:1})&&(b.qx=b.qy=null),a[0]){case"M":b.X=a[1],b.Y=a[2];break;case"A":a=["C"][E](Hb[D](0,[b.x,b.y][E](a.slice(1))));break;case"S":"C"==c||"S"==c?(d=2*b.x-b.bx,e=2*b.y-b.by):(d=b.x,e=b.y),a=["C",d,e][E](a.slice(1));break;case"T":"Q"==c||"T"==c?(b.qx=2*b.x-b.qx,b.qy=2*b.y-b.qy):(b.qx=b.x,b.qy=b.y),a=["C"][E](Gb(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case"Q":b.qx=a[1],b.qy=a[2],a=["C"][E](Gb(b.x,b.y,a[1],a[2],a[3],a[4]));break;case"L":a=["C"][E](Fb(b.x,b.y,a[1],a[2]));break;case"H":a=["C"][E](Fb(b.x,b.y,a[1],b.y));break;case"V":a=["C"][E](Fb(b.x,b.y,b.x,a[1]));break;case"Z":a=["C"][E](Fb(b.x,b.y,b.X,b.Y))}return a}),i=function(a,b){if(a[b].length>7){a[b].shift();for(var c=a[b];c.length;)a.splice(b++,0,["C"][E](c.splice(0,6)));a.splice(b,1),l=O(d.length,e&&e.length||0)}},j=function(a,b,c,f,g){a&&b&&"M"==a[g][0]&&"M"!=b[g][0]&&(b.splice(g,0,["M",f.x,f.y]),c.bx=0,c.by=0,c.x=a[g][1],c.y=a[g][2],l=O(d.length,e&&e.length||0))},k=0,l=O(d.length,e&&e.length||0);l>k;k++){d[k]=h(d[k],f),i(d,k),e&&(e[k]=h(e[k],g)),e&&i(e,k),j(d,e,f,g,k),j(e,d,g,f,k);var m=d[k],n=e&&e[k],o=m.length,p=e&&n.length;f.x=m[o-2],f.y=m[o-1],f.bx=_(m[o-4])||f.x,f.by=_(m[o-3])||f.y,g.bx=e&&(_(n[p-4])||g.x),g.by=e&&(_(n[p-3])||g.y),g.x=e&&n[p-2],g.y=e&&n[p-1]}return e||(c.curve=Cb(d)),e?[d,e]:d},null,Cb),Lb=(c._parseDots=f(function(a){for(var b=[],d=0,e=a.length;e>d;d++){var f={},g=a[d].match(/^([^:]*):?([\d\.]*)/);if(f.color=c.getRGB(g[1]),f.color.error)return null;f.color=f.color.hex,g[2]&&(f.offset=g[2]+"%"),b.push(f)}for(d=1,e=b.length-1;e>d;d++)if(!b[d].offset){for(var h=_(b[d-1].offset||0),i=0,j=d+1;e>j;j++)if(b[j].offset){i=b[j].offset;break}i||(i=100,j=e),i=_(i);for(var k=(i-h)/(j-d+1);j>d;d++)h+=k,b[d].offset=h+"%"}return b}),c._tear=function(a,b){a==b.top&&(b.top=a.prev),a==b.bottom&&(b.bottom=a.next),a.next&&(a.next.prev=a.prev),a.prev&&(a.prev.next=a.next)}),Mb=(c._tofront=function(a,b){b.top!==a&&(Lb(a,b),a.next=null,a.prev=b.top,b.top.next=a,b.top=a)},c._toback=function(a,b){b.bottom!==a&&(Lb(a,b),a.next=b.bottom,a.prev=null,b.bottom.prev=a,b.bottom=a)},c._insertafter=function(a,b,c){Lb(a,c),b==c.top&&(c.top=a),b.next&&(b.next.prev=a),a.next=b.next,a.prev=b,b.next=a},c._insertbefore=function(a,b,c){Lb(a,c),b==c.bottom&&(c.bottom=a),b.prev&&(b.prev.next=a),a.prev=b.prev,b.prev=a,a.next=b},c.toMatrix=function(a,b){var c=Bb(a),d={_:{transform:G},getBBox:function(){return c}};return Nb(d,b),d.matrix}),Nb=(c.transformPath=function(a,b){return rb(a,Mb(a,b))},c._extractTransform=function(a,b){if(null==b)return a._.transform;b=I(b).replace(/\.{3}|\u2026/g,a._.transform||G);var d=c.parseTransformString(b),e=0,f=0,g=0,h=1,i=1,j=a._,k=new o;if(j.transform=d||[],d)for(var l=0,m=d.length;m>l;l++){var n,p,q,r,s,t=d[l],u=t.length,v=I(t[0]).toLowerCase(),w=t[0]!=v,x=w?k.invert():0;"t"==v&&3==u?w?(n=x.x(0,0),p=x.y(0,0),q=x.x(t[1],t[2]),r=x.y(t[1],t[2]),k.translate(q-n,r-p)):k.translate(t[1],t[2]):"r"==v?2==u?(s=s||a.getBBox(1),k.rotate(t[1],s.x+s.width/2,s.y+s.height/2),e+=t[1]):4==u&&(w?(q=x.x(t[2],t[3]),r=x.y(t[2],t[3]),k.rotate(t[1],q,r)):k.rotate(t[1],t[2],t[3]),e+=t[1]):"s"==v?2==u||3==u?(s=s||a.getBBox(1),k.scale(t[1],t[u-1],s.x+s.width/2,s.y+s.height/2),h*=t[1],i*=t[u-1]):5==u&&(w?(q=x.x(t[3],t[4]),r=x.y(t[3],t[4]),k.scale(t[1],t[2],q,r)):k.scale(t[1],t[2],t[3],t[4]),h*=t[1],i*=t[2]):"m"==v&&7==u&&k.add(t[1],t[2],t[3],t[4],t[5],t[6]),j.dirtyT=1,a.matrix=k}a.matrix=k,j.sx=h,j.sy=i,j.deg=e,j.dx=f=k.e,j.dy=g=k.f,1==h&&1==i&&!e&&j.bbox?(j.bbox.x+=+f,j.bbox.y+=+g):j.dirtyT=1}),Ob=function(a){var b=a[0];switch(b.toLowerCase()){case"t":return[b,0,0];case"m":return[b,1,0,0,1,0,0];case"r":return 4==a.length?[b,0,a[2],a[3]]:[b,0];case"s":return 5==a.length?[b,1,1,a[3],a[4]]:3==a.length?[b,1,1]:[b,1]}},Pb=c._equaliseTransform=function(a,b){b=I(b).replace(/\.{3}|\u2026/g,a),a=c.parseTransformString(a)||[],b=c.parseTransformString(b)||[];for(var d,e,f,g,h=O(a.length,b.length),i=[],j=[],k=0;h>k;k++){if(f=a[k]||Ob(b[k]),g=b[k]||Ob(f),f[0]!=g[0]||"r"==f[0].toLowerCase()&&(f[2]!=g[2]||f[3]!=g[3])||"s"==f[0].toLowerCase()&&(f[3]!=g[3]||f[4]!=g[4]))return;for(i[k]=[],j[k]=[],d=0,e=O(f.length,g.length);e>d;d++)d in f&&(i[k][d]=f[d]),d in g&&(j[k][d]=g[d]) -}return{from:i,to:j}};c._getContainer=function(a,b,d,e){var f;return f=null!=e||c.is(a,"object")?a:A.doc.getElementById(a),null!=f?f.tagName?null==b?{container:f,width:f.style.pixelWidth||f.offsetWidth,height:f.style.pixelHeight||f.offsetHeight}:{container:f,width:b,height:d}:{container:1,x:a,y:b,width:d,height:e}:void 0},c.pathToRelative=Db,c._engine={},c.path2curve=Kb,c.matrix=function(a,b,c,d,e,f){return new o(a,b,c,d,e,f)},function(a){function b(a){return a[0]*a[0]+a[1]*a[1]}function d(a){var c=N.sqrt(b(a));a[0]&&(a[0]/=c),a[1]&&(a[1]/=c)}a.add=function(a,b,c,d,e,f){var g,h,i,j,k=[[],[],[]],l=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1]],m=[[a,c,e],[b,d,f],[0,0,1]];for(a&&a instanceof o&&(m=[[a.a,a.c,a.e],[a.b,a.d,a.f],[0,0,1]]),g=0;3>g;g++)for(h=0;3>h;h++){for(j=0,i=0;3>i;i++)j+=l[g][i]*m[i][h];k[g][h]=j}this.a=k[0][0],this.b=k[1][0],this.c=k[0][1],this.d=k[1][1],this.e=k[0][2],this.f=k[1][2]},a.invert=function(){var a=this,b=a.a*a.d-a.b*a.c;return new o(a.d/b,-a.b/b,-a.c/b,a.a/b,(a.c*a.f-a.d*a.e)/b,(a.b*a.e-a.a*a.f)/b)},a.clone=function(){return new o(this.a,this.b,this.c,this.d,this.e,this.f)},a.translate=function(a,b){this.add(1,0,0,1,a,b)},a.scale=function(a,b,c,d){null==b&&(b=a),(c||d)&&this.add(1,0,0,1,c,d),this.add(a,0,0,b,0,0),(c||d)&&this.add(1,0,0,1,-c,-d)},a.rotate=function(a,b,d){a=c.rad(a),b=b||0,d=d||0;var e=+N.cos(a).toFixed(9),f=+N.sin(a).toFixed(9);this.add(e,f,-f,e,b,d),this.add(1,0,0,1,-b,-d)},a.x=function(a,b){return a*this.a+b*this.c+this.e},a.y=function(a,b){return a*this.b+b*this.d+this.f},a.get=function(a){return+this[I.fromCharCode(97+a)].toFixed(4)},a.toString=function(){return c.svg?"matrix("+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+")":[this.get(0),this.get(2),this.get(1),this.get(3),0,0].join()},a.toFilter=function(){return"progid:DXImageTransform.Microsoft.Matrix(M11="+this.get(0)+", M12="+this.get(2)+", M21="+this.get(1)+", M22="+this.get(3)+", Dx="+this.get(4)+", Dy="+this.get(5)+", sizingmethod='auto expand')"},a.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]},a.split=function(){var a={};a.dx=this.e,a.dy=this.f;var e=[[this.a,this.c],[this.b,this.d]];a.scalex=N.sqrt(b(e[0])),d(e[0]),a.shear=e[0][0]*e[1][0]+e[0][1]*e[1][1],e[1]=[e[1][0]-e[0][0]*a.shear,e[1][1]-e[0][1]*a.shear],a.scaley=N.sqrt(b(e[1])),d(e[1]),a.shear/=a.scaley;var f=-e[0][1],g=e[1][1];return 0>g?(a.rotate=c.deg(N.acos(g)),0>f&&(a.rotate=360-a.rotate)):a.rotate=c.deg(N.asin(f)),a.isSimple=!(+a.shear.toFixed(9)||a.scalex.toFixed(9)!=a.scaley.toFixed(9)&&a.rotate),a.isSuperSimple=!+a.shear.toFixed(9)&&a.scalex.toFixed(9)==a.scaley.toFixed(9)&&!a.rotate,a.noRotation=!+a.shear.toFixed(9)&&!a.rotate,a},a.toTransformString=function(a){var b=a||this[J]();return b.isSimple?(b.scalex=+b.scalex.toFixed(4),b.scaley=+b.scaley.toFixed(4),b.rotate=+b.rotate.toFixed(4),(b.dx||b.dy?"t"+[b.dx,b.dy]:G)+(1!=b.scalex||1!=b.scaley?"s"+[b.scalex,b.scaley,0,0]:G)+(b.rotate?"r"+[b.rotate,0,0]:G)):"m"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)]}}(o.prototype);var Qb=navigator.userAgent.match(/Version\/(.*?)\s/)||navigator.userAgent.match(/Chrome\/(\d+)/);v.safari="Apple Computer, Inc."==navigator.vendor&&(Qb&&Qb[1]<4||"iP"==navigator.platform.slice(0,2))||"Google Inc."==navigator.vendor&&Qb&&Qb[1]<8?function(){var a=this.rect(-99,-99,this.width+99,this.height+99).attr({stroke:"none"});setTimeout(function(){a.remove()})}:mb;for(var Rb=function(){this.returnValue=!1},Sb=function(){return this.originalEvent.preventDefault()},Tb=function(){this.cancelBubble=!0},Ub=function(){return this.originalEvent.stopPropagation()},Vb=function(a){var b=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,c=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft;return{x:a.clientX+c,y:a.clientY+b}},Wb=function(){return A.doc.addEventListener?function(a,b,c,d){var e=function(a){var b=Vb(a);return c.call(d,a,b.x,b.y)};if(a.addEventListener(b,e,!1),F&&L[b]){var f=function(b){for(var e=Vb(b),f=b,g=0,h=b.targetTouches&&b.targetTouches.length;h>g;g++)if(b.targetTouches[g].target==a){b=b.targetTouches[g],b.originalEvent=f,b.preventDefault=Sb,b.stopPropagation=Ub;break}return c.call(d,b,e.x,e.y)};a.addEventListener(L[b],f,!1)}return function(){return a.removeEventListener(b,e,!1),F&&L[b]&&a.removeEventListener(L[b],e,!1),!0}}:A.doc.attachEvent?function(a,b,c,d){var e=function(a){a=a||A.win.event;var b=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,e=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft,f=a.clientX+e,g=a.clientY+b;return a.preventDefault=a.preventDefault||Rb,a.stopPropagation=a.stopPropagation||Tb,c.call(d,a,f,g)};a.attachEvent("on"+b,e);var f=function(){return a.detachEvent("on"+b,e),!0};return f}:void 0}(),Xb=[],Yb=function(a){for(var c,d=a.clientX,e=a.clientY,f=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,g=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft,h=Xb.length;h--;){if(c=Xb[h],F&&a.touches){for(var i,j=a.touches.length;j--;)if(i=a.touches[j],i.identifier==c.el._drag.id){d=i.clientX,e=i.clientY,(a.originalEvent?a.originalEvent:a).preventDefault();break}}else a.preventDefault();var k,l=c.el.node,m=l.nextSibling,n=l.parentNode,o=l.style.display;A.win.opera&&n.removeChild(l),l.style.display="none",k=c.el.paper.getElementByPoint(d,e),l.style.display=o,A.win.opera&&(m?n.insertBefore(l,m):n.appendChild(l)),k&&b("raphael.drag.over."+c.el.id,c.el,k),d+=g,e+=f,b("raphael.drag.move."+c.el.id,c.move_scope||c.el,d-c.el._drag.x,e-c.el._drag.y,d,e,a)}},Zb=function(a){c.unmousemove(Yb).unmouseup(Zb);for(var d,e=Xb.length;e--;)d=Xb[e],d.el._drag={},b("raphael.drag.end."+d.el.id,d.end_scope||d.start_scope||d.move_scope||d.el,a);Xb=[]},$b=c.el={},_b=K.length;_b--;)!function(a){c[a]=$b[a]=function(b,d){return c.is(b,"function")&&(this.events=this.events||[],this.events.push({name:a,f:b,unbind:Wb(this.shape||this.node||A.doc,a,b,d||this)})),this},c["un"+a]=$b["un"+a]=function(b){for(var d=this.events||[],e=d.length;e--;)d[e].name!=a||!c.is(b,"undefined")&&d[e].f!=b||(d[e].unbind(),d.splice(e,1),!d.length&&delete this.events);return this}}(K[_b]);$b.data=function(a,d){var e=kb[this.id]=kb[this.id]||{};if(0==arguments.length)return e;if(1==arguments.length){if(c.is(a,"object")){for(var f in a)a[z](f)&&this.data(f,a[f]);return this}return b("raphael.data.get."+this.id,this,e[a],a),e[a]}return e[a]=d,b("raphael.data.set."+this.id,this,d,a),this},$b.removeData=function(a){return null==a?kb[this.id]={}:kb[this.id]&&delete kb[this.id][a],this},$b.getData=function(){return d(kb[this.id]||{})},$b.hover=function(a,b,c,d){return this.mouseover(a,c).mouseout(b,d||c)},$b.unhover=function(a,b){return this.unmouseover(a).unmouseout(b)};var ac=[];$b.drag=function(a,d,e,f,g,h){function i(i){(i.originalEvent||i).preventDefault();var j=i.clientX,k=i.clientY,l=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,m=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft;if(this._drag.id=i.identifier,F&&i.touches)for(var n,o=i.touches.length;o--;)if(n=i.touches[o],this._drag.id=n.identifier,n.identifier==this._drag.id){j=n.clientX,k=n.clientY;break}this._drag.x=j+m,this._drag.y=k+l,!Xb.length&&c.mousemove(Yb).mouseup(Zb),Xb.push({el:this,move_scope:f,start_scope:g,end_scope:h}),d&&b.on("raphael.drag.start."+this.id,d),a&&b.on("raphael.drag.move."+this.id,a),e&&b.on("raphael.drag.end."+this.id,e),b("raphael.drag.start."+this.id,g||f||this,i.clientX+m,i.clientY+l,i)}return this._drag={},ac.push({el:this,start:i}),this.mousedown(i),this},$b.onDragOver=function(a){a?b.on("raphael.drag.over."+this.id,a):b.unbind("raphael.drag.over."+this.id)},$b.undrag=function(){for(var a=ac.length;a--;)ac[a].el==this&&(this.unmousedown(ac[a].start),ac.splice(a,1),b.unbind("raphael.drag.*."+this.id));!ac.length&&c.unmousemove(Yb).unmouseup(Zb),Xb=[]},v.circle=function(a,b,d){var e=c._engine.circle(this,a||0,b||0,d||0);return this.__set__&&this.__set__.push(e),e},v.rect=function(a,b,d,e,f){var g=c._engine.rect(this,a||0,b||0,d||0,e||0,f||0);return this.__set__&&this.__set__.push(g),g},v.ellipse=function(a,b,d,e){var f=c._engine.ellipse(this,a||0,b||0,d||0,e||0);return this.__set__&&this.__set__.push(f),f},v.path=function(a){a&&!c.is(a,U)&&!c.is(a[0],V)&&(a+=G);var b=c._engine.path(c.format[D](c,arguments),this);return this.__set__&&this.__set__.push(b),b},v.image=function(a,b,d,e,f){var g=c._engine.image(this,a||"about:blank",b||0,d||0,e||0,f||0);return this.__set__&&this.__set__.push(g),g},v.text=function(a,b,d){var e=c._engine.text(this,a||0,b||0,I(d));return this.__set__&&this.__set__.push(e),e},v.set=function(a){!c.is(a,"array")&&(a=Array.prototype.splice.call(arguments,0,arguments.length));var b=new mc(a);return this.__set__&&this.__set__.push(b),b.paper=this,b.type="set",b},v.setStart=function(a){this.__set__=a||this.set()},v.setFinish=function(){var a=this.__set__;return delete this.__set__,a},v.setSize=function(a,b){return c._engine.setSize.call(this,a,b)},v.setViewBox=function(a,b,d,e,f){return c._engine.setViewBox.call(this,a,b,d,e,f)},v.top=v.bottom=null,v.raphael=c;var bc=function(a){var b=a.getBoundingClientRect(),c=a.ownerDocument,d=c.body,e=c.documentElement,f=e.clientTop||d.clientTop||0,g=e.clientLeft||d.clientLeft||0,h=b.top+(A.win.pageYOffset||e.scrollTop||d.scrollTop)-f,i=b.left+(A.win.pageXOffset||e.scrollLeft||d.scrollLeft)-g;return{y:h,x:i}};v.getElementByPoint=function(a,b){var c=this,d=c.canvas,e=A.doc.elementFromPoint(a,b);if(A.win.opera&&"svg"==e.tagName){var f=bc(d),g=d.createSVGRect();g.x=a-f.x,g.y=b-f.y,g.width=g.height=1;var h=d.getIntersectionList(g,null);h.length&&(e=h[h.length-1])}if(!e)return null;for(;e.parentNode&&e!=d.parentNode&&!e.raphael;)e=e.parentNode;return e==c.canvas.parentNode&&(e=d),e=e&&e.raphael?c.getById(e.raphaelid):null},v.getElementsByBBox=function(a){var b=this.set();return this.forEach(function(d){c.isBBoxIntersect(d.getBBox(),a)&&b.push(d)}),b},v.getById=function(a){for(var b=this.bottom;b;){if(b.id==a)return b;b=b.next}return null},v.forEach=function(a,b){for(var c=this.bottom;c;){if(a.call(b,c)===!1)return this;c=c.next}return this},v.getElementsByPoint=function(a,b){var c=this.set();return this.forEach(function(d){d.isPointInside(a,b)&&c.push(d)}),c},$b.isPointInside=function(a,b){var d=this.realPath=qb[this.type](this);return this.attr("transform")&&this.attr("transform").length&&(d=c.transformPath(d,this.attr("transform"))),c.isPointInsidePath(d,a,b)},$b.getBBox=function(a){if(this.removed)return{};var b=this._;return a?((b.dirty||!b.bboxwt)&&(this.realPath=qb[this.type](this),b.bboxwt=Bb(this.realPath),b.bboxwt.toString=p,b.dirty=0),b.bboxwt):((b.dirty||b.dirtyT||!b.bbox)&&((b.dirty||!this.realPath)&&(b.bboxwt=0,this.realPath=qb[this.type](this)),b.bbox=Bb(rb(this.realPath,this.matrix)),b.bbox.toString=p,b.dirty=b.dirtyT=0),b.bbox)},$b.clone=function(){if(this.removed)return null;var a=this.paper[this.type]().attr(this.attr());return this.__set__&&this.__set__.push(a),a},$b.glow=function(a){if("text"==this.type)return null;a=a||{};var b={width:(a.width||10)+(+this.attr("stroke-width")||1),fill:a.fill||!1,opacity:a.opacity||.5,offsetx:a.offsetx||0,offsety:a.offsety||0,color:a.color||"#000"},c=b.width/2,d=this.paper,e=d.set(),f=this.realPath||qb[this.type](this);f=this.matrix?rb(f,this.matrix):f;for(var g=1;c+1>g;g++)e.push(d.path(f).attr({stroke:b.color,fill:b.fill?b.color:"none","stroke-linejoin":"round","stroke-linecap":"round","stroke-width":+(b.width/c*g).toFixed(3),opacity:+(b.opacity/c).toFixed(3)}));return e.insertBefore(this).translate(b.offsetx,b.offsety)};var cc=function(a,b,d,e,f,g,h,i,l){return null==l?j(a,b,d,e,f,g,h,i):c.findDotsAtSegment(a,b,d,e,f,g,h,i,k(a,b,d,e,f,g,h,i,l))},dc=function(a,b){return function(d,e,f){d=Kb(d);for(var g,h,i,j,k,l="",m={},n=0,o=0,p=d.length;p>o;o++){if(i=d[o],"M"==i[0])g=+i[1],h=+i[2];else{if(j=cc(g,h,i[1],i[2],i[3],i[4],i[5],i[6]),n+j>e){if(b&&!m.start){if(k=cc(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),l+=["C"+k.start.x,k.start.y,k.m.x,k.m.y,k.x,k.y],f)return l;m.start=l,l=["M"+k.x,k.y+"C"+k.n.x,k.n.y,k.end.x,k.end.y,i[5],i[6]].join(),n+=j,g=+i[5],h=+i[6];continue}if(!a&&!b)return k=cc(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),{x:k.x,y:k.y,alpha:k.alpha}}n+=j,g=+i[5],h=+i[6]}l+=i.shift()+i}return m.end=l,k=a?n:b?m:c.findDotsAtSegment(g,h,i[0],i[1],i[2],i[3],i[4],i[5],1),k.alpha&&(k={x:k.x,y:k.y,alpha:k.alpha}),k}},ec=dc(1),fc=dc(),gc=dc(0,1);c.getTotalLength=ec,c.getPointAtLength=fc,c.getSubpath=function(a,b,c){if(this.getTotalLength(a)-c<1e-6)return gc(a,b).end;var d=gc(a,c,1);return b?gc(d,b).end:d},$b.getTotalLength=function(){var a=this.getPath();if(a)return this.node.getTotalLength?this.node.getTotalLength():ec(a)},$b.getPointAtLength=function(a){var b=this.getPath();if(b)return fc(b,a)},$b.getPath=function(){var a,b=c._getPath[this.type];if("text"!=this.type&&"set"!=this.type)return b&&(a=b(this)),a},$b.getSubpath=function(a,b){var d=this.getPath();if(d)return c.getSubpath(d,a,b)};var hc=c.easing_formulas={linear:function(a){return a},"<":function(a){return R(a,1.7)},">":function(a){return R(a,.48)},"<>":function(a){var b=.48-a/1.04,c=N.sqrt(.1734+b*b),d=c-b,e=R(Q(d),1/3)*(0>d?-1:1),f=-c-b,g=R(Q(f),1/3)*(0>f?-1:1),h=e+g+.5;return 3*(1-h)*h*h+h*h*h},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a-=1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){return a==!!a?a:R(2,-10*a)*N.sin((a-.075)*2*S/.3)+1},bounce:function(a){var b,c=7.5625,d=2.75;return 1/d>a?b=c*a*a:2/d>a?(a-=1.5/d,b=c*a*a+.75):2.5/d>a?(a-=2.25/d,b=c*a*a+.9375):(a-=2.625/d,b=c*a*a+.984375),b}};hc.easeIn=hc["ease-in"]=hc["<"],hc.easeOut=hc["ease-out"]=hc[">"],hc.easeInOut=hc["ease-in-out"]=hc["<>"],hc["back-in"]=hc.backIn,hc["back-out"]=hc.backOut;var ic=[],jc=a.requestAnimationFrame||a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame||a.msRequestAnimationFrame||function(a){setTimeout(a,16)},kc=function(){for(var a=+new Date,d=0;d<ic.length;d++){var e=ic[d];if(!e.el.removed&&!e.paused){var f,g,h=a-e.start,i=e.ms,j=e.easing,k=e.from,l=e.diff,m=e.to,n=(e.t,e.el),o={},p={};if(e.initstatus?(h=(e.initstatus*e.anim.top-e.prev)/(e.percent-e.prev)*i,e.status=e.initstatus,delete e.initstatus,e.stop&&ic.splice(d--,1)):e.status=(e.prev+(e.percent-e.prev)*(h/i))/e.anim.top,!(0>h))if(i>h){var q=j(h/i);for(var r in k)if(k[z](r)){switch(db[r]){case T:f=+k[r]+q*i*l[r];break;case"colour":f="rgb("+[lc($(k[r].r+q*i*l[r].r)),lc($(k[r].g+q*i*l[r].g)),lc($(k[r].b+q*i*l[r].b))].join(",")+")";break;case"path":f=[];for(var t=0,u=k[r].length;u>t;t++){f[t]=[k[r][t][0]];for(var v=1,w=k[r][t].length;w>v;v++)f[t][v]=+k[r][t][v]+q*i*l[r][t][v];f[t]=f[t].join(H)}f=f.join(H);break;case"transform":if(l[r].real)for(f=[],t=0,u=k[r].length;u>t;t++)for(f[t]=[k[r][t][0]],v=1,w=k[r][t].length;w>v;v++)f[t][v]=k[r][t][v]+q*i*l[r][t][v];else{var x=function(a){return+k[r][a]+q*i*l[r][a]};f=[["m",x(0),x(1),x(2),x(3),x(4),x(5)]]}break;case"csv":if("clip-rect"==r)for(f=[],t=4;t--;)f[t]=+k[r][t]+q*i*l[r][t];break;default:var y=[][E](k[r]);for(f=[],t=n.paper.customAttributes[r].length;t--;)f[t]=+y[t]+q*i*l[r][t]}o[r]=f}n.attr(o),function(a,c,d){setTimeout(function(){b("raphael.anim.frame."+a,c,d)})}(n.id,n,e.anim)}else{if(function(a,d,e){setTimeout(function(){b("raphael.anim.frame."+d.id,d,e),b("raphael.anim.finish."+d.id,d,e),c.is(a,"function")&&a.call(d)})}(e.callback,n,e.anim),n.attr(m),ic.splice(d--,1),e.repeat>1&&!e.next){for(g in m)m[z](g)&&(p[g]=e.totalOrigin[g]);e.el.attr(p),s(e.anim,e.el,e.anim.percents[0],null,e.totalOrigin,e.repeat-1)}e.next&&!e.stop&&s(e.anim,e.el,e.next,null,e.totalOrigin,e.repeat)}}}c.svg&&n&&n.paper&&n.paper.safari(),ic.length&&jc(kc)},lc=function(a){return a>255?255:0>a?0:a};$b.animateWith=function(a,b,d,e,f,g){var h=this;if(h.removed)return g&&g.call(h),h;var i=d instanceof r?d:c.animation(d,e,f,g);s(i,h,i.percents[0],null,h.attr());for(var j=0,k=ic.length;k>j;j++)if(ic[j].anim==b&&ic[j].el==a){ic[k-1].start=ic[j].start;break}return h},$b.onAnimation=function(a){return a?b.on("raphael.anim.frame."+this.id,a):b.unbind("raphael.anim.frame."+this.id),this},r.prototype.delay=function(a){var b=new r(this.anim,this.ms);return b.times=this.times,b.del=+a||0,b},r.prototype.repeat=function(a){var b=new r(this.anim,this.ms);return b.del=this.del,b.times=N.floor(O(a,0))||1,b},c.animation=function(a,b,d,e){if(a instanceof r)return a;(c.is(d,"function")||!d)&&(e=e||d||null,d=null),a=Object(a),b=+b||0;var f,g,h={};for(g in a)a[z](g)&&_(g)!=g&&_(g)+"%"!=g&&(f=!0,h[g]=a[g]);return f?(d&&(h.easing=d),e&&(h.callback=e),new r({100:h},b)):new r(a,b)},$b.animate=function(a,b,d,e){var f=this;if(f.removed)return e&&e.call(f),f;var g=a instanceof r?a:c.animation(a,b,d,e);return s(g,f,g.percents[0],null,f.attr()),f},$b.setTime=function(a,b){return a&&null!=b&&this.status(a,P(b,a.ms)/a.ms),this},$b.status=function(a,b){var c,d,e=[],f=0;if(null!=b)return s(a,this,-1,P(b,1)),this;for(c=ic.length;c>f;f++)if(d=ic[f],d.el.id==this.id&&(!a||d.anim==a)){if(a)return d.status;e.push({anim:d.anim,status:d.status})}return a?0:e},$b.pause=function(a){for(var c=0;c<ic.length;c++)ic[c].el.id!=this.id||a&&ic[c].anim!=a||b("raphael.anim.pause."+this.id,this,ic[c].anim)!==!1&&(ic[c].paused=!0);return this},$b.resume=function(a){for(var c=0;c<ic.length;c++)if(ic[c].el.id==this.id&&(!a||ic[c].anim==a)){var d=ic[c];b("raphael.anim.resume."+this.id,this,d.anim)!==!1&&(delete d.paused,this.status(d.anim,d.status))}return this},$b.stop=function(a){for(var c=0;c<ic.length;c++)ic[c].el.id!=this.id||a&&ic[c].anim!=a||b("raphael.anim.stop."+this.id,this,ic[c].anim)!==!1&&ic.splice(c--,1);return this},b.on("raphael.remove",t),b.on("raphael.clear",t),$b.toString=function(){return"Raphaëlâs object"};var mc=function(a){if(this.items=[],this.length=0,this.type="set",a)for(var b=0,c=a.length;c>b;b++)!a[b]||a[b].constructor!=$b.constructor&&a[b].constructor!=mc||(this[this.items.length]=this.items[this.items.length]=a[b],this.length++)},nc=mc.prototype;nc.push=function(){for(var a,b,c=0,d=arguments.length;d>c;c++)a=arguments[c],!a||a.constructor!=$b.constructor&&a.constructor!=mc||(b=this.items.length,this[b]=this.items[b]=a,this.length++);return this},nc.pop=function(){return this.length&&delete this[this.length--],this.items.pop()},nc.forEach=function(a,b){for(var c=0,d=this.items.length;d>c;c++)if(a.call(b,this.items[c],c)===!1)return this;return this};for(var oc in $b)$b[z](oc)&&(nc[oc]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a][D](c,b)})}}(oc));return nc.attr=function(a,b){if(a&&c.is(a,V)&&c.is(a[0],"object"))for(var d=0,e=a.length;e>d;d++)this.items[d].attr(a[d]);else for(var f=0,g=this.items.length;g>f;f++)this.items[f].attr(a,b);return this},nc.clear=function(){for(;this.length;)this.pop()},nc.splice=function(a,b){a=0>a?O(this.length+a,0):a,b=O(0,P(this.length-a,b));var c,d=[],e=[],f=[];for(c=2;c<arguments.length;c++)f.push(arguments[c]);for(c=0;b>c;c++)e.push(this[a+c]);for(;c<this.length-a;c++)d.push(this[a+c]);var g=f.length;for(c=0;c<g+d.length;c++)this.items[a+c]=this[a+c]=g>c?f[c]:d[c-g];for(c=this.items.length=this.length-=b-g;this[c];)delete this[c++];return new mc(e)},nc.exclude=function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]==a)return this.splice(b,1),!0},nc.animate=function(a,b,d,e){(c.is(d,"function")||!d)&&(e=d||null);var f,g,h=this.items.length,i=h,j=this;if(!h)return this;e&&(g=function(){!--h&&e.call(j)}),d=c.is(d,U)?d:g;var k=c.animation(a,b,d,g);for(f=this.items[--i].animate(k);i--;)this.items[i]&&!this.items[i].removed&&this.items[i].animateWith(f,k,k),this.items[i]&&!this.items[i].removed||h--;return this},nc.insertAfter=function(a){for(var b=this.items.length;b--;)this.items[b].insertAfter(a);return this},nc.getBBox=function(){for(var a=[],b=[],c=[],d=[],e=this.items.length;e--;)if(!this.items[e].removed){var f=this.items[e].getBBox();a.push(f.x),b.push(f.y),c.push(f.x+f.width),d.push(f.y+f.height)}return a=P[D](0,a),b=P[D](0,b),c=O[D](0,c),d=O[D](0,d),{x:a,y:b,x2:c,y2:d,width:c-a,height:d-b}},nc.clone=function(a){a=this.paper.set();for(var b=0,c=this.items.length;c>b;b++)a.push(this.items[b].clone());return a},nc.toString=function(){return"Raphaëlâs set"},nc.glow=function(a){var b=this.paper.set();return this.forEach(function(c){var d=c.glow(a);null!=d&&d.forEach(function(a){b.push(a)})}),b},nc.isPointInside=function(a,b){var c=!1;return this.forEach(function(d){return d.isPointInside(a,b)?(console.log("runned"),c=!0,!1):void 0}),c},c.registerFont=function(a){if(!a.face)return a;this.fonts=this.fonts||{};var b={w:a.w,face:{},glyphs:{}},c=a.face["font-family"];for(var d in a.face)a.face[z](d)&&(b.face[d]=a.face[d]);if(this.fonts[c]?this.fonts[c].push(b):this.fonts[c]=[b],!a.svg){b.face["units-per-em"]=ab(a.face["units-per-em"],10);for(var e in a.glyphs)if(a.glyphs[z](e)){var f=a.glyphs[e];if(b.glyphs[e]={w:f.w,k:{},d:f.d&&"M"+f.d.replace(/[mlcxtrv]/g,function(a){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[a]||"M"})+"z"},f.k)for(var g in f.k)f[z](g)&&(b.glyphs[e].k[g]=f.k[g])}}return a},v.getFont=function(a,b,d,e){if(e=e||"normal",d=d||"normal",b=+b||{normal:400,bold:700,lighter:300,bolder:800}[b]||400,c.fonts){var f=c.fonts[a];if(!f){var g=new RegExp("(^|\\s)"+a.replace(/[^\w\d\s+!~.:_-]/g,G)+"(\\s|$)","i");for(var h in c.fonts)if(c.fonts[z](h)&&g.test(h)){f=c.fonts[h];break}}var i;if(f)for(var j=0,k=f.length;k>j&&(i=f[j],i.face["font-weight"]!=b||i.face["font-style"]!=d&&i.face["font-style"]||i.face["font-stretch"]!=e);j++);return i}},v.print=function(a,b,d,e,f,g,h,i){g=g||"middle",h=O(P(h||0,1),-1),i=O(P(i||1,3),1);var j,k=I(d)[J](G),l=0,m=0,n=G;if(c.is(e,"string")&&(e=this.getFont(e)),e){j=(f||16)/e.face["units-per-em"];for(var o=e.face.bbox[J](w),p=+o[0],q=o[3]-o[1],r=0,s=+o[1]+("baseline"==g?q+ +e.face.descent:q/2),t=0,u=k.length;u>t;t++){if("\n"==k[t])l=0,x=0,m=0,r+=q*i;else{var v=m&&e.glyphs[k[t-1]]||{},x=e.glyphs[k[t]];l+=m?(v.w||e.w)+(v.k&&v.k[k[t]]||0)+e.w*h:0,m=1}x&&x.d&&(n+=c.transformPath(x.d,["t",l*j,r*j,"s",j,j,p,s,"t",(a-p)/j,(b-s)/j]))}}return this.path(n).attr({fill:"#000",stroke:"none"})},v.add=function(a){if(c.is(a,"array"))for(var b,d=this.set(),e=0,f=a.length;f>e;e++)b=a[e]||{},x[z](b.type)&&d.push(this[b.type]().attr(b));return d},c.format=function(a,b){var d=c.is(b,V)?[0][E](b):arguments;return a&&c.is(a,U)&&d.length-1&&(a=a.replace(y,function(a,b){return null==d[++b]?G:d[b]})),a||G},c.fullfill=function(){var a=/\{([^\}]+)\}/g,b=/(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g,c=function(a,c,d){var e=d;return c.replace(b,function(a,b,c,d,f){b=b||d,e&&(b in e&&(e=e[b]),"function"==typeof e&&f&&(e=e()))}),e=(null==e||e==d?a:e)+""};return function(b,d){return String(b).replace(a,function(a,b){return c(a,b,d)})}}(),c.ninja=function(){return B.was?A.win.Raphael=B.is:delete Raphael,c},c.st=nc,function(a,b,d){function e(){/in/.test(a.readyState)?setTimeout(e,9):c.eve("raphael.DOMload")}null==a.readyState&&a.addEventListener&&(a.addEventListener(b,d=function(){a.removeEventListener(b,d,!1),a.readyState="complete"},!1),a.readyState="loading"),e()}(document,"DOMContentLoaded"),b.on("raphael.DOMload",function(){u=!0}),function(){if(c.svg){var a="hasOwnProperty",b=String,d=parseFloat,e=parseInt,f=Math,g=f.max,h=f.abs,i=f.pow,j=/[, ]+/,k=c.eve,l="",m=" ",n="http://www.w3.org/1999/xlink",o={block:"M5,0 0,2.5 5,5z",classic:"M5,0 0,2.5 5,5 3.5,3 3.5,2z",diamond:"M2.5,0 5,2.5 2.5,5 0,2.5z",open:"M6,1 1,3.5 6,6",oval:"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z"},p={};c.toString=function(){return"Your browser supports SVG.\nYou are running Raphaël "+this.version};var q=function(d,e){if(e){"string"==typeof d&&(d=q(d));for(var f in e)e[a](f)&&("xlink:"==f.substring(0,6)?d.setAttributeNS(n,f.substring(6),b(e[f])):d.setAttribute(f,b(e[f])))}else d=c._g.doc.createElementNS("http://www.w3.org/2000/svg",d),d.style&&(d.style.webkitTapHighlightColor="rgba(0,0,0,0)");return d},r=function(a,e){var j="linear",k=a.id+e,m=.5,n=.5,o=a.node,p=a.paper,r=o.style,s=c._g.doc.getElementById(k);if(!s){if(e=b(e).replace(c._radial_gradient,function(a,b,c){if(j="radial",b&&c){m=d(b),n=d(c);var e=2*(n>.5)-1;i(m-.5,2)+i(n-.5,2)>.25&&(n=f.sqrt(.25-i(m-.5,2))*e+.5)&&.5!=n&&(n=n.toFixed(5)-1e-5*e)}return l}),e=e.split(/\s*\-\s*/),"linear"==j){var t=e.shift();if(t=-d(t),isNaN(t))return null;var u=[0,0,f.cos(c.rad(t)),f.sin(c.rad(t))],v=1/(g(h(u[2]),h(u[3]))||1);u[2]*=v,u[3]*=v,u[2]<0&&(u[0]=-u[2],u[2]=0),u[3]<0&&(u[1]=-u[3],u[3]=0)}var w=c._parseDots(e);if(!w)return null;if(k=k.replace(/[\(\)\s,\xb0#]/g,"_"),a.gradient&&k!=a.gradient.id&&(p.defs.removeChild(a.gradient),delete a.gradient),!a.gradient){s=q(j+"Gradient",{id:k}),a.gradient=s,q(s,"radial"==j?{fx:m,fy:n}:{x1:u[0],y1:u[1],x2:u[2],y2:u[3],gradientTransform:a.matrix.invert()}),p.defs.appendChild(s);for(var x=0,y=w.length;y>x;x++)s.appendChild(q("stop",{offset:w[x].offset?w[x].offset:x?"100%":"0%","stop-color":w[x].color||"#fff"}))}}return q(o,{fill:"url(#"+k+")",opacity:1,"fill-opacity":1}),r.fill=l,r.opacity=1,r.fillOpacity=1,1},s=function(a){var b=a.getBBox(1);q(a.pattern,{patternTransform:a.matrix.invert()+" translate("+b.x+","+b.y+")"})},t=function(d,e,f){if("path"==d.type){for(var g,h,i,j,k,m=b(e).toLowerCase().split("-"),n=d.paper,r=f?"end":"start",s=d.node,t=d.attrs,u=t["stroke-width"],v=m.length,w="classic",x=3,y=3,z=5;v--;)switch(m[v]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":w=m[v];break;case"wide":y=5;break;case"narrow":y=2;break;case"long":x=5;break;case"short":x=2}if("open"==w?(x+=2,y+=2,z+=2,i=1,j=f?4:1,k={fill:"none",stroke:t.stroke}):(j=i=x/2,k={fill:t.stroke,stroke:"none"}),d._.arrows?f?(d._.arrows.endPath&&p[d._.arrows.endPath]--,d._.arrows.endMarker&&p[d._.arrows.endMarker]--):(d._.arrows.startPath&&p[d._.arrows.startPath]--,d._.arrows.startMarker&&p[d._.arrows.startMarker]--):d._.arrows={},"none"!=w){var A="raphael-marker-"+w,B="raphael-marker-"+r+w+x+y;c._g.doc.getElementById(A)?p[A]++:(n.defs.appendChild(q(q("path"),{"stroke-linecap":"round",d:o[w],id:A})),p[A]=1);var C,D=c._g.doc.getElementById(B);D?(p[B]++,C=D.getElementsByTagName("use")[0]):(D=q(q("marker"),{id:B,markerHeight:y,markerWidth:x,orient:"auto",refX:j,refY:y/2}),C=q(q("use"),{"xlink:href":"#"+A,transform:(f?"rotate(180 "+x/2+" "+y/2+") ":l)+"scale("+x/z+","+y/z+")","stroke-width":(1/((x/z+y/z)/2)).toFixed(4)}),D.appendChild(C),n.defs.appendChild(D),p[B]=1),q(C,k);var E=i*("diamond"!=w&&"oval"!=w);f?(g=d._.arrows.startdx*u||0,h=c.getTotalLength(t.path)-E*u):(g=E*u,h=c.getTotalLength(t.path)-(d._.arrows.enddx*u||0)),k={},k["marker-"+r]="url(#"+B+")",(h||g)&&(k.d=c.getSubpath(t.path,g,h)),q(s,k),d._.arrows[r+"Path"]=A,d._.arrows[r+"Marker"]=B,d._.arrows[r+"dx"]=E,d._.arrows[r+"Type"]=w,d._.arrows[r+"String"]=e}else f?(g=d._.arrows.startdx*u||0,h=c.getTotalLength(t.path)-g):(g=0,h=c.getTotalLength(t.path)-(d._.arrows.enddx*u||0)),d._.arrows[r+"Path"]&&q(s,{d:c.getSubpath(t.path,g,h)}),delete d._.arrows[r+"Path"],delete d._.arrows[r+"Marker"],delete d._.arrows[r+"dx"],delete d._.arrows[r+"Type"],delete d._.arrows[r+"String"];for(k in p)if(p[a](k)&&!p[k]){var F=c._g.doc.getElementById(k);F&&F.parentNode.removeChild(F)}}},u={"":[0],none:[0],"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},v=function(a,c,d){if(c=u[b(c).toLowerCase()]){for(var e=a.attrs["stroke-width"]||"1",f={round:e,square:e,butt:0}[a.attrs["stroke-linecap"]||d["stroke-linecap"]]||0,g=[],h=c.length;h--;)g[h]=c[h]*e+(h%2?1:-1)*f;q(a.node,{"stroke-dasharray":g.join(",")})}},w=function(d,f){var i=d.node,k=d.attrs,m=i.style.visibility;i.style.visibility="hidden";for(var o in f)if(f[a](o)){if(!c._availableAttrs[a](o))continue;var p=f[o];switch(k[o]=p,o){case"blur":d.blur(p);break;case"href":case"title":var u=q("title"),w=c._g.doc.createTextNode(p);u.appendChild(w),i.appendChild(u);break;case"target":var x=i.parentNode;if("a"!=x.tagName.toLowerCase()){var u=q("a");x.insertBefore(u,i),u.appendChild(i),x=u}"target"==o?x.setAttributeNS(n,"show","blank"==p?"new":p):x.setAttributeNS(n,o,p);break;case"cursor":i.style.cursor=p;break;case"transform":d.transform(p);break;case"arrow-start":t(d,p);break;case"arrow-end":t(d,p,1);break;case"clip-rect":var z=b(p).split(j);if(4==z.length){d.clip&&d.clip.parentNode.parentNode.removeChild(d.clip.parentNode);var A=q("clipPath"),B=q("rect");A.id=c.createUUID(),q(B,{x:z[0],y:z[1],width:z[2],height:z[3]}),A.appendChild(B),d.paper.defs.appendChild(A),q(i,{"clip-path":"url(#"+A.id+")"}),d.clip=B}if(!p){var C=i.getAttribute("clip-path");if(C){var D=c._g.doc.getElementById(C.replace(/(^url\(#|\)$)/g,l));D&&D.parentNode.removeChild(D),q(i,{"clip-path":l}),delete d.clip}}break;case"path":"path"==d.type&&(q(i,{d:p?k.path=c._pathToAbsolute(p):"M0,0"}),d._.dirty=1,d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1)));break;case"width":if(i.setAttribute(o,p),d._.dirty=1,!k.fx)break;o="x",p=k.x;case"x":k.fx&&(p=-k.x-(k.width||0));case"rx":if("rx"==o&&"rect"==d.type)break;case"cx":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case"height":if(i.setAttribute(o,p),d._.dirty=1,!k.fy)break;o="y",p=k.y;case"y":k.fy&&(p=-k.y-(k.height||0));case"ry":if("ry"==o&&"rect"==d.type)break;case"cy":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case"r":"rect"==d.type?q(i,{rx:p,ry:p}):i.setAttribute(o,p),d._.dirty=1;break;case"src":"image"==d.type&&i.setAttributeNS(n,"href",p);break;case"stroke-width":(1!=d._.sx||1!=d._.sy)&&(p/=g(h(d._.sx),h(d._.sy))||1),d.paper._vbSize&&(p*=d.paper._vbSize),i.setAttribute(o,p),k["stroke-dasharray"]&&v(d,k["stroke-dasharray"],f),d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"stroke-dasharray":v(d,p,f);break;case"fill":var E=b(p).match(c._ISURL);if(E){A=q("pattern");var F=q("image");A.id=c.createUUID(),q(A,{x:0,y:0,patternUnits:"userSpaceOnUse",height:1,width:1}),q(F,{x:0,y:0,"xlink:href":E[1]}),A.appendChild(F),function(a){c._preload(E[1],function(){var b=this.offsetWidth,c=this.offsetHeight;q(a,{width:b,height:c}),q(F,{width:b,height:c}),d.paper.safari()})}(A),d.paper.defs.appendChild(A),q(i,{fill:"url(#"+A.id+")"}),d.pattern=A,d.pattern&&s(d);break}var G=c.getRGB(p);if(G.error){if(("circle"==d.type||"ellipse"==d.type||"r"!=b(p).charAt())&&r(d,p)){if("opacity"in k||"fill-opacity"in k){var H=c._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l));if(H){var I=H.getElementsByTagName("stop");q(I[I.length-1],{"stop-opacity":("opacity"in k?k.opacity:1)*("fill-opacity"in k?k["fill-opacity"]:1)})}}k.gradient=p,k.fill="none";break}}else delete f.gradient,delete k.gradient,!c.is(k.opacity,"undefined")&&c.is(f.opacity,"undefined")&&q(i,{opacity:k.opacity}),!c.is(k["fill-opacity"],"undefined")&&c.is(f["fill-opacity"],"undefined")&&q(i,{"fill-opacity":k["fill-opacity"]});G[a]("opacity")&&q(i,{"fill-opacity":G.opacity>1?G.opacity/100:G.opacity});case"stroke":G=c.getRGB(p),i.setAttribute(o,G.hex),"stroke"==o&&G[a]("opacity")&&q(i,{"stroke-opacity":G.opacity>1?G.opacity/100:G.opacity}),"stroke"==o&&d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"gradient":("circle"==d.type||"ellipse"==d.type||"r"!=b(p).charAt())&&r(d,p);break;case"opacity":k.gradient&&!k[a]("stroke-opacity")&&q(i,{"stroke-opacity":p>1?p/100:p});case"fill-opacity":if(k.gradient){H=c._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l)),H&&(I=H.getElementsByTagName("stop"),q(I[I.length-1],{"stop-opacity":p}));break}default:"font-size"==o&&(p=e(p,10)+"px");var J=o.replace(/(\-.)/g,function(a){return a.substring(1).toUpperCase()});i.style[J]=p,d._.dirty=1,i.setAttribute(o,p)}}y(d,f),i.style.visibility=m},x=1.2,y=function(d,f){if("text"==d.type&&(f[a]("text")||f[a]("font")||f[a]("font-size")||f[a]("x")||f[a]("y"))){var g=d.attrs,h=d.node,i=h.firstChild?e(c._g.doc.defaultView.getComputedStyle(h.firstChild,l).getPropertyValue("font-size"),10):10; -if(f[a]("text")){for(g.text=f.text;h.firstChild;)h.removeChild(h.firstChild);for(var j,k=b(f.text).split("\n"),m=[],n=0,o=k.length;o>n;n++)j=q("tspan"),n&&q(j,{dy:i*x,x:g.x}),j.appendChild(c._g.doc.createTextNode(k[n])),h.appendChild(j),m[n]=j}else for(m=h.getElementsByTagName("tspan"),n=0,o=m.length;o>n;n++)n?q(m[n],{dy:i*x,x:g.x}):q(m[0],{dy:0});q(h,{x:g.x,y:g.y}),d._.dirty=1;var p=d._getBBox(),r=g.y-(p.y+p.height/2);r&&c.is(r,"finite")&&q(m[0],{dy:r})}},z=function(a,b){this[0]=this.node=a,a.raphael=!0,this.id=c._oid++,a.raphaelid=this.id,this.matrix=c.matrix(),this.realPath=null,this.paper=b,this.attrs=this.attrs||{},this._={transform:[],sx:1,sy:1,deg:0,dx:0,dy:0,dirty:1},!b.bottom&&(b.bottom=this),this.prev=b.top,b.top&&(b.top.next=this),b.top=this,this.next=null},A=c.el;z.prototype=A,A.constructor=z,c._engine.path=function(a,b){var c=q("path");b.canvas&&b.canvas.appendChild(c);var d=new z(c,b);return d.type="path",w(d,{fill:"none",stroke:"#000",path:a}),d},A.rotate=function(a,c,e){if(this.removed)return this;if(a=b(a).split(j),a.length-1&&(c=d(a[1]),e=d(a[2])),a=d(a[0]),null==e&&(c=e),null==c||null==e){var f=this.getBBox(1);c=f.x+f.width/2,e=f.y+f.height/2}return this.transform(this._.transform.concat([["r",a,c,e]])),this},A.scale=function(a,c,e,f){if(this.removed)return this;if(a=b(a).split(j),a.length-1&&(c=d(a[1]),e=d(a[2]),f=d(a[3])),a=d(a[0]),null==c&&(c=a),null==f&&(e=f),null==e||null==f)var g=this.getBBox(1);return e=null==e?g.x+g.width/2:e,f=null==f?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,c,e,f]])),this},A.translate=function(a,c){return this.removed?this:(a=b(a).split(j),a.length-1&&(c=d(a[1])),a=d(a[0])||0,c=+c||0,this.transform(this._.transform.concat([["t",a,c]])),this)},A.transform=function(b){var d=this._;if(null==b)return d.transform;if(c._extractTransform(this,b),this.clip&&q(this.clip,{transform:this.matrix.invert()}),this.pattern&&s(this),this.node&&q(this.node,{transform:this.matrix}),1!=d.sx||1!=d.sy){var e=this.attrs[a]("stroke-width")?this.attrs["stroke-width"]:1;this.attr({"stroke-width":e})}return this},A.hide=function(){return!this.removed&&this.paper.safari(this.node.style.display="none"),this},A.show=function(){return!this.removed&&this.paper.safari(this.node.style.display=""),this},A.remove=function(){if(!this.removed&&this.node.parentNode){var a=this.paper;a.__set__&&a.__set__.exclude(this),k.unbind("raphael.*.*."+this.id),this.gradient&&a.defs.removeChild(this.gradient),c._tear(this,a),"a"==this.node.parentNode.tagName.toLowerCase()?this.node.parentNode.parentNode.removeChild(this.node.parentNode):this.node.parentNode.removeChild(this.node);for(var b in this)this[b]="function"==typeof this[b]?c._removedFactory(b):null;this.removed=!0}},A._getBBox=function(){if("none"==this.node.style.display){this.show();var a=!0}var b={};try{b=this.node.getBBox()}catch(c){}finally{b=b||{}}return a&&this.hide(),b},A.attr=function(b,d){if(this.removed)return this;if(null==b){var e={};for(var f in this.attrs)this.attrs[a](f)&&(e[f]=this.attrs[f]);return e.gradient&&"none"==e.fill&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform,e}if(null==d&&c.is(b,"string")){if("fill"==b&&"none"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;if("transform"==b)return this._.transform;for(var g=b.split(j),h={},i=0,l=g.length;l>i;i++)b=g[i],h[b]=b in this.attrs?this.attrs[b]:c.is(this.paper.customAttributes[b],"function")?this.paper.customAttributes[b].def:c._availableAttrs[b];return l-1?h:h[g[0]]}if(null==d&&c.is(b,"array")){for(h={},i=0,l=b.length;l>i;i++)h[b[i]]=this.attr(b[i]);return h}if(null!=d){var m={};m[b]=d}else null!=b&&c.is(b,"object")&&(m=b);for(var n in m)k("raphael.attr."+n+"."+this.id,this,m[n]);for(n in this.paper.customAttributes)if(this.paper.customAttributes[a](n)&&m[a](n)&&c.is(this.paper.customAttributes[n],"function")){var o=this.paper.customAttributes[n].apply(this,[].concat(m[n]));this.attrs[n]=m[n];for(var p in o)o[a](p)&&(m[p]=o[p])}return w(this,m),this},A.toFront=function(){if(this.removed)return this;"a"==this.node.parentNode.tagName.toLowerCase()?this.node.parentNode.parentNode.appendChild(this.node.parentNode):this.node.parentNode.appendChild(this.node);var a=this.paper;return a.top!=this&&c._tofront(this,a),this},A.toBack=function(){if(this.removed)return this;var a=this.node.parentNode;return"a"==a.tagName.toLowerCase()?a.parentNode.insertBefore(this.node.parentNode,this.node.parentNode.parentNode.firstChild):a.firstChild!=this.node&&a.insertBefore(this.node,this.node.parentNode.firstChild),c._toback(this,this.paper),this.paper,this},A.insertAfter=function(a){if(this.removed)return this;var b=a.node||a[a.length-1].node;return b.nextSibling?b.parentNode.insertBefore(this.node,b.nextSibling):b.parentNode.appendChild(this.node),c._insertafter(this,a,this.paper),this},A.insertBefore=function(a){if(this.removed)return this;var b=a.node||a[0].node;return b.parentNode.insertBefore(this.node,b),c._insertbefore(this,a,this.paper),this},A.blur=function(a){var b=this;if(0!==+a){var d=q("filter"),e=q("feGaussianBlur");b.attrs.blur=a,d.id=c.createUUID(),q(e,{stdDeviation:+a||1.5}),d.appendChild(e),b.paper.defs.appendChild(d),b._blur=d,q(b.node,{filter:"url(#"+d.id+")"})}else b._blur&&(b._blur.parentNode.removeChild(b._blur),delete b._blur,delete b.attrs.blur),b.node.removeAttribute("filter");return b},c._engine.circle=function(a,b,c,d){var e=q("circle");a.canvas&&a.canvas.appendChild(e);var f=new z(e,a);return f.attrs={cx:b,cy:c,r:d,fill:"none",stroke:"#000"},f.type="circle",q(e,f.attrs),f},c._engine.rect=function(a,b,c,d,e,f){var g=q("rect");a.canvas&&a.canvas.appendChild(g);var h=new z(g,a);return h.attrs={x:b,y:c,width:d,height:e,r:f||0,rx:f||0,ry:f||0,fill:"none",stroke:"#000"},h.type="rect",q(g,h.attrs),h},c._engine.ellipse=function(a,b,c,d,e){var f=q("ellipse");a.canvas&&a.canvas.appendChild(f);var g=new z(f,a);return g.attrs={cx:b,cy:c,rx:d,ry:e,fill:"none",stroke:"#000"},g.type="ellipse",q(f,g.attrs),g},c._engine.image=function(a,b,c,d,e,f){var g=q("image");q(g,{x:c,y:d,width:e,height:f,preserveAspectRatio:"none"}),g.setAttributeNS(n,"href",b),a.canvas&&a.canvas.appendChild(g);var h=new z(g,a);return h.attrs={x:c,y:d,width:e,height:f,src:b},h.type="image",h},c._engine.text=function(a,b,d,e){var f=q("text");a.canvas&&a.canvas.appendChild(f);var g=new z(f,a);return g.attrs={x:b,y:d,"text-anchor":"middle",text:e,font:c._availableAttrs.font,stroke:"none",fill:"#000"},g.type="text",w(g,g.attrs),g},c._engine.setSize=function(a,b){return this.width=a||this.width,this.height=b||this.height,this.canvas.setAttribute("width",this.width),this.canvas.setAttribute("height",this.height),this._viewBox&&this.setViewBox.apply(this,this._viewBox),this},c._engine.create=function(){var a=c._getContainer.apply(0,arguments),b=a&&a.container,d=a.x,e=a.y,f=a.width,g=a.height;if(!b)throw new Error("SVG container not found.");var h,i=q("svg"),j="overflow:hidden;";return d=d||0,e=e||0,f=f||512,g=g||342,q(i,{height:g,version:1.1,width:f,xmlns:"http://www.w3.org/2000/svg"}),1==b?(i.style.cssText=j+"position:absolute;left:"+d+"px;top:"+e+"px",c._g.doc.body.appendChild(i),h=1):(i.style.cssText=j+"position:relative",b.firstChild?b.insertBefore(i,b.firstChild):b.appendChild(i)),b=new c._Paper,b.width=f,b.height=g,b.canvas=i,b.clear(),b._left=b._top=0,h&&(b.renderfix=function(){}),b.renderfix(),b},c._engine.setViewBox=function(a,b,c,d,e){k("raphael.setViewBox",this,this._viewBox,[a,b,c,d,e]);var f,h,i=g(c/this.width,d/this.height),j=this.top,l=e?"meet":"xMinYMin";for(null==a?(this._vbSize&&(i=1),delete this._vbSize,f="0 0 "+this.width+m+this.height):(this._vbSize=i,f=a+m+b+m+c+m+d),q(this.canvas,{viewBox:f,preserveAspectRatio:l});i&&j;)h="stroke-width"in j.attrs?j.attrs["stroke-width"]:1,j.attr({"stroke-width":h}),j._.dirty=1,j._.dirtyT=1,j=j.prev;return this._viewBox=[a,b,c,d,!!e],this},c.prototype.renderfix=function(){var a,b=this.canvas,c=b.style;try{a=b.getScreenCTM()||b.createSVGMatrix()}catch(d){a=b.createSVGMatrix()}var e=-a.e%1,f=-a.f%1;(e||f)&&(e&&(this._left=(this._left+e)%1,c.left=this._left+"px"),f&&(this._top=(this._top+f)%1,c.top=this._top+"px"))},c.prototype.clear=function(){c.eve("raphael.clear",this);for(var a=this.canvas;a.firstChild;)a.removeChild(a.firstChild);this.bottom=this.top=null,(this.desc=q("desc")).appendChild(c._g.doc.createTextNode("Created with Raphaël "+c.version)),a.appendChild(this.desc),a.appendChild(this.defs=q("defs"))},c.prototype.remove=function(){k("raphael.remove",this),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]="function"==typeof this[a]?c._removedFactory(a):null};var B=c.st;for(var C in A)A[a](C)&&!B[a](C)&&(B[C]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(C))}}(),function(){if(c.vml){var a="hasOwnProperty",b=String,d=parseFloat,e=Math,f=e.round,g=e.max,h=e.min,i=e.abs,j="fill",k=/[, ]+/,l=c.eve,m=" progid:DXImageTransform.Microsoft",n=" ",o="",p={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},q=/([clmz]),?([^clmz]*)/gi,r=/ progid:\S+Blur\([^\)]+\)/g,s=/-?[^,\s-]+/g,t="position:absolute;left:0;top:0;width:1px;height:1px",u=21600,v={path:1,rect:1,image:1},w={circle:1,ellipse:1},x=function(a){var d=/[ahqstv]/gi,e=c._pathToAbsolute;if(b(a).match(d)&&(e=c._path2curve),d=/[clmz]/g,e==c._pathToAbsolute&&!b(a).match(d)){var g=b(a).replace(q,function(a,b,c){var d=[],e="m"==b.toLowerCase(),g=p[b];return c.replace(s,function(a){e&&2==d.length&&(g+=d+p["m"==b?"l":"L"],d=[]),d.push(f(a*u))}),g+d});return g}var h,i,j=e(a);g=[];for(var k=0,l=j.length;l>k;k++){h=j[k],i=j[k][0].toLowerCase(),"z"==i&&(i="x");for(var m=1,r=h.length;r>m;m++)i+=f(h[m]*u)+(m!=r-1?",":o);g.push(i)}return g.join(n)},y=function(a,b,d){var e=c.matrix();return e.rotate(-a,.5,.5),{dx:e.x(b,d),dy:e.y(b,d)}},z=function(a,b,c,d,e,f){var g=a._,h=a.matrix,k=g.fillpos,l=a.node,m=l.style,o=1,p="",q=u/b,r=u/c;if(m.visibility="hidden",b&&c){if(l.coordsize=i(q)+n+i(r),m.rotation=f*(0>b*c?-1:1),f){var s=y(f,d,e);d=s.dx,e=s.dy}if(0>b&&(p+="x"),0>c&&(p+=" y")&&(o=-1),m.flip=p,l.coordorigin=d*-q+n+e*-r,k||g.fillsize){var t=l.getElementsByTagName(j);t=t&&t[0],l.removeChild(t),k&&(s=y(f,h.x(k[0],k[1]),h.y(k[0],k[1])),t.position=s.dx*o+n+s.dy*o),g.fillsize&&(t.size=g.fillsize[0]*i(b)+n+g.fillsize[1]*i(c)),l.appendChild(t)}m.visibility="visible"}};c.toString=function(){return"Your browser doesnât support SVG. Falling down to VML.\nYou are running Raphaël "+this.version};var A=function(a,c,d){for(var e=b(c).toLowerCase().split("-"),f=d?"end":"start",g=e.length,h="classic",i="medium",j="medium";g--;)switch(e[g]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":h=e[g];break;case"wide":case"narrow":j=e[g];break;case"long":case"short":i=e[g]}var k=a.node.getElementsByTagName("stroke")[0];k[f+"arrow"]=h,k[f+"arrowlength"]=i,k[f+"arrowwidth"]=j},B=function(e,i){e.attrs=e.attrs||{};var l=e.node,m=e.attrs,p=l.style,q=v[e.type]&&(i.x!=m.x||i.y!=m.y||i.width!=m.width||i.height!=m.height||i.cx!=m.cx||i.cy!=m.cy||i.rx!=m.rx||i.ry!=m.ry||i.r!=m.r),r=w[e.type]&&(m.cx!=i.cx||m.cy!=i.cy||m.r!=i.r||m.rx!=i.rx||m.ry!=i.ry),s=e;for(var t in i)i[a](t)&&(m[t]=i[t]);if(q&&(m.path=c._getPath[e.type](e),e._.dirty=1),i.href&&(l.href=i.href),i.title&&(l.title=i.title),i.target&&(l.target=i.target),i.cursor&&(p.cursor=i.cursor),"blur"in i&&e.blur(i.blur),(i.path&&"path"==e.type||q)&&(l.path=x(~b(m.path).toLowerCase().indexOf("r")?c._pathToAbsolute(m.path):m.path),"image"==e.type&&(e._.fillpos=[m.x,m.y],e._.fillsize=[m.width,m.height],z(e,1,1,0,0,0))),"transform"in i&&e.transform(i.transform),r){var y=+m.cx,B=+m.cy,D=+m.rx||+m.r||0,E=+m.ry||+m.r||0;l.path=c.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x",f((y-D)*u),f((B-E)*u),f((y+D)*u),f((B+E)*u),f(y*u)),e._.dirty=1}if("clip-rect"in i){var G=b(i["clip-rect"]).split(k);if(4==G.length){G[2]=+G[2]+ +G[0],G[3]=+G[3]+ +G[1];var H=l.clipRect||c._g.doc.createElement("div"),I=H.style;I.clip=c.format("rect({1}px {2}px {3}px {0}px)",G),l.clipRect||(I.position="absolute",I.top=0,I.left=0,I.width=e.paper.width+"px",I.height=e.paper.height+"px",l.parentNode.insertBefore(H,l),H.appendChild(l),l.clipRect=H)}i["clip-rect"]||l.clipRect&&(l.clipRect.style.clip="auto")}if(e.textpath){var J=e.textpath.style;i.font&&(J.font=i.font),i["font-family"]&&(J.fontFamily='"'+i["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g,o)+'"'),i["font-size"]&&(J.fontSize=i["font-size"]),i["font-weight"]&&(J.fontWeight=i["font-weight"]),i["font-style"]&&(J.fontStyle=i["font-style"])}if("arrow-start"in i&&A(s,i["arrow-start"]),"arrow-end"in i&&A(s,i["arrow-end"],1),null!=i.opacity||null!=i["stroke-width"]||null!=i.fill||null!=i.src||null!=i.stroke||null!=i["stroke-width"]||null!=i["stroke-opacity"]||null!=i["fill-opacity"]||null!=i["stroke-dasharray"]||null!=i["stroke-miterlimit"]||null!=i["stroke-linejoin"]||null!=i["stroke-linecap"]){var K=l.getElementsByTagName(j),L=!1;if(K=K&&K[0],!K&&(L=K=F(j)),"image"==e.type&&i.src&&(K.src=i.src),i.fill&&(K.on=!0),(null==K.on||"none"==i.fill||null===i.fill)&&(K.on=!1),K.on&&i.fill){var M=b(i.fill).match(c._ISURL);if(M){K.parentNode==l&&l.removeChild(K),K.rotate=!0,K.src=M[1],K.type="tile";var N=e.getBBox(1);K.position=N.x+n+N.y,e._.fillpos=[N.x,N.y],c._preload(M[1],function(){e._.fillsize=[this.offsetWidth,this.offsetHeight]})}else K.color=c.getRGB(i.fill).hex,K.src=o,K.type="solid",c.getRGB(i.fill).error&&(s.type in{circle:1,ellipse:1}||"r"!=b(i.fill).charAt())&&C(s,i.fill,K)&&(m.fill="none",m.gradient=i.fill,K.rotate=!1)}if("fill-opacity"in i||"opacity"in i){var O=((+m["fill-opacity"]+1||2)-1)*((+m.opacity+1||2)-1)*((+c.getRGB(i.fill).o+1||2)-1);O=h(g(O,0),1),K.opacity=O,K.src&&(K.color="none")}l.appendChild(K);var P=l.getElementsByTagName("stroke")&&l.getElementsByTagName("stroke")[0],Q=!1;!P&&(Q=P=F("stroke")),(i.stroke&&"none"!=i.stroke||i["stroke-width"]||null!=i["stroke-opacity"]||i["stroke-dasharray"]||i["stroke-miterlimit"]||i["stroke-linejoin"]||i["stroke-linecap"])&&(P.on=!0),("none"==i.stroke||null===i.stroke||null==P.on||0==i.stroke||0==i["stroke-width"])&&(P.on=!1);var R=c.getRGB(i.stroke);P.on&&i.stroke&&(P.color=R.hex),O=((+m["stroke-opacity"]+1||2)-1)*((+m.opacity+1||2)-1)*((+R.o+1||2)-1);var S=.75*(d(i["stroke-width"])||1);if(O=h(g(O,0),1),null==i["stroke-width"]&&(S=m["stroke-width"]),i["stroke-width"]&&(P.weight=S),S&&1>S&&(O*=S)&&(P.weight=1),P.opacity=O,i["stroke-linejoin"]&&(P.joinstyle=i["stroke-linejoin"]||"miter"),P.miterlimit=i["stroke-miterlimit"]||8,i["stroke-linecap"]&&(P.endcap="butt"==i["stroke-linecap"]?"flat":"square"==i["stroke-linecap"]?"square":"round"),i["stroke-dasharray"]){var T={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};P.dashstyle=T[a](i["stroke-dasharray"])?T[i["stroke-dasharray"]]:o}Q&&l.appendChild(P)}if("text"==s.type){s.paper.canvas.style.display=o;var U=s.paper.span,V=100,W=m.font&&m.font.match(/\d+(?:\.\d*)?(?=px)/);p=U.style,m.font&&(p.font=m.font),m["font-family"]&&(p.fontFamily=m["font-family"]),m["font-weight"]&&(p.fontWeight=m["font-weight"]),m["font-style"]&&(p.fontStyle=m["font-style"]),W=d(m["font-size"]||W&&W[0])||10,p.fontSize=W*V+"px",s.textpath.string&&(U.innerHTML=b(s.textpath.string).replace(/</g,"<").replace(/&/g,"&").replace(/\n/g,"<br>"));var X=U.getBoundingClientRect();s.W=m.w=(X.right-X.left)/V,s.H=m.h=(X.bottom-X.top)/V,s.X=m.x,s.Y=m.y+s.H/2,("x"in i||"y"in i)&&(s.path.v=c.format("m{0},{1}l{2},{1}",f(m.x*u),f(m.y*u),f(m.x*u)+1));for(var Y=["x","y","text","font","font-family","font-weight","font-style","font-size"],Z=0,$=Y.length;$>Z;Z++)if(Y[Z]in i){s._.dirty=1;break}switch(m["text-anchor"]){case"start":s.textpath.style["v-text-align"]="left",s.bbx=s.W/2;break;case"end":s.textpath.style["v-text-align"]="right",s.bbx=-s.W/2;break;default:s.textpath.style["v-text-align"]="center",s.bbx=0}s.textpath.style["v-text-kern"]=!0}},C=function(a,f,g){a.attrs=a.attrs||{};var h=(a.attrs,Math.pow),i="linear",j=".5 .5";if(a.attrs.gradient=f,f=b(f).replace(c._radial_gradient,function(a,b,c){return i="radial",b&&c&&(b=d(b),c=d(c),h(b-.5,2)+h(c-.5,2)>.25&&(c=e.sqrt(.25-h(b-.5,2))*(2*(c>.5)-1)+.5),j=b+n+c),o}),f=f.split(/\s*\-\s*/),"linear"==i){var k=f.shift();if(k=-d(k),isNaN(k))return null}var l=c._parseDots(f);if(!l)return null;if(a=a.shape||a.node,l.length){a.removeChild(g),g.on=!0,g.method="none",g.color=l[0].color,g.color2=l[l.length-1].color;for(var m=[],p=0,q=l.length;q>p;p++)l[p].offset&&m.push(l[p].offset+n+l[p].color);g.colors=m.length?m.join():"0% "+g.color,"radial"==i?(g.type="gradientTitle",g.focus="100%",g.focussize="0 0",g.focusposition=j,g.angle=0):(g.type="gradient",g.angle=(270-k)%360),a.appendChild(g)}return 1},D=function(a,b){this[0]=this.node=a,a.raphael=!0,this.id=c._oid++,a.raphaelid=this.id,this.X=0,this.Y=0,this.attrs={},this.paper=b,this.matrix=c.matrix(),this._={transform:[],sx:1,sy:1,dx:0,dy:0,deg:0,dirty:1,dirtyT:1},!b.bottom&&(b.bottom=this),this.prev=b.top,b.top&&(b.top.next=this),b.top=this,this.next=null},E=c.el;D.prototype=E,E.constructor=D,E.transform=function(a){if(null==a)return this._.transform;var d,e=this.paper._viewBoxShift,f=e?"s"+[e.scale,e.scale]+"-1-1t"+[e.dx,e.dy]:o;e&&(d=a=b(a).replace(/\.{3}|\u2026/g,this._.transform||o)),c._extractTransform(this,f+a);var g,h=this.matrix.clone(),i=this.skew,j=this.node,k=~b(this.attrs.fill).indexOf("-"),l=!b(this.attrs.fill).indexOf("url(");if(h.translate(1,1),l||k||"image"==this.type)if(i.matrix="1 0 0 1",i.offset="0 0",g=h.split(),k&&g.noRotation||!g.isSimple){j.style.filter=h.toFilter();var m=this.getBBox(),p=this.getBBox(1),q=m.x-p.x,r=m.y-p.y;j.coordorigin=q*-u+n+r*-u,z(this,1,1,q,r,0)}else j.style.filter=o,z(this,g.scalex,g.scaley,g.dx,g.dy,g.rotate);else j.style.filter=o,i.matrix=b(h),i.offset=h.offset();return d&&(this._.transform=d),this},E.rotate=function(a,c,e){if(this.removed)return this;if(null!=a){if(a=b(a).split(k),a.length-1&&(c=d(a[1]),e=d(a[2])),a=d(a[0]),null==e&&(c=e),null==c||null==e){var f=this.getBBox(1);c=f.x+f.width/2,e=f.y+f.height/2}return this._.dirtyT=1,this.transform(this._.transform.concat([["r",a,c,e]])),this}},E.translate=function(a,c){return this.removed?this:(a=b(a).split(k),a.length-1&&(c=d(a[1])),a=d(a[0])||0,c=+c||0,this._.bbox&&(this._.bbox.x+=a,this._.bbox.y+=c),this.transform(this._.transform.concat([["t",a,c]])),this)},E.scale=function(a,c,e,f){if(this.removed)return this;if(a=b(a).split(k),a.length-1&&(c=d(a[1]),e=d(a[2]),f=d(a[3]),isNaN(e)&&(e=null),isNaN(f)&&(f=null)),a=d(a[0]),null==c&&(c=a),null==f&&(e=f),null==e||null==f)var g=this.getBBox(1);return e=null==e?g.x+g.width/2:e,f=null==f?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,c,e,f]])),this._.dirtyT=1,this},E.hide=function(){return!this.removed&&(this.node.style.display="none"),this},E.show=function(){return!this.removed&&(this.node.style.display=o),this},E._getBBox=function(){return this.removed?{}:{x:this.X+(this.bbx||0)-this.W/2,y:this.Y-this.H,width:this.W,height:this.H}},E.remove=function(){if(!this.removed&&this.node.parentNode){this.paper.__set__&&this.paper.__set__.exclude(this),c.eve.unbind("raphael.*.*."+this.id),c._tear(this,this.paper),this.node.parentNode.removeChild(this.node),this.shape&&this.shape.parentNode.removeChild(this.shape);for(var a in this)this[a]="function"==typeof this[a]?c._removedFactory(a):null;this.removed=!0}},E.attr=function(b,d){if(this.removed)return this;if(null==b){var e={};for(var f in this.attrs)this.attrs[a](f)&&(e[f]=this.attrs[f]);return e.gradient&&"none"==e.fill&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform,e}if(null==d&&c.is(b,"string")){if(b==j&&"none"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;for(var g=b.split(k),h={},i=0,m=g.length;m>i;i++)b=g[i],h[b]=b in this.attrs?this.attrs[b]:c.is(this.paper.customAttributes[b],"function")?this.paper.customAttributes[b].def:c._availableAttrs[b];return m-1?h:h[g[0]]}if(this.attrs&&null==d&&c.is(b,"array")){for(h={},i=0,m=b.length;m>i;i++)h[b[i]]=this.attr(b[i]);return h}var n;null!=d&&(n={},n[b]=d),null==d&&c.is(b,"object")&&(n=b);for(var o in n)l("raphael.attr."+o+"."+this.id,this,n[o]);if(n){for(o in this.paper.customAttributes)if(this.paper.customAttributes[a](o)&&n[a](o)&&c.is(this.paper.customAttributes[o],"function")){var p=this.paper.customAttributes[o].apply(this,[].concat(n[o]));this.attrs[o]=n[o];for(var q in p)p[a](q)&&(n[q]=p[q])}n.text&&"text"==this.type&&(this.textpath.string=n.text),B(this,n)}return this},E.toFront=function(){return!this.removed&&this.node.parentNode.appendChild(this.node),this.paper&&this.paper.top!=this&&c._tofront(this,this.paper),this},E.toBack=function(){return this.removed?this:(this.node.parentNode.firstChild!=this.node&&(this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild),c._toback(this,this.paper)),this)},E.insertAfter=function(a){return this.removed?this:(a.constructor==c.st.constructor&&(a=a[a.length-1]),a.node.nextSibling?a.node.parentNode.insertBefore(this.node,a.node.nextSibling):a.node.parentNode.appendChild(this.node),c._insertafter(this,a,this.paper),this)},E.insertBefore=function(a){return this.removed?this:(a.constructor==c.st.constructor&&(a=a[0]),a.node.parentNode.insertBefore(this.node,a.node),c._insertbefore(this,a,this.paper),this)},E.blur=function(a){var b=this.node.runtimeStyle,d=b.filter;return d=d.replace(r,o),0!==+a?(this.attrs.blur=a,b.filter=d+n+m+".Blur(pixelradius="+(+a||1.5)+")",b.margin=c.format("-{0}px 0 0 -{0}px",f(+a||1.5))):(b.filter=d,b.margin=0,delete this.attrs.blur),this},c._engine.path=function(a,b){var c=F("shape");c.style.cssText=t,c.coordsize=u+n+u,c.coordorigin=b.coordorigin;var d=new D(c,b),e={fill:"none",stroke:"#000"};a&&(e.path=a),d.type="path",d.path=[],d.Path=o,B(d,e),b.canvas.appendChild(c);var f=F("skew");return f.on=!0,c.appendChild(f),d.skew=f,d.transform(o),d},c._engine.rect=function(a,b,d,e,f,g){var h=c._rectPath(b,d,e,f,g),i=a.path(h),j=i.attrs;return i.X=j.x=b,i.Y=j.y=d,i.W=j.width=e,i.H=j.height=f,j.r=g,j.path=h,i.type="rect",i},c._engine.ellipse=function(a,b,c,d,e){var f=a.path();return f.attrs,f.X=b-d,f.Y=c-e,f.W=2*d,f.H=2*e,f.type="ellipse",B(f,{cx:b,cy:c,rx:d,ry:e}),f},c._engine.circle=function(a,b,c,d){var e=a.path();return e.attrs,e.X=b-d,e.Y=c-d,e.W=e.H=2*d,e.type="circle",B(e,{cx:b,cy:c,r:d}),e},c._engine.image=function(a,b,d,e,f,g){var h=c._rectPath(d,e,f,g),i=a.path(h).attr({stroke:"none"}),k=i.attrs,l=i.node,m=l.getElementsByTagName(j)[0];return k.src=b,i.X=k.x=d,i.Y=k.y=e,i.W=k.width=f,i.H=k.height=g,k.path=h,i.type="image",m.parentNode==l&&l.removeChild(m),m.rotate=!0,m.src=b,m.type="tile",i._.fillpos=[d,e],i._.fillsize=[f,g],l.appendChild(m),z(i,1,1,0,0,0),i},c._engine.text=function(a,d,e,g){var h=F("shape"),i=F("path"),j=F("textpath");d=d||0,e=e||0,g=g||"",i.v=c.format("m{0},{1}l{2},{1}",f(d*u),f(e*u),f(d*u)+1),i.textpathok=!0,j.string=b(g),j.on=!0,h.style.cssText=t,h.coordsize=u+n+u,h.coordorigin="0 0";var k=new D(h,a),l={fill:"#000",stroke:"none",font:c._availableAttrs.font,text:g};k.shape=h,k.path=i,k.textpath=j,k.type="text",k.attrs.text=b(g),k.attrs.x=d,k.attrs.y=e,k.attrs.w=1,k.attrs.h=1,B(k,l),h.appendChild(j),h.appendChild(i),a.canvas.appendChild(h);var m=F("skew");return m.on=!0,h.appendChild(m),k.skew=m,k.transform(o),k},c._engine.setSize=function(a,b){var d=this.canvas.style;return this.width=a,this.height=b,a==+a&&(a+="px"),b==+b&&(b+="px"),d.width=a,d.height=b,d.clip="rect(0 "+a+" "+b+" 0)",this._viewBox&&c._engine.setViewBox.apply(this,this._viewBox),this},c._engine.setViewBox=function(a,b,d,e,f){c.eve("raphael.setViewBox",this,this._viewBox,[a,b,d,e,f]);var h,i,j=this.width,k=this.height,l=1/g(d/j,e/k);return f&&(h=k/e,i=j/d,j>d*h&&(a-=(j-d*h)/2/h),k>e*i&&(b-=(k-e*i)/2/i)),this._viewBox=[a,b,d,e,!!f],this._viewBoxShift={dx:-a,dy:-b,scale:l},this.forEach(function(a){a.transform("...")}),this};var F;c._engine.initWin=function(a){var b=a.document;b.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{!b.namespaces.rvml&&b.namespaces.add("rvml","urn:schemas-microsoft-com:vml"),F=function(a){return b.createElement("<rvml:"+a+' class="rvml">')}}catch(c){F=function(a){return b.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}},c._engine.initWin(c._g.win),c._engine.create=function(){var a=c._getContainer.apply(0,arguments),b=a.container,d=a.height,e=a.width,f=a.x,g=a.y;if(!b)throw new Error("VML container not found.");var h=new c._Paper,i=h.canvas=c._g.doc.createElement("div"),j=i.style;return f=f||0,g=g||0,e=e||512,d=d||342,h.width=e,h.height=d,e==+e&&(e+="px"),d==+d&&(d+="px"),h.coordsize=1e3*u+n+1e3*u,h.coordorigin="0 0",h.span=c._g.doc.createElement("span"),h.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",i.appendChild(h.span),j.cssText=c.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",e,d),1==b?(c._g.doc.body.appendChild(i),j.left=f+"px",j.top=g+"px",j.position="absolute"):b.firstChild?b.insertBefore(i,b.firstChild):b.appendChild(i),h.renderfix=function(){},h},c.prototype.clear=function(){c.eve("raphael.clear",this),this.canvas.innerHTML=o,this.span=c._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},c.prototype.remove=function(){c.eve("raphael.remove",this),this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]="function"==typeof this[a]?c._removedFactory(a):null;return!0};var G=c.st;for(var H in E)E[a](H)&&!G[a](H)&&(G[H]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(H))}}(),B.was?A.win.Raphael=c:Raphael=c,c}); \ No newline at end of file diff --git a/apps/wolnelektury_core/static/js/dialogs.js b/apps/wolnelektury_core/static/js/dialogs.js deleted file mode 100644 index 3b7553b30..000000000 --- a/apps/wolnelektury_core/static/js/dialogs.js +++ /dev/null @@ -1,199 +0,0 @@ -(function($) { - $(function() { - - // create containers for all ajaxable form links - $('.ajaxable').each(function() { - var $window = $("#ajaxable-window").clone(); - $window.attr("id", this.id + "-window"); - $('body').append($window); - - var $trigger = $(this) - var trigger = '#' + this.id; - - $window.jqm({ - ajax: '@href', - ajaxText: '<p><img src="' + STATIC_URL + 'img/indicator.gif" alt="*"/> ' + gettext("Loading") + '</p>', - target: $('.target', $window)[0], - overlay: 60, - trigger: trigger, - onShow: function(hash) { - var offset = $(hash.t).offset(); - var oleft = offset.left - hash.w.width() + $(hash.t).width(); - if (oleft < 0) oleft = 0; - hash.w.css({position: 'absolute', left: oleft, top: offset.top}); - var width = $(hash.t).width(); - width = width > 50 ? width : 50; - $('.header', hash.w).css({width: width}); - hash.w.show(); - }, - onLoad: function(hash) { - $('form', hash.w).ajaxForm({ - dataType: 'json', - target: $('.target', $window), - success: function(response) { - if (response.success) { - $('.target', $window).text(response.message); - setTimeout(function() { $window.jqmHide() }, 1000); - callback = ajaxable_callbacks[$trigger.attr('data-callback')]; - callback && callback($trigger, response); - if (response.redirect) - window.location = response.redirect; - } - else { - $('.error', $window).remove(); - $.each(response.errors, function(id, errors) { - $('#id_' + id, $window).before('<span class="error">' + errors[0] + '</span>'); - }); - $('input[type=submit]', $window).removeAttr('disabled'); - return false; - } - } - }); - } - }); - }); - - - var login_and_retry = function($form) { - var $window = $("#ajaxable-window").clone(); - $window.attr("id", "context-login-window"); - $('body').append($window); - - $window.jqm({ - ajax: '/uzytkownik/zaloguj-utworz/?next=' + escape(window.location), - ajaxText: '<p><img src="' + STATIC_URL + 'img/indicator.gif" alt="*"/> ' + gettext("Loading") + '</p>', - target: $('.target', $window)[0], - overlay: 60, - onShow: function(hash) { - var offset = $form.offset(); - hash.w.css({position: 'absolute', left: offset.left - hash.w.width() + $form.width(), top: offset.top}); - var width = $form.width(); - width = width > 50 ? width : 50; - $('.header', hash.w).css({width: width}); - hash.w.show(); - }, - onLoad: function(hash) { - $('form', hash.w).ajaxForm({ - dataType: 'json', - target: $('.target', $window), - success: function(response) { - if (response.success) { - $('.target', $window).text(response.message); - setTimeout(function() { $window.jqmHide() }, 1000); - $form.submit(); - location.reload(); - } - else { - $('.error', $window).remove(); - $.each(response.errors, function(id, errors) { - $('#id_' + id, $window).before('<span class="error">' + errors[0] + '</span>'); - }); - $('input[type=submit]', $window).removeAttr('disabled'); - return false; - } - } - }); - } - }).jqmShow(); - - }; - - - $('.ajax-form').each(function() { - var $form = $(this); - $form.ajaxForm({ - dataType: 'json', - beforeSubmit: function() { - $('input[type=submit]', $form) - .attr('disabled', 'disabled') - .after('<img src="/static/img/indicator.gif" style="margin-left: 0.5em"/>'); - }, - error: function(response) { - if (response.status == 403) - login_and_retry($form); - }, - success: function(response) { - if (response.success) { - callback = ajax_form_callbacks[$form.attr('data-callback')]; - callback && callback($form, response); - - } else { - $('span.error', $form).remove(); - $.each(response.errors, function(id, errors) { - $('#id_' + id, $form).before('<span class="error">' + errors[0] + '</span>'); - }); - $('input[type=submit]', $form).removeAttr('disabled'); - $('img', $form).remove(); - } - } - }); - }); - - - var update_star = function($elem, response) { - /* updates the star after successful ajax */ - var $star = $elem.closest('.star'); - if (response.like) { - $star.addClass('like'); - $star.removeClass('unlike'); - } - else { - $star.addClass('unlike'); - $star.removeClass('like'); - } - }; - - var ajax_form_callbacks = { - 'social-like-book': update_star - }; - - var ajaxable_callbacks = { - 'social-book-sets': function() {location.reload();} - }; - - - - // check placeholder browser support - if (!Modernizr.input.placeholder) - { - // set placeholder values - $(this).find('[placeholder]').each(function() - { - $(this).val( $(this).attr('placeholder') ).addClass('placeholder'); - }); - - // focus and blur of placeholders - $('[placeholder]').focus(function() - { - if ($(this).val() == $(this).attr('placeholder')) - { - $(this).val(''); - $(this).removeClass('placeholder'); - } - }).blur(function() - { - if ($(this).val() == '' || $(this).val() == $(this).attr('placeholder')) - { - $(this).val($(this).attr('placeholder')); - $(this).addClass('placeholder'); - } - }); - - // remove placeholders on submit - $('[placeholder]').closest('form').submit(function() - { - $(this).find('[placeholder]').each(function() - { - if ($(this).val() == $(this).attr('placeholder')) - { - $(this).val(''); - } - }) - }); - } - - - - }); -})(jQuery); - diff --git a/apps/wolnelektury_core/static/js/locale.js b/apps/wolnelektury_core/static/js/locale.js deleted file mode 100644 index e4c8f17aa..000000000 --- a/apps/wolnelektury_core/static/js/locale.js +++ /dev/null @@ -1,35 +0,0 @@ -var LOCALE_TEXTS = { - "pl": { - "Loading": "Åadowanie" - }, - "de": { - "Loading": "Herunterladen" - }, - "fr": { - "Loading": "Chargement" - }, - "en": { - "Loading": "Loading" - }, - "ru": { - "Loading": "ÐагÑÑзка" - }, - "es": { - "Loading": "Cargando" - }, - "lt":{ - "Loading": "Krovimas" - }, - "uk":{ - "Loading": "ÐаванÑажÑÑÑÑÑÑ" - }, - "jp":{ - "Loading": "è² è·" - }, - "it":{ - "Loading": "caricamento" - }, -} -function gettext(text) { - return LOCALE_TEXTS[LANGUAGE_CODE][text]; -} diff --git a/apps/wolnelektury_core/static/js/picture.js b/apps/wolnelektury_core/static/js/picture.js deleted file mode 100644 index 2464220e4..000000000 --- a/apps/wolnelektury_core/static/js/picture.js +++ /dev/null @@ -1,253 +0,0 @@ - -(function($) { - $.widget('wl.pictureviewer', { - - options: { - step: 20, // step in % of initial image - plus_button: undefined, - minus_button: undefined, - }, - ORIGINAL_LOADING: 0, - ORIGINAL_AVAILABLE: 1, - ORIGINAL_SHOWN: 2, - - _create: function() { - var self = this; - self.initial_size = [ - self.element.data('width'), - self.element.data('height') - ]; - self.original_size = [ - self.element.data('original-width'), - self.element.data('original-height') - ]; - self._zoom = 0; - self._ratio = 1.0; - - self.original = $('<img src="'+ self.element.attr('data-original-url') +'">'); - - self._original_avaialble = self.ORIGINAL_LOADING; - function original_loaded() { - self._original_avaialble = self.ORIGINAL_AVAILABLE; - self.options.plus_button.removeClass('inactive'); - self.options.minus_button.removeClass('inactive'); - console.log("Original image available, sizes initial: " + self.initial_size + ", original: " + self.original_size); - }; - self.original.load(original_loaded); - - self.element.width(self.initial_size[0]); - self.element.height(self.initial_size[1]); - - if (self.options.plus_button) - self.options.plus_button.click( - function(ev) { self.zoom(1); }); - if (self.options.minus_button) - self.options.minus_button.click( - function(ev) { self.zoom(-1); }); - - self._initial_mark = null; - function clean_initial_mark() { - if (self._initial_mark) { - self._initial_mark.remove(); - self._initial_mark = null; - } - } - var initial_hash = window.location.hash; - if (initial_hash) { - var mk = null, - objectPrefix = '#object-', - themePrefix = '#theme-'; - if (initial_hash.substr(0, objectPrefix.length) === objectPrefix) { - $("[href=#picture-objects]").trigger('click'); - } else if (initial_hash.substr(0, themePrefix.length) === themePrefix) { - $("[href=#picture-themes]").trigger('click'); - } - mk = $("[href=" + initial_hash + "]").eq(0); - self._initial_mark = self.createMark({ - label: mk.text(), - coords: mk.data('coords') - }); - } - - - self.options.areas_links.hover(function() { - clean_initial_mark(); - $this = $(this); - var coords = $this.data("coords"); - this._picture_mark = self.createMark({ -// label: $this.text(), - coords: coords, - }); - }, function() { - $(this._picture_mark).remove(); - this._picture_mark = undefined; - }).click(function(ev) { - ev.preventDefault(); - var $mark = self.element.find('.mark').eq(0); - var markPos = $mark.offset(); - markPos = [markPos.left, markPos.top]; - var markSize = [ $mark.width(), $mark.height() ] - var wSize = [ window.innerWidth, window.innerHeight ]; - window.scrollTo( - markPos[0] + markSize[0]/2 - wSize[0]/2, - markPos[1] + markSize[1]/2 - wSize[1]/2 - ); - - }); - - - - return self; - }, - - currentSize: function() { - return [this.element.width(), this.element.height() ]; - }, - - currentZoom: function() { return this._zoom; }, - - initOriginal: function() { - if (this._original_avaialble > this.ORIGINAL_LOADING && - this._original_avaialble < this.ORIGINAL_SHOWN) { - this.element.css({'background-image': 'url('+ this.original.attr('src')+')', 'background-size': this.initial_size[0]+'px'}); - this._original_avaialble = this.ORIGINAL_SHOWN; - }; - }, - - zoom: function(steps) { - this.initOriginal(); - var t = this._zoom + steps; - return this.zoomTo(t); - }, - - zoomForStep: function(step) { - // 0 => initial - // max_step-1 => max % - if (step < 0) step = 0; - var zoomperc = 100 + step * this.options.step; - if (zoomperc * this.initial_size[0] > this.original_size[0] * 100) { - zoomperc = this.original_size[0] * 100 / this.initial_size[0]; - }; - return zoomperc; - }, - - zoomTo: function(level) { - var ratio = this.zoomForStep(level) / 100; - var new_width = ratio * this.initial_size[0]; - var new_height = ratio * this.initial_size[1]; - var cs = this.currentSize(); - if (new_width == cs[0]) - return; - - var target = { - 'width': new_width + 'px', - 'height': new_height + 'px', - 'background-size': new_width + 'px', - }; - - this._zoom = level; - this._ratio = ratio; - - this.element.css(target); - if (this._initial_mark) { - this._initial_mark = this.redrawMark(this._initial_mark); - } - - }, - - allowedPosition: function(off) { - var x = undefined, fix_x = undefined; - var y = undefined, fix_y = undefined; - var w = this.element.width(); - var h = this.element.height(); - var cw = $(window).width(); - var ch = $(window).height(); - var off = off || this.element.offset(); - - if (w <= cw) { - var x = off.left; - if (x < 0) - fix_x = 0; - if (x + w > cw) - fix_x = cw - w; - } else { - if (x > 0) - fix_x = 0; - if (x + w < cw) - fix_x = cw - w; - } - - if (h <= ch) { - var y = off.top; - if (y < 0) - fix_y = 0; - if (y + h > ch) - fix_y = ch - h; - } else { - if (y > 0) - fix_y = 0; - if (y + h < ch) - fix_y = ch - h; - } - if (fix_x !== undefined || fix_y !== undefined) - return { top: fix_y, left: fix_x }; - return undefined; - - }, - redrawMark: function(mark) { - var $mark = $(mark); - var $newmark = this.createMark($mark.data('mark')); - $mark.remove(); - return $newmark; - }, - // mark - // { - // label: "...", - // coords: [x, y, w, h] - // } - createMark: function(mark) { - if (mark.label === undefined) - mark.label = ''; - var $mark = $('<div class="mark"><div class="label">' + - mark.label + '</div></div>'); - var cs = this.currentSize() - var ratio = cs[0] / this.original_size[0]; - var scale = function (v) { - return v * ratio; - } - if (mark.coords[1][0] < 0 || mark.coords[1][1] < 0) { // whole - var s = this.original_size; - if (mark.coords[1][0] < 0) mark.coords[1][0] = s[0]; - if (mark.coords[1][1] < 0) mark.coords[1][1] = s[1]; - } - - var coords = [[scale(mark.coords[0][0]), scale(mark.coords[0][1])], - [scale(mark.coords[1][0]), scale(mark.coords[1][1])]]; - this.element.append($mark); - $mark.width(coords[1][0] - coords[0][0]); - $mark.height(coords[1][1] - coords[0][1]); - $mark.css({left: coords[0][0], top: coords[0][1]}); - - $mark.data('mark', mark); - return $mark.get(0); - }, - }); - - -$(document).ready(function() { - $.highlightFade.defaults.speed = 3000; - - $('#menu .dropdown').each(function() { - $t = $(this); - $($t.attr('href')).hide().insertAfter(this); - }); - - $(".picture-wrap").pictureviewer({ - plus_button: $(".button.plus"), - minus_button: $(".button.minus"), - areas_links: $("#picture-objects a, #picture-themes a"), - }); - -}); - -}(jQuery)); diff --git a/apps/wolnelektury_core/static/js/search.js b/apps/wolnelektury_core/static/js/search.js deleted file mode 100644 index 4d001e0c0..000000000 --- a/apps/wolnelektury_core/static/js/search.js +++ /dev/null @@ -1,49 +0,0 @@ - -var __bind = function (self, fn) { - return function() { fn.apply(self, arguments); }; -}; - -(function($){ - $.widget("wl.search", { - options: { - minLength: 0, - dataType: "json", - host: '', - }, - - _create: function() { - var opts = { - minLength: this.options.minLength, - select: __bind(this, this.enter), - focus: function() { return false; }, - source: this.element.data('source'), - }; - - this.element.autocomplete($.extend(opts, this.options)) - .data("autocomplete")._renderItem = __bind(this, this.render_item); - }, - - enter: function(event, ui) { - if (ui.item.url != undefined) { - location.href = this.options.host+ui.item.url; - } else { - this.element.closest('form').submit(); - } - }, - - render_item: function (ul, item) { - return $("<li></li>").data('item.autocomplete', item) - .append('<a href="'+this.options.host+item.url+'"><span class="search-hint-label">'+item.label+'</span>'+ - '<span class="search-hint-category mono">'+item.category+'</span></a>') - .appendTo(ul); - }, - - destroy: function() { - - }, - - - }); - - -})(jQuery); diff --git a/apps/wolnelektury_core/static/js/widget.js b/apps/wolnelektury_core/static/js/widget.js deleted file mode 100644 index 3b680fc7d..000000000 --- a/apps/wolnelektury_core/static/js/widget.js +++ /dev/null @@ -1,8 +0,0 @@ -var WOLNELEKTURY_LOADED; -if (WOLNELEKTURY_LOADED == undefined) { - var iframe = document.createElement('iframe'); - iframe.setAttribute('style', 'width: 100%; height: 140px; border: none; box-shadow: 0 0 .5rem #191919;'); - iframe.setAttribute('src', '//wolnelektury.pl/widget.html'); - document.getElementById('wl').appendChild(iframe); - WOLNELEKTURY_LOADED = true; -} \ No newline at end of file diff --git a/apps/wolnelektury_core/static/js/widget_run.js b/apps/wolnelektury_core/static/js/widget_run.js deleted file mode 100644 index c2453e722..000000000 --- a/apps/wolnelektury_core/static/js/widget_run.js +++ /dev/null @@ -1,26 +0,0 @@ -var s = $('#id_qq'); -var url = s.attr('data-source'); -s.search({ - source: function(req, cb) { - $.ajax({url: url, - dataType: "jsonp", - data: {term: req.term}, - type: "GET", - success: function(data) {cb(data);}, - error: function() {cb([]);} - }); - }, - dataType: "jsonp", - select: function(event, ui) { - if (ui.item.url != undefined) { - window.top.location.href = '//wolnelektury.pl' + ui.item.url; - } else { - $('form').submit(); - } - }, - position: { - my: "center bottom", - at: "center bottom", - of: "#wl a" - }, -}); diff --git a/apps/wolnelektury_core/static/opensearch.xml b/apps/wolnelektury_core/static/opensearch.xml deleted file mode 100644 index 3018db0cd..000000000 --- a/apps/wolnelektury_core/static/opensearch.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" - xmlns:atom="http://www.w3.org/2005/Atom" - xmlns:moz="http://www.mozilla.org/2006/browser/search/"> - <ShortName>Wolne Lektury</ShortName> - <Description>Biblioteka internetowa WolneLektury.pl</Description> - <InputEncoding>UTF-8</InputEncoding> - <Tags>lektury</Tags> - <Developer>Fundacja Nowoczesna Polska</Developer> - <Language>pl</Language> - <Contact>fundacja@nowoczesnapolska.org.pl</Contact> - <Image height="16" width="16" type="image/x-icon">https://static.wolnelektury.pl/static/img/favicon.ico</Image> - <Image height="64" width="64" type="image/png">https://static.wolnelektury.pl/static/img/wl_icon_64.png</Image> - <Url type="application/atom+xml;profile=opds-catalog" - template="https://wolnelektury.pl/opds/search/?q={searchTerms}&author={atom:author}&translator={atom:contributor}&title={atom:title}" /> - <Url type="text/html" method="GET" template="https://wolnelektury.pl/szukaj/?q={searchTerms}" /> - <Url type="application/x-suggestions+json" method="GET" template="https://www.wolnelektury.pl/katalog/jtags/?mozhint=1&q={searchTerms}" /> - <moz:SearchForm>https://wolnelektury.pl/</moz:SearchForm> - <Query role="example" searchTerms="sÅowa" /> -</OpenSearchDescription> diff --git a/apps/wolnelektury_core/static/scss/book_text.scss b/apps/wolnelektury_core/static/scss/book_text.scss deleted file mode 100644 index 566ee4804..000000000 --- a/apps/wolnelektury_core/static/scss/book_text.scss +++ /dev/null @@ -1,20 +0,0 @@ -@import "tools"; - -@import "book_text/const"; -@import "book_text/body"; -@import "book_text/box"; -@import "book_text/info"; -@import "book_text/menu"; -@import "book_text/note"; -@import "book_text/numbering"; -@import "book_text/other"; -@import "book_text/settings"; -@import "book_text/themes"; -@import "book_text/toc"; - -@import "main/book_box"; -@import "main/picture_box"; -@import "book_text/book_box"; - -@import "main/auth"; -@import "main/dialogs"; diff --git a/apps/wolnelektury_core/static/scss/book_text/body.scss b/apps/wolnelektury_core/static/scss/book_text/body.scss deleted file mode 100644 index 912d55b85..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/body.scss +++ /dev/null @@ -1,144 +0,0 @@ -/* - * #big-pane - * Everything besides the menu. - */ -#big-pane { - justify-content: left; - position: relative; - @include min-screen($W_BOOK_TEXT_MAX) { - justify-content: center; - } -} -@include min-screen($S_MENU) { - #big-pane { - @include size(margin-left, $W_MENU); - } - .menu-hidden { - #big-pane { - margin-left: 0; - } - } -} - -#picture-viewer #big-pane { - @include size(margin-left, $W_NONUMBERS_TINY); - - @include min-screen($S_NONUMBERS_TINY_MAX) { - @include size(margin-left, $W_NONUMBERS); - } - - @include min-screen($S_NUMBERS) { - @include size(margin-left, 44px); - } -} - -@include min-screen($S_MENU) { - #picture-viewer #big-pane { - @include size(margin-left, $W_MENU); - } - .menu-hidden { - #big-pane { - margin-left: 44px; - } - } -} - - - - -/* - * #main-text - * - * This is where the text lives - * together with line numbers, themes and stuff. - */ - -@mixin left-without-numbers { - @include size(padding-left, $W_NONUMBERS_TINY); - @include min-screen($S_NONUMBERS_TINY_MAX) { - @include size(padding-left, $W_NONUMBERS); - } -} - -@mixin right-without-themes { - @include size(padding-right, $W_NOTHEMES_TINY); - @include min-screen($S_NOTHEMES_TINY_MAX) { - @include size(padding-right, $W_NOTHEMES_SMALL); - } - @include min-screen($S_NOTHEMES_SMALL_MAX) { - @include size(padding-right, $W_NOTHEMES); - } -} - -#main-text, #other-text { - @include left-without-numbers; - @include right-without-themes; - @include size(min-width, $W_BOOK_TEXT_MIN); - - /* make room for line numbers */ - @include min-screen($S_NUMBERS) { - @include size(padding-left, $W_NUMBERS); - } - - /* make room for themes */ - @include min-screen($S_THEMES) { - @include size(padding-right, $W_THEMES); - } -} - -.always-hide-line-numbers { - /* Cancel making room for line numbers. */ - #main-text, #other-text { - @include left-without-numbers; - } -} - -@include min-screen($S_THEMES) { - .always-hide-themes { - /* Cancel making room for themes. */ - #main-text, #other-text { - @include right-without-themes; - } - } -} - -.with-other-text { - #big-pane { - display: flex; - flex-direction: row; - } - #main-text, #other-text { - @include right-without-themes; - - @include min-screen($S_THEMES_WOTHER) { - @include size(padding-right, $W_THEMES); - } - } -} - - - - - -#book-text { - @include size(max-width, $W_BOOK_TEXT_MAX); - @include size(margin, 20px auto); - - font-size: .8em; - - @include min-screen($S_SMALL_TEXT_MAX) { - font-size: 1em; - } - - h1 { - margin-top: 0; - } -} -.with-other-text { - #book-text { - font-size: .8em; - @include min-screen($S_SMALL_TEXT_MAX_WOTHER) { - font-size: 1em; - } - } -} diff --git a/apps/wolnelektury_core/static/scss/book_text/book_box.scss b/apps/wolnelektury_core/static/scss/book_text/book_box.scss deleted file mode 100644 index 38550ce74..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/book_box.scss +++ /dev/null @@ -1,15 +0,0 @@ -#book-short { - margin: 0; - padding: 0; - overflow: visible; - max-width: 488px; - - .book-box .book-box-inner { - border: none; - box-shadow: none; - } - - .book-box-read { - opacity: .5; - } -} diff --git a/apps/wolnelektury_core/static/scss/book_text/box.scss b/apps/wolnelektury_core/static/scss/book_text/box.scss deleted file mode 100644 index 7a0423418..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/box.scss +++ /dev/null @@ -1,50 +0,0 @@ -/* TODO: -There should be a JS-less way of seeing at least some of -the hidden boxes (TOC and Themes). -*/ - -.box, #toc, #themes, #nota_red, #objects { - display: none; - - position: fixed; - @include size(left, $W_MENU); - top: 0; - right: 0; - - max-height: 100%; - @include size(max-width, 380px); - @include size(padding, 10px 10px 30px 10px); - margin: 0; - overflow-x: hidden; - overflow-y: auto; - z-index: 100; - - color: black; - background: #fff; - box-shadow: 2px 2px 2px #444; - - @include size(border-width, 0 1px 1px 0); - border-style: solid; - border-color: #444; - - @include size(font-size, 14px); - line-height: 1.2em; - - h2 { - margin-top: 0; - } -} - - - -#box-underlay { - display: none; - position: fixed; - @include size(left, $W_MENU); - top: 0; - bottom: 0; - right: 0; - background:#000; - opacity: .5; - z-index: 99; -} diff --git a/apps/wolnelektury_core/static/scss/book_text/const.scss b/apps/wolnelektury_core/static/scss/book_text/const.scss deleted file mode 100644 index 4c8ab8201..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/const.scss +++ /dev/null @@ -1,26 +0,0 @@ -$W_MENU: 80px; -$S_MENU: 600px; - -$W_BOOK_TEXT_MIN: 160px; -$W_BOOK_TEXT_MAX: 600px; -$S_SMALL_TEXT_MAX: 500px; -$S_SMALL_TEXT_MAX_WOTHER: 1100px; - -$W_NONUMBERS_TINY: 20px; -$S_NONUMBERS_TINY_MAX: 240px; -$W_NONUMBERS: 30px; -$S_NUMBERS: 320px; -$W_NUMBERS: 50px; - -$W_NOTHEMES_TINY: 20px; -$S_NOTHEMES_TINY_MAX: 240px; -$W_NOTHEMES_SMALL: 30px; -$S_NOTHEMES_SMALL_MAX: 320px; -$W_NOTHEMES: 44px; -$S_THEMES: 600px; -$S_THEMES_WOTHER: 1200px; -$W_THEMES: 160px; - -$W_BOOK_SHORT_FULL: 487.5px; -$S_BOOK_SHORT_FULL: $W_BOOK_SHORT_FULL + $W_MENU + 2px; -$S_BOOK_SHORT_MEDIUM: 400px; diff --git a/apps/wolnelektury_core/static/scss/book_text/info.scss b/apps/wolnelektury_core/static/scss/book_text/info.scss deleted file mode 100644 index 8b1378917..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/info.scss +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/wolnelektury_core/static/scss/book_text/menu.scss b/apps/wolnelektury_core/static/scss/book_text/menu.scss deleted file mode 100644 index 1a555733b..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/menu.scss +++ /dev/null @@ -1,128 +0,0 @@ -%menu-toggle { - position: relative; - padding: 0; - &:before { - content: ""; - position: absolute; - top: 8px; - height: 5px; - border-top: 15px double #ddd; - border-bottom: 5px solid #ddd; - } -} - -#no-menu { - @include size(width, $W_NONUMBERS_TINY); - - @include min-screen($S_NONUMBERS_TINY_MAX) { - @include size(width, $W_NONUMBERS); - } - - @include min-screen($S_NUMBERS) { - @include size(width, 44px); - } - - /* Button for showing menu */ - #menu-toggle-on { - @extend %menu-toggle; - display: block; - background: #191919; - color: #ddd; - text-align: center; - z-index: 100; - @include size(height, 44px); - padding: 0; - - &:before { - left: 5px; - right: 5px; - @include min-screen(240px) { - left: 8px; - right: 8px; - } - } - } -} - -#menu-toggle-off { - @extend %menu-toggle; - height: 24px; - &:before { - left: 25px; - right: 25px; - } -} - - -#menu { - display: none; - width: 80px; - height: 100%; -} - -#menu, #no-menu { - z-index: 101; - position: fixed; - top: 0; - left: 0; - text-align: center; - line-height: 1.1em; - background: #191919; - color: #ddd; - - ul { - list-style: none; - margin: 0; - padding: 0; - - li { - - a { - padding: 10px 0; - color: white; - display: block; - text-decoration: none; - - &.active { - background: white; - color: black; - } - - .label { - display: block; - font-size: 12px; - } - } - } - - } -} - -/* body class for showing menu */ -.menu-showed { - #menu { - display: block; - } - #no-menu { - display: none; - } -} - -/* menu showing by default */ -@include min-screen($S_MENU) { - #menu { - display: block; - } - #no-menu { - display: none; - } - /* body class for hiding menu */ - .menu-hidden { - #menu { - display: none; - } - #no-menu { - display: block; - } - } -} diff --git a/apps/wolnelektury_core/static/scss/book_text/note.scss b/apps/wolnelektury_core/static/scss/book_text/note.scss deleted file mode 100644 index 55dd76567..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/note.scss +++ /dev/null @@ -1,3 +0,0 @@ -#menu-nota_red { - display: none; -} diff --git a/apps/wolnelektury_core/static/scss/book_text/numbering.scss b/apps/wolnelektury_core/static/scss/book_text/numbering.scss deleted file mode 100644 index e31b49403..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/numbering.scss +++ /dev/null @@ -1,65 +0,0 @@ -@mixin hide-line-numbers { - float: left; - margin-left: -$W_NONUMBERS_TINY; - - width: $W_NONUMBERS_TINY; - height: 100%; - padding: 0; - overflow: hidden; - - color: white; - text-align: right; - - &:hover, &:active { - color: #ccc; - background-color: #CCC; - } - - &:before { - content: "#"; - display: block; - float: left; - width: $W_NONUMBERS_TINY / 2 - 1px; - height: 100%; - overflow: hidden; - border-right: 1px solid #ccc; - } - - @include min-screen($S_NONUMBERS_TINY_MAX) { - width: $W_NONUMBERS; - margin-left: -$W_NONUMBERS; - - &:before { - width: $W_NONUMBERS / 2 - 1; - } - } -} - - -.anchor { - @include hide-line-numbers; - - @include min-screen($S_NUMBERS) { - /* Show line numbers. */ - font-size: .8em; - margin-left: -$W_NUMBERS; - width: $W_NUMBERS - 4px; - height: auto; - padding: 2px; - text-align: center; - color: #ccc; - - &:before { - display: none; - } - } -} - -@include min-screen($S_NUMBERS) { - .always-hide-line-numbers { - /* Cancel showing line numbers. */ - .anchor { - @include hide-line-numbers; - } - } -} diff --git a/apps/wolnelektury_core/static/scss/book_text/other.scss b/apps/wolnelektury_core/static/scss/book_text/other.scss deleted file mode 100644 index 9ccedd932..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/other.scss +++ /dev/null @@ -1,52 +0,0 @@ -nav #menu-other { - display: none; -} - - -#other { - ul { - list-style: none; - padding: 0; - margin: 1em 0; - - li { - display: inline-block; - - a { - display: block; - } - } - } -} - - -.other-text-close { - background: #000; - color: #ddd; - opacity: .5; - text-align: center; - padding: .5em; - font-weight: bold; -} - - -#other-text { - position: relative; - display: none; - - .other-text-close { - position: absolute; - top: 0; - right: 0; - } -} - -.other-text-close { - display: none; -} - -.with-other-text { - .other-text-close { - display: block; - } -} diff --git a/apps/wolnelektury_core/static/scss/book_text/settings.scss b/apps/wolnelektury_core/static/scss/book_text/settings.scss deleted file mode 100644 index edcb8bfdb..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/settings.scss +++ /dev/null @@ -1,47 +0,0 @@ -@mixin switch-on { - background: #aaa; - border-top-color: #888; - border-left-color: #888; - border-bottom-color: #ddd; - border-right-color: #ddd; - - border-width: 2px; - border-style: solid; - -} -@mixin switch-off { - background: none; - border-color: #aaa; -} -.settings-switch { - display: block; - padding: .5em; - margin: .5em; - //border: 1px solid #aaa; - border-radius: 1em; - color: black; - border-width: 2px; - border-style: solid; -} - -nav #menu-settings { - display: none; -} - -#settings-annotations {@include switch-on;} -.no-annotations { - #settings-annotations {@include switch-off;} - .annotation {display: none;} -} - -#settings-themes {@include switch-on;} -.always-hide-themes { - #settings-themes {@include switch-off;} -} - -#settings-line-numbers {@include switch-on;} -.always-hide-line-numbers { - #settings-line-numbers {@include switch-off;} -} - - diff --git a/apps/wolnelektury_core/static/scss/book_text/themes.scss b/apps/wolnelektury_core/static/scss/book_text/themes.scss deleted file mode 100644 index 26ed14bdb..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/themes.scss +++ /dev/null @@ -1,110 +0,0 @@ -nav #menu-themes { - display: none; -} - -/* Add a missing header. */ -#themes:before { - content: "Motywy"; -} - - -@mixin theme-hidden { - width: 20px; - height: 20px; - overflow: hidden; - margin-right: -20px; - border: none; - padding: 0; - - &:before { - content: "â²"; - color: #ccc; - text-align: center; - display: block; - } - - @include min-screen(240px) { - width: 30px; - margin-right: -30px; - &:before { - font-size: 2em; - } - } - - @include min-screen(320px) { - width: 44px; - margin-right: -44px; - &:before { - font-size: 2.5em; - } - } - - &.showing { - @include theme-showing; - } - -} - -@mixin theme-showing { - @include size(width, 120px); - height: auto; - overflow: visible; - @include size(margin-left, 30px); - @include size(font-size, 14.4px); - text-indent: 0; - - @include size(border-left, 1px solid #DDDDDD); - color: #777; - @include size(padding, 0 0 0 8px); - - &:before { - display: none; - } -} - -.theme-begin { - @include theme-hidden; - - font-size: .9em; - position: relative; - float: right; - margin-bottom: 8px; - clear: both; - line-height: 1.5em; - text-align: left; - z-index: 60; - - font-style: normal; - font-weight: normal; - font-variant: normal; - letter-spacing: 0; - text-transform: none; - text-decoration: none; - - @include min-screen(600px) { - @include theme-showing; - margin-right: -160px; - } - - &.showing { - @include theme-showing; - } -} - - -.always-hide-themes { - .theme-begin { - @include theme-hidden; - } -} - -.with-other-text { - .theme-begin { - @include theme-hidden; - - @include min-screen(1200px) { - @include theme-showing; - margin-right: -160px; - } - } -} diff --git a/apps/wolnelektury_core/static/scss/book_text/toc.scss b/apps/wolnelektury_core/static/scss/book_text/toc.scss deleted file mode 100644 index 18975c760..000000000 --- a/apps/wolnelektury_core/static/scss/book_text/toc.scss +++ /dev/null @@ -1,3 +0,0 @@ -nav #menu-toc { - display: none; -} diff --git a/apps/wolnelektury_core/static/scss/dictionary/dictionary.scss b/apps/wolnelektury_core/static/scss/dictionary/dictionary.scss deleted file mode 100644 index a90059924..000000000 --- a/apps/wolnelektury_core/static/scss/dictionary/dictionary.scss +++ /dev/null @@ -1,9 +0,0 @@ -.dictionary-note { - @include white-box; - @include size(padding, 8px); - @include size(margin, 10px 0); -} -.dictionary-note-source { - @include white-box; - @include size(padding, 8px); -} diff --git a/apps/wolnelektury_core/static/scss/funding/funding.scss b/apps/wolnelektury_core/static/scss/funding/funding.scss deleted file mode 100644 index 3b63e2037..000000000 --- a/apps/wolnelektury_core/static/scss/funding/funding.scss +++ /dev/null @@ -1,224 +0,0 @@ -.funding { - background: orange; - margin: auto; - @include size(padding, 5px 0); - position: relative; - .close { - @include mono; - @include size(font-size, 16px); - position: absolute; - top: 0px; - right: 0; - @include size(padding, 1px 5px 10px 10px); - } - .call-area { - float:left; - @include size(padding-right, 6px); - } - a.call { - @include size(height, 18px); - - @include size(padding, 5.25px 7.5px); - @include size(margin, 7.5px); - display: inline-block; - vertical-align: middle; - text-align: center; - - background: lighten(#018189, .05); - @include size(width, 135px); - - @include min-screen(420px) { - vertical-align: top; - } - } - .learn-more { - text-align: center; - margin: auto; - @include size(font-size, 10px); - padding: .5em; - - @include min-screen(300px) { - display: inline; - } - @include min-screen(420px) { - padding: 0; - display: block; - } - } - .description { - @include size(padding-left, 6px); - - a { - display: block; - color: black; - @include size(padding, 0 3px); - } - } - strong { - @include size(font-size, 15px); - @include size(padding, 3px 0 0); - } - .progress { - .piece { - @include size(font-size, 13px); - @include size(padding, 4px 6px); - } - @include size(margin, 3px 12px 4px 0); - @include size(border-radius, 20px); - background-image: url(/static/img/progress-pixel.png); - background-repeat: repeat-y; - background-color: #F68900; - @include box-shadow(1px 1px 1px #888); - - .progress-collected { - float:left; - &:after { - content: " / "; - } - @include min-screen(500px) { - &:after { - content: none; - } - } - } - .progress-target { - float: left; - padding-left: 0; - @include min-screen(500px) { - float: right; - @include size(padding-left, 6px); - } - } - .progress-extralabel { - display: none; - @include min-screen(500px) { - display: inline; - } - } - .progress-until { - display: inline-block; - margin-right: 0em; - text-align: right; - @include min-screen(500px) { - text-align: center; - } - } - } - .with-button { - clear: left; - @include min-screen(420px) { - clear: none; - @include size(margin-left, 171px); - } - } - - .funding-title { - @include size(font-size, 11px); - display: block; - @include min-screen(640px) { - display: inline; - } - } - .funding-title-strong { - @extend .funding-title; - font-weight: bold; - @include size(font-size, 15px); - } -} - -.funding-top-header { - @extend .funding; - - @include min-screen(1000px) { - @include size(width, 975px); - } -} - - -.wlfund { - width: 100%; - border-spacing:0; - - td { - @include size(padding, 10px 5px 10px); - text-align: center; - @include size(border-top, 10px solid rgba(255, 255, 255, 0)); - @include size(border-bottom, 2px solid #DDDDDD); - - background-clip: padding-box; - -moz-background-clip: padding; - -webkit-background-clip: padding; - } - td.oneline { - white-space: nowrap; - } - - td:last-child { - text-align: right; - } - - .funding-plus td { - background-color: mix(#0D7E85, white, .2); - } - - .funding-minus td { - background-color: white; - } -} - - - -.honking { - background: #018189; - @include size(font-size, 15px); - @include size(padding, 7.5px); - color: white; - border: 0; - @include box-shadow(3px 3px 4.5px #888888); - position: relative; -} -.honking:hover { - @include box-shadow(none); - @include size(top, 1px); - @include size(left, 1px); -} - - - -.share { - a { - @include size(margin-right, 15px); - - img { - vertical-align: middle; - } - } -} - -#funding-closeable { - display: none; -} -#funding-handle { - position: absolute; - top: 0; - right: 0; - z-index: 2; - background: orange; - cursor: pointer; - @include size(padding, 2.6px 13px); - @include size(border-radius, 0 0 0 10px); - @include size(font-size, 13px); -} - -.funding-cover { - float: left; - @include size(margin-right, 10px); -} - -.funding-details-intro { - @include size(padding-top, 10px); - - h3:first-of-type { - margin-top: 0; - } -} diff --git a/apps/wolnelektury_core/static/scss/main.scss b/apps/wolnelektury_core/static/scss/main.scss deleted file mode 100644 index bab1fb46f..000000000 --- a/apps/wolnelektury_core/static/scss/main.scss +++ /dev/null @@ -1,29 +0,0 @@ -@import "tools"; - -@import "main/const"; -@import "main/auth"; -@import "main/base"; -@import "main/book_box"; -@import "main/book_list"; -@import "main/catalogue"; -@import "main/cite"; -@import "main/dialogs"; -@import "main/footer"; -@import "main/form"; -@import "main/fragment"; -@import "main/header"; -@import "main/hidden"; -@import "main/main_content"; -@import "main/main_page"; -@import "main/menu"; -@import "main/picture_box"; -@import "main/search"; -@import "main/tag"; - -@import "dictionary/dictionary"; - -@import "funding/funding"; - -@import "polls/polls"; - -@import "social/shelf_tags"; diff --git a/apps/wolnelektury_core/static/scss/main/auth.scss b/apps/wolnelektury_core/static/scss/main/auth.scss deleted file mode 100755 index 793afe4f4..000000000 --- a/apps/wolnelektury_core/static/scss/main/auth.scss +++ /dev/null @@ -1,47 +0,0 @@ -.email_list { - .verified { - display: inline-block; - margin-left: 2em; - font-style: italic; - } - .unverified { - display: inline-block; - margin-left: 2em; - color: #717171; - font-style: italic; - } - .primary { - display: inline-block; - margin-left: 2em; - font-weight: bold; - } -} - -.socialaccount_provider { - display: inline-block; - background-repeat: no-repeat; - color: transparent; - - @include size(height, 40px); - @include size(width, 40px); - vertical-align: middle; - - &.google { - background-image: url(/static/img/auth/google.png); - } - &.facebook { - background-image: url(/static/img/auth/facebook.png); - } -} - - -.socialaccount_providers { - @include size(margin, 10px 0); - padding: 0; - - li { - display: inline; - list-style: none; - @include size(margin-right, 10px); - } -} diff --git a/apps/wolnelektury_core/static/scss/main/base.scss b/apps/wolnelektury_core/static/scss/main/base.scss deleted file mode 100755 index 1f1021a9f..000000000 --- a/apps/wolnelektury_core/static/scss/main/base.scss +++ /dev/null @@ -1,110 +0,0 @@ -/* Basic layout */ -html, body { - margin: 0; - padding: 0; -} - - -.clearboth { - clear: both; -} - - - -/* Basic colors and fonts */ -body { - font-family: Georgia; - background: #f7f7f7; - color: black; - - @include size(font-size, 13px); -} - -a { - color: #0d7e85; - text-decoration: none; - - img { - border: 0; - } -} - -h1 { - @include size(font-size, 35px); - font-weight: normal; - @include size(margin-top, 14px); - - a { - color: inherit; - } -} - -h2 { - @include size(font-size, 20px); - font-weight: normal; -} - -h3 { - @include size(font-size, 15px); - font-weight: normal; -} - - -.normal-text { - line-height: 1.3em; - @include size(margin, 0 5px); - - @media screen and (min-width: 62.5em) { - margin: 0; - } -} - -.white-box { - @include size(padding, 10px); - @include white-box; -} - - -ul.plain { - list-style:none; - margin: 0; - padding: 0; -} - - -.theme-list-link { - @include mono; - @include size(font-size, 11px); - - &:after { - @include size(padding-left, 11px); - content: url("/static/img/arrow-teal.png"); - vertical-align: middle; - } -} - - -.left-column, .right-column { - @include size(max-width, 600px); -} -@media screen and (min-width: 62.5em) { - .left-column { - @include size(width, 470px); - float: left; - } - .right-column { - @include size(width, 470px); - float:right; - } -} - -.pagination { - display: block; - @include size(font-size, 12px); - @include size(padding, 6px); - text-align:center; -} - -.simple-hidden-initially { - display: none; -} diff --git a/apps/wolnelektury_core/static/scss/main/book_box.scss b/apps/wolnelektury_core/static/scss/main/book_box.scss deleted file mode 100755 index d318fda34..000000000 --- a/apps/wolnelektury_core/static/scss/main/book_box.scss +++ /dev/null @@ -1,543 +0,0 @@ -@mixin inner-box { - display: block; - color: black; - @include size(margin, 1px); - @include size(padding, 8px 10px); - @include white-box; -} - - -.cover-area { - float: left; - @include size(margin-right, 15px); - @include size(margin-bottom, 5px); - - @include min-screen($S_BOOK_SHORT_FULL) { - position: absolute; - top: 0; - left: 0; - margin-right: 0; - } - - img.cover { - @include size(height, 193px / 2); - @include size(width, 139px / 2); - - @include min-screen($S_BOOK_SHORT_MEDIUM) { - @include size(height, 193px); - @include size(width, 139px); - } - } -} - -.book-mini-box { - /* Original design fits 6 boxes horizontally in 975px (162.5px each), - * but we really want to fit 2 boxes on a 320px mobile screen. */ - - @include size(width, 160px); - display: inline-block; - vertical-align: top; - - @include min-screen(350px) { - @include size(width, 162.5px); - } - - .book-mini-box-inner { - @include inner-box; - @include size(height, 271px); - @include size(margin, 1px); - @include size(padding, 8px 9px); - overflow: hidden; - - @include min-screen(350px) { - @include size(padding, 8px 10px); - } - - a { - display: block; - } - } - img.cover { - @include size(height, 193px); - @include size(width, 139px); - @include size(margin-bottom, 18px); - } - .language { - color: #aaa; - float: right; - @include mono; - @include size(font-size, 10px); - text-transform: uppercase; - position: relative; - @include size(top, -20px); - } - .desc { - margin-left: 0; - } - .author { - @include size(font-size, 11px); - @include mono; - color: #6d7877; - display: block; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - .title { - @include size(font-size, 14px); - color: #242424; - } -} - - - -.work-list { - margin: 0; - padding: 0; - list-style: none; - - .Book-item { - @include min-screen($S_BOOK_SHORT_FULL) { - display: inline-block; - } - vertical-align: top; - } -} - - -.book-box { - margin: 0; - vertical-align: top; - - /* */ - a { - color: #0D7E85; - } - - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(width, $W_BOOK_SHORT_FULL); - } - - .book-box-inner { - position: relative; - @include inner-box; - @include size(min-height, 197.5px); - } -} - - -.book-wide-box { - margin: 0; - vertical-align: top; - - @media screen and (min-width: 62.5em) { - @include size(width, 975px); - } - - .book-box-inner { - position: relative; - @include size(min-height, 244px); - @include inner-box; - @include size(margin-left, 0); - @include size(margin-right, 0); - - .book-left-column { /* FIXME */ - @media screen and (min-width: 62.5em) { - float: left; - @include size(width, 536px); - } - } - - .license-icon { - display: block; - @include size(margin-top, 5px); - } - - @include min-screen($S_BOOK_SHORT_FULL) { - // Show full title on the work's page. - - .book-box-body { - height: auto; - @include size(min-height, 170px); - - .book-box-head .title { - height: auto; - @include size(min-height, 57.6px); - } - } - } - - .book-box-head, - .tags, - .book-box-tools { - @media screen and (min-width: 62.5em) { - @include size(width, 382px); - } - } - - #theme-list-wrapper { - @include min-screen($S_BOOK_SHORT_MEDIUM) { - @include size(margin-left, 154px); - @include size(width, 300px); - } - margin-bottom: 0; - - p { - @include size(margin-top, 10px); - @include size(margin-bottom, 10px); - } - } - - .right-column { - @include size(margin-top, 16px); - // Eat the padding - @include size(margin-left, -10px); - @include size(margin-right, -10px); - max-width: none; - - @media screen and (min-width: 62.5em) { - @include size(width, 415px); - // Eat the padding - @include size(margin-top, -8px); - } - - .other-tools, - .other-download { - @include size(font-size, 11px); - clear: left; - @include size(margin-top, 25px); - line-height: 1.75em; - @include size(margin-left, 15px); - - h2 { - margin: 0; - @include size(font-size, 11px); - @include mono; - } - - @include min-screen($S_BOOK_SHORT_FULL) { - float: left; - clear: none; - @include size(width, 145px); - @include size(margin-top, 50px); - @include size(margin-right, 0); - @include size(margin-bottom, 0); - @include size(margin-left, 5px); - } - - @include min-screen(1000px) { - @include size(margin-top, 50px); - line-height: 1.2em; - } - } - .other-download { - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(margin-left, 15px); - @include size(width, 220px); - } - } - } - } -} - -@media screen and (min-width: 50em) { - .picture.book-wide-box .right-column { - float: none; - @include size(width, 415px); - top: 0; - @include size(margin-left, 550px); - margin-top: 0em; - } -} - - -.book-box-body { - @include size(margin-bottom, 10px); - @include min-screen($S_BOOK_SHORT_FULL) { - margin-bottom: 0; - @include size(height, 170px); - } - position: relative; - - .book-box-head, - .tags, - .book-box-tools { - @include min-screen($S_BOOK_SHORT_FULL) { - margin-left: 154px; - } - } - - .book-box-head { - @include size(padding-top, 14px); - @include size(margin-bottom, 10px); - - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(min-height, 70px); - } - - a { - color: black; - } - .author { - @include size(font-size, 11px); - @include mono; - @include size(line-height, 13.2px); - @include size(max-height, 26.4px); - overflow: hidden; - - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(max-width, 264px); - } - } - .title { - @include size(font-size, 24px); - line-height: 1.2em; - @include size(margin-top, 7.2px); - @include size(margin-bottom, 12px); - - @include min-screen($S_BOOK_SHORT_FULL) { - margin-bottom: 0; - @include size(height, 57.6px); - overflow: hidden; - } - } - } - - .tags { - @include size(font-size, 11px); - line-height: 1.2em; - margin-bottom: 5px; - - @include min-screen($S_BOOK_SHORT_FULL) { - clear: right; - @include size(max-height, 57.6px); - overflow: hidden; - } - - .category { - display: block; - @include size(margin-top, 6px); - @include size(margin-bottom, 6px); - - @include min-screen($S_BOOK_SHORT_FULL) { - display: inline; - } - - .mono { - @include mono; - } - - .book-box-tag { - @include size(margin-left, 4.4px); - @include size(margin-right, 5.5px); - } - } - } - -} - - - -.book-box-tools { - @include size(font-size, 11px); - margin: 0; - padding: 0; - list-style: none; - - clear: left; - - @include min-screen($S_BOOK_SHORT_MEDIUM) { - clear: none; - @include size(margin-left, 139px + 15px); - } - - li { - @include mono; - margin-top: 1em; - - @include min-screen($S_BOOK_SHORT_FULL) { - display: inline-block; - margin-top: 0; - } - } - - .book-box-read { - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(width, 126.5px); - } - - a { - @include mono; - } - - a:before { - content: url("/static/img/read.png"); - @include size(font-size, 25px); - @include size(margin-right, 3.71px); - vertical-align: middle; - font-weight: normal; - } - } - - .book-box-download { - position: relative; - - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(width, 93.5px); - } - - a { - position: relative; - z-index: 101; - - @mixin downarrow { - color: #0D7E85; - - &:before { - content: url("/static/img/download.png"); - @include size(font-size, 25px); - @include size(margin-right, 3.71px); - vertical-align: middle; - font-weight: normal; - display: inline; - } - } - - &.downarrow { - @include downarrow; - &.hoverclick { - color: black; - &:before { - display: none; - } - - @include min-screen($S_BOOK_SHORT_FULL) { - @include downarrow; - } - } - } - } - - .book-box-formats { - @include size(padding-left, 19px); - - @include min-screen($S_BOOK_SHORT_FULL) { - display: none; - position: absolute; - - @include size(width, 180px); - @include size(padding-top, 38px); - @include size(padding-bottom, 9px); - @include size(padding-left, 19px); - @include size(padding-right, 19px); - - @include white-box; - - z-index: 100; - - @include size(top, -16px); - @include size(left, -19px); - } - - span { - display: block; - @include size(margin-top, 16px); - - a { - &:before { - content: url("/static/img/download.png"); - @include size(font-size, 25px); - @include size(margin-right, 3.71px); - vertical-align: middle; - font-weight: normal; - } - } - - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(margin-top, 0); - - &:first-child { - @include size(margin-top, 16px); - } - a:before { - display:none; - } - } - } - } - - &:hover .book-box-formats, - &.hover .book-box-formats { - display: block; - } - } - - .book-box-audiobook { - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(width, 77px); - } - - a:before { - content: url("/static/img/listen.png"); - @include size(font-size, 25px); - @include size(margin-right, 3.71px); - vertical-align: middle; - font-weight: normal; - } - - } -} - - - - -.star { - @include size(font-size, 22.5px); - @include size(margin-right, 11.25px); - position: absolute; - right: 0; - - button::-moz-focus-inner { - padding: 0; - border: 0 - } - .if-unlike button { - font-size: 1em; - font-family: inherit; - border: 0; - background: none; - margin: 0; - padding: 0; - color: #757575; - } - .if-like a { - display:block; - text-align:right; - padding: 0; - } -} -.like .if-unlike { - display: none; -} -.unlike .if-like { - display: none; -} - - -#book-detail .see-also, -#picture-detail .see-also { - h1 { - @include size(height, 32px); - margin: 0; - @include size(padding-top, 19px); - @include size(padding-left, 10px); - - @include size(font-size, 11px); - @include mono; - font-weight: normal; - - @media screen and (min-width: 33em) { - @include size(padding-left, 19px); - } - } -} diff --git a/apps/wolnelektury_core/static/scss/main/book_list.scss b/apps/wolnelektury_core/static/scss/main/book_list.scss deleted file mode 100755 index d4115dcbb..000000000 --- a/apps/wolnelektury_core/static/scss/main/book_list.scss +++ /dev/null @@ -1,92 +0,0 @@ -/* listing of all books */ - -#book-a-list { - #book-list-nav { - @include size(border-width, 0); - @include size(border-bottom-width, 1px); - border-style: solid; - border-color: #CFCFCF; - @include size(padding, 9.75px); - line-height: 2em; - - @media screen and (min-width: 30em) { - @include size(border-bottom-width, 0px); - @include size(border-left-width, 1px); - float: right; - width: 50%; - } - - @media screen and (min-width: 62.5em) { - line-height: 1.3em; - } - - h2 { - cursor: pointer; - - &:after { - @include size(padding-left, 10px); - content: url("/static/img/arrow-gray.png"); - vertical-align: top; - } - - @media screen and (min-width: 30em) { - font-size: 1em; - margin: 0; - cursor: regular; - - &:after { - display: none; - } - } - } - - #book-list-nav-index { - display: none; - @media screen and (min-width: 30em) { - display: block !important; - } - } - - ul { - list-style-type: none; - @include size(margin, 5px); - padding: 0; - } - .book-list-show-index { - display: none; - } - } - - #book-list { - @include size(padding-left, 5px); - line-height: 2em; - - @media screen and (min-width: 62.5em) { - @include size(padding-left, 50px); - line-height: 1.3em; - } - - ol { - @include size(padding-left, 13px); - @include size(margin, 4px 0 15.6px 0); - list-style: none; - } - h2 { - @include size(font-size, 13px); - margin: 0; - a { - color: black; - } - } - } - - #book-list-up { - display: block; - position: fixed; - @include size(bottom, 50px); - @include size(right, 50px); - @include size(border-left, solid 1px #CFCFCF); - @include size(padding, 20px 10px); - background-color: white; - } -} diff --git a/apps/wolnelektury_core/static/scss/main/catalogue.scss b/apps/wolnelektury_core/static/scss/main/catalogue.scss deleted file mode 100755 index ba30e8271..000000000 --- a/apps/wolnelektury_core/static/scss/main/catalogue.scss +++ /dev/null @@ -1,29 +0,0 @@ -/* listing of all books */ - -.catalogue-catalogue { - ul { - column-width: 25em; - -moz-column-width: 25em; - -webkit-column-width: 25em; - - @include size(padding-left, 10px); - - @media screen and (min-width: 20em) { - @include size(padding-left, 40px); - } - - li { - margin-bottom: 1em; - - @media screen and (min-width: 62.5em) { - margin-bottom: .5em; - } - } - } - - h2 { - @include size(font-size, 26px); - margin: 0; - @include size(padding, 26px); - } -} diff --git a/apps/wolnelektury_core/static/scss/main/cite.scss b/apps/wolnelektury_core/static/scss/main/cite.scss deleted file mode 100755 index eb3a51139..000000000 --- a/apps/wolnelektury_core/static/scss/main/cite.scss +++ /dev/null @@ -1,61 +0,0 @@ -.cite { - display: block; - color: black; - background: white; - @include size(padding, 30px 20px 1px 80px); - - .vip { - margin: 0; - color: #575C63; - @include size(font-size, 11px); - } - - .cite-body { - @include size(font-size, 18px); - line-height: 1.3em; - - h4 { - margin: 0; - } - .didaskalia { - font-style: italic; - } - .verse { - // Cancel any indentation. - padding-left: 0 !important; - } - .person { - font-style: inherit; - } - } - - blockquote { - padding: 0; - margin: 0; - - p { - margin: 0; - } - } - - .source - { - color: #444; - @include mono; - @include size(font-size, 11px); - @include size(margin-top, 16px); - } -} - - - - -.book-wide-box .cite { - background-color: #f7f7f7; - vertical-align: middle; - @include min-screen(1000px) { - @include size(width, 395px); - } - margin: 0; - @include size(padding, 10px); -} diff --git a/apps/wolnelektury_core/static/scss/main/const.scss b/apps/wolnelektury_core/static/scss/main/const.scss deleted file mode 100644 index 2ebc4b81c..000000000 --- a/apps/wolnelektury_core/static/scss/main/const.scss +++ /dev/null @@ -1,3 +0,0 @@ -$S_BOOK_SHORT_MEDIUM: 320px; -$S_BOOK_SHORT_FULL: 512px; -$W_BOOK_SHORT_FULL: 487.5px; diff --git a/apps/wolnelektury_core/static/scss/main/dialogs.scss b/apps/wolnelektury_core/static/scss/main/dialogs.scss deleted file mode 100755 index 2902862fc..000000000 --- a/apps/wolnelektury_core/static/scss/main/dialogs.scss +++ /dev/null @@ -1,138 +0,0 @@ -.dialog-window { - position: absolute; - display: none; - background-color: transparent; - @include size(margin-top, -5px); - @include size(margin-left, 10px); - @include size(width, 200px); - - @media screen and (max-width: 29.999999em) { - left: 0 !important; - right: 0; - @include size(margin-left, 0); - width: auto; - } - - div.header { - @include mono; - @include size(font-size, 11px); - width: 4em; - background-color: #FFF; - padding: 1em; - right: 0; - left: auto; - float: right; - text-align: center; - - @media screen and (min-width: 30em) { - padding-top: 0.5em; - padding-bottom: 0.5em; - border-right: 0.3em solid #DDD; - } - } - - div.target { - background-color: #FFF; - color: black; - border-bottom: 0.3em solid #DDD; - padding: 1em 10px; - clear: both; - - @media screen and (min-width: 30em) { - border-right: 0.3em solid #DDD; - padding-left: 1em; - padding-right: 1em; - } - } - - h1 { - @include size(font-size, 12px); - font-weight: normal; - margin-top: .4em; - } - - textarea, input { - width: 100%; - } -} - - - - - - - -.cuteform { - @include size(font-size, 11px); - - ol, ul { - padding: 0; - margin: 0; - list-style: none; - @include size(font-size, 11px); - - li { - margin-top: 0.7em; - } - } - - label { - display: block; - } - - span.help-text { - display: block; - font-size: 0.8em; - color: #999; - } - - .error { - color: #BF3024; - display: block; - } - - .errorlist { - color: #BF3024; - } -} - - -.jqmOverlay { background-color: #000; } - - - -.hidelabels label { - @include hidden-label; -} - - -@media screen and (min-width: 30em) { - #login-window { - @include size(width, 260px); - } - #register-window { - width: 26em; - } - #context-login-window { - width: 26em; - } - #suggest-window { - width: 26em; - } - #suggest-publishing-window { - width: 29em; - } - #custom-pdf-window { - width: 24em; - } -} - -#suggest-window textarea { - height: 6em; -} -#suggest-publishing-window textarea { - height: 3em; -} -#custom-pdf-window label { - display: inline; -} diff --git a/apps/wolnelektury_core/static/scss/main/footer.scss b/apps/wolnelektury_core/static/scss/main/footer.scss deleted file mode 100755 index 8969a5ad7..000000000 --- a/apps/wolnelektury_core/static/scss/main/footer.scss +++ /dev/null @@ -1,26 +0,0 @@ -#footer-wrapper { - @include size(margin-top, 50px); - @include size(padding-top, 30px); - background: #fff; - color: #767676; - @include size(border-top, 1px solid #ddd); -} - -footer#main { - @include size(font-size, 10px); - @include size(margin-left, 5px); - @include size(margin-right, 5px); - - @media screen and (min-width: 62.5em) { - @include size(width, 975px); - margin: auto; - } - - p { - @include size(margin-top, 2.5px); - @include size(margin-bottom, 2.5px); - margin-left: 0; - margin-right: 0; - } -} - diff --git a/apps/wolnelektury_core/static/scss/main/form.scss b/apps/wolnelektury_core/static/scss/main/form.scss deleted file mode 100755 index 42e867595..000000000 --- a/apps/wolnelektury_core/static/scss/main/form.scss +++ /dev/null @@ -1,26 +0,0 @@ -form table { - th { - vertical-align: top; - text-align: left; - font-weight: normal; - } - td { - padding-bottom: 1em; - } - - .required th:after { - content: " *"; - } - - .errorlist { - color: red; - margin: 0; - padding: 0; - list-style: none; - } - .helptext { - color: #888; - font-size: .9em; - font-style: italic; - } -} diff --git a/apps/wolnelektury_core/static/scss/main/fragment.scss b/apps/wolnelektury_core/static/scss/main/fragment.scss deleted file mode 100755 index 4c765f6fe..000000000 --- a/apps/wolnelektury_core/static/scss/main/fragment.scss +++ /dev/null @@ -1,35 +0,0 @@ -.Fragment-item, .PictureArea-item { - @include size(margin-bottom, 20px); - @include white-box; - - .fragment { - color: black; - display: block; - } - .toggle { - @include size(font-size, 11px); - display: block; - @include size(padding, 5px 0); - } -} - -.area { - display: block; - color: black; - background: white; - @include size(padding, 30px 20px 20px 20px); - position: relative; - clear: both; - - .area-thumbnail { - display:block; - @include size(width, 100px); - float: left; - } - - .area-description { - float: right; - @include size(padding, 10px); - @include size(width, 256px); - } -} diff --git a/apps/wolnelektury_core/static/scss/main/header.scss b/apps/wolnelektury_core/static/scss/main/header.scss deleted file mode 100755 index 63bd8677c..000000000 --- a/apps/wolnelektury_core/static/scss/main/header.scss +++ /dev/null @@ -1,215 +0,0 @@ -$header_bg: #191919; - - -#header-wrapper { - position: relative; - - /* Upper-half both sides dark background */ - &:before { - content: " "; - display: block; - z-index: -1; - position: absolute; - top: 0; - @include size(bottom, 45px); - left: 0; - width: 100%; - background-color: $header_bg; - } - - /* Left-side dark background */ - &:after { - content: " "; - display: block; - z-index: -1; - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 50%; - background-color: $header_bg; - } -} - - -header#main { - @include size(line-height, 20px); /* Make links easier to click when wrapped. */ - background-color: $header_bg; - color: #bbb; - - text-align:center; - - @media screen and (min-width: 62.5em) { - position: relative; - @include size(height, 94px); - @include size(width, 975px); - margin: auto; - } - - a { - color: #17CFDB; - } - - #logo { - display: block; - @include size(height, 94px); - - @media screen and (min-width: 24em) { - @include size(width, 173px); - float: left; - } - } - - #tagline { - margin-top: 0; - @include size(margin-left, 5px); - @include size(margin-right, 5px); - padding-top: 0; - @include size(font-size, 11px); - - @media screen and (min-width: 24em) { - @include size(padding-top, 6px); - @include size(font-size, 13px); - @include size(margin-left, 180px); - text-align: right; - } - - @media screen and (min-width: 62.5em) { - position: absolute; - @include size(top, 10px); - @include size(left, 255px); - @include size(margin-left, 0px); - } - } - - #user-info { - margin-top: 0; - @include size(margin-left, 5px); - @include size(margin-right, 5px); - padding-top: 0; - @include mono; - @include size(font-size, 10px); - position: relative; - - @media screen and (min-width: 24em) { - @include size(padding-top, 15px); - @include size(margin-left, 180px); - text-align: right; - } - @media screen and (min-width: 62.5em) { - position: absolute; - top: 0; - right: 0; - @include size(margin-left, 0); - @include size(margin-right, 0); - } - - /* We want submenu on far left on small screens. */ - .hidden-box-wrapper { - position: static; - @media screen and (min-width: 24em) { - position: relative; - } - } - - #user-menu { - display: none; - - text-align: left; - line-height:1.6em; - left: 0; - right: 0; - top: 2em; - - @media screen and (min-width: 15em) { - right: auto; - width: 15em; - } - - a { - color: #0D7E85; - } - } - } - - form#search-area { - position: relative; - clear: both; - @include size(height, 45px); - background: #444444; - color: white; - - @media screen and (min-width: 62.5em) { - position: absolute; - @include size(top, 49px); - @include size(left, 240px); - @include size(right, 0); - } - - #search-field { - position: absolute; - @include size(top, 5px); - @include size(left, 5px); - @include size(right, 113px); - - label { - @include hidden-label; - } - input#search { - z-index: 200; - position: relative; - @include size(height, 33px); - width: 100%; - padding: 0; - @include size(padding-left, 13px); - @include size(line-height, 32.5px); - - border: none; - @include size(border-radius, 5px); - @include box-shadow(0 0 6.5px #444444 inset); - - font-family: Georgia; - @include size(font-size, 13px); - background-color: white; - color: black; - - /* styling search placeholder */ - &::placeholder - { - font-family: Georgia; - font-style: italic; - color: #767676; - } - &::-webkit-input-placeholder - { - font-family: Georgia; - font-style: italic; - color: #767676; - } - &::-moz-placeholder - { - font-family: Georgia; - font-style: italic; - color: #767676; - } - } - } - button { - display: inline-block; - position: absolute; - top: 0; - right: 0; - @include size(height, 45px); - @include size(width, 94px); - margin: 0; - padding: 0; - - border: none; - - @include mono; - @include size(font-size, 11px); - background: #018189; - color: white; - } - } -} diff --git a/apps/wolnelektury_core/static/scss/main/hidden.scss b/apps/wolnelektury_core/static/scss/main/hidden.scss deleted file mode 100755 index 718525be0..000000000 --- a/apps/wolnelektury_core/static/scss/main/hidden.scss +++ /dev/null @@ -1,53 +0,0 @@ -.hidden-box-wrapper { - position: relative; - - .hidden-box { - position: absolute; - left: 0; - display: none; - @include size(padding, 10px 10px 5px 10px); - @include white-box; - - z-index: 500; - - ul { - list-style: none; - padding: 0; - margin: 0; - @include size(font-size, 11px); - - @include size(column-width, 132px); - @include size(-moz-column-width, 132px); - @include size(-webkit-column-width, 132px); - - @media screen and (min-width: 24em) { - @include size(width, 320px); - } - - @media screen and (min-width: 34em) { - @include size(width, 480px); - } - - @media screen and (min-width: 62.5em) { - @include size(width, 528px); - } - - - - li { - margin-bottom: 1em; - - @media screen and (min-width: 62.5em) { - margin-bottom: .5em; - } - } - } - } -} - -@media screen and (min-width: 24em) { - #menu-collections ul { - @include size(width, 180px); - } -} - diff --git a/apps/wolnelektury_core/static/scss/main/main_content.scss b/apps/wolnelektury_core/static/scss/main/main_content.scss deleted file mode 100755 index 87e140232..000000000 --- a/apps/wolnelektury_core/static/scss/main/main_content.scss +++ /dev/null @@ -1,8 +0,0 @@ -#main-content { - position: relative; - - @media screen and (min-width: 62.5em) { - @include size(width, 975px); - margin: auto; - } -} diff --git a/apps/wolnelektury_core/static/scss/main/main_page.scss b/apps/wolnelektury_core/static/scss/main/main_page.scss deleted file mode 100755 index ddce4fc21..000000000 --- a/apps/wolnelektury_core/static/scss/main/main_page.scss +++ /dev/null @@ -1,256 +0,0 @@ -#big-cite { - background-color: #444; - color: white; - padding: 0; - margin: 0; - background-size: 100%; - background-position: 50% 68%; - background-repeat: repeat-y; - - background-image: url(/static/img/backdrop/book-drawer2.jpg); - - @media screen and (min-width: 62.5em) { - background-image: url(/static/img/backdrop/book-drawer2.jpg); - } - - .cite { - @include size(padding, 46px 10px 48px 0); - background: none; - color: white; - - @media screen and (min-width: 30em) { - @include size(padding-right, 40px); - } - - .vip { - @include size(margin-left, 10px); - @include size(margin-top, 2.5px); - @include size(margin-bottom, 5px); - @include size(font-size, 11px); - - @media screen and (min-width: 16em) { - padding-left: 10%; - @include size(margin-left, -18px); - } - - @media screen and (min-width: 62.5em) { - float: left; - padding-left: 0; - @include size(margin-left, 16px); - text-align: right; - @include size(width, 147px); - } - } - - .cite-body { - @include size(margin, .5px); - @include size(font-size, 20px); - line-height: 1.16em; - - @media screen and (min-width: 30em) { - @include size(font-size, 30px); - } - } - - .source { - @include size(margin-top, 16px); - @include size(margin-bottom, 16px); - @include size(margin-right, 2px); - @include size(font-size, 12px); - } - - /* Make cite body and source slide to the left. */ - .cite-body, .source { - @include size(margin-left, 10px); - - @media screen and (min-width: 16em) { - padding-left: 21.9%; - @include size(margin-left, -38px); - } - - @media screen and (min-width: 62.5em) { - padding-left: 0; - @include size(margin-left, 175px); - } - } - - /* Semi-transparent background. */ - .cite-body span, - .vip span, - .source span { - color: white; - background-color: rgb(0, 0, 0); - background-color: rgba(0, 0, 0, 0.6); - /* For IE 5.5 - 7*/ - filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); - /* For IE 8*/ - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; - } - } - - /* a long cite displays smaller */ - .cite-small .cite-body { - @include size(font-size, 16px); - @media screen and (min-width: 30em) { - @include size(font-size, 20px); - } - } - - h2 { - margin: 0; - @include size(font-size, 11px); - color: #575c63; - } -} - - -#promo-box { - @include size(margin-top, 16px); - - @media screen and (min-width: 33em) { - float: right; - @include size(margin-top, -51px); - @include size(width, 320px); - } - - h1 { - @include size(padding, 20px 5px 0 10px); - @include size(height, 31px); - margin: 0; - background: #191919; - color: white; - @include mono; - @include size(font-size, 13px); - font-weight: normal; - - @media screen and (min-width: 33em) { - @include size(padding-left, 25px); - @include size(padding-right, 25px); - } - } - - #promo-box-body { - @include size(padding, 20px 5px); - @include size(border-bottom, 2px solid #efefef); - background: #efefef; - - @media screen and (min-width: 33em) { - @include size(padding-left, 28px); - @include size(padding-right, 28px); - } - - @media screen and (min-width: 62.5em) { - @include size(height, 300px); - } - - a { - display: block; - color: #6c6c6c; - } - p { - margin-top: 0; - @include size(font-size, 12px); - line-height: 1.55em; - color: #6c6c6c; - } - h2, h3 { - color: #0d777e; - @include size(font-size, 11px); - @include size(height, 27.5px); - margin: 0; - @include mono; - font-weight: normal; - - &:after { - content: " >"; - } - } - } -} - - -#main-last { - h1 { - @include size(height, 32px); - margin: 0; - @include size(padding-top, 19px); - @include size(padding-left, 10px); - - @include size(font-size, 11px); - @include mono; - font-weight: normal; - - @media screen and (min-width: 33em) { - @include size(padding-left, 19px); - } - - a { - color: black; - - &:after { - content: " >"; - } - } - } - .book-mini-box:nth-child(3) { - @media screen and (min-width: 30em) { - margin-right: 3em; - } - @media screen and (min-width: 33em) { - margin-right: 0; - } - } -} - - -.infopages-box { - margin: 0; - @include size(margin-top, 5px); - @include size(padding, 0 5px); - vertical-align: top; - color: #989898; - - @media screen and (min-width: 20em) { - display: inline-block; - @include size(width, 206px); - @include size(padding-left, 17px); - @include size(padding-right, 17px); - } - - h1 { - @include size(height, 28px); - margin: 0; - @include size(padding-top, 25px); - @include size(font-size, 11px); - color: #017e85; - font-weight: normal; - @include mono; - } - - a { - color: black; - } - - ol, ul { - @include size(font-size, 11px); - list-style: none; - padding: 0; - margin: 0; - line-height: 1.45em; - - li { - @include size(margin-bottom, 8px); - @media screen and (min-width: 62.5em) { - @include size(margin-bottom, 2.5px); - } - } - } - - .social-links { - @include size(margin-top, 10px); - - a { - @include size(margin-right, 6px); - } - } -} diff --git a/apps/wolnelektury_core/static/scss/main/menu.scss b/apps/wolnelektury_core/static/scss/main/menu.scss deleted file mode 100755 index 846e4c88c..000000000 --- a/apps/wolnelektury_core/static/scss/main/menu.scss +++ /dev/null @@ -1,177 +0,0 @@ -#nav-line { - background-color: #e2e2e2; - position: relative; - - @media screen and (min-width: 62.5em) { - @include size(width, 975px); - margin: auto; - } - - #show-menu { - display: block; - float: left; - @include size(line-height, 13px); - @include size(padding, 18px 13px); - color: #0c7076; - @include size(font-size, 11px); - @include mono; - - .long { - display: none; - - &:after { - @include size(padding-left, 10px); - content: url("/static/img/arrow-gray.png"); - vertical-align: top; - } - } - - @media screen and (min-width: 20em) { - .long { display: inline; } - .short { display: none; } - } - - @media screen and (min-width: 53em) { - display: none; - } - } - - ul#menu { - list-style: none; - padding: 0; - margin: 0; - - display: none; - position: absolute; - @include size(top, 49px); - left: 0; - @include size(right, 10px); - z-index: 400; - - @media screen and (min-width: 24em) { - right: auto; - } - - @media screen and (min-width: 53em) { - display: block !important; - position: static; - @include size(margin-left, 6px); - } - - li.menu { - background-color: #e2e2e2; - - @media screen and (min-width: 53em) { - float: left; - } - - a.menu { - display: block; - @include size(line-height, 13px); - @include size(padding, 18px 12px 15px); - @include size(border-bottom, 3px solid #e2e2e2); - color: #0c7076; - @include size(font-size, 11px); - @include mono; - } - - a.hidden-box-trigger:hover { - border-bottom-color: white; - } - } - } - - #lang-menu { - display: block; - float: right; - - background: #f7f7f7; - @include mono; - - @media screen and (min-width: 15em) { - position: relative; - } - - #lang-button { - @include size(padding-left, 25px); - @include size(padding-right, 20px); - - display:block; - @include size(line-height, 17px); - @include size(padding-top, 16px); - @include size(padding-bottom, 16px); - - @include size(font-size, 10px); - color: #717171; - - .label { - display: none; - - @media screen and (min-width: 62.5em) { - display: inline; - } - - &:after { - @include size(padding-left, 10px); - content: url("/static/img/arrow-gray.png"); - vertical-align: top; - } - } - - .lang-flag { - @include size(font-size, 13px); - @include size(line-height, 15px); - } - } - - #lang-menu-items { - z-index: 9999; - - button { - @include mono; - display: none; - background: #f7f7f7; - color: #6f6f6f; - cursor: pointer; - width: 100%; - margin: 0; - @include size(padding, 10px 0); - - @media screen and (min-width: 62.5em) { - @include size(padding, 5px 0); - } - - border-width: 0; - @include size(border-bottom, 1px solid #ddd); - - @include size(font-size, 13px); - - &.active { - color: #000; - } - } - } - - &:hover, &.hover { - #lang-menu-items { - position: absolute; - padding: 0; - left: 0; - right: 0; - - @media screen and (min-width: 15em) { - left: auto; - @include size(width, 180px); - @include size(top, 49px); - } - @media screen and (min-width: 62.5em) { - width: 100%; - } - - button { - display: block; - } - } - } - } -} diff --git a/apps/wolnelektury_core/static/scss/main/picture_box.scss b/apps/wolnelektury_core/static/scss/main/picture_box.scss deleted file mode 100644 index 69d34a398..000000000 --- a/apps/wolnelektury_core/static/scss/main/picture_box.scss +++ /dev/null @@ -1,71 +0,0 @@ -.picture { - &.book-wide-box { - .cover-area { - position: static; - @include size(margin-right, 15px); - @media screen and (min-width: 62.5em) { - margin-right: 0; - } - - img.cover { - @include size(width, 535px); - height: auto; - } - } - - .book-box-head, .tags, .book-box-tools { - margin-left: 0; - } - - - @media screen and (min-width: 62.5em) { - .book-box-head, .tags, .book-box-tools { - float: right; - @include size(width, 403px); - } - } - - .other-tools { - margin: 5em 0 0 0; - } - - .book-box-tools, .tags, #theme-list-wrapper { - clear: both; - margin-left: 0; - } - .book-box-body { - height: auto; - margin-bottom: 1em; - } - - @media screen and (min-width: 50em) { - .book-box-body { - height: auto; - @include size(min-height, 170px); - margin-bottom: 0; - } - .book-box-tools, .tags { - clear: right; - } - - #theme-list-wrapper { - clear: right; - @include size(margin-left, 550px); - } - } - } - - li.book-box-download { - width: 15em; - } -} - - -.work-list { - .Picture-item { - @include min-screen($S_BOOK_SHORT_FULL) { - display: inline-block; - } - vertical-align: top; - } -} diff --git a/apps/wolnelektury_core/static/scss/main/search.scss b/apps/wolnelektury_core/static/scss/main/search.scss deleted file mode 100755 index d8a1e0622..000000000 --- a/apps/wolnelektury_core/static/scss/main/search.scss +++ /dev/null @@ -1,109 +0,0 @@ -/* jquery UI overrides us */ -.ui-menu .ui-menu-item a { - color: #0d7e85 !important; - line-height: 1.636em !important; -} - -.ui-widget { - font-family: Georgia !important; - @include size(font-size, 10px !important); -} - -.ui-widget-content { - background: #EEEEEE !important; /* #E2E2E2 ? */ - border-radius: 0px !important; -} - - - -.inline-tag-lists p span:first-child { - color: #281d1c; -} - -/* just on search page */ -.top-tag-list { - @include size(margin-top, 22px); - @include size(margin-bottom, 16px); -} - - -.search-result { - @include size(border, 1px solid #ddd); - @include size(box-shadow, 2px 2px 2px #ddd); - @include size(margin, 1px); - background: white; - - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(width, $W_BOOK_SHORT_FULL -4px); - } - - @media screen and (min-width: 62.5em) { - @include size(width, 965px); - @include size(padding-right, 8px); - } - - .book-box { - display: inline-block; - - @include min-screen($S_BOOK_SHORT_FULL) { - @include size(width, $W_BOOK_SHORT_FULL - 4px); - } - - .book-box-inner { - border: none; - box-shadow: none; - margin: 0; - } - } -} - - - -.book-list-header { - @media screen and (min-width: 62.5em) { - @include size(width, 975px); - } - padding: 0em; - @include size(margin-left, -1px); - - .book-box-inner { - min-height: 1em; - } - - p { - @include size(font-size, 24px); - @include size(margin, 5px); - } -} - -.snippets { - @media screen and (min-width: 62.5em) { - @include size(width, 440px); - float: right; - } - - .snippet-text { - @include size(font-size, 12px); - @include size(margin, 13px 0); - @include size(padding, 12px); - background: #f7f7f7; - } - - .anchor { - display: none; - } -} - - -.search-hint-label { - display: inline-block; - @include size(font-size, 11px); - @include size(width, 275px); - line-height: 1.636em; -} - -.search-hint-category { - @include size(font-size, 11px); - line-height: 1.636em; -} - diff --git a/apps/wolnelektury_core/static/scss/main/tag.scss b/apps/wolnelektury_core/static/scss/main/tag.scss deleted file mode 100755 index d120a3f97..000000000 --- a/apps/wolnelektury_core/static/scss/main/tag.scss +++ /dev/null @@ -1,102 +0,0 @@ -.page-desc { - @include size(margin-left, 15px); -} - -#tagged-object-list { - @media screen and (min-width: 62.5em) { - .left-column, .right-column { - @include size(width, 480px); - } - } - - .see-also, .download { - float: left; - @include size(margin-top, 20px); - @include size(margin-bottom, 20px); - - h2 { - @include mono; - @include size(font-size, 11px); - margin: 0; - } - - ul { - @include size(font-size, 11px); - list-style: none; - padding: 0; - margin: 0; - } - } - - .see-also { - @include size(margin-left, 80px); - @include size(width, 143px); - } - .download { - @include size(margin-left, 20px); - } - - .left-column .see-also { - margin-left: 0; - } -} - -#description { - @include size(margin-bottom, 26px); - cursor: pointer; - - dl { - margin-top: 0; - } - dt { - display: inline; - font-weight: bold; - margin: 0; - } - dd { - display: inline; - margin: 0; - } - p { - margin-top: 0; - } - #description .meta { - list-style: none; - padding: 0; - margin: 0; - } - #description .meta li { - text-align: right; - color: #666; - @include size(font-size, 11.7px); - } -} - -.inline-tag-lists { - @include size(font-size, 11px); - - .inline-header { - @include mono; - display: inline-block; - vertical-align: top; - @include size(width, 77px); - } - - .inline-body { - display: inline-block; - vertical-align: top; - @include size(margin-bottom, 5.5px); - @include size(max-width, 385px); - - ul { - list-style: none; - padding: 0; - margin: 0; - - li { - display: inline-block; - @include size(margin-right, 11px); - } - } - } -} diff --git a/apps/wolnelektury_core/static/scss/polls/polls.scss b/apps/wolnelektury_core/static/scss/polls/polls.scss deleted file mode 100644 index 28cd5a5cf..000000000 --- a/apps/wolnelektury_core/static/scss/polls/polls.scss +++ /dev/null @@ -1,21 +0,0 @@ -.poll { - width: 400px; - ul { - list-style-type: none; - } -} - -.poll-bar { - border: solid 1px #ddd; - height:6px; - margin-bottom: 10px; -} - -.poll-bar-inner { - background: orange; - height: 6px; -} - -.poll-msg { - font-weight: bold; -} \ No newline at end of file diff --git a/apps/wolnelektury_core/static/scss/social/shelf_tags.scss b/apps/wolnelektury_core/static/scss/social/shelf_tags.scss deleted file mode 100644 index f20fba8b6..000000000 --- a/apps/wolnelektury_core/static/scss/social/shelf_tags.scss +++ /dev/null @@ -1,40 +0,0 @@ -.social-shelf-tags { - list-style: none; - padding: 0; - margin: 10px 0; - - @include min-screen($S_BOOK_SHORT_FULL) { - position: absolute; - top: 134px; - left: 152px; - padding: 10px 10px 5px 10px; - margin: 10px 0; - width: 310px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - - &:hover { - overflow: visible; - text-overflow: ellipsis; - white-space: normal; - z-index: 1000; - background: #fff; - box-shadow: 0 0 2px #ddd; - } - } - - li { - display: inline-block; - margin-right: .5em; - margin-bottom: .5em; - - a { - display: block; - padding: .2em .9em; - background: #ABDADE; - color: #08646b; - border-radius: 1em; - } - } -} diff --git a/apps/wolnelektury_core/static/scss/tools.scss b/apps/wolnelektury_core/static/scss/tools.scss deleted file mode 100644 index 76869c40d..000000000 --- a/apps/wolnelektury_core/static/scss/tools.scss +++ /dev/null @@ -1,70 +0,0 @@ -$default-em-size: 16px; - -@mixin size($name, $args) { - $rems: snowflake; - @each $val in $args { - $remval: $val; - @if type-of($val) == number { - @if unit($val) == "px" { - $remval: $val / $default-em-size * 1rem; - } - } - // Workaround for PySCSS issue with appending to empty lists. - @if $rems == snowflake { - $rems: $remval; - } - @else { - $rems: append($rems, $remval); - } - } - #{$name}: $args; - #{$name}: $rems; -} - -@mixin min-screen($size) { - @if unit($size) == "px" { - $size: $size / $default-em-size * 1em; - } - - @media screen and (min-width: $size) { - @content; - } -} - - -@mixin vendors($name, $args) { - @include size(-moz + $name, $args); - @include size(-webkit + $name, $args); - @include size(-moz + $name, $args); -} - -@mixin vendors($names, $args) { - @each $name in $names { - @include size($name, $args); - } -} - -@mixin box-shadow($args) { - @include vendors( - -moz-box-shadow - -webkit-box-shadow - box-shadow, - $args); -} - -@mixin mono { - font-family: "Andale Mono", "Lucida Sans Typewriter", "Courier New"; -} - -@mixin hidden-label { - display: block; - @include size(width, 1px); - @include size(height, 1px); - overflow: hidden; -} - -@mixin white-box { - @include size(border, 1px solid #ddd); - background: #fff; - @include box-shadow(2px 2px 2px #ddd); -} diff --git a/apps/wolnelektury_core/static/scss/widget.scss b/apps/wolnelektury_core/static/scss/widget.scss deleted file mode 100644 index 7d78730ef..000000000 --- a/apps/wolnelektury_core/static/scss/widget.scss +++ /dev/null @@ -1,150 +0,0 @@ -html, body { - padding: 0; - margin: 0; - overflow: hidden; -} - - -#wl { - background-color: #191919; - position:relative; - - a, a:visited, a:hover { - display: block; - line-height: 5.94rem; - border: 0; - - img { - border: 0; - max-width: 100%; - margin: 0; - vertical-align: middle; - } - } - - #wl-form { - background: #444; - color: white; - height: 2.8125rem; - position: relative; - } - #wl-search { - position: absolute; - left: .3125rem; - right: 2.9rem; - right: 22%; - top: .3125rem; - } - - #id_qq { - font-family: Georgia; - font-size: 0.8125rem; - - background-color: #FFFFFF; - border: medium none; - border-radius: 0.3125rem; - box-shadow: 0 0 0.40625rem #444444 inset; - color: #000000; - height: 2.0625rem; - width: 100%; - - line-height: 2.03125rem; - padding: 0 0 0 .8125rem; - position: relative; - box-sizing: border-box; - z-index: 200; - - &::-moz-placeholder { - color: #767676; - font-family: Georgia; - font-style: italic; - } - } - - button { - background: #018189; - border: none; - color: white; - display: inline-block; - font-size: .6875rem; - position: absolute; - right: 0; - top: 0; - width: 2rem; - - width: 20%; - height: 2.8125rem; - margin: 0; - padding: 0; - - img { - max-width: 100%; - } - } - -} - -.ui-menu { - width: 100%; - font-size: 0.7rem; - list-style-type: none; - padding: 0; - margin: 0; - border-style: solid; - border-color: #ddd; - border-width: 1px 0; - - li { - clear: right; - - &:nth-child(odd) { - background-color: rgba(255,255,255,.95); - } - - &:nth-child(even){ - background-color: rgba(238,238,238,.95); - } - - &:hover{ - background-color: #053469; - color:white; - } - - .ui-state-hover { - background-color: #fdf5ce; - } - - .search-hint-label { - line-height: 1.636em; - display: inline-block; - max-width: 80%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } - - .search-hint-category { - display: none; - @media screen and (min-width: 10em) { - display: block; - } - float: right; - font-size: .9em; - } - } - - a:hover { - text-decoration: none; - } -} - -.ui-corner-all { - cursor: pointer; - display:block; - - a { - text-decoration: none; - color: #0D7E85; - padding: 5px; - } -} diff --git a/apps/wolnelektury_core/templates/404.html b/apps/wolnelektury_core/templates/404.html deleted file mode 100644 index f3846aac4..000000000 --- a/apps/wolnelektury_core/templates/404.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - - -{% block titleextra %}404 - {% trans "Page does not exist" %}{% endblock %} - - -{% block body %} - -<h1>{% trans "Page not found" %}</h1> - - -<p class="normal-text"> -{% trans "We are sorry, but this page does not exist. Please check if you entered correct address or go to "%} <a href="/">{% trans "main page" %}</a>. -</p> - - - -{% endblock body %} diff --git a/apps/wolnelektury_core/templates/500.html b/apps/wolnelektury_core/templates/500.html deleted file mode 100644 index df74fe42d..000000000 --- a/apps/wolnelektury_core/templates/500.html +++ /dev/null @@ -1,24 +0,0 @@ -{% load i18n %} -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <title>Wolne Lektury :: 500 - {% trans "Server error" %}</title> - </head> - <body style="background: #F7F7F7;font-family:Georgia;margin:0;padding:0;font-size:.625em;"> - <div style="height:9.4em;background:#191919;"> - <div style="max-width:97.5em;margin:auto;"> -<img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAK0AAABeCAAAAAB0wssoAAAACXZwQWcAAACtAAAAXgCUaM/jAAAACXBIWXMAAAsTAAALEwEAmpwYAAASJElEQVRo3u1beXBdV3n/fd859+lpt2xLlhRb3mQplm3JzuLIO0mA0ASSkkAJWcp0IARo6QJtJgMztCl0p7RpgNIwmUkhtMMQSGiAbHbsJI6Nd8my5d1OFMmyZMmydr137zlf/zj3vsWS7GSGkWAmTzOS5r377vud7/zOt/y+71EFfocejPfQvof2PbTvof1dRasv+yq5P/Lbj5bSaMdDnvSFaUJLoBQokkxglAVXQFOHdzK0RA5vBF0AQCjD6BRiFQjJ9KIlAhFSgMUhJklZPYsMUwZXT8ZZIiIQhRYUgUja2G4tAESmFK6ehLNEREwZaB3iDMNT9IKlKYM7iW2JiImJnQ1FABEJ4YZrcUa14ZMyrbwFMTOYGATHgxCsOHpQuAwSCzu9vCWCMy1zip/hI7K8Q2vFWgZgp8iL6cniAjGxVzjk4EoE11HBnUBA2BIZFsr0ydPDWyL1lx8/u6/l8FnJQOucbmhbXbeq/ZdiiWh6eQsiYnpL2lZ/BGN7X9s1lGauIy7F6q5rWM44stkKC02nT6Dw3LcGz+wpWLay8Ss4sfvp4VtqvpN0aMHLb90Ul4NPHvmbXYYtTXueQACoY6B+3+j+A0/Obmy85+LzS9f+sB8igrz191Umtm1tSUpt7GAU9qY7YySMHLv2KcOMvhe2/sO6LW9+cNaIALL2K9zx6KtjEGVrbRvR1Jl2YrQSArC7P1fSS2Am8+uPlbXaNV0iQpu6vnvQCkOE67uGnHuYIoc7Se0gAgjQomqJmFmpJr3yQsv7CjztzVj23CFWWjFTvOZMMnRw01zpiADS3nmD81fcc26Dt+2qeV7Mq889qJRWSjFXlu61016Xpb3r6NYbikDErIL91bPeHFuldfwDrf2eYmYmaqAWhOF4Gm3rPl9E7Lb8a0BEzLxPrUicuC5Pz619BVorRcRe49vdqYunmwkigrcP3OI55na/vdZrqijWN/S9qZkVM1FR9b5EKsbJ9KFNRa7gZ7UVRMSszPbq8k61sGD1jkBrzawWf/ax+MF0qjOdHkxIXF1wKvju7i2txMyHx9ZsHlswmt/EIMxas34OZE8r3KKmCvHE0UEoOjwXH1z3/q9c3PzGCA/vXLu3b/bytgHFCz+4gnB0y/YBfyqhAqAJ1WZiUkpprWPa87yr3n9jftPrZ4q/nCjYm3uoedmtFWh/fcf5wPd93w/8wARipwbxZdF62vO8mPa8nIb1K0ZfPntf8snO4nuq/Te2dgSmbOO1JY++6PtBYIwVO/229TzP82Kepz2l85YOtRHgfW7ur7aNmOL6xsWmqe3Z037gG2PETm9+6yovImYi8mrra+dx8kdHgeLyVw/VV9VUyJHvbB/0/SmNDZPrCUSAK9G969evio2ceb7vto3HLfrb3vc+9B95tnkwGWQUP9Os1YTVTNWqmvX53VsOdHL+h0uaBPCfWNl3ZiAwvhUrdmq97aS1gwu3lPtwTWLXlre0XrChUe3cLCUNb59dd9WpnXsGsorgbJnpN3emxt1vwlPmDpmnPa+gMMGxivVrynD8xfa7Dn+oHP+zb87qNbE9Lx72fT8Z+EFgjMn0X5PymN7lWmiC9evLFJHE5A9UbNo4D+aNbd08q6555s9Lbz/W8ZOnV930tXMvv9aG8Zad0L6U9a+8M6wTScR60vqciInqP7cQOLVjb0IpqR09N1a8paHxBQl2vFq+6fb7f/adUGZKFRtpXUGyYVIaqLyTcj6SOKO3yJXUZiIidcfCju1v9CnNRLE1hwa75j+/f+22hLV4+8kn7m6M+646zpBIJbtWigCnL5F3IvGl1M3oruE7+LIry615/c+ePi9ixdqKsn3+ibLY7oKl7njZbXPqIsIwEytmpVwqGcqT5KSp0Gln7NiVC08ip8Qxs0NOl8kYQ+2IFpTsNmKttVZobec5ORav6Dy7yXO+4OyRj+kQLjus7sGcejYNMXqZlcN7JawEZmalmJnThuZJdTAiotXJQ66GsLagfnuCzg81+PsWzBYRgMxzK8o59XB2VRwB5pR5lXJPa621UqyYrmzdECxzWFOFxuXJSENE8K47eTHcdqlH62e+zkev9lrMyvCqw6NrQwqEeIu11koppbTKsLVSSoXPhy9dAW5oWaW4KI+VYk71a/gygYyKq/b4ELFWRDU2DRbleftKqrrbV3sQgGik9aaYUhELtP7Uqw94nrOgyvytlFLK8zzP055WHMGdDHDIHCbOe/xfYqEuOxna8IARgebp1rBEi91QtdsC8TP9a4M9FeVuq7CnaoZSipXSSmul5+KmuMsy0yZWSrtcTmu94anrtKc9pZRyTAk3hbLAZxA9NruuWCliJ29P4MEICM8HmJaNdRIAWnTzRnXwtAjljjavLmj56MozBALLUVV9QRMZ9yZ6C3NmXHQOBC4m04LBXufkmImW16w9YqwhA6LMPhtlxRMiCh0MKSrKHSQYjnInfSnU9NpILesYRkHttY0ze378elLFLHLtsU0l7efuvK5p70mf5eK5VQd8EIkQEfNZKSgfEYnyHQD0QPFfBaHfYo4hz2PLRGSIbDp7k9ATp4zLyvFFW5XPBIFlQ5KNliICsFKsiLlwSfcXGuZgbOfW08QMWIpL70CQ/OmHF1fd7h89duxE66ocGMPWbUi/7y1qF4G11oYqeu+myi4g9Mhx5OYENuCA2Ri26YxCMmMGEbNipVmxCqhYG4iwOKlNZ4cEii5WSvFVhSULmn/Z2i7KuTyLXLQ9JGg+4C29ftWKFYAkZnexMqFth/zYkt0WYm0qlez2lvWFWT1zDuIxNhxwQMw2jVZSPy6lYnJ8J05SoaaAWSwJSNJowyYYpy/WbV/v6yBiUu5cAsh3ZiS/qYlKa2pqK2MVfcYqERAxozd/fo6FI4Lb6T6q24OonZWD3By2AQfEAYkNNYAUUJEMImjNinUSxQyxbNlm2TZMaV0MVay0Uto2R2fW/TYoIBbLIEtAT88byJvV5ilrLYRIEXqqZucGELHO6wkwZqpzJIy9HEM8RoaJOGATkUVSrc5Qdydm9/FMlKBiHYReI4u3kZdzPNCslVKKFKfyAGZBPovAMji0Q/KsIjHWCkCs1DkUFYwAeRuuLxlrfq5XBAkzuzBBIGbKX3E1Vj2hgaOPDKnA2HQDLmpzStgw4lR8SWKOB7GWLRERRGc4OVZROHdYWTETp/MWQZ42QiQikkquc0vPDYijgupCfkFAlQ+WAAU3L/u7YRHfFuYL6brunkVfKAyNkxvLCdhx2wGMDBvaVjErzVoR0wWUK2uYmNgi27bMipRmrd3FzJoR+W5mYgbyiCFsIeI6KZh/10LgxPfPO+JesDxruPizJTixd8YtZfNOCXisqCih7lnf/q1l8ZMls7p/4JvgrPXYGmvT2y8RHVIuQStWTDiPci9IZQqSwVsiRUoXmJA07H16w0vPWOay5TfO6D/1iyEQ4MXMjadPcmgE0OpPMIAln34sKQTmMatmdG6ciRdfMUU3a8QsaKR4zsWqRhi1eQvdPct2jRljNSkza8CPHIdOZvixkAlcVJPflEQPSnKTNmBiSyQUMiGsx5XO/6+ndmpn2pJGfeOWoWs+WQSgtLT6P4aYEFM5N1W9mbtuWXzHdkNU9XFGV8uiRdWzuwVE7FtdmFuPcztjCz8Ua+9RDBqmsrfu0LLFKCLA04oIxPb3P9b8zWStOiRXf/h61fzol/G3ybCuICJm7/aPE4Z+sO9CMLN4kDjsiAnpzIyWSReu3Kt07crd3bwkjt5k/QPc8YvYhmrMXvcyCJ6O8/yqe2YDd8S2Qf+elud22jWLLGkRMCWDWEG8EOVf9YCL/2tZBMNYcHEJ3jzmTrWn6Obqx8fIW4UVc9vvWvHPG9YBWFE5z+YL0PjFg98KQLEPtG76UNBWWviZrt7BGdXtGR2ujOhATOzl1MZQ+bX43CfUOsJe+gh3PjaMA8s/w0s3W4HHOVz4RQKATfuH8qtwZA8tvw2tgyxL7+15IkjkFRoLjHg9h3aPgAD0Y+Fclld8F6gU5d+SiCXEKwZf3dHW8DCAzuNbz0puboJy7vTqy3pAebfdj+NP9M/5amztT9tK3r/dn0BPIBCICXPyEx+No1RVroDfFCvD0SEAFwW+gUDBFxAGfn5LWW75ybhCz6a6Spx/zuKa+1R+0fnhksLR9mrZtss53PmlBzpQBtBtbf0EMtCUqwoLB+naWcDG104COPx4N5AzUFQ1pO9cAL2gn4Dema88Y1T/+asWy96Guquba9/sDQtUnZ0rynBFpd4IzJ55v4eDXd6Fyk1dO4JFf6jQ7DPAdsgCY493NZRR6ckRX28E0PJsPxr/gHGgQ1nkJ15aqO6oea03KQvXLcGMFqPgXyh/8D/7QQItF0aK795XvwzA/MUdyVj/Y/0gMmfmfaGlZClAZRqEriVGCPECwO65teIbQgf+xJ+w5h07c9XDhRooeXgGEj/3/Z99Xt19txDQ/rpPAjKJ0Rw8387DQKkdPrYScuCVLu/qhusI5348lkOI2xO/uJ2WLg2Pee+54SL5ycGHKv/ie28TQHpw8101NQD6SnjtD7vnbu0XAvBCY+FawDIK4g/MebQX1fn3LSfgRDD6r1+qpOBHQRhHdHarwTzdWAJ54ebYDMgP3gL2XPz8LBDQ+v1+cACbHB2Ykdgf0ChQZvxfVhfQNcsulBOAM9/rBQVQQfLFwU947p7Jp3agtXHfq/63H5r54COjFoj5zw+ure47tbn9ofmnRh6bv8uAmND+j7fO9Ha/9adackrZ9KJk8XICBl4OglN/3OAf7rJhkqTT2r2ItfbgX98Xf/bXbZ+Kdz+13wJy+M/r6mXw+HGA0H7NyPDIC5/ccd5SL1CqEl3f/qM5yKkAkPzJlkAQnF04OGxo6/71KwsSo8MtbwxDHn+2w+L4N+/tHfZ9kOfLyy9BROQh5ePkSXdchM58j5nqFAZGviHSL/nnT9Tg8H93BsYPXg/8VAqqI7FCRKwVw7v2KaVe2pw3HFo8uXdvpEH8uGWwl159jYjotOWC3D6cfmRF7eKqC6dP7uwRK8Az8V8NEWHsp09H7RMkBgCgqRmE80AwFnbiUhkXsyUSEQjXkXRbiAwaZf8pJzFmAuMHfhBYY7JtKyCxbA0IYq1hJJCRcoY5WmIXEROBmY53l1PRaQA7d0DE2lAdPf5IqpiWTEwueT4itjOZTg4AAljArtWCnAYMdhhAxqyK+QkTmMAEvnHauxWIZPgEEUsBHNhomCYLbVgDgYkp8e0vBafGIlTWukpMwjwZSKeBkGg6A3v+fvSE+1SEs0/EAMgSkSVaNxv7B6yIJACdtA6t0zCttdm8FVgCAhFrXOadDZeihD3UYQ7cT+TqQBFYiXIUZE4TXooWW8LrIxIQsQIsiVig7g4kXkpaiCSEtG8CYwITGBOEWCWdjQsJYAERy8xpAU6yVc2UlBVNZaYGhFLpKiEDbXrH09EzRQ5iVgKCm3RZ+XkP/9dmrYhNCHISNjAmMM6wYZ2R9mACwO2mcVrDBM3myLbhjGNqNhBRA+ISOTe1N4SMidMojSW2LIoMGSJTfucmYMezSRGxMirI9QMbGBsZNuok60xJ15KIJUtpGVvGKcBRCZ+ee84YxINkK88ZaDN1gxAtA4X3liXG/BkNlYA8/9SoO6zDidwgYY2xjrE2dCKZsSwsP4WyZF6MlxsQXUEZwn36RGXZNj1fTFkWBxGRCLDm3ujmw/++21qxVqwkt63ZlrQSYpWMgjij7xCdhaxPGy8+poaUMtBKtgMZJ8GnlpfyXa4I1GX/tgQApOXlXw+nHKEVC2utSfmatNZeMX6rMflwNWVfl9pZwQT6vUzYeQi9BJNi1kotmJ+bON+ZhFOknCltWDZbe8nswyU9ncypZZkU66VtkUlHWmXcbVMOAZyqv9iNm6YOVCjCWrGXNuj1BLeftCsgIaFJLtHasv+O3xnJEuaEIMRiycIAwkyIRIioEJZQPrHZt9LvruEmV/p3ktXKuFULYEEGwmIIcCHGwiIFF+MHYN4l2t9Uu1EAErHExo2YOts6aVKiOajxPWSNaXqIkCUISTrK2HSTWzChl5kutEICEguScJBexLEgdWQn8ojTZltHBpv6kkJI04xjLvjtQSskEErFasnK+eRdz35MBdx0h1Xe0cze9KGNvuOTYc4r+pppRHs5l/3biPZd++73vhf5HtrfRbT/D6/x2HiomBrxAAAAAElFTkSuQmCC'/> - </div> - </div> - - <div style="max-width:97.5em;margin:auto"> - <div style="font-size:1.4em;"> - <h1>{% trans "Server error" %}</h1> - -{% trans "<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our <a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the error.</p>" %} - - </div> - </div> - </body> -</html> \ No newline at end of file diff --git a/apps/wolnelektury_core/templates/503.html b/apps/wolnelektury_core/templates/503.html deleted file mode 100644 index 47689d122..000000000 --- a/apps/wolnelektury_core/templates/503.html +++ /dev/null @@ -1,24 +0,0 @@ -{% load i18n %} -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <title>Wolne Lektury :: 503 - {% trans "Service unavailable" %}</title> - </head> - <body style="background: #F7F7F7;font-family:Georgia;margin:0;padding:0;font-size:.625em;"> - <div style="height:9.4em;background:#191919;"> - <div style="max-width:97.5em;margin:auto;"> -<img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAK0AAABeCAAAAAB0wssoAAAACXZwQWcAAACtAAAAXgCUaM/jAAAACXBIWXMAAAsTAAALEwEAmpwYAAASJElEQVRo3u1beXBdV3n/fd859+lpt2xLlhRb3mQplm3JzuLIO0mA0ASSkkAJWcp0IARo6QJtJgMztCl0p7RpgNIwmUkhtMMQSGiAbHbsJI6Nd8my5d1OFMmyZMmydr137zlf/zj3vsWS7GSGkWAmTzOS5r377vud7/zOt/y+71EFfocejPfQvof2PbTvof1dRasv+yq5P/Lbj5bSaMdDnvSFaUJLoBQokkxglAVXQFOHdzK0RA5vBF0AQCjD6BRiFQjJ9KIlAhFSgMUhJklZPYsMUwZXT8ZZIiIQhRYUgUja2G4tAESmFK6ehLNEREwZaB3iDMNT9IKlKYM7iW2JiImJnQ1FABEJ4YZrcUa14ZMyrbwFMTOYGATHgxCsOHpQuAwSCzu9vCWCMy1zip/hI7K8Q2vFWgZgp8iL6cniAjGxVzjk4EoE11HBnUBA2BIZFsr0ydPDWyL1lx8/u6/l8FnJQOucbmhbXbeq/ZdiiWh6eQsiYnpL2lZ/BGN7X9s1lGauIy7F6q5rWM44stkKC02nT6Dw3LcGz+wpWLay8Ss4sfvp4VtqvpN0aMHLb90Ul4NPHvmbXYYtTXueQACoY6B+3+j+A0/Obmy85+LzS9f+sB8igrz191Umtm1tSUpt7GAU9qY7YySMHLv2KcOMvhe2/sO6LW9+cNaIALL2K9zx6KtjEGVrbRvR1Jl2YrQSArC7P1fSS2Am8+uPlbXaNV0iQpu6vnvQCkOE67uGnHuYIoc7Se0gAgjQomqJmFmpJr3yQsv7CjztzVj23CFWWjFTvOZMMnRw01zpiADS3nmD81fcc26Dt+2qeV7Mq889qJRWSjFXlu61016Xpb3r6NYbikDErIL91bPeHFuldfwDrf2eYmYmaqAWhOF4Gm3rPl9E7Lb8a0BEzLxPrUicuC5Pz619BVorRcRe49vdqYunmwkigrcP3OI55na/vdZrqijWN/S9qZkVM1FR9b5EKsbJ9KFNRa7gZ7UVRMSszPbq8k61sGD1jkBrzawWf/ax+MF0qjOdHkxIXF1wKvju7i2txMyHx9ZsHlswmt/EIMxas34OZE8r3KKmCvHE0UEoOjwXH1z3/q9c3PzGCA/vXLu3b/bytgHFCz+4gnB0y/YBfyqhAqAJ1WZiUkpprWPa87yr3n9jftPrZ4q/nCjYm3uoedmtFWh/fcf5wPd93w/8wARipwbxZdF62vO8mPa8nIb1K0ZfPntf8snO4nuq/Te2dgSmbOO1JY++6PtBYIwVO/229TzP82Kepz2l85YOtRHgfW7ur7aNmOL6xsWmqe3Z037gG2PETm9+6yovImYi8mrra+dx8kdHgeLyVw/VV9VUyJHvbB/0/SmNDZPrCUSAK9G969evio2ceb7vto3HLfrb3vc+9B95tnkwGWQUP9Os1YTVTNWqmvX53VsOdHL+h0uaBPCfWNl3ZiAwvhUrdmq97aS1gwu3lPtwTWLXlre0XrChUe3cLCUNb59dd9WpnXsGsorgbJnpN3emxt1vwlPmDpmnPa+gMMGxivVrynD8xfa7Dn+oHP+zb87qNbE9Lx72fT8Z+EFgjMn0X5PymN7lWmiC9evLFJHE5A9UbNo4D+aNbd08q6555s9Lbz/W8ZOnV930tXMvv9aG8Zad0L6U9a+8M6wTScR60vqciInqP7cQOLVjb0IpqR09N1a8paHxBQl2vFq+6fb7f/adUGZKFRtpXUGyYVIaqLyTcj6SOKO3yJXUZiIidcfCju1v9CnNRLE1hwa75j+/f+22hLV4+8kn7m6M+646zpBIJbtWigCnL5F3IvGl1M3oruE7+LIry615/c+ePi9ixdqKsn3+ibLY7oKl7njZbXPqIsIwEytmpVwqGcqT5KSp0Gln7NiVC08ip8Qxs0NOl8kYQ+2IFpTsNmKttVZobec5ORav6Dy7yXO+4OyRj+kQLjus7sGcejYNMXqZlcN7JawEZmalmJnThuZJdTAiotXJQ66GsLagfnuCzg81+PsWzBYRgMxzK8o59XB2VRwB5pR5lXJPa621UqyYrmzdECxzWFOFxuXJSENE8K47eTHcdqlH62e+zkev9lrMyvCqw6NrQwqEeIu11koppbTKsLVSSoXPhy9dAW5oWaW4KI+VYk71a/gygYyKq/b4ELFWRDU2DRbleftKqrrbV3sQgGik9aaYUhELtP7Uqw94nrOgyvytlFLK8zzP055WHMGdDHDIHCbOe/xfYqEuOxna8IARgebp1rBEi91QtdsC8TP9a4M9FeVuq7CnaoZSipXSSmul5+KmuMsy0yZWSrtcTmu94anrtKc9pZRyTAk3hbLAZxA9NruuWCliJ29P4MEICM8HmJaNdRIAWnTzRnXwtAjljjavLmj56MozBALLUVV9QRMZ9yZ6C3NmXHQOBC4m04LBXufkmImW16w9YqwhA6LMPhtlxRMiCh0MKSrKHSQYjnInfSnU9NpILesYRkHttY0ze378elLFLHLtsU0l7efuvK5p70mf5eK5VQd8EIkQEfNZKSgfEYnyHQD0QPFfBaHfYo4hz2PLRGSIbDp7k9ATp4zLyvFFW5XPBIFlQ5KNliICsFKsiLlwSfcXGuZgbOfW08QMWIpL70CQ/OmHF1fd7h89duxE66ocGMPWbUi/7y1qF4G11oYqeu+myi4g9Mhx5OYENuCA2Ri26YxCMmMGEbNipVmxCqhYG4iwOKlNZ4cEii5WSvFVhSULmn/Z2i7KuTyLXLQ9JGg+4C29ftWKFYAkZnexMqFth/zYkt0WYm0qlez2lvWFWT1zDuIxNhxwQMw2jVZSPy6lYnJ8J05SoaaAWSwJSNJowyYYpy/WbV/v6yBiUu5cAsh3ZiS/qYlKa2pqK2MVfcYqERAxozd/fo6FI4Lb6T6q24OonZWD3By2AQfEAYkNNYAUUJEMImjNinUSxQyxbNlm2TZMaV0MVay0Uto2R2fW/TYoIBbLIEtAT88byJvV5ilrLYRIEXqqZucGELHO6wkwZqpzJIy9HEM8RoaJOGATkUVSrc5Qdydm9/FMlKBiHYReI4u3kZdzPNCslVKKFKfyAGZBPovAMji0Q/KsIjHWCkCs1DkUFYwAeRuuLxlrfq5XBAkzuzBBIGbKX3E1Vj2hgaOPDKnA2HQDLmpzStgw4lR8SWKOB7GWLRERRGc4OVZROHdYWTETp/MWQZ42QiQikkquc0vPDYijgupCfkFAlQ+WAAU3L/u7YRHfFuYL6brunkVfKAyNkxvLCdhx2wGMDBvaVjErzVoR0wWUK2uYmNgi27bMipRmrd3FzJoR+W5mYgbyiCFsIeI6KZh/10LgxPfPO+JesDxruPizJTixd8YtZfNOCXisqCih7lnf/q1l8ZMls7p/4JvgrPXYGmvT2y8RHVIuQStWTDiPci9IZQqSwVsiRUoXmJA07H16w0vPWOay5TfO6D/1iyEQ4MXMjadPcmgE0OpPMIAln34sKQTmMatmdG6ciRdfMUU3a8QsaKR4zsWqRhi1eQvdPct2jRljNSkza8CPHIdOZvixkAlcVJPflEQPSnKTNmBiSyQUMiGsx5XO/6+ndmpn2pJGfeOWoWs+WQSgtLT6P4aYEFM5N1W9mbtuWXzHdkNU9XFGV8uiRdWzuwVE7FtdmFuPcztjCz8Ua+9RDBqmsrfu0LLFKCLA04oIxPb3P9b8zWStOiRXf/h61fzol/G3ybCuICJm7/aPE4Z+sO9CMLN4kDjsiAnpzIyWSReu3Kt07crd3bwkjt5k/QPc8YvYhmrMXvcyCJ6O8/yqe2YDd8S2Qf+elud22jWLLGkRMCWDWEG8EOVf9YCL/2tZBMNYcHEJ3jzmTrWn6Obqx8fIW4UVc9vvWvHPG9YBWFE5z+YL0PjFg98KQLEPtG76UNBWWviZrt7BGdXtGR2ujOhATOzl1MZQ+bX43CfUOsJe+gh3PjaMA8s/w0s3W4HHOVz4RQKATfuH8qtwZA8tvw2tgyxL7+15IkjkFRoLjHg9h3aPgAD0Y+Fclld8F6gU5d+SiCXEKwZf3dHW8DCAzuNbz0puboJy7vTqy3pAebfdj+NP9M/5amztT9tK3r/dn0BPIBCICXPyEx+No1RVroDfFCvD0SEAFwW+gUDBFxAGfn5LWW75ybhCz6a6Spx/zuKa+1R+0fnhksLR9mrZtss53PmlBzpQBtBtbf0EMtCUqwoLB+naWcDG104COPx4N5AzUFQ1pO9cAL2gn4Dema88Y1T/+asWy96Guquba9/sDQtUnZ0rynBFpd4IzJ55v4eDXd6Fyk1dO4JFf6jQ7DPAdsgCY493NZRR6ckRX28E0PJsPxr/gHGgQ1nkJ15aqO6oea03KQvXLcGMFqPgXyh/8D/7QQItF0aK795XvwzA/MUdyVj/Y/0gMmfmfaGlZClAZRqEriVGCPECwO65teIbQgf+xJ+w5h07c9XDhRooeXgGEj/3/Z99Xt19txDQ/rpPAjKJ0Rw8387DQKkdPrYScuCVLu/qhusI5348lkOI2xO/uJ2WLg2Pee+54SL5ycGHKv/ie28TQHpw8101NQD6SnjtD7vnbu0XAvBCY+FawDIK4g/MebQX1fn3LSfgRDD6r1+qpOBHQRhHdHarwTzdWAJ54ebYDMgP3gL2XPz8LBDQ+v1+cACbHB2Ykdgf0ChQZvxfVhfQNcsulBOAM9/rBQVQQfLFwU947p7Jp3agtXHfq/63H5r54COjFoj5zw+ure47tbn9ofmnRh6bv8uAmND+j7fO9Ha/9adackrZ9KJk8XICBl4OglN/3OAf7rJhkqTT2r2ItfbgX98Xf/bXbZ+Kdz+13wJy+M/r6mXw+HGA0H7NyPDIC5/ccd5SL1CqEl3f/qM5yKkAkPzJlkAQnF04OGxo6/71KwsSo8MtbwxDHn+2w+L4N+/tHfZ9kOfLyy9BROQh5ePkSXdchM58j5nqFAZGviHSL/nnT9Tg8H93BsYPXg/8VAqqI7FCRKwVw7v2KaVe2pw3HFo8uXdvpEH8uGWwl159jYjotOWC3D6cfmRF7eKqC6dP7uwRK8Az8V8NEWHsp09H7RMkBgCgqRmE80AwFnbiUhkXsyUSEQjXkXRbiAwaZf8pJzFmAuMHfhBYY7JtKyCxbA0IYq1hJJCRcoY5WmIXEROBmY53l1PRaQA7d0DE2lAdPf5IqpiWTEwueT4itjOZTg4AAljArtWCnAYMdhhAxqyK+QkTmMAEvnHauxWIZPgEEUsBHNhomCYLbVgDgYkp8e0vBafGIlTWukpMwjwZSKeBkGg6A3v+fvSE+1SEs0/EAMgSkSVaNxv7B6yIJACdtA6t0zCttdm8FVgCAhFrXOadDZeihD3UYQ7cT+TqQBFYiXIUZE4TXooWW8LrIxIQsQIsiVig7g4kXkpaiCSEtG8CYwITGBOEWCWdjQsJYAERy8xpAU6yVc2UlBVNZaYGhFLpKiEDbXrH09EzRQ5iVgKCm3RZ+XkP/9dmrYhNCHISNjAmMM6wYZ2R9mACwO2mcVrDBM3myLbhjGNqNhBRA+ISOTe1N4SMidMojSW2LIoMGSJTfucmYMezSRGxMirI9QMbGBsZNuok60xJ15KIJUtpGVvGKcBRCZ+ee84YxINkK88ZaDN1gxAtA4X3liXG/BkNlYA8/9SoO6zDidwgYY2xjrE2dCKZsSwsP4WyZF6MlxsQXUEZwn36RGXZNj1fTFkWBxGRCLDm3ujmw/++21qxVqwkt63ZlrQSYpWMgjij7xCdhaxPGy8+poaUMtBKtgMZJ8GnlpfyXa4I1GX/tgQApOXlXw+nHKEVC2utSfmatNZeMX6rMflwNWVfl9pZwQT6vUzYeQi9BJNi1kotmJ+bON+ZhFOknCltWDZbe8nswyU9ncypZZkU66VtkUlHWmXcbVMOAZyqv9iNm6YOVCjCWrGXNuj1BLeftCsgIaFJLtHasv+O3xnJEuaEIMRiycIAwkyIRIioEJZQPrHZt9LvruEmV/p3ktXKuFULYEEGwmIIcCHGwiIFF+MHYN4l2t9Uu1EAErHExo2YOts6aVKiOajxPWSNaXqIkCUISTrK2HSTWzChl5kutEICEguScJBexLEgdWQn8ojTZltHBpv6kkJI04xjLvjtQSskEErFasnK+eRdz35MBdx0h1Xe0cze9KGNvuOTYc4r+pppRHs5l/3biPZd++73vhf5HtrfRbT/D6/x2HiomBrxAAAAAElFTkSuQmCC'/> - </div> - </div> - - <div style="max-width:97.5em;margin:auto"> - <div style="font-size:1.4em;"> - <h1>{% trans "Service unavailable" %}</h1> -<p> -{% trans "The Wolnelektury.pl site is currently unavailable due to maintainance." %} -</p> -</div> - </div> - </body> -</html> diff --git a/apps/wolnelektury_core/templates/account/base.html b/apps/wolnelektury_core/templates/account/base.html deleted file mode 100755 index 6bcdf12cf..000000000 --- a/apps/wolnelektury_core/templates/account/base.html +++ /dev/null @@ -1,10 +0,0 @@ -{% extends "site_base.html" %} - -{% block body %} -{% block content %} {% endblock %} -{% endblock %} - -{% block extrabody %} -{% block extra_body %} -{% endblock %} -{% endblock %} diff --git a/apps/wolnelektury_core/templates/admin/base_site.html b/apps/wolnelektury_core/templates/admin/base_site.html deleted file mode 100644 index ff381b554..000000000 --- a/apps/wolnelektury_core/templates/admin/base_site.html +++ /dev/null @@ -1,22 +0,0 @@ -{% extends "admin/base.html" %} -{% load i18n %} - -{% block title %}{{ title }} | {% trans "Site administration" %} - WolneLektury.pl{% endblock %} - -{% block branding %} -<h1 id="site-name">{% trans "Site administration" %} - WolneLektury.pl</h1> -<p style="font-size: 11px;margin-left:10px;"> - <!--a href="/rosetta/">{% trans "Translations" %}</a--> - <a href="/admin/chunks/chunk/promo/">promobox</a> | - <a href="/admin/social/cite">cytaty</a> | - <a href="/admin/infopages/infopage/">info</a> | - <a href="/admin/catalogue/book/">ksiÄ Å¼ki</a> | - <a href="/admin/catalogue/tag/">tagi</a> | - <a href="/admin/catalogue/collection/">kolekcje</a> | - <a href="/admin/pdcounter/">licznik domeny</a> | - <a href="/admin/sponsors/">sponsorzy</a> | - <a href="/admin/suggest/suggestion/">sugestie</a> -</p> -{% endblock %} - -{% block nav-global %}{% endblock %} \ No newline at end of file diff --git a/apps/wolnelektury_core/templates/admin/catalogue/book/change_form.html b/apps/wolnelektury_core/templates/admin/catalogue/book/change_form.html deleted file mode 100644 index 819ab62fc..000000000 --- a/apps/wolnelektury_core/templates/admin/catalogue/book/change_form.html +++ /dev/null @@ -1,46 +0,0 @@ -{% extends "admin/change_form.html" %} -{% load i18n %} - -{% block content_title %} - {% if change and 'advanced' in request.GET %} - <h1>{{ title }} — {% trans "advanced" %} </h1> - {% else %} - {{ block.super }} - {% endif %} -{% endblock %} - - -{# add an "Advanced" button to tools #} - -{% block extrastyle %} - {% if change and not is_popup %} - {{ block.super }} - <style> - .object-tools {margin-bottom:0; margin-top:0;} - .advancedlink {text-transform: capitalize;} - </style> - {% else %} - {{ block.super }} - {% endif %} -{% endblock %} - -{% block object-tools %} - {% if change and not is_popup %} - <div style='margin-bottom: -2em; margin-top: -2.4em; float:right; '> - {{ block.super }} - <ul class="object-tools"><li> - {% if 'advanced' in request.GET %} - <a href="." class="advancedlink">{% trans "simplified" %}</a> - {% else %} - <a href="?advanced" class="advancedlink">{% trans "advanced" %}</a> - {% endif %} - </li></ul> - </div> - {% else %} - {{ block.super }} - {% endif %} -{% endblock %} - - - - diff --git a/apps/wolnelektury_core/templates/admin/catalogue/book/change_list.html b/apps/wolnelektury_core/templates/admin/catalogue/book/change_list.html deleted file mode 100644 index 9f1b8cbf4..000000000 --- a/apps/wolnelektury_core/templates/admin/catalogue/book/change_list.html +++ /dev/null @@ -1,10 +0,0 @@ -{% extends "admin/change_list.html" %} -{% load i18n %} - -{% block content %} - <form action="{% url 'import_book' %}" method="post" enctype="multipart/form-data"> - {% csrf_token %} - <p><input type="file" id="id_book_xml_file" name="book_xml_file" /> <input type="submit" value="{% trans "Import book" %}"/></p> - </form> - {{ block.super }} -{% endblock content %} diff --git a/apps/wolnelektury_core/templates/annoy.html b/apps/wolnelektury_core/templates/annoy.html deleted file mode 100755 index 890b62d91..000000000 --- a/apps/wolnelektury_core/templates/annoy.html +++ /dev/null @@ -1,18 +0,0 @@ -{% load static %} -<a id='annoy-on' href="http://nowoczesnapolska.org.pl/pomoz-nam/wesprzyj-nas/">1%</a> -<div id='annoy'> - <a href="http://nowoczesnapolska.org.pl/pomoz-nam/wesprzyj-nas/"> - <img src='{% static "img/procent.png" %}' alt="Logo akcji 1%" style="float:left;margin: 0 2em" /></a> - <p>Droga użytkowniczko, drogi użytkowniku!</p> - <p>Czy wiesz, że biblioteka internetowa Wolne Lektury to jeden z projektów - <strong>fundacji Nowoczesna Polska</strong> â - organizacji pożytku publicznego dziaÅajÄ cej na rzecz wolnoÅci korzystania - z dóbr kultury? Wesprzyj nasze dziaÅania, przeznaczajÄ c na nie 1% swojego podatku. - Możesz to zrobiÄ, wpisujÄ c w zeznaniu podatkowym numer - <strong>KRS 0000070056</strong>.</p> - - <p><a href="http://nowoczesnapolska.org.pl/pomoz-nam/wesprzyj-nas/">Dowiedz siÄ wiÄcej</a></p> - - <a id='annoy-off'>x</a> - <div style="clear:both;"></div> -</div> diff --git a/apps/wolnelektury_core/templates/auth/login.html b/apps/wolnelektury_core/templates/auth/login.html deleted file mode 100644 index 756b8ad31..000000000 --- a/apps/wolnelektury_core/templates/auth/login.html +++ /dev/null @@ -1,26 +0,0 @@ -{% load i18n %} -{% load ssi_csrf_token from ssify %} - -<h1>{{ title }}</h1> - -<form action="{{ request.get_full_path }}" method="post" accept-charset="utf-8" - class="cuteform{% if placeholdize %} hidelabels{% endif %}"> -{% ssi_csrf_token %} -<ol> - <div id="id_{% if form_prefix %}{{ form_prefix }}-{% endif %}__all__"></div> - {{ form.as_ul }} - <li><a href="{% url 'account_reset_password' %}">{% trans "Forgot Password?" %}</a></li> - <li><input type="submit" value="{{ submit }}"/></li> -</ol> -</form> - -<h1>{% trans "Sign in using:" %}</h1> - -<ul class="socialaccount_providers"> -{% include "socialaccount/snippets/provider_list.html" %} -</ul> - -{% include "socialaccount/snippets/login_extra.html" %} - -{% block extra %} -{% endblock %} diff --git a/apps/wolnelektury_core/templates/auth/login_register.html b/apps/wolnelektury_core/templates/auth/login_register.html deleted file mode 100755 index 80d3d232a..000000000 --- a/apps/wolnelektury_core/templates/auth/login_register.html +++ /dev/null @@ -1,24 +0,0 @@ -{% extends "auth/login.html" %} -{% load i18n %} -{% load honeypot %} -{% load ssi_csrf_token from ssify %} - -{% block extra %} - -{{ block.super }} - -<h1>{% trans "or register" %}:</h1> - -<form action="{% url 'register' %}" method="post" accept-charset="utf-8" - class="cuteform hidelabels"> -{% ssi_csrf_token %} -{% render_honeypot_field %} -<ol> - <div id="id_register-__all__"></div> - {{ register_form.as_ul }} - <li><input type="submit" value="{{ register_submit }}"/></li> -</ol> -</form> - - -{% endblock %} diff --git a/apps/wolnelektury_core/templates/auth/register.html b/apps/wolnelektury_core/templates/auth/register.html deleted file mode 100644 index 9d2c28363..000000000 --- a/apps/wolnelektury_core/templates/auth/register.html +++ /dev/null @@ -1,15 +0,0 @@ -{% extends "ajaxable/form.html" %} -{% load i18n %} - - -{% block extra %} - -<h1>{% trans "Sign in using:" %}</h1> - -<ul class="socialaccount_providers"> -{% include "socialaccount/snippets/provider_list.html" %} -</ul> - -{% include "socialaccount/snippets/login_extra.html" %} - -{% endblock %} diff --git a/apps/wolnelektury_core/templates/base.html b/apps/wolnelektury_core/templates/base.html deleted file mode 100644 index fac93191c..000000000 --- a/apps/wolnelektury_core/templates/base.html +++ /dev/null @@ -1,4 +0,0 @@ -{% extends "superbase.html" %} - - -{% block ogtitle %}{% block titleextra %}{% endblock %}{% endblock %} diff --git a/apps/wolnelektury_core/templates/info/join_us.html b/apps/wolnelektury_core/templates/info/join_us.html deleted file mode 100644 index 50479e120..000000000 --- a/apps/wolnelektury_core/templates/info/join_us.html +++ /dev/null @@ -1,22 +0,0 @@ -{% load i18n %} -{% load reporting_stats %} - -{% count_books book_count %} -<p> -{% blocktrans count book_count as c %} -We have {{c}} work published in Wolne Lektury! -Help us expand the library and set new readings free by -<a href="http://nowoczesnapolska.org.pl/wesprzyj_nas/">making a donation -or transferring 1% of your income tax</a>. -{% plural %} -We have {{c}} works published in Wolne Lektury! -Help us expand the library and set new readings free by -<a href="http://nowoczesnapolska.org.pl/wesprzyj_nas/">making a donation -or transferring 1% of your income tax</a>. -{% endblocktrans %} -{% comment %}<a href='{}'>{% trans "More..." %}</a>{% endcomment %}</p> - -<p>{% blocktrans %}Become an editor of Wolne Lektury! Find out if -we're currently working on a reading you're looking for and prepare -a publication by yourself by logging into the Editorial Platform.{% endblocktrans %} -<a href='{% url "infopage" 'mozesz-nam-pomoc' %}'>{% trans "More..." %}</a></p> diff --git a/apps/wolnelektury_core/templates/latest_blog_posts.html b/apps/wolnelektury_core/templates/latest_blog_posts.html deleted file mode 100644 index 24d486ef1..000000000 --- a/apps/wolnelektury_core/templates/latest_blog_posts.html +++ /dev/null @@ -1,9 +0,0 @@ -{% spaceless %} - -<ol> -{% for post in posts %} - <li><a href="{{ post.link }}">{{ post.title }}</a></li> -{% endfor %} -</ol> - -{% endspaceless %} \ No newline at end of file diff --git a/apps/wolnelektury_core/templates/main_page.html b/apps/wolnelektury_core/templates/main_page.html deleted file mode 100755 index f1450cbd6..000000000 --- a/apps/wolnelektury_core/templates/main_page.html +++ /dev/null @@ -1,88 +0,0 @@ -{% extends "base.html" %} -{% load static from staticfiles %} -{% load i18n catalogue_tags infopages_tags social_tags %} -{% load ssi_include from ssify %} - - -{% block title %}{% trans "Wolne Lektury internet library" %}{% endblock %} -{% block ogtitle %}{% trans "Wolne Lektury internet library" %}{% endblock %} - -{% block body %}{% spaceless %} - - {% choose_cite as cite_pk %} - {{ cite_pk.if }} - {% ssi_include 'social_cite_main' pk=cite_pk %} - {{ cite_pk.endif }} - - - - <section id="promo-box"> - <h1>{% trans "What's new?" %}</h1> - <div id="promo-box-body"> - {% ssi_include 'chunk' key='promo' %} - </div> - </section> - - - <section id="main-last"> - <h1><a href="{% url 'recent_list' %}">{% trans "Recent publications" %}</a></h1> - {% for book in last_published %} - {% ssi_include 'catalogue_book_mini' pk=book.pk %} - {% endfor %} - </section> - - <div class="clearboth"></div> - - <section class="infopages-box"> - <h1>{% trans "News" %}</h1> - {% ssi_include 'latest_blog_posts' %} - </section> - - - <section class="infopages-box"> - <h1>{% trans "Utilities" %}</h1> - - <ul> - <li><a href="{% url 'suggest' %}" id="suggest" class="ajaxable">{% trans "Report a bug or suggestion" %}</a></li> - <!--li><a href="http://turniej.wolnelektury.pl">Turniej ElektrybaÅtów</a></li--> - <li><a href="{% url 'reporting_catalogue_pdf' %}">{% trans "Download the catalogue in PDF format." %}</a></li> - <li><a href="{% url 'dictionary_notes' %}">{% trans "Footnotes" %}</a></li> - <li><a href="{% url 'suggest_publishing' %}" id="suggest-publishing" class="ajaxable">{% trans "Missing a book?" %}</a></li> - <li><a href="{% url 'publish_plan' %}">{% trans "Publishing plan" %}</a></li> - <li><a href="{% url 'api' %}">API</a></li> - <li><a href="{% url 'oaipmh' %}">OAI-PMH</a></li> - <li><a href="{% url 'lesmianator' %}" lang="pl">LeÅmianator</a></li> - <li><a href="http://polski.wolnelektury.pl" lang="pl">MateriaÅy do nauki j. polskiego</a></li> - - </ul> - </section> - - - <section class="infopages-box"> - <h1>{% trans "Information" %}</h1> - <ul> - <li><a href="https://nowoczesnapolska.org.pl/prywatnosc/">{% trans "Privacy policy" %}</a></li> - {% infopages_on_main %} - </ul> - - <div class="social-links"> - <a href="https://pl-pl.facebook.com/pages/Wolne-Lektury/203084073268" title='Wolne Lektury @ Facebook'> - <img src="{% static "img/social/f.png" %}" alt="Wolne Lektury @ Facebook" /> - </a> - <a href="https://nk.pl/profile/30441509" title='Wolne Lektury @ NK'> - <img src="{% static "img/social/nk.png" %}" alt="Wolne Lektury @ NK.pl" /> - </a> - </div> - </section> - - -{% endspaceless %}{% endblock %} - - -{% block add_footer %}{% spaceless %} -{{ cite_pk.if }} - <p>{% trans "Image used:" %} - {% ssi_include 'social_cite_info' pk=cite_pk %} - </p> -{{ cite_pk.endif }} -{% endspaceless %}{% endblock %} diff --git a/apps/wolnelektury_core/templates/openid/login.html b/apps/wolnelektury_core/templates/openid/login.html deleted file mode 100644 index 41eafa479..000000000 --- a/apps/wolnelektury_core/templates/openid/login.html +++ /dev/null @@ -1,33 +0,0 @@ -{% extends "site_base.html" %} - -{% load i18n %} -{% load uni_form_tags %} - -{% block head_title %}{% trans "OpenID Sign In" %}{% endblock %} - -{% block body %} - -<h1>{% trans 'OpenID Sign In' %}</h1> -<div class="normal-text white-box"> - -<form id="openid_login_form" class="openid_login uniForm" method="post" action="{% url 'openid_login' %}"> -{% csrf_token %} -<fieldset class="inlineLabels"> - -{#{form|as_uni_form}#} -<div id="div_id_openid" class="ctrlHolder"> -<label for="id_openid" class="requiredField"> -OpenID<span class="asteriskField">*</span> -</label> -<input id="id_openid" type="text" class="textInput textinput" name="openid" /> -</div> - - -<div class="buttonHolder"> -<button type="submit">{% trans "Sign In" %}</button> -</div> -</fieldset> -</form> - -</div> -{% endblock %} diff --git a/apps/wolnelektury_core/templates/pagination/pagination.html b/apps/wolnelektury_core/templates/pagination/pagination.html deleted file mode 100644 index 432cf6954..000000000 --- a/apps/wolnelektury_core/templates/pagination/pagination.html +++ /dev/null @@ -1,26 +0,0 @@ -{% load i18n %} -{% if is_paginated %} -<div class="pagination"> - {% if page_obj.has_previous %} - <a href="?page={{ page_obj.previous_page_number }}{{ getvars }}" class="prev">‹‹ {% trans "previous" %} </a> - {% else %} - <span class="disabled prev">‹‹ {% trans "previous" %} </span> - {% endif %} - {% for page in pages %} - {% if page %} - {% ifequal page page_obj.number %} - <span class="current page"> {{ page }} </span> - {% else %} - <a href="?page={{ page }}{{ getvars }}" class="page"> {{ page }} </a> - {% endifequal %} - {% else %} - ... - {% endif %} - {% endfor %} - {% if page_obj.has_next %} - <a href="?page={{ page_obj.next_page_number }}{{ getvars }}" class="next"> {% trans "next" %} ››</a> - {% else %} - <span class="disabled next"> {% trans "next" %} ››</span> - {% endif %} -</div> -{% endif %} diff --git a/apps/wolnelektury_core/templates/piston/authorize_token.html b/apps/wolnelektury_core/templates/piston/authorize_token.html deleted file mode 100755 index 87450a20c..000000000 --- a/apps/wolnelektury_core/templates/piston/authorize_token.html +++ /dev/null @@ -1,18 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block titleextra %}{% trans "Authorize access to Wolne Lektury" %}{% endblock %} - -{% block body %} - <h1>{% trans "Authorize access to Wolne Lektury" %}</h1> - - <div class="normal-text"> - <p>{% blocktrans %}Confirm to authorize access to Wolne Lektury as user <strong>{{ user}}</strong>.{% endblocktrans %}</p> - - <form action="{% url 'piston.authentication.oauth_user_auth' %}" method="POST"> - {% csrf_token %} - {{ form.as_p }} - <button type="submit">Confirm</button> - </form> - </div> -{% endblock %} diff --git a/apps/wolnelektury_core/templates/publish_plan.html b/apps/wolnelektury_core/templates/publish_plan.html deleted file mode 100755 index c4c3d6e6a..000000000 --- a/apps/wolnelektury_core/templates/publish_plan.html +++ /dev/null @@ -1,16 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block titleextra %}{% trans "Publishing plan" %}{% endblock titleextra %} - - -{% block body %} -<h1>{% trans "Publishing plan" %}</h1> - -<ul class="normal-text"> -{% for elem in plan %} - <li><a href="{{ elem.link }}">{{ elem.title }}</a></li> -{% endfor %} -</ul> - -{% endblock %} diff --git a/apps/wolnelektury_core/templates/site_base.html b/apps/wolnelektury_core/templates/site_base.html deleted file mode 100644 index b0c2ca524..000000000 --- a/apps/wolnelektury_core/templates/site_base.html +++ /dev/null @@ -1,5 +0,0 @@ -{% extends "base.html" %} -{# This is for allauth templates. #} - -{% block bodyid %}auth-page{% endblock %} -{% block titleextra %}{% block head_title %}{% endblock %}{% endblock %} diff --git a/apps/wolnelektury_core/templates/socialaccount/connections.html b/apps/wolnelektury_core/templates/socialaccount/connections.html deleted file mode 100644 index 3df16a8c5..000000000 --- a/apps/wolnelektury_core/templates/socialaccount/connections.html +++ /dev/null @@ -1,57 +0,0 @@ -{% extends "site_base.html" %} - -{% load i18n %} - -{% block head_title %}{% trans "Account Connections" %}{% endblock %} - -{% block body %} -<h1>{% trans "Account Connections" %}</h1> - -<div class="normal-text white-box"> -{% if form.accounts %} -<p>{% blocktrans %}You can sign in to your account using any of the following third party accounts:{% endblocktrans %}</p> - - -<form class="uniForm" method="post"> -{% csrf_token %} - -<fieldset class="blockLabels"> -{% if form.non_field_errors %} -<div id="errorMsg">{{form.non_field_errors}}</div> -{% endif %} - -{% for base_account in form.accounts %} -{% with base_account.get_provider_account as account %} -<div class="ctrlHolder"> -<label for="id_account_{{base_account.id}}"> -<input id="id_account_{{base_account.id}}" type="radio" name="account" value="{{base_account.id}}"/> -<span class="socialaccount_provider {{base_account.provider}} {{account.get_brand.id}}">{{account.get_brand.name}}</span> -<small>{{account}}</small> -</label> -</div> -{% endwith %} -{% endfor %} - -<div class="buttonHolder"> -<button type="submit">{% trans "Remove" %}</button> -</div> - -</fieldset> - -</form> - -{% else %} -<p>{% trans "You currently have no social network accounts connected to this account." %}</p> -{% endif %} - -<h2>{% trans 'Add a 3rd Party Account' %}</h2> - -<ul class="socialaccount_providers"> -{% include "socialaccount/snippets/provider_list.html" with process="connect" %} -</ul> - -{% include "socialaccount/snippets/login_extra.html" %} -</div> -{% endblock %} - - diff --git a/apps/wolnelektury_core/templates/socialaccount/login_cancelled.html b/apps/wolnelektury_core/templates/socialaccount/login_cancelled.html deleted file mode 100644 index 7e29b65c7..000000000 --- a/apps/wolnelektury_core/templates/socialaccount/login_cancelled.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "base.html" %} - -{% load i18n %} - -{% block head_title %}{% trans "Login Cancelled" %}{% endblock %} - -{% block body %} - -<h1>{% trans "Login Cancelled" %}</h1> - -<div class="normal-text white-box"> -{% url 'socialaccount_login' as login_url %} -{{ login_url }} - -<p>{% blocktrans %}You decided to cancel logging in to our site using one of your exisiting accounts. If this was a mistake, please proceed to <a href="{{login_url}}">sign in</a>.{% endblocktrans %}</p> -</div> - -{% endblock %} - diff --git a/apps/wolnelektury_core/templates/socialaccount/snippets/login_extra.html b/apps/wolnelektury_core/templates/socialaccount/snippets/login_extra.html deleted file mode 100644 index ae067926b..000000000 --- a/apps/wolnelektury_core/templates/socialaccount/snippets/login_extra.html +++ /dev/null @@ -1 +0,0 @@ -{# This file intentionally left empty to disable loading FB JS. #} diff --git a/apps/wolnelektury_core/templates/socialaccount/snippets/provider_list.html b/apps/wolnelektury_core/templates/socialaccount/snippets/provider_list.html deleted file mode 100644 index 80f9c2f2d..000000000 --- a/apps/wolnelektury_core/templates/socialaccount/snippets/provider_list.html +++ /dev/null @@ -1,22 +0,0 @@ -{% load socialaccount %} -{% load static from staticfiles %} - -{% for provider in socialaccount.providers %} - {% if provider.id == "openid" %} - {% for brand in provider.get_brands %} - <li> - <a title="{{brand.name}}" - class="socialaccount_provider {{provider.id}} {{brand.id}}" - href="{% provider_login_url provider.id openid=brand.openid_url %}" - ><img alt="{{ brand.name }}" - src="{% static 'img/auth/'|add:brand.id|add:'.png' %}" /></a> - </li> - {% endfor %} - {% endif %} - <li> - <a title="{{provider.name}}" class="socialaccount_provider {{provider.id}}" - href="{% provider_login_url provider.id %}" - ><img alt="{{ provider.name }}" - src="{% static 'img/auth/'|add:provider.id|add:'.png' %}" /></a> - </li> -{% endfor %} diff --git a/apps/wolnelektury_core/templates/superbase.html b/apps/wolnelektury_core/templates/superbase.html deleted file mode 100644 index 08d60a32a..000000000 --- a/apps/wolnelektury_core/templates/superbase.html +++ /dev/null @@ -1,153 +0,0 @@ -<!DOCTYPE html> -{% spaceless %} -<html lang="{{ LANGUAGE_CODE }}" prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#"> - {% load pipeline i18n %} - {% load static from staticfiles %} - {% load catalogue_tags funding_tags reporting_stats %} - {% load piwik_tags %} - {% load ssi_include ssi_csrf_token from ssify %} - {% load user_username user_is_staff from common_tags %} - <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> - <meta name="application-name" content="Wolne Lektury" /> - <meta property="og:site_name" content="Wolne Lektury" /> - <meta property="og:title" content="{% block ogtitle %}{% endblock %}" /> - <meta property="og:type" content="{% block ogtype %}website{% endblock %}" /> - <meta property="og:image" content="{% block ogimage %}{{ FULL_STATIC_URL }}img/wiatrak.png{% endblock %}" /> - <meta name="description" content="{% block metadescription %}Darmowe, opracowane, peÅne teksty lektur, e-booki, audiobooki i pliki DAISY na wolnej licencji.{% endblock %}" /> - {% block ogextra %}{% endblock %} - - <title>{% block title %}{% trans "Wolne Lektury" %} :: {% block titleextra %}{% endblock %}{% endblock %}</title> - <link rel="icon" href="{% static 'img/favicon.png' %}" type="image/png" /> - <link rel="search" type="application/opensearchdescription+xml" title="Wolne Lektury" href="{% static 'opensearch.xml' %}" /> - {% stylesheet "main" %} - {% block extrahead %} - {% endblock %} - </head> - <body id="{% block bodyid %}base{% endblock %}"> - - {% block bodycontent %} - - {% if not funding_no_show_current %} - {% current_offer as current_offer %} - {{ current_offer.if }} - {% ssi_include 'funding_top_bar' pk=current_offer %} - {{ current_offer.endif }} - {% endif %} - - <div id="header-wrapper"> - <header id="main"> - <a href="/" id="logo"> - <img src="{% static 'img/logo-neon.png' %}" alt="Wolne Lektury" /> - </a> - - <p id="user-info"> - {% user_username as user_username %} - {% user_is_staff as user_is_staff %} - {{ user_username.if }}{% trans "Welcome" %}, <span class="hidden-box-wrapper"> - <a href="{% url 'user_settings' %}" class="hidden-box-trigger"> - <strong>{{ user_username }}</strong> - </a> - <span id="user-menu" class="hidden-box"> - <a href="{% url 'account_set_password' %}">{% trans "Password" %}</a><br/> - <a href="{% url 'account_email' %}">{% trans "E-mail" %}</a><br/> - <a href="{% url 'socialaccount_connections' %}">{% trans "Social accounts" %}</a><br/> - </span> - </span> | <a href="{% url 'social_my_shelf' %}" id="user-shelves-link">{% trans "My shelf" %}</a> - {{ user_username.endif }} - {{ user_is_staff.if }} | <a href="/admin/">{% trans "Administration" %}</a> - {{ user_is_staff.endif }} - {{ user_username.if }} | <a href="{% url 'logout' %}?next={% block logout %}{{ request.get_full_path }}{% endblock %}">{% trans "Logout" %}</a> - {{ user_username.else }} - <a href="{% url 'login' %}?next={{ request.path }}" id="login" class="ajaxable">{% trans "Sign in" %}</a> / <a href="{% url 'register' %}?next={{ request.path }}" id="register" class="ajaxable">{% trans "Register" %}</a> - {{ user_username.endif }} - </p> - - <p id="tagline"> - {% url 'book_list' as b %} - {% url 'infopage' 'prawa' as r %} - {% count_books book_count %} - {% blocktrans count book_count as c %} - <a href='{{b}}'>{{c}}</a> free reading you have <a href='{{r}}'>right to</a> - {% plural %} - <a href='{{b}}'>{{c}}</a> free readings you have <a href='{{r}}'>right to</a> - {% endblocktrans %} - </p> - - <form id="search-area" action="{% url 'search' %}"> - <div id="search-field"> - <label for="search">{{search_form.q.label}}</label> - {{search_form.q}} - </div><button type='submit'>{% trans "Search" %}</button> - </form> - - </header> - </div> - - - <nav id="nav-line"> - {% catalogue_menu %} - - <div id="lang-menu" class="hoverget"> - <span id='lang-button' class='hoverclick'> - <span class="lang-flag">â</span> - <span class="label"> {% trans "Language versions" %}</span> - </span> - <div id="lang-menu-items"> - {% for lang in LANGUAGES %} - <form action="{% url 'django.views.i18n.set_language' %}" method="post"> - {% ssi_csrf_token %} - <input type="hidden" name="language" value="{{ lang.0 }}" /> - <button type="submit" lang="{{ lang.0 }}" class="{% ifequal lang.0 LANGUAGE_CODE %}active{% endifequal %}">{{ lang.1 }}</button> - </form> - {% endfor %} - </div> - </div> - - <div class="clearboth"></div> - </nav> - - - <div id="main-content"> - {% block body %} - {% endblock %} - <div class="clearboth"></div> - </div> - - - <div id="footer-wrapper"> - <footer id="main"> - {% ssi_include 'chunk' key='footer' %} - {% block add_footer %}{% endblock %} - {% ssi_include 'sponsor_page' name='footer' %} - </footer> - </div> - - - - {# template #} - <div id="ajaxable-window" class='dialog-window'> - <div class="header"><a href="#" class="jqmClose">{% trans "Close" %}</a></div> - <div class="target"> - <p><img src="{% static "img/indicator.gif" %}" alt="*"/> {% trans "Loading" %}</p> - </div> - </div> - - - {% endblock bodycontent %} - - - <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> - <script type="text/javascript">var LANGUAGE_CODE="{{ LANGUAGE_CODE }}"; var STATIC_URL="{{ STATIC_URL }}";</script> - {% javascript "base" %} - - {% tracking_code %} - - {% block extrabody %} - {% endblock %} - - <script src="{% static "js/contrib/modernizr.custom.19652.js" %}"></script> - </body> -</html> -{% endspaceless %} diff --git a/apps/wolnelektury_core/templates/user.html b/apps/wolnelektury_core/templates/user.html deleted file mode 100644 index 0ffdd62a9..000000000 --- a/apps/wolnelektury_core/templates/user.html +++ /dev/null @@ -1,17 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - - -{% block titleextra %}{% trans "User" %}{% endblock %} - -{% block body %} - -<h1>{% trans "User" %}</h1> - -<div class='normal-text'> -<p><a href="{% url 'account_set_password' %}">{% trans "Password" %}</a></p> -<p><a href="{% url 'account_email' %}">{% trans "E-mail" %}</a></p> -<p><a href="{% url 'socialaccount_connections' %}">{% trans "Social accounts" %}</a></p> -</div> - -{% endblock %} diff --git a/apps/wolnelektury_core/templates/widget.html b/apps/wolnelektury_core/templates/widget.html deleted file mode 100644 index 444f466ab..000000000 --- a/apps/wolnelektury_core/templates/widget.html +++ /dev/null @@ -1,37 +0,0 @@ -{% spaceless %} - -{% load static from staticfiles %} -{% load pipeline %} - -<!DOCTYPE html> -<html> -<head> - <meta charset="UTF-8"> - <base target="_parent" /> - <title>Widget Wolnych Lektur</title> - {% stylesheet 'widget' %} -</head> -<body> -<div id="wl"> - -<a href="/"> - <img src="{% static 'img/logo-neon.png' %}"> -</a> - -<form action="{% url 'search' %}" method="get" accept-charset="utf-8" id="wl-form"> - <div id="wl-search"> - <input data-source="{% url 'search_hint' %}?max=3" id="id_qq" name="q" title="tytuÅ, autor, motyw/temat, epoka, rodzaj, gatunek, cytat" placeholder="tytuÅ, autor, motyw/temat, epoka, rodzaj, gatunek, cytat" type="text" value=""> - </div> - <button> - <img alt="Szukaj" src="{% static 'img/search.png' %}"> - </button> -</form> - -</div> - -{% javascript 'widget' %} - -</body> -</html> - -{% endspaceless %} diff --git a/apps/wolnelektury_core/templatetags/__init__.py b/apps/wolnelektury_core/templatetags/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/wolnelektury_core/templatetags/common_tags.py b/apps/wolnelektury_core/templatetags/common_tags.py deleted file mode 100644 index ab08a3ee6..000000000 --- a/apps/wolnelektury_core/templatetags/common_tags.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django import template -from ssify import ssi_variable -from ssify.utils import ssi_vary_on_cookie - -register = template.Library() - - -@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) -def user_username(request): - return request.user.username - - -@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) -def user_is_staff(request): - return request.user.is_staff diff --git a/apps/wolnelektury_core/templatetags/switch_tag.py b/apps/wolnelektury_core/templatetags/switch_tag.py deleted file mode 100644 index 72476bef0..000000000 --- a/apps/wolnelektury_core/templatetags/switch_tag.py +++ /dev/null @@ -1,135 +0,0 @@ -# Source: http://djangosnippets.org/snippets/967/ -# Author: adurdin -# Posted: August 13, 2008 -# -# -# We can use it based on djangosnippets Terms of Service: -# (http://djangosnippets.org/about/tos/) -# -# 2. That you grant any third party who sees the code you post -# a royalty-free, non-exclusive license to copy and distribute that code -# and to make and distribute derivative works based on that code. You may -# include license terms in snippets you post, if you wish to use -# a particular license (such as the BSD license or GNU GPL), but that -# license must permit royalty-free copying, distribution and modification -# of the code to which it is applied. - -from django import template -from django.template import Library, Node, VariableDoesNotExist - -register = Library() - - -@register.tag(name="switch") -def do_switch(parser, token): - """ - The ``{% switch %}`` tag compares a variable against one or more values in - ``{% case %}`` tags, and outputs the contents of the matching block. An - optional ``{% else %}`` tag sets off the default output if no matches - could be found:: - - {% switch result_count %} - {% case 0 %} - There are no search results. - {% case 1 %} - There is one search result. - {% else %} - Jackpot! Your search found {{ result_count }} results. - {% endswitch %} - - Each ``{% case %}`` tag can take multiple values to compare the variable - against:: - - {% switch username %} - {% case "Jim" "Bob" "Joe" %} - Me old mate {{ username }}! How ya doin? - {% else %} - Hello {{ username }} - {% endswitch %} - """ - bits = token.contents.split() - tag_name = bits[0] - if len(bits) != 2: - raise template.TemplateSyntaxError("'%s' tag requires one argument" % tag_name) - variable = parser.compile_filter(bits[1]) - - class BlockTagList(object): - # This is a bit of a hack, as it embeds knowledge of the behaviour - # of Parser.parse() relating to the "parse_until" argument. - def __init__(self, *names): - self.names = set(names) - def __contains__(self, token_contents): - name = token_contents.split()[0] - return name in self.names - - # Skip over everything before the first {% case %} tag - parser.parse(BlockTagList('case', 'endswitch')) - - cases = [] - token = parser.next_token() - got_case = False - got_else = False - while token.contents != 'endswitch': - nodelist = parser.parse(BlockTagList('case', 'else', 'endswitch')) - - if got_else: - raise template.TemplateSyntaxError("'else' must be last tag in '%s'." % tag_name) - - contents = token.contents.split() - token_name, token_args = contents[0], contents[1:] - - if token_name == 'case': - tests = map(parser.compile_filter, token_args) - case = (tests, nodelist) - got_case = True - else: - # The {% else %} tag - case = (None, nodelist) - got_else = True - cases.append(case) - token = parser.next_token() - - if not got_case: - raise template.TemplateSyntaxError("'%s' must have at least one 'case'." % tag_name) - - return SwitchNode(variable, cases) - -class SwitchNode(Node): - def __init__(self, variable, cases): - self.variable = variable - self.cases = cases - - def __repr__(self): - return "<Switch node>" - - def __iter__(self): - for tests, nodelist in self.cases: - for node in nodelist: - yield node - - def get_nodes_by_type(self, nodetype): - nodes = [] - if isinstance(self, nodetype): - nodes.append(self) - for tests, nodelist in self.cases: - nodes.extend(nodelist.get_nodes_by_type(nodetype)) - return nodes - - def render(self, context): - try: - value_missing = False - value = self.variable.resolve(context, True) - except VariableDoesNotExist: - no_value = True - value_missing = None - - for tests, nodelist in self.cases: - if tests is None: - return nodelist.render(context) - elif not value_missing: - for test in tests: - test_value = test.resolve(context, True) - if value == test_value: - return nodelist.render(context) - else: - return "" diff --git a/apps/wolnelektury_core/views.py b/apps/wolnelektury_core/views.py deleted file mode 100644 index 51371735a..000000000 --- a/apps/wolnelektury_core/views.py +++ /dev/null @@ -1,152 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from datetime import date, datetime -import feedparser - -from django.conf import settings -from django.contrib import auth -from django.contrib.auth.decorators import login_required -from django.contrib.auth.forms import UserCreationForm, AuthenticationForm -from django.core.cache import cache -from django.http import HttpResponse, HttpResponseRedirect -from django.shortcuts import render -from django.utils.http import urlquote_plus -from django.utils.translation import ugettext_lazy as _ -from django.views.decorators.cache import never_cache - -from ajaxable.utils import AjaxableFormView -from ajaxable.utils import placeholdized -from catalogue.models import Book -from ssify import ssi_included - - -def main_page(request): - last_published = Book.objects.exclude(cover_thumb='').filter(parent=None).order_by('-created_at')[:4] - - return render(request, "main_page.html", { - 'last_published': last_published, - }) - - -class LoginFormView(AjaxableFormView): - form_class = AuthenticationForm - template = "auth/login.html" - placeholdize = True - title = _('Sign in') - submit = _('Sign in') - ajax_redirect = True - - def __call__(self, request): - if request.user.is_authenticated(): - 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): - auth.login(request, form.get_user()) - - -class RegisterFormView(AjaxableFormView): - form_class = UserCreationForm - template = "auth/register.html" - placeholdize = True - title = _('Register') - submit = _('Register') - ajax_redirect = True - form_prefix = 'register' - honeypot = True - - def __call__(self, request): - if request.user.is_authenticated(): - 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): - form.save() - user = auth.authenticate( - username=form.cleaned_data['username'], - password=form.cleaned_data['password1'] - ) - auth.login(request, user) - - -class LoginRegisterFormView(LoginFormView): - template = 'auth/login_register.html' - title = _('You have to be logged in to continue') - - def extra_context(self, request, obj): - return { - "register_form": placeholdized(UserCreationForm(prefix='register')), - "register_submit": _('Register'), - } - - -@never_cache -def logout_then_redirect(request): - auth.logout(request) - return HttpResponseRedirect(urlquote_plus(request.GET.get('next', '/'), safe='/?=')) - - -@never_cache -def clock(request): - """ Provides server UTC time for jquery.countdown, - in a format suitable for Date.parse() - """ - return HttpResponse(datetime.utcnow().strftime('%Y/%m/%d %H:%M:%S UTC')) - - -def publish_plan(request): - cache_key = "publish_plan" - plan = cache.get(cache_key) - - if plan is None: - plan = [] - try: - feed = feedparser.parse(settings.PUBLISH_PLAN_FEED) - except: - pass - else: - for i in range(len(feed['entries'])): - plan.append({ - 'title': feed['entries'][i].title, - 'link': feed['entries'][i].link, - }) - cache.set(cache_key, plan, 1800) - - return render(request, "publish_plan.html", {'plan': plan}) - - -@login_required -def user_settings(request): - return render(request, "user.html") - - -@ssi_included(use_lang=False, timeout=1800) -def latest_blog_posts(request, feed_url=None, posts_to_show=5): - if feed_url is None: - feed_url = settings.LATEST_BLOG_POSTS - try: - feed = feedparser.parse(str(feed_url)) - posts = [] - for i in range(posts_to_show): - pub_date = feed['entries'][i].published_parsed - published = date(pub_date[0], pub_date[1], pub_date[2]) - posts.append({ - 'title': feed['entries'][i].title, - 'summary': feed['entries'][i].summary, - 'link': feed['entries'][i].link, - 'date': published, - }) - except: - posts = [] - return render(request, 'latest_blog_posts.html', {'posts': posts}) - - -@ssi_included(use_lang=False) -def widget(request): - return render(request, 'widget.html') diff --git a/lib/basicauth.py b/lib/basicauth.py deleted file mode 100644 index befcc6fe7..000000000 --- a/lib/basicauth.py +++ /dev/null @@ -1,100 +0,0 @@ -############################################################################# -# from http://djangosnippets.org/snippets/243/ - -from functools import wraps -import base64 - -from django.http import HttpResponse -from django.contrib.auth import authenticate, login - -# -def view_or_basicauth(view, request, test_func, realm = "", *args, **kwargs): - """ - This is a helper function used by 'logged_in_or_basicauth' and - 'has_perm_or_basicauth' (deleted) that does the nitty of determining if they - are already logged in or if they have provided proper http-authorization - and returning the view if all goes well, otherwise responding with a 401. - """ - if test_func(request.user): - # Already logged in, just return the view. - # - return view(request, *args, **kwargs) - - # They are not logged in. See if they provided login credentials - # - if 'HTTP_AUTHORIZATION' in request.META: - auth = request.META['HTTP_AUTHORIZATION'].split() - if len(auth) == 2: - # NOTE: We are only support basic authentication for now. - # - if auth[0].lower() == "basic": - uname, passwd = base64.b64decode(auth[1]).split(':') - user = authenticate(username=uname, password=passwd) - if user is not None: - if user.is_active: - login(request, user) - request.user = user - return view(request, *args, **kwargs) - - # Either they did not provide an authorization header or - # something in the authorization attempt failed. Send a 401 - # back to them to ask them to authenticate. - # - response = HttpResponse() - response.status_code = 401 - response['WWW-Authenticate'] = 'Basic realm="%s"' % realm - return response - - -# -def logged_in_or_basicauth(realm = ""): - """ - A simple decorator that requires a user to be logged in. If they are not - logged in the request is examined for a 'authorization' header. - - If the header is present it is tested for basic authentication and - the user is logged in with the provided credentials. - - If the header is not present a http 401 is sent back to the - requestor to provide credentials. - - The purpose of this is that in several django projects I have needed - several specific views that need to support basic authentication, yet the - web site as a whole used django's provided authentication. - - The uses for this are for urls that are access programmatically such as - by rss feed readers, yet the view requires a user to be logged in. Many rss - readers support supplying the authentication credentials via http basic - auth (and they do NOT support a redirect to a form where they post a - username/password.) - - Use is simple: - - @logged_in_or_basicauth - def your_view: - ... - - You can provide the name of the realm to ask for authentication within. - """ - def view_decorator(func): - def wrapper(request, *args, **kwargs): - return view_or_basicauth(func, request, - lambda u: u.is_authenticated(), - realm, *args, **kwargs) - return wrapper - return view_decorator - - -############################################################################# - - -def factory_decorator(decorator): - """ generates a decorator for a function factory class - if A(*) == f, factory_decorator(D)(A)(*) == D(f) - """ - def fac_dec(func): - @wraps(func) - def wrapper(*args, **kwargs): - return decorator(func(*args, **kwargs)) - return wrapper - return fac_dec diff --git a/lib/pyscss_compiler.py b/lib/pyscss_compiler.py deleted file mode 100644 index b57d59e0b..000000000 --- a/lib/pyscss_compiler.py +++ /dev/null @@ -1,19 +0,0 @@ -from os.path import dirname -from django.conf import settings -from pipeline.compilers import SubProcessCompiler - - -class PySCSSCompiler(SubProcessCompiler): - output_extension = 'css' - - def match_file(self, filename): - return filename.endswith('.scss') - - def compile_file(self, infile, outfile, outdated=False, force=False): - command = "%s %s < %s > %s" % ( - settings.PIPELINE_PYSCSS_BINARY, - settings.PIPELINE_PYSCSS_ARGUMENTS, - infile, - outfile - ) - return self.execute_command(command, cwd=dirname(infile)) diff --git a/lib/sortify.py b/lib/sortify.py deleted file mode 100644 index 642a5403f..000000000 --- a/lib/sortify.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- -import re -from fnpdjango.utils.text.slughifi import char_map - - -# Specifies diacritics order. -# Default order is zero, max is 9 -char_order = { - u'ż': 1, u'Å»': 1, -} - - -def replace_char(m): - char = m.group() - if char_map.has_key(char): - order = char_order.get(char, 0) - return "%s~%d" % (char_map[char], order) - else: - return char - - -def sortify(value): - """ - Turns Unicode into ASCII-sortable str - - Examples : - - >>> sortify('a a') < sortify('aa') < sortify('Ä ') < sortify('b') - True - - >>> sortify('ź') < sortify('ż') - True - - """ - - if not isinstance(value, unicode): - value = unicode(value, 'utf-8') - - # try to replace chars - value = re.sub('[^a-zA-Z0-9\\s\\-]{1}', replace_char, value) - value = value.lower() - value = re.sub(r'[^a-z0-9~]+', ' ', value) - - return value.encode('ascii', 'ignore') diff --git a/manage.py b/manage.py deleted file mode 100755 index a03a13a7c..000000000 --- a/manage.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python -import os -import sys - -ROOT = os.path.dirname(os.path.abspath(__file__)) -sys.path = [ - os.path.join(ROOT, 'apps'), - os.path.join(ROOT, 'lib'), - os.path.join(ROOT, 'lib/librarian'), -] + sys.path - -if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "wolnelektury.settings") - - from django.core.management import execute_from_command_line - - execute_from_command_line(sys.argv) diff --git a/requirements-dev.txt b/requirements-dev.txt deleted file mode 100644 index 9c428052c..000000000 --- a/requirements-dev.txt +++ /dev/null @@ -1,8 +0,0 @@ --i https://py.mdrn.pl:8443/simple/ - -django-debug-toolbar -polib -BabelDjango -Fabric -sphinx -pyinotify diff --git a/requirements-test.txt b/requirements-test.txt deleted file mode 100644 index 063cd7837..000000000 --- a/requirements-test.txt +++ /dev/null @@ -1,7 +0,0 @@ --i https://py.mdrn.pl:8443/simple/ - -nose>=1.3.7 -django-nose>=1.4.2,<1.5 -nosexcover -polib -mock diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index fcd41c474..000000000 --- a/requirements.txt +++ /dev/null @@ -1,55 +0,0 @@ --i https://py.mdrn.pl:8443/simple/ - -# django -Django>=1.8,<1.9 -fnpdjango>=0.1.15,<0.2 -django-pipeline>=1.6,<1.7 -jsmin -django-pagination>=1.0 -django-maintenancemode>=0.10 -django-piston==0.2.2.1.2 -jsonfield>=1.0.3,<1.1 -django-picklefield -django-modeltranslation>=0.10,<0.11 -django-allauth>=0.24,<0.25 - - -pytz - -django-honeypot -django-uni-form - -python-memcached -django-piwik -python-fb - -# Feedparser -Feedparser>=5.1 - -Pillow -mutagen>=1.17 -sorl-thumbnail>=12.3,<12.4 - -# home-brewed & dependencies -lxml>=2.2.2 -# -e git+git://github.com/fnp/librarian.git@d43d87400dcc19851442#egg=librarian - -# MySQL-python>=1.2,<2.0 - -# celery tasks -celery>=3.1.12,<3.2 -kombu>=3.0.23,<3.1 - -# spell checking -pyenchant - -# OAI-PMH -pyoai - -## egenix-mx-base # Doesn't play nice with mx in dist-packages. -sunburnt - -django-getpaid>=1.7,<1.8 -httplib2 -Texml -django-ssify>=0.2.1,<0.3 diff --git a/requirements/requirements-dev.txt b/requirements/requirements-dev.txt new file mode 100644 index 000000000..9c428052c --- /dev/null +++ b/requirements/requirements-dev.txt @@ -0,0 +1,8 @@ +-i https://py.mdrn.pl:8443/simple/ + +django-debug-toolbar +polib +BabelDjango +Fabric +sphinx +pyinotify diff --git a/requirements/requirements-test.txt b/requirements/requirements-test.txt new file mode 100644 index 000000000..063cd7837 --- /dev/null +++ b/requirements/requirements-test.txt @@ -0,0 +1,7 @@ +-i https://py.mdrn.pl:8443/simple/ + +nose>=1.3.7 +django-nose>=1.4.2,<1.5 +nosexcover +polib +mock diff --git a/requirements/requirements.txt b/requirements/requirements.txt new file mode 100644 index 000000000..fcd41c474 --- /dev/null +++ b/requirements/requirements.txt @@ -0,0 +1,55 @@ +-i https://py.mdrn.pl:8443/simple/ + +# django +Django>=1.8,<1.9 +fnpdjango>=0.1.15,<0.2 +django-pipeline>=1.6,<1.7 +jsmin +django-pagination>=1.0 +django-maintenancemode>=0.10 +django-piston==0.2.2.1.2 +jsonfield>=1.0.3,<1.1 +django-picklefield +django-modeltranslation>=0.10,<0.11 +django-allauth>=0.24,<0.25 + + +pytz + +django-honeypot +django-uni-form + +python-memcached +django-piwik +python-fb + +# Feedparser +Feedparser>=5.1 + +Pillow +mutagen>=1.17 +sorl-thumbnail>=12.3,<12.4 + +# home-brewed & dependencies +lxml>=2.2.2 +# -e git+git://github.com/fnp/librarian.git@d43d87400dcc19851442#egg=librarian + +# MySQL-python>=1.2,<2.0 + +# celery tasks +celery>=3.1.12,<3.2 +kombu>=3.0.23,<3.1 + +# spell checking +pyenchant + +# OAI-PMH +pyoai + +## egenix-mx-base # Doesn't play nice with mx in dist-packages. +sunburnt + +django-getpaid>=1.7,<1.8 +httplib2 +Texml +django-ssify>=0.2.1,<0.3 diff --git a/src/ajaxable/__init__.py b/src/ajaxable/__init__.py new file mode 100644 index 000000000..ffa37881b --- /dev/null +++ b/src/ajaxable/__init__.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +""" +Provides a way to create forms behaving correctly as AJAX forms +as well as standalone forms without any Javascript. +""" diff --git a/src/ajaxable/locale/pl/LC_MESSAGES/django.mo b/src/ajaxable/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..269549eb3 Binary files /dev/null and b/src/ajaxable/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/ajaxable/locale/pl/LC_MESSAGES/django.po b/src/ajaxable/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..7b190fa12 --- /dev/null +++ b/src/ajaxable/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,23 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: 2012-01-27 16:36+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2)\n" + +#: utils.py:72 +msgid "Send" +msgstr "WyÅlij" diff --git a/src/ajaxable/models.py b/src/ajaxable/models.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/ajaxable/templates/ajaxable/form.html b/src/ajaxable/templates/ajaxable/form.html new file mode 100755 index 000000000..13586ac9d --- /dev/null +++ b/src/ajaxable/templates/ajaxable/form.html @@ -0,0 +1,20 @@ +{% load i18n %} +{% load ssi_csrf_token from ssify %} + +<h1>{{ title }}</h1> + +<form action="{{ request.get_full_path }}" method="post" accept-charset="utf-8" + class="cuteform{% if placeholdize %} hidelabels{% endif %}"> +{% ssi_csrf_token %} +{% if honeypot %} + {% load honeypot %} + {% render_honeypot_field %} +{% endif %} +<ol> + <div id="id_{% if form_prefix %}{{ form_prefix }}-{% endif %}__all__"></div> + {{ form.as_ul }} + <li><input type="submit" value="{{ submit }}"/></li> +</ol> +</form> + +{% block extra %}{% endblock %} \ No newline at end of file diff --git a/src/ajaxable/templates/ajaxable/form_on_page.html b/src/ajaxable/templates/ajaxable/form_on_page.html new file mode 100755 index 000000000..61175d507 --- /dev/null +++ b/src/ajaxable/templates/ajaxable/form_on_page.html @@ -0,0 +1,14 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block titleextra %}{{ title }}{% endblock %} + +{% block body %} + + {% include ajax_template %} + + {% if response_data.message %} + <p>{{ response_data.message }}</p> + {% endif %} + +{% endblock %} diff --git a/src/ajaxable/templatetags/__init__.py b/src/ajaxable/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/ajaxable/templatetags/ajaxable_tags.py b/src/ajaxable/templatetags/ajaxable_tags.py new file mode 100644 index 000000000..351e9f13d --- /dev/null +++ b/src/ajaxable/templatetags/ajaxable_tags.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import template +from ajaxable.utils import placeholdized +register = template.Library() + + +@register.filter +def placeholdize(form): + return placeholdized(form) + + +@register.filter +def placeholdized_ul(form): + return placeholdized(form).as_ul() diff --git a/src/ajaxable/utils.py b/src/ajaxable/utils.py new file mode 100755 index 000000000..89b56228d --- /dev/null +++ b/src/ajaxable/utils.py @@ -0,0 +1,186 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from functools import wraps + +from django.http import (HttpResponse, HttpResponseRedirect, + HttpResponseForbidden) +from django.shortcuts import render_to_response +from django.template import RequestContext +from django.utils.encoding import force_unicode +from django.utils.functional import Promise +from django.utils.http import urlquote_plus +import json +from django.utils.translation import ugettext_lazy as _ +from django.views.decorators.vary import vary_on_headers +from honeypot.decorators import verify_honeypot_value + + +class LazyEncoder(json.JSONEncoder): + def default(self, obj): + if isinstance(obj, Promise): + return force_unicode(obj) + return obj + + +def method_decorator(function_decorator): + """Converts a function decorator to a method decorator. + + It just makes it ignore first argument. + """ + def decorator(method): + @wraps(method) + def wrapped_method(self, *args, **kwargs): + def function(*fargs, **fkwargs): + return method(self, *fargs, **fkwargs) + return function_decorator(function)(*args, **kwargs) + return wrapped_method + return decorator + + +def require_login(request): + """Return 403 if request is AJAX. Redirect to login page if not.""" + if request.is_ajax(): + return HttpResponseForbidden('Not logged in') + else: + return HttpResponseRedirect('/uzytkownicy/zaloguj')# next?=request.build_full_path()) + + +def placeholdized(form): + for field in form.fields.values(): + field.widget.attrs['placeholder'] = field.label + return form + + +class AjaxableFormView(object): + """Subclass this to create an ajaxable view for any form. + + In the subclass, provide at least form_class. + + """ + form_class = None + placeholdize = False + # override to customize form look + template = "ajaxable/form.html" + submit = _('Send') + + title = '' + success_message = '' + POST_login = False + formname = "form" + form_prefix = None + full_template = "ajaxable/form_on_page.html" + honeypot = False + + @method_decorator(vary_on_headers('X-Requested-With')) + def __call__(self, request, *args, **kwargs): + """A view displaying a form, or JSON if request is AJAX.""" + obj = self.get_object(request, *args, **kwargs) + form_args, form_kwargs = self.form_args(request, obj) + if self.form_prefix: + form_kwargs['prefix'] = self.form_prefix + + if request.method == "POST": + if self.honeypot: + response = verify_honeypot_value(request, None) + if response: + return response + + # do I need to be logged in? + if self.POST_login and not request.user.is_authenticated(): + return require_login(request) + + form_kwargs['data'] = request.POST + form = self.form_class(*form_args, **form_kwargs) + if form.is_valid(): + add_args = self.success(form, request) + response_data = { + 'success': True, + 'message': self.success_message, + 'redirect': request.GET.get('next') + } + if add_args: + response_data.update(add_args) + if not request.is_ajax() and response_data['redirect']: + return HttpResponseRedirect(urlquote_plus( + response_data['redirect'], safe='/?=&')) + elif request.is_ajax(): + # Form was sent with errors. Send them back. + if self.form_prefix: + errors = {} + for key, value in form.errors.items(): + errors["%s-%s" % (self.form_prefix, key)] = value + else: + errors = form.errors + response_data = {'success': False, 'errors': errors} + else: + response_data = None + if request.is_ajax(): + return HttpResponse(LazyEncoder(ensure_ascii=False).encode(response_data)) + else: + if (self.POST_login and not request.user.is_authenticated() + and not request.is_ajax()): + return require_login(request) + + form = self.form_class(*form_args, **form_kwargs) + response_data = None + + title = self.title + if request.is_ajax(): + template = self.template + else: + template = self.full_template + cd = self.context_description(request, obj) + if cd: + title += ": " + cd + if self.placeholdize: + form = placeholdized(form) + context = { + self.formname: form, + "title": title, + "honeypot": self.honeypot, + "placeholdize": self.placeholdize, + "submit": self.submit, + "response_data": response_data, + "ajax_template": self.template, + "view_args": args, + "view_kwargs": kwargs, + } + context.update(self.extra_context(request, obj)) + return render_to_response(template, context, + context_instance=RequestContext(request)) + + def redirect_or_refresh(self, request, path, message=None): + """If the form is AJAX, refresh the page. If not, go to `path`.""" + if request.is_ajax(): + output = "<script>window.location.reload()</script>" + if message: + output = "<div class='normal-text'>" + message + "</div>" + output + return HttpResponse(output) + else: + return HttpResponseRedirect(path) + + def get_object(self, request, *args, **kwargs): + """Override to parse view args and get some associated data.""" + return None + + def form_args(self, request, obj): + """Override to parse view args and give additional args to the form.""" + return (), {} + + def extra_context(self, request, obj): + """Override to pass something to template.""" + return {} + + def context_description(self, request, obj): + """Description to appear in standalone form, but not in AJAX form.""" + return "" + + def success(self, form, request): + """What to do when the form is valid. + + By default, just save the form. + + """ + return form.save(request) diff --git a/src/api/__init__.py b/src/api/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/api/emitters.py b/src/api/emitters.py new file mode 100644 index 000000000..2f6f7e75f --- /dev/null +++ b/src/api/emitters.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +""" +Wrappers for piston Emitter classes. + +When outputting a queryset of selected models, instead of returning +XML or JSON stanzas, SSI include statements are returned. + +""" +from django.core.urlresolvers import reverse +from django.db.models.query import QuerySet +from piston.emitters import Emitter, XMLEmitter, JSONEmitter +from catalogue.models import Book, Fragment, Tag +from django.utils.translation import get_language + + +class SsiQS(object): + """A wrapper for QuerySet that won't serialize.""" + + def __init__(self, queryset): + self.queryset = queryset + + def __unicode__(self): + raise TypeError("This is not serializable.") + + def get_ssis(self, emitter_format): + """Yields SSI include statements for the queryset.""" + url_pattern = reverse('api_include', + kwargs={'model': self.queryset.model.__name__.lower(), + 'pk': '0000', + 'emitter_format': emitter_format, + 'lang': get_language(), + }) + for instance in self.queryset: + yield "<!--#include file='%s'-->" % url_pattern.replace('0000', + str(instance.pk)) + + +class SsiEmitterMixin(object): + def construct(self): + if isinstance(self.data, QuerySet) and self.data.model in (Book, + Fragment, Tag): + return SsiQS(self.data) + else: + return super(SsiEmitterMixin, self).construct() + + +class SsiJsonEmitter(SsiEmitterMixin, JSONEmitter): + def render(self, request): + try: + return super(SsiJsonEmitter, self).render(request) + except TypeError: + return '[%s]' % ",".join(self.construct().get_ssis('json')) + +Emitter.register('json', SsiJsonEmitter, 'application/json; charset=utf-8') + + +class SsiXmlEmitter(SsiEmitterMixin, XMLEmitter): + def render(self, request): + try: + return super(SsiXmlEmitter, self).render(request) + except TypeError: + return '<?xml version="1.0" encoding="utf-8"?>\n' \ + '<response><resource>%s</resource></response>' % \ + '</resource><resource>'.join(self.construct().get_ssis('xml')) + +Emitter.register('xml', SsiXmlEmitter, 'text/xml; charset=utf-8') + diff --git a/src/api/handlers.py b/src/api/handlers.py new file mode 100644 index 000000000..5fe931e69 --- /dev/null +++ b/src/api/handlers.py @@ -0,0 +1,469 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import json + +from django.contrib.sites.models import Site +from django.core.urlresolvers import reverse +from django.utils.functional import lazy +from piston.handler import AnonymousBaseHandler, BaseHandler +from piston.utils import rc +from sorl.thumbnail import default + +from catalogue.forms import BookImportForm +from catalogue.models import Book, Tag, BookMedia, Fragment, Collection +from picture.models import Picture +from picture.forms import PictureImportForm + +from stats.utils import piwik_track + +from . import emitters # Register our emitters + +API_BASE = WL_BASE = MEDIA_BASE = lazy( + lambda: u'http://' + Site.objects.get_current().domain, unicode)() + + +category_singular = { + 'authors': 'author', + 'kinds': 'kind', + 'genres': 'genre', + 'epochs': 'epoch', + 'themes': 'theme', + 'books': 'book', +} +category_plural = {} +for k, v in category_singular.items(): + category_plural[v] = k + +book_tag_categories = ['author', 'epoch', 'kind', 'genre'] + + + +def read_tags(tags, allowed): + """ Reads a path of filtering tags. + + :param str tags: a path of category and slug pairs, like: authors/an-author/... + :returns: list of Tag objects + :raises: ValueError when tags can't be found + """ + if not tags: + return [], [] + + tags = tags.strip('/').split('/') + real_tags = [] + books = [] + while tags: + category = tags.pop(0) + slug = tags.pop(0) + + try: + category = category_singular[category] + except KeyError: + raise ValueError('Unknown category.') + + if not category in allowed: + raise ValueError('Category not allowed.') + + if category == 'book': + try: + books.append(Book.objects.get(slug=slug)) + except Book.DoesNotExist: + raise ValueError('Unknown book.') + + try: + real_tags.append(Tag.objects.get(category=category, slug=slug)) + except Tag.DoesNotExist: + raise ValueError('Tag not found') + return real_tags, books + + +# RESTful handlers + + +class BookMediaHandler(BaseHandler): + """ Responsible for representing media in Books. """ + + model = BookMedia + fields = ['name', 'type', 'url', 'artist', 'director'] + + @classmethod + def url(cls, media): + """ Link to media on site. """ + + return MEDIA_BASE + media.file.url + + @classmethod + def artist(cls, media): + return media.extra_info.get('artist_name', '') + + @classmethod + def director(cls, media): + return media.extra_info.get('director_name', '') + + +class BookDetails(object): + """Custom fields used for representing Books.""" + + @classmethod + def href(cls, book): + """ Returns an URI for a Book in the API. """ + return API_BASE + reverse("api_book", args=[book.slug]) + + @classmethod + def url(cls, book): + """ Returns Book's URL on the site. """ + + return WL_BASE + book.get_absolute_url() + + @classmethod + def children(cls, book): + """ Returns all children for a book. """ + + return book.children.all() + + @classmethod + def media(cls, book): + """ Returns all media for a book. """ + return book.media.all() + + @classmethod + def cover(cls, book): + return MEDIA_BASE + book.cover.url if book.cover else '' + + @classmethod + def cover_thumb(cls, book): + return MEDIA_BASE + default.backend.get_thumbnail( + book.cover, "139x193").url if book.cover else '' + + + +class BookDetailHandler(BaseHandler, BookDetails): + """ Main handler for Book objects. + + Responsible for single Book details. + """ + allowed_methods = ['GET'] + fields = ['title', 'parent', 'children'] + Book.formats + [ + 'media', 'url', 'cover', 'cover_thumb'] + [ + category_plural[c] for c in book_tag_categories] + + @piwik_track + def read(self, request, book): + """ Returns details of a book, identified by a slug and lang. """ + try: + return Book.objects.get(slug=book) + except Book.DoesNotExist: + return rc.NOT_FOUND + + +class AnonymousBooksHandler(AnonymousBaseHandler, BookDetails): + """ Main handler for Book objects. + + Responsible for lists of Book objects. + """ + allowed_methods = ('GET',) + model = Book + fields = book_tag_categories + ['href', 'title', 'url', 'cover', 'cover_thumb'] + + @classmethod + def genres(cls, book): + """ Returns all media for a book. """ + return book.tags.filter(category='genre') + + @piwik_track + def read(self, request, tags=None, top_level=False, + audiobooks=False, daisy=False, pk=None): + """ Lists all books with given tags. + + :param tags: filtering tags; should be a path of categories + and slugs, i.e.: authors/an-author/epoch/an-epoch/ + :param top_level: if True and a book is included in the results, + it's children are aren't. By default all books matching the tags + are returned. + """ + if pk is not None: + try: + return Book.objects.get(pk=pk) + except Book.DoesNotExist: + return rc.NOT_FOUND + + try: + tags, _ancestors = read_tags(tags, allowed=book_tag_categories) + except ValueError: + return rc.NOT_FOUND + + if tags: + if top_level: + books = Book.tagged_top_level(tags) + return books if books else rc.NOT_FOUND + else: + books = Book.tagged.with_all(tags) + else: + books = Book.objects.all() + + if top_level: + books = books.filter(parent=None) + if audiobooks: + books = books.filter(media__type='mp3').distinct() + if daisy: + books = books.filter(media__type='daisy').distinct() + + if books.exists(): + return books + else: + return rc.NOT_FOUND + + def create(self, request, *args, **kwargs): + return rc.FORBIDDEN + + +class BooksHandler(BookDetailHandler): + allowed_methods = ('GET', 'POST') + model = Book + fields = book_tag_categories + ['href', 'title', 'url', 'cover', 'cover_thumb'] + anonymous = AnonymousBooksHandler + + def create(self, request, *args, **kwargs): + if not request.user.has_perm('catalogue.add_book'): + return rc.FORBIDDEN + + data = json.loads(request.POST.get('data')) + form = BookImportForm(data) + if form.is_valid(): + form.save() + return rc.CREATED + else: + return rc.NOT_FOUND + + +class EBooksHandler(AnonymousBooksHandler): + fields = ('author', 'href', 'title', 'cover') + tuple(Book.ebook_formats) + + +# add categorized tags fields for Book +def _tags_getter(category): + @classmethod + def get_tags(cls, book): + return book.tags.filter(category=category) + return get_tags +def _tag_getter(category): + @classmethod + def get_tag(cls, book): + return ', '.join(tag.name for tag in book.tags.filter(category=category)) + return get_tag +for plural, singular in category_singular.items(): + setattr(BookDetails, plural, _tags_getter(singular)) + setattr(BookDetails, singular, _tag_getter(singular)) + +# add fields for files in Book +def _file_getter(format): + field = "%s_file" % format + @classmethod + def get_file(cls, book): + f = getattr(book, field) + if f: + return MEDIA_BASE + f.url + else: + return '' + return get_file +for format in Book.formats: + setattr(BookDetails, format, _file_getter(format)) + + +class CollectionDetails(object): + """Custom Collection fields.""" + + @classmethod + def href(cls, collection): + """ Returns URI in the API for the collection. """ + + return API_BASE + reverse("api_collection", args=[collection.slug]) + + @classmethod + def url(cls, collection): + """ Returns URL on the site. """ + + return WL_BASE + collection.get_absolute_url() + + @classmethod + def books(cls, collection): + return Book.objects.filter(collection.get_query()) + + + +class CollectionDetailHandler(BaseHandler, CollectionDetails): + allowed_methods = ('GET',) + fields = ['url', 'title', 'description', 'books'] + + @piwik_track + def read(self, request, slug): + """ Returns details of a collection, identified by slug. """ + try: + return Collection.objects.get(slug=slug) + except Collection.DoesNotExist: + return rc.NOT_FOUND + + +class CollectionsHandler(BaseHandler, CollectionDetails): + allowed_methods = ('GET',) + model = Collection + fields = ['url', 'href', 'title'] + + @piwik_track + def read(self, request): + """ Returns all collections. """ + return Collection.objects.all() + + +class TagDetails(object): + """Custom Tag fields.""" + + @classmethod + def href(cls, tag): + """ Returns URI in the API for the tag. """ + + return API_BASE + reverse("api_tag", args=[category_plural[tag.category], tag.slug]) + + @classmethod + def url(cls, tag): + """ Returns URL on the site. """ + + return WL_BASE + tag.get_absolute_url() + + +class TagDetailHandler(BaseHandler, TagDetails): + """ Responsible for details of a single Tag object. """ + + fields = ['name', 'url', 'sort_key', 'description'] + + @piwik_track + def read(self, request, category, slug): + """ Returns details of a tag, identified by category and slug. """ + + try: + category_sng = category_singular[category] + except KeyError, e: + return rc.NOT_FOUND + + try: + return Tag.objects.get(category=category_sng, slug=slug) + except Tag.DoesNotExist: + return rc.NOT_FOUND + + +class TagsHandler(BaseHandler, TagDetails): + """ Main handler for Tag objects. + + Responsible for lists of Tag objects + and fields used for representing Tags. + + """ + allowed_methods = ('GET',) + model = Tag + fields = ['name', 'href', 'url'] + + @piwik_track + def read(self, request, category=None, pk=None): + """ Lists all tags in the category (eg. all themes). """ + if pk is not None: + try: + return Tag.objects.exclude(category='set').get(pk=pk) + except Book.DoesNotExist: + return rc.NOT_FOUND + + try: + category_sng = category_singular[category] + except KeyError, e: + return rc.NOT_FOUND + + tags = Tag.objects.filter(category=category_sng).exclude(items=None) + if tags.exists(): + return tags + else: + return rc.NOT_FOUND + + +class FragmentDetails(object): + """Custom Fragment fields.""" + + @classmethod + def href(cls, fragment): + """ Returns URI in the API for the fragment. """ + + return API_BASE + reverse("api_fragment", + args=[fragment.book.slug, fragment.anchor]) + + @classmethod + def url(cls, fragment): + """ Returns URL on the site for the fragment. """ + + return WL_BASE + fragment.get_absolute_url() + + @classmethod + def themes(cls, fragment): + """ Returns a list of theme tags for the fragment. """ + + return fragment.tags.filter(category='theme') + + +class FragmentDetailHandler(BaseHandler, FragmentDetails): + fields = ['book', 'anchor', 'text', 'url', 'themes'] + + @piwik_track + def read(self, request, book, anchor): + """ Returns details of a fragment, identified by book slug and anchor. """ + try: + return Fragment.objects.get(book__slug=book, anchor=anchor) + except Fragment.DoesNotExist: + return rc.NOT_FOUND + + +class FragmentsHandler(BaseHandler, FragmentDetails): + """ Main handler for Fragments. + + Responsible for lists of Fragment objects + and fields used for representing Fragments. + + """ + model = Fragment + fields = ['book', 'url', 'anchor', 'href'] + allowed_methods = ('GET',) + + categories = set(['author', 'epoch', 'kind', 'genre', 'book', 'theme']) + + @piwik_track + def read(self, request, tags): + """ Lists all fragments with given book, tags, themes. + + :param tags: should be a path of categories and slugs, i.e.: + books/book-slug/authors/an-author/themes/a-theme/ + + """ + try: + tags, ancestors = read_tags(tags, allowed=self.categories) + except ValueError: + return rc.NOT_FOUND + fragments = Fragment.tagged.with_all(tags).select_related('book') + if fragments.exists(): + return fragments + else: + return rc.NOT_FOUND + + +class PictureHandler(BaseHandler): + model = Picture + fields = ('slug', 'title') + allowed_methods = ('POST',) + + def create(self, request): + if not request.user.has_perm('picture.add_picture'): + return rc.FORBIDDEN + + data = json.loads(request.POST.get('data')) + form = PictureImportForm(data) + if form.is_valid(): + form.save() + return rc.CREATED + else: + return rc.NOT_FOUND diff --git a/src/api/helpers.py b/src/api/helpers.py new file mode 100644 index 000000000..62578e7c3 --- /dev/null +++ b/src/api/helpers.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from time import mktime +from piston.resource import Resource + +def timestamp(dtime): + "converts a datetime.datetime object to a timestamp int" + return int(mktime(dtime.timetuple())) + +class CsrfExemptResource(Resource): + """A Custom Resource that is csrf exempt""" + def __init__(self, handler, authentication=None): + super(CsrfExemptResource, self).__init__(handler, authentication) + self.csrf_exempt = getattr(self.handler, 'csrf_exempt', True) diff --git a/src/api/locale/pl/LC_MESSAGES/django.mo b/src/api/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..816c91c7a Binary files /dev/null and b/src/api/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/api/locale/pl/LC_MESSAGES/django.po b/src/api/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..177d4491f --- /dev/null +++ b/src/api/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,158 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: 2013-06-14 11:45+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 1.5.4\n" + +#: models.py:15 +msgid "slug" +msgstr "" + +#: templates/api/main.html:5 +msgid "WolneLektury.pl API" +msgstr "API serwisu WolneLektury.pl" + +#: templates/api/main.html:16 +#, python-format +msgid "" +"\n" +"WolneLektury.pl API resides under <code>%(u)s</code>.\n" +"You can use it to access information about books, their fragments and\n" +"their metadata.\n" +msgstr "" +"\n" +"API serwisu WolneLektury.pl znajduje siÄ pod adresem <code>%(u)s</code>.\n" +"Za jego pomocÄ można uzyskaÄ informacje o utworach, ich fragmentach i " +"metadanych.\n" + +#: templates/api/main.html:24 +msgid "" +"\n" +"Default data serialization format is\n" +"<a href=\"http://en.wikipedia.org/wiki/JSON\">JSON</a>, \n" +"but you can also use XML by appending <code>?format=xml</code>\n" +"query parameter to each URL.\n" +msgstr "" +"\n" +"Dane domyÅlnie sÄ serializowane w formacie <a href=\"http://pl.wikipedia.org/" +"wiki/JSON\">JSON</a>,\n" +"ale dostÄpny jest też format XML â wystarczy dodaÄ parametr <code>?" +"format=xml</code>\n" +"do każdego zapytania.\n" + +#: templates/api/main.html:33 +msgid "" +"\n" +"The URLs in WolneLektury.pl API are:\n" +msgstr "" +"\n" +"API Wolnych Lektur zawiera nastÄpujÄ ce adresy URL:\n" + +#: templates/api/main.html:40 +msgid "All books" +msgstr "Wszystkie utwory" + +#: templates/api/main.html:42 +msgid "Audiobooks" +msgstr "Audiobooki" + +#: templates/api/main.html:44 +msgid "DAISY" +msgstr "DAISY" + +#: templates/api/main.html:47 +msgid "List of all authors" +msgstr "Lista autorów" + +#: templates/api/main.html:49 +msgid "List of all epochs" +msgstr "Lista epok" + +#: templates/api/main.html:51 +msgid "List of all genres" +msgstr "Lista gatunków literackich" + +#: templates/api/main.html:53 +msgid "List of all kinds" +msgstr "Lista rodzajów literackich" + +#: templates/api/main.html:56 +msgid "List of all themes" +msgstr "Lista motywów i tematów literackich" + +#: templates/api/main.html:58 +msgid "Collections" +msgstr "Kolekcje" + +#: templates/api/main.html:64 +#, python-format +msgid "" +"\n" +"Each element of those lists contains a link (in a \"href\") attibute\n" +"which points to individual resource's details, i.e.:\n" +"<a href=\"%(e1)s\">%(e1)s</a> or\n" +"<a href=\"%(e2)s\">%(e2)s</a>.\n" +msgstr "" +"\n" +"Każdy element na tych listach zawiera adres (w atrybucie âhrefâ), pod którym " +"można znaleÅºÄ szczegóÅowe dane, np. <a href=\"%(e1)s\">%(e1)s</a> czy <a " +"href=\"%(e2)s\">%(e2)s</a>.\n" + +#: templates/api/main.html:73 +#, python-format +msgid "" +"\n" +"You can combine authors, epochs, genres and kinds to find only books " +"matching\n" +"those criteria. For instance:\n" +"<a href=\"%(e)s\">%(e)s</a>.\n" +msgstr "" +"\n" +"Można ÅÄ czyÄ autorów, epoki, gatunki i rodzaje, aby wybraÄ tylko utwory " +"odpowiadajÄ ce zadanym kryteriom. Na przykÅad: <a href=\"%(e)s\">%(e)s</a>.\n" + +#: templates/api/main.html:81 +#, python-format +msgid "" +"\n" +"If you only want top-level books and not all the children, you can use /" +"parent_books/, as in:\n" +"<a href=\"%(e)s\">%(e)s</a>.\n" +msgstr "" +"\n" +"Aby spoÅród wszystkich pasujÄ cych wybraÄ tylko utwory najwyższego poziomu " +"(pomijajÄ c ich podutwory), można użyÄ zapytania /parent_books/, np.: <a href=" +"\"%(e)s\">%(e)s</a>.\n" + +#: templates/api/main.html:89 +#, python-format +msgid "" +"\n" +"The same way, using also books and themes, you can search for a list of " +"fragments:\n" +"<a href=\"%(e)s\">%(e)s</a>. \n" +"Again, each entry has a \"href\" attribute which links to the fragment's " +"details, i.e.:\n" +"<a href=\"%(f)s\">%(f)s</a>. \n" +msgstr "" +"\n" +"W ten sam sposób, filtrujÄ c dodatkowo wedÅug lektur lub motywów, można " +"wyszukiwaÄ fragmenty:<a href=\"%(e)s\">%(e)s</a>. \n" +"Każdy element uzyskanej listy w atrybucie âhrefâ zawiera link do " +"szczegóÅowego opisu danego fragmentu, np.:\n" +"<a href=\"%(f)s\">%(f)s</a>. \n" diff --git a/src/api/management/__init__.py b/src/api/management/__init__.py new file mode 100755 index 000000000..e69de29bb diff --git a/src/api/management/commands/__init__.py b/src/api/management/commands/__init__.py new file mode 100755 index 000000000..e69de29bb diff --git a/src/api/management/commands/mobileinit.py b/src/api/management/commands/mobileinit.py new file mode 100755 index 000000000..57b41aa46 --- /dev/null +++ b/src/api/management/commands/mobileinit.py @@ -0,0 +1,168 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from datetime import datetime +import os +import os.path +import re +import sqlite3 +from django.core.management.base import BaseCommand + +from api.helpers import timestamp +from api.settings import MOBILE_INIT_DB +from catalogue.models import Book, Tag + + +class Command(BaseCommand): + help = 'Creates an initial SQLite file for the mobile app.' + + def handle(self, **options): + # those should be versioned + last_checked = timestamp(datetime.now()) + db = init_db(last_checked) + for b in Book.objects.all(): + add_book(db, b) + for t in Tag.objects.exclude( + category__in=('book', 'set', 'theme')).exclude(items=None): + # only add non-empty tags + add_tag(db, t) + db.commit() + db.close() + current(last_checked) + + +def pretty_size(size): + """ Turns size in bytes into a prettier string. + + >>> pretty_size(100000) + '97 KiB' + """ + if not size: + return None + units = ['B', 'KiB', 'MiB', 'GiB'] + size = float(size) + unit = units.pop(0) + while size > 1000 and units: + size /= 1024 + unit = units.pop(0) + if size < 10: + return "%.1f %s" % (size, unit) + return "%d %s" % (size, unit) + + + if not isinstance(value, unicode): + value = unicode(value, 'utf-8') + + # try to replace chars + value = re.sub('[^a-zA-Z0-9\\s\\-]{1}', replace_char, value) + value = value.lower() + value = re.sub(r'[^a-z0-9{|}]+', '~', value) + + return value.encode('ascii', 'ignore') + + + +def init_db(last_checked): + if not os.path.isdir(MOBILE_INIT_DB): + os.makedirs(MOBILE_INIT_DB) + db = sqlite3.connect(os.path.join(MOBILE_INIT_DB, 'initial.db-%d' % last_checked)) + + schema = """ +CREATE TABLE book ( + id INTEGER PRIMARY KEY, + title VARCHAR, + cover VARCHAR, + html_file VARCHAR, + html_file_size INTEGER, + parent INTEGER, + parent_number INTEGER, + + sort_key VARCHAR, + pretty_size VARCHAR, + authors VARCHAR, + _local BOOLEAN +); +CREATE INDEX IF NOT EXISTS book_title_index ON book (sort_key); +CREATE INDEX IF NOT EXISTS book_title_index ON book (title); +CREATE INDEX IF NOT EXISTS book_parent_index ON book (parent); + +CREATE TABLE tag ( + id INTEGER PRIMARY KEY, + name VARCHAR, + category VARCHAR, + sort_key VARCHAR, + books VARCHAR); +CREATE INDEX IF NOT EXISTS tag_name_index ON tag (name); +CREATE INDEX IF NOT EXISTS tag_category_index ON tag (category); +CREATE INDEX IF NOT EXISTS tag_sort_key_index ON tag (sort_key); + +CREATE TABLE state (last_checked INTEGER); +""" + + db.executescript(schema) + db.execute("INSERT INTO state VALUES (:last_checked)", locals()) + return db + + +def current(last_checked): + target = os.path.join(MOBILE_INIT_DB, 'initial.db') + if os.path.lexists(target): + os.unlink(target) + os.symlink( + 'initial.db-%d' % last_checked, + target, + ) + + + +book_sql = """ + INSERT INTO book + (id, title, cover, html_file, html_file_size, parent, parent_number, sort_key, pretty_size, authors) + VALUES + (:id, :title, :cover, :html_file, :html_file_size, :parent, :parent_number, :sort_key, :size_str, :authors); +""" +book_tag_sql = "INSERT INTO book_tag (book, tag) VALUES (:book, :tag);" +tag_sql = """ + INSERT INTO tag + (id, category, name, sort_key, books) + VALUES + (:id, :category, :name, :sort_key, :book_ids); +""" +categories = {'author': 'autor', + 'epoch': 'epoka', + 'genre': 'gatunek', + 'kind': 'rodzaj', + 'theme': 'motyw' + } + + +def add_book(db, book): + id = book.id + title = book.title + if book.html_file: + html_file = book.html_file.url + html_file_size = book.html_file.size + else: + html_file = html_file_size = None + if book.cover: + cover = book.cover.url + else: + cover = None + parent = book.parent_id + parent_number = book.parent_number + sort_key = book.sort_key + size_str = pretty_size(html_file_size) + authors = ", ".join(t.name for t in book.tags.filter(category='author')) + db.execute(book_sql, locals()) + + +def add_tag(db, tag): + id = tag.id + category = categories[tag.category] + name = tag.name + sort_key = tag.sort_key + + books = Book.tagged_top_level([tag]) + book_ids = ','.join(str(b.id) for b in books) + db.execute(tag_sql, locals()) diff --git a/src/api/migrations/0001_initial.py b/src/api/migrations/0001_initial.py new file mode 100644 index 000000000..4d20304bc --- /dev/null +++ b/src/api/migrations/0001_initial.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Deleted', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('object_id', models.IntegerField()), + ('slug', models.SlugField(max_length=120, verbose_name='Slug', blank=True)), + ('category', models.CharField(db_index=True, max_length=64, null=True, blank=True)), + ('created_at', models.DateTimeField(editable=False, db_index=True)), + ('deleted_at', models.DateTimeField(auto_now_add=True, db_index=True)), + ('content_type', models.ForeignKey(to='contenttypes.ContentType')), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.AlterUniqueTogether( + name='deleted', + unique_together=set([('content_type', 'object_id')]), + ), + ] diff --git a/src/api/migrations/0002_auto_20151221_1225.py b/src/api/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..339068ac5 --- /dev/null +++ b/src/api/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='deleted', + name='slug', + field=models.SlugField(max_length=120, verbose_name='slug', blank=True), + ), + ] diff --git a/src/api/migrations/__init__.py b/src/api/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/api/models.py b/src/api/models.py new file mode 100644 index 000000000..5a3d42440 --- /dev/null +++ b/src/api/models.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib.contenttypes.models import ContentType +from django.db import models +from django.db.models.signals import pre_delete +from django.utils.translation import ugettext_lazy as _ + +from catalogue.models import Book, Tag + + +class Deleted(models.Model): + object_id = models.IntegerField() + slug = models.SlugField(_('slug'), max_length=120, blank=True, db_index=True) + content_type = models.ForeignKey(ContentType) + category = models.CharField(max_length=64, null=True, blank=True, db_index=True) + created_at = models.DateTimeField(editable=False, db_index=True) + deleted_at = models.DateTimeField(auto_now_add=True, db_index=True) + + class Meta: + unique_together = (('content_type', 'object_id'),) + + +def _pre_delete_handler(sender, instance, **kwargs): + """ save deleted objects for change history purposes """ + + if sender in (Book, Tag): + if sender == Tag: + if instance.category in ('book', 'set'): + return + else: + category = instance.category + else: + category = None + content_type = ContentType.objects.get_for_model(sender) + Deleted.objects.create(content_type=content_type, object_id=instance.id, + created_at=instance.created_at, category=category, slug=instance.slug) +pre_delete.connect(_pre_delete_handler) diff --git a/src/api/settings.py b/src/api/settings.py new file mode 100644 index 000000000..0802c5453 --- /dev/null +++ b/src/api/settings.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import os.path +from django.conf import settings + + +try: + MOBILE_INIT_DB = settings.API_MOBILE_INIT_DB +except AttributeError: + MOBILE_INIT_DB = os.path.abspath(os.path.join(settings.MEDIA_ROOT, 'api/mobile/initial/')) diff --git a/src/api/templates/api/main.html b/src/api/templates/api/main.html new file mode 100755 index 000000000..04244dc91 --- /dev/null +++ b/src/api/templates/api/main.html @@ -0,0 +1,97 @@ +{% extends "base.html" %} +{% load i18n %} +{% load build_absolute_uri from fnp_common %} + +{% block title %}{% trans "WolneLektury.pl API" %}{% endblock %} + +{% block bodyid %}api{% endblock %} + +{% block body %} + +<h1>API</h1> + +<div class="normal-text white-box"> +<p> +{% url "api" as u %} +{% blocktrans with u=u|build_absolute_uri:request %} +WolneLektury.pl API resides under <code>{{ u }}</code>. +You can use it to access information about books, their fragments and +their metadata. +{% endblocktrans %} +</p> + +<p> +{% blocktrans %} +Default data serialization format is +<a href="http://en.wikipedia.org/wiki/JSON">JSON</a>, +but you can also use XML by appending <code>?format=xml</code> +query parameter to each URL. +{% endblocktrans %} +</p> + +<p> +{% blocktrans %} +The URLs in WolneLektury.pl API are: +{% endblocktrans %} +</p> + +<ul> + <li><a href='{% url "api_book_list" "" %}'> + {% url "api_book_list" "" %}</a> â {% trans "All books" %} + <li><a href='{% url "api_audiobook_list" "" %}'> + {% url "api_audiobook_list" "" %}</a> â {% trans "Audiobooks" %} + <li><a href='{% url "api_daisy_list" "" %}'> + {% url "api_daisy_list" "" %}</a> â {% trans "DAISY" %} + + <li><a href='{% url "api_tag_list" "authors" %}'> + {% url "api_tag_list" "authors" %}</a> â {% trans "List of all authors" %}</li> + <li><a href='{% url "api_tag_list" "epochs" %}'> + {% url "api_tag_list" "epochs" %}</a> â {% trans "List of all epochs" %}</li> + <li><a href='{% url "api_tag_list" "genres" %}'> + {% url "api_tag_list" "genres" %}</a> â {% trans "List of all genres" %}</li> + <li><a href='{% url "api_tag_list" "kinds" %}'> + {% url "api_tag_list" "kinds" %}</a> â {% trans "List of all kinds" %}</li> + + <li><a href='{% url "api_tag_list" "themes" %}'> + {% url "api_tag_list" "themes" %}</a> â {% trans "List of all themes" %}</li> + <li><a href='{% url "api_collections" %}'> + {% url "api_collections" %}</a> â {% trans "Collections" %} +</ul> + +<p> +{% url "api_book" "studnia-i-wahadlo" as e1 %} +{% url "api_tag" "authors" "edgar-allan-poe" as e2 %} +{% blocktrans %} +Each element of those lists contains a link (in a "href") attibute +which points to individual resource's details, i.e.: +<a href="{{e1}}">{{e1}}</a> or +<a href="{{e2}}">{{e2}}</a>. +{% endblocktrans %} +</p> + +<p> +{% blocktrans with "/api/authors/adam-mickiewicz/kinds/liryka/books/" as e %} +You can combine authors, epochs, genres and kinds to find only books matching +those criteria. For instance: +<a href="{{e}}">{{e}}</a>. +{% endblocktrans %} +</p> + +<p> +{% blocktrans with "/api/authors/adam-mickiewicz/kinds/liryka/parent_books/" as e %} +If you only want top-level books and not all the children, you can use /parent_books/, as in: +<a href="{{e}}">{{e}}</a>. +{% endblocktrans %} +</p> + +<p> +{% url "api_fragment" "sen-nocy-letniej" "1290526312912-3814598192" as f %} +{% blocktrans with "/api/authors/william-shakespeare/themes/zabawa/fragments/" as e %} +The same way, using also books and themes, you can search for a list of fragments: +<a href="{{e}}">{{e}}</a>. +Again, each entry has a "href" attribute which links to the fragment's details, i.e.: +<a href="{{f}}">{{f}}</a>. +{% endblocktrans %} +</p> +</div> +{% endblock %} diff --git a/src/api/templates/oauth/challenge.html b/src/api/templates/oauth/challenge.html new file mode 100755 index 000000000..e69de29bb diff --git a/src/api/tests.py b/src/api/tests.py new file mode 100644 index 000000000..94abe53b5 --- /dev/null +++ b/src/api/tests.py @@ -0,0 +1,95 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from os import path + +from django.core.files.uploadedfile import SimpleUploadedFile +from django.test import TestCase +from django.test.utils import override_settings +import json + +from catalogue.models import Book, Tag +from picture.forms import PictureImportForm +from picture.models import Picture +import picture.tests + + +@override_settings( + NO_SEARCH_INDEX=True, + CACHES={'default': { + 'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}}, + SSIFY_CACHE_ALIASES=['default'], + SSIFY_RENDER=True, +) +class ApiTest(TestCase): + def load_json(self, url): + content = self.client.get(url).content + try: + data = json.loads(content) + except ValueError: + self.fail('No JSON could be decoded:', content) + return data + + +class BookTests(ApiTest): + + def setUp(self): + self.tag = Tag.objects.create(category='author', slug='joe') + self.book = Book.objects.create(title='A Book', slug='a-book') + self.book_tagged = Book.objects.create(title='Tagged Book', slug='tagged-book') + self.book_tagged.tags = [self.tag] + self.book_tagged.save() + + def test_book_list(self): + books = self.load_json('/api/books/') + self.assertEqual(len(books), 2, + 'Wrong book list.') + + def test_tagged_books(self): + books = self.load_json('/api/authors/joe/books/') + + self.assertEqual([b['title'] for b in books], [self.book_tagged.title], + 'Wrong tagged book list.') + + def test_detail(self): + book = self.load_json('/api/books/a-book/') + self.assertEqual(book['title'], self.book.title, + 'Wrong book details.') + + +class TagTests(ApiTest): + + def setUp(self): + self.tag = Tag.objects.create(category='author', slug='joe', name='Joe') + self.book = Book.objects.create(title='A Book', slug='a-book') + self.book.tags = [self.tag] + self.book.save() + + def test_tag_list(self): + tags = self.load_json('/api/authors/') + self.assertEqual(len(tags), 1, + 'Wrong tag list.') + + def test_tag_detail(self): + tag = self.load_json('/api/authors/joe/') + self.assertEqual(tag['name'], self.tag.name, + 'Wrong tag details.') + + +class PictureTests(ApiTest): + def test_publish(self): + slug = "kandinsky-composition-viii" + xml = SimpleUploadedFile('composition8.xml', open(path.join(picture.tests.__path__[0], "files", slug + ".xml")).read()) + img = SimpleUploadedFile('kompozycja-8.png', open(path.join(picture.tests.__path__[0], "files", slug + ".png")).read()) + + import_form = PictureImportForm({}, { + 'picture_xml_file': xml, + 'picture_image_file': img + }) + + assert import_form.is_valid() + if import_form.is_valid(): + import_form.save() + + Picture.objects.get(slug=slug) diff --git a/src/api/urls.py b/src/api/urls.py new file mode 100644 index 000000000..1c2e656d1 --- /dev/null +++ b/src/api/urls.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url +from django.views.decorators.csrf import csrf_exempt +from django.views.generic import TemplateView +from piston.authentication import OAuthAuthentication, oauth_access_token +from piston.resource import Resource +from ssify import ssi_included +from api import handlers +from api.helpers import CsrfExemptResource + +auth = OAuthAuthentication(realm="Wolne Lektury") + +book_list_resource = CsrfExemptResource(handler=handlers.BooksHandler, authentication=auth) +ebook_list_resource = Resource(handler=handlers.EBooksHandler) +#book_list_resource = Resource(handler=handlers.BooksHandler) +book_resource = Resource(handler=handlers.BookDetailHandler) + +collection_resource = Resource(handler=handlers.CollectionDetailHandler) +collection_list_resource = Resource(handler=handlers.CollectionsHandler) + +tag_list_resource = Resource(handler=handlers.TagsHandler) +tag_resource = Resource(handler=handlers.TagDetailHandler) + +fragment_resource = Resource(handler=handlers.FragmentDetailHandler) +fragment_list_resource = Resource(handler=handlers.FragmentsHandler) + +picture_resource = CsrfExemptResource(handler=handlers.PictureHandler, authentication=auth) + + +@ssi_included +def incl(request, model, pk, emitter_format): + resource = { + 'book': book_list_resource, + 'fragment': fragment_list_resource, + 'tag': tag_list_resource, + }[model] + request.piwik_track = False + resp = resource(request, pk=pk, emitter_format=emitter_format) + if emitter_format == 'xml': + # Ugly, but quick way of stripping <?xml?> header and <response> tags. + resp.content = resp.content[49:-11] + return resp + + +urlpatterns = patterns( + 'piston.authentication', + url(r'^oauth/request_token/$', 'oauth_request_token'), + url(r'^oauth/authorize/$', 'oauth_user_auth'), + url(r'^oauth/access_token/$', csrf_exempt(oauth_access_token)), + +) + patterns('', + url(r'^$', TemplateView.as_view(template_name='api/main.html'), name='api'), + url(r'^include/(?P<model>book|fragment|tag)/(?P<pk>\d+)\.(?P<lang>.+)\.(?P<emitter_format>xml|json)$', + incl, name='api_include'), + + # info boxes (used by mobile app) + url(r'book/(?P<id>\d*?)/info\.html$', 'catalogue.views.book_info'), + url(r'tag/(?P<id>\d*?)/info\.html$', 'catalogue.views.tag_info'), + + # books by collections + url(r'^collections/$', collection_list_resource, name="api_collections"), + url(r'^collections/(?P<slug>[^/]+)/$', collection_resource, name="api_collection"), + + # objects details + url(r'^books/(?P<book>[a-z0-9-]+)/$', book_resource, name="api_book"), + url(r'^(?P<category>[a-z0-9-]+)/(?P<slug>[a-z0-9-]+)/$', + tag_resource, name="api_tag"), + url(r'^books/(?P<book>[a-z0-9-]+)/fragments/(?P<anchor>[a-z0-9-]+)/$', + fragment_resource, name="api_fragment"), + + # books by tags + url(r'^(?P<tags>(?:(?:[a-z0-9-]+/){2}){0,6})books/$', + book_list_resource, name='api_book_list'), + url(r'^(?P<tags>(?:(?:[a-z0-9-]+/){2}){0,6})ebooks/$', + ebook_list_resource, name='api_ebook_list'), + url(r'^(?P<tags>(?:(?:[a-z0-9-]+/){2}){0,6})parent_books/$', + book_list_resource, {"top_level": True}, name='api_parent_book_list'), + url(r'^(?P<tags>(?:(?:[a-z0-9-]+/){2}){0,6})parent_ebooks/$', + ebook_list_resource, {"top_level": True}, name='api_parent_ebook_list'), + url(r'^(?P<tags>(?:(?:[a-z0-9-]+/){2}){0,6})audiobooks/$', + book_list_resource, {"audiobooks": True}, name='api_audiobook_list'), + url(r'^(?P<tags>(?:(?:[a-z0-9-]+/){2}){0,6})daisy/$', + book_list_resource, {"daisy": True}, name='api_daisy_list'), + + url(r'^pictures/$', picture_resource), + + # fragments by book, tags, themes + # this should be paged + url(r'^(?P<tags>(?:(?:[a-z0-9-]+/){2}){1,6})fragments/$', fragment_list_resource), + + # tags by category + url(r'^(?P<category>[a-z0-9-]+)/$', tag_list_resource, name='api_tag_list'), +) diff --git a/src/basicauth.py b/src/basicauth.py new file mode 100644 index 000000000..befcc6fe7 --- /dev/null +++ b/src/basicauth.py @@ -0,0 +1,100 @@ +############################################################################# +# from http://djangosnippets.org/snippets/243/ + +from functools import wraps +import base64 + +from django.http import HttpResponse +from django.contrib.auth import authenticate, login + +# +def view_or_basicauth(view, request, test_func, realm = "", *args, **kwargs): + """ + This is a helper function used by 'logged_in_or_basicauth' and + 'has_perm_or_basicauth' (deleted) that does the nitty of determining if they + are already logged in or if they have provided proper http-authorization + and returning the view if all goes well, otherwise responding with a 401. + """ + if test_func(request.user): + # Already logged in, just return the view. + # + return view(request, *args, **kwargs) + + # They are not logged in. See if they provided login credentials + # + if 'HTTP_AUTHORIZATION' in request.META: + auth = request.META['HTTP_AUTHORIZATION'].split() + if len(auth) == 2: + # NOTE: We are only support basic authentication for now. + # + if auth[0].lower() == "basic": + uname, passwd = base64.b64decode(auth[1]).split(':') + user = authenticate(username=uname, password=passwd) + if user is not None: + if user.is_active: + login(request, user) + request.user = user + return view(request, *args, **kwargs) + + # Either they did not provide an authorization header or + # something in the authorization attempt failed. Send a 401 + # back to them to ask them to authenticate. + # + response = HttpResponse() + response.status_code = 401 + response['WWW-Authenticate'] = 'Basic realm="%s"' % realm + return response + + +# +def logged_in_or_basicauth(realm = ""): + """ + A simple decorator that requires a user to be logged in. If they are not + logged in the request is examined for a 'authorization' header. + + If the header is present it is tested for basic authentication and + the user is logged in with the provided credentials. + + If the header is not present a http 401 is sent back to the + requestor to provide credentials. + + The purpose of this is that in several django projects I have needed + several specific views that need to support basic authentication, yet the + web site as a whole used django's provided authentication. + + The uses for this are for urls that are access programmatically such as + by rss feed readers, yet the view requires a user to be logged in. Many rss + readers support supplying the authentication credentials via http basic + auth (and they do NOT support a redirect to a form where they post a + username/password.) + + Use is simple: + + @logged_in_or_basicauth + def your_view: + ... + + You can provide the name of the realm to ask for authentication within. + """ + def view_decorator(func): + def wrapper(request, *args, **kwargs): + return view_or_basicauth(func, request, + lambda u: u.is_authenticated(), + realm, *args, **kwargs) + return wrapper + return view_decorator + + +############################################################################# + + +def factory_decorator(decorator): + """ generates a decorator for a function factory class + if A(*) == f, factory_decorator(D)(A)(*) == D(f) + """ + def fac_dec(func): + @wraps(func) + def wrapper(*args, **kwargs): + return decorator(func(*args, **kwargs)) + return wrapper + return fac_dec diff --git a/src/catalogue/__init__.py b/src/catalogue/__init__.py new file mode 100644 index 000000000..eaeb7d468 --- /dev/null +++ b/src/catalogue/__init__.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import logging +from django.conf import settings as settings +from catalogue.utils import AppSettings + + +default_app_config = 'catalogue.apps.CatalogueConfig' + + +class Settings(AppSettings): + """Default settings for catalogue app.""" + DEFAULT_LANGUAGE = u'pol' + # PDF needs TeXML + XeLaTeX, MOBI needs Calibre. + DONT_BUILD = set(['pdf', 'mobi']) + FORMAT_ZIPS = { + 'epub': 'wolnelektury_pl_epub', + 'pdf': 'wolnelektury_pl_pdf', + 'mobi': 'wolnelektury_pl_mobi', + 'fb2': 'wolnelektury_pl_fb2', + } + + REDAKCJA_URL = "http://redakcja.wolnelektury.pl" + GOOD_LICENSES = set([r'CC BY \d\.\d', r'CC BY-SA \d\.\d']) + RELATED_RANDOM_PICTURE_CHANCE = .5 + + def _more_DONT_BUILD(self, value): + for format_ in ['cover', 'pdf', 'epub', 'mobi', 'fb2', 'txt']: + attname = 'NO_BUILD_%s' % format_.upper() + if hasattr(settings, attname): + logging.warn("%s is deprecated, " + "use CATALOGUE_DONT_BUILD instead", attname) + if getattr(settings, attname): + value.add(format_) + else: + value.remove(format_) + return value + + def _more_FORMAT_ZIPS(self, value): + for format_ in ['epub', 'pdf', 'mobi', 'fb2']: + attname = 'ALL_%s_ZIP' % format_.upper() + if hasattr(settings, attname): + logging.warn("%s is deprecated, " + "use CATALOGUE_FORMAT_ZIPS[%s] instead", + attname, format_) + value[format_] = getattr(settings, attname) + return value + + +app_settings = Settings('CATALOGUE') diff --git a/src/catalogue/admin.py b/src/catalogue/admin.py new file mode 100644 index 000000000..28cf53c37 --- /dev/null +++ b/src/catalogue/admin.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib import admin +from django import forms + +from newtagging.admin import TaggableModelAdmin, TaggableModelForm +from catalogue.models import Tag, Book, Fragment, BookMedia, Collection, Source + + +class TagAdmin(admin.ModelAdmin): + list_display = ('name', 'slug', 'sort_key', 'category', 'has_description',) + list_filter = ('category',) + search_fields = ('name',) + ordering = ('name',) + + prepopulated_fields = {'slug': ('name',), 'sort_key': ('name',),} + radio_fields = {'category': admin.HORIZONTAL} + + +class MediaInline(admin.TabularInline): + model = BookMedia + readonly_fields = ['source_sha1'] + extra = 0 + + +class BookAdmin(TaggableModelAdmin): + tag_model = Tag + + list_display = ('title', 'slug', 'created_at', 'has_epub_file', 'has_html_file', 'has_description',) + search_fields = ('title',) + ordering = ('title',) + + inlines = [MediaInline] + + def change_view(self, request, object_id, extra_context=None): + if not request.GET.has_key('advanced'): + self.form = forms.ModelForm + self.fields = ('title', 'description', 'gazeta_link', 'wiki_link') + self.readonly_fields = ('title',) + else: + self.form = TaggableModelForm + self.fields = None + self.readonly_fields = () + return super(BookAdmin, self).change_view(request, object_id, + extra_context=extra_context) + + +class FragmentAdmin(TaggableModelAdmin): + tag_model = Tag + + list_display = ('book', 'anchor',) + ordering = ('book', 'anchor',) + + +class CollectionAdmin(admin.ModelAdmin): + prepopulated_fields = {'slug': ('title',)} + + +class SourceAdmin(admin.ModelAdmin): + list_display = ('netloc', 'name') + + +admin.site.register(Tag, TagAdmin) +admin.site.register(Book, BookAdmin) +admin.site.register(Fragment, FragmentAdmin) +admin.site.register(Collection, CollectionAdmin) +admin.site.register(Source, SourceAdmin) diff --git a/src/catalogue/apps.py b/src/catalogue/apps.py new file mode 100644 index 000000000..54bfc8f8b --- /dev/null +++ b/src/catalogue/apps.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.apps import AppConfig + +class CatalogueConfig(AppConfig): + name = 'catalogue' + + def ready(self): + from . import signals diff --git a/src/catalogue/constants.py b/src/catalogue/constants.py new file mode 100644 index 000000000..36f4f5dd3 --- /dev/null +++ b/src/catalogue/constants.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.utils.translation import ugettext_lazy as _ + +LICENSES = { + 'http://creativecommons.org/licenses/by-sa/3.0/': { + 'icon': 'cc-by-sa', + 'description': _('Creative Commons Attribution-ShareAlike 3.0 Unported'), + }, +} +LICENSES['http://creativecommons.org/licenses/by-sa/3.0/deed.pl'] = \ + LICENSES['http://creativecommons.org/licenses/by-sa/3.0/'] + +# Those will be generated only for books with own HTML. +EBOOK_FORMATS_WITHOUT_CHILDREN = ['txt', 'fb2'] +# Those will be generated for all books. +EBOOK_FORMATS_WITH_CHILDREN = ['pdf', 'epub', 'mobi'] +# Those will be generated when inherited cover changes. +EBOOK_FORMATS_WITH_COVERS = ['pdf', 'epub', 'mobi'] + +EBOOK_FORMATS = EBOOK_FORMATS_WITHOUT_CHILDREN + EBOOK_FORMATS_WITH_CHILDREN + +LANGUAGES_3TO2 = { + 'deu': 'de', + 'ger': 'de', + 'eng': 'en', + 'spa': 'es', + 'fra': 'fr', + 'fre': 'fr', + 'ita': 'it', + 'jpn': 'jp', + 'lit': 'lt', + 'pol': 'pl', + 'rus': 'ru', + 'ukr': 'uk', +} diff --git a/src/catalogue/feeds.py b/src/catalogue/feeds.py new file mode 100644 index 000000000..2411d015a --- /dev/null +++ b/src/catalogue/feeds.py @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib.sites.models import Site +from django.contrib.syndication.views import Feed +from django.core.urlresolvers import reverse + +from catalogue import models + +def absolute_url(url): + return "http://%s%s" % (Site.objects.get_current().domain, url) + + +class AudiobookFeed(Feed): + description = "Audiobooki ostatnio dodane do serwisu Wolne Lektury." + + mime_types = { + 'mp3': 'audio/mpeg', + 'ogg': 'audio/ogg', + 'daisy': 'application/zip', + } + + titles = { + 'all': 'WolneLektury.pl - audiobooki we wszystkich formatach', + 'mp3': 'WolneLektury.pl - audiobooki w formacie MP3', + 'ogg': 'WolneLektury.pl - audiobooki w formacie Ogg Vorbis', + 'daisy': 'WolneLektury.pl - audiobooki w formacie DAISY', + } + + def get_object(self, request, type): + return {'type': type, 'all': 'all' in request.GET} + + def title(self, args): + return self.titles[args['type']] + + def link(self, args): + return reverse('audiobook_feed', args=(args['type'],)) + + def items(self, args): + objects = models.BookMedia.objects.order_by('-uploaded_at') + if type == 'all': + objects = objects.filter(type__in=('mp3', 'ogg', 'daisy')) + else: + objects = objects.filter(type=args['type']) + if not args['all']: + objects = objects[:50] + return objects + + def item_title(self, item): + return item.name + + def item_categories(self, item): + return sorted(set(author.name for author in + item.book.tags.filter(category='author').iterator())) + + def item_description(self, item): + lines = [] + artist = item.extra_info.get('artist_name', None) + if artist is not None: + lines.append(u'Czyta: %s' % artist) + director = item.extra_info.get('artist_name', None) + if director is not None: + lines.append(u'Reżyseruje: %s' % director) + return u'<br/>\n'.join(lines) + + def item_link(self, item): + return item.book.get_absolute_url() + + def item_guid(self, item): + return absolute_url(item.file.url) + + def item_enclosure_url(self, item): + return absolute_url(item.file.url) + + def item_enclosure_length(self, item): + return item.file.size + + def item_enclosure_mime_type(self, item): + return self.mime_types[item.type] + + def item_pubdate(self, item): + return item.uploaded_at diff --git a/src/catalogue/fields.py b/src/catalogue/fields.py new file mode 100644 index 000000000..0ff2ca9ef --- /dev/null +++ b/src/catalogue/fields.py @@ -0,0 +1,243 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from django.core.files import File +from django.db import models +from django.db.models.fields.files import FieldFile +from catalogue import app_settings +from catalogue.constants import LANGUAGES_3TO2 +from catalogue.utils import remove_zip, truncate_html_words +from celery.task import Task, task +from celery.utils.log import get_task_logger +from waiter.utils import clear_cache + +task_logger = get_task_logger(__name__) + + +class EbookFieldFile(FieldFile): + """Represents contents of an ebook file field.""" + + def build(self): + """Build the ebook immediately.""" + return self.field.builder.build(self) + + def build_delay(self): + """Builds the ebook in a delayed task.""" + return self.field.builder.delay(self.instance, self.field.attname) + + +class EbookField(models.FileField): + """Represents an ebook file field, attachable to a model.""" + attr_class = EbookFieldFile + + def __init__(self, format_name, *args, **kwargs): + super(EbookField, self).__init__(*args, **kwargs) + self.format_name = format_name + + def deconstruct(self): + name, path, args, kwargs = super(EbookField, self).deconstruct() + args.insert(0, self.format_name) + return name, path, args, kwargs + + @property + def builder(self): + """Finds a celery task suitable for the format of the field.""" + return BuildEbook.for_format(self.format_name) + + def contribute_to_class(self, cls, name): + super(EbookField, self).contribute_to_class(cls, name) + + def has(model_instance): + return bool(getattr(model_instance, self.attname, None)) + has.__doc__ = None + has.__name__ = str("has_%s" % self.attname) + has.short_description = self.name + has.boolean = True + setattr(cls, 'has_%s' % self.attname, has) + + +class BuildEbook(Task): + formats = {} + + @classmethod + def register(cls, format_name): + """A decorator for registering subclasses for particular formats.""" + def wrapper(builder): + cls.formats[format_name] = builder + return builder + return wrapper + + @classmethod + def for_format(cls, format_name): + """Returns a celery task suitable for specified format.""" + return cls.formats.get(format_name, BuildEbookTask) + + @staticmethod + def transform(wldoc, fieldfile): + """Transforms an librarian.WLDocument into an librarian.OutputFile. + + By default, it just calls relevant wldoc.as_??? method. + + """ + return getattr(wldoc, "as_%s" % fieldfile.field.format_name)() + + def run(self, obj, field_name): + """Just run `build` on FieldFile, can't pass it directly to Celery.""" + task_logger.info("%s -> %s" % (obj.slug, field_name)) + ret = self.build(getattr(obj, field_name)) + obj.flush_includes() + return ret + + def build(self, fieldfile): + book = fieldfile.instance + out = self.transform(book.wldocument(), fieldfile) + fieldfile.save(None, File(open(out.get_filename())), save=False) + if book.pk is not None: + type(book).objects.filter(pk=book.pk).update(**{ + fieldfile.field.attname: fieldfile + }) + if fieldfile.field.format_name in app_settings.FORMAT_ZIPS: + remove_zip(app_settings.FORMAT_ZIPS[fieldfile.field.format_name]) +# Don't decorate BuildEbook, because we want to subclass it. +BuildEbookTask = task(BuildEbook, ignore_result=True) + + +@BuildEbook.register('txt') +@task(ignore_result=True) +class BuildTxt(BuildEbook): + @staticmethod + def transform(wldoc, fieldfile): + return wldoc.as_text() + + +@BuildEbook.register('pdf') +@task(ignore_result=True) +class BuildPdf(BuildEbook): + @staticmethod + def transform(wldoc, fieldfile): + return wldoc.as_pdf(morefloats=settings.LIBRARIAN_PDF_MOREFLOATS, + cover=True) + + def build(self, fieldfile): + BuildEbook.build(self, fieldfile) + clear_cache(fieldfile.instance.slug) + + +@BuildEbook.register('epub') +@task(ignore_result=True) +class BuildEpub(BuildEbook): + @staticmethod + def transform(wldoc, fieldfile): + return wldoc.as_epub(cover=True) + + +@BuildEbook.register('html') +@task(ignore_result=True) +class BuildHtml(BuildEbook): + def build(self, fieldfile): + from django.core.files.base import ContentFile + from fnpdjango.utils.text.slughifi import slughifi + from sortify import sortify + from librarian import html + from catalogue.models import Fragment, Tag + + book = fieldfile.instance + + html_output = self.transform( + book.wldocument(parse_dublincore=False), + fieldfile) + + # Delete old fragments, create from scratch if necessary. + book.fragments.all().delete() + + if html_output: + meta_tags = list(book.tags.filter( + category__in=('author', 'epoch', 'genre', 'kind'))) + + lang = book.language + lang = LANGUAGES_3TO2.get(lang, lang) + if lang not in [ln[0] for ln in settings.LANGUAGES]: + lang = None + + fieldfile.save(None, ContentFile(html_output.get_string()), + save=False) + type(book).objects.filter(pk=book.pk).update(**{ + fieldfile.field.attname: fieldfile + }) + + # Extract fragments + closed_fragments, open_fragments = html.extract_fragments(fieldfile.path) + for fragment in closed_fragments.values(): + try: + theme_names = [s.strip() for s in fragment.themes.split(',')] + except AttributeError: + continue + themes = [] + for theme_name in theme_names: + if not theme_name: + continue + if lang == settings.LANGUAGE_CODE: + # Allow creating themes if book in default language. + tag, created = Tag.objects.get_or_create( + slug=slughifi(theme_name), + category='theme') + if created: + tag.name = theme_name + setattr(tag, "name_%s" % lang, theme_name) + tag.sort_key = sortify(theme_name.lower()) + tag.save() + themes.append(tag) + elif lang is not None: + # Don't create unknown themes in non-default languages. + try: + tag = Tag.objects.get(category='theme', + **{"name_%s" % lang: theme_name}) + except Tag.DoesNotExist: + pass + else: + themes.append(tag) + if not themes: + continue + + text = fragment.to_string() + short_text = truncate_html_words(text, 15) + if text == short_text: + short_text = '' + new_fragment = Fragment.objects.create(anchor=fragment.id, + book=book, text=text, short_text=short_text) + + new_fragment.save() + new_fragment.tags = set(meta_tags + themes) + book.html_built.send(sender=type(self), instance=book) + return True + return False + +@BuildEbook.register('cover_thumb') +@task(ignore_result=True) +class BuildCoverThumb(BuildEbook): + @classmethod + def transform(cls, wldoc, fieldfile): + from librarian.cover import WLCover + return WLCover(wldoc.book_info, height=193).output_file() + + + +class OverwritingFieldFile(FieldFile): + """ + Deletes the old file before saving the new one. + """ + + def save(self, name, content, *args, **kwargs): + leave = kwargs.pop('leave', None) + # delete if there's a file already and there's a new one coming + if not leave and self and (not hasattr(content, 'path') or + content.path != self.path): + self.delete(save=False) + return super(OverwritingFieldFile, self).save( + name, content, *args, **kwargs) + + +class OverwritingFileField(models.FileField): + attr_class = OverwritingFieldFile diff --git a/src/catalogue/fixtures/collection-boy.json b/src/catalogue/fixtures/collection-boy.json new file mode 100644 index 000000000..1328b132b --- /dev/null +++ b/src/catalogue/fixtures/collection-boy.json @@ -0,0 +1,19 @@ +[ + { + "pk": "promo", + "model": "chunks.chunk", + "fields": { + "content": "<div class=\"grid-line\" id=\"promo-box-header\"><h2 class=\"mono\">\r\n\r\n\r\nOh Boy!\r\n\r\n\r\n</h2></div><div id=\"promo-box-body\" class=\"accent4\"><p id=\"promo-box-title\" class=\"mono\"><span>\r\n\r\n\r\nBiblioteczka Boya\r\n\r\n\r\n</span></p><div id=\"promo-box-content\">\r\n\r\n\r\n<p>T\u0142umaczenia literatury francuskiej i nie tylko.</p>\r\n\r\n<p class=\"see-more\"><a href=\"/katalog/lektury/boy/\" >Biblioteczka Boya \u21d2</a></p>\r\n\r\n\r\n</div></div>", + "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/src/catalogue/forms.py b/src/catalogue/forms.py new file mode 100644 index 000000000..d52310bd3 --- /dev/null +++ b/src/catalogue/forms.py @@ -0,0 +1,108 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import forms +from django.utils.translation import ugettext_lazy as _ + +from catalogue.models import Book +from waiter.models import WaitedFile +from django.core.exceptions import ValidationError +from catalogue.utils import get_customized_pdf_path +from catalogue.tasks import build_custom_pdf + + +class BookImportForm(forms.Form): + book_xml_file = forms.FileField(required=False) + book_xml = forms.CharField(required=False) + + def clean(self): + from django.core.files.base import ContentFile + + if not self.cleaned_data['book_xml_file']: + if self.cleaned_data['book_xml']: + self.cleaned_data['book_xml_file'] = \ + ContentFile(self.cleaned_data['book_xml'].encode('utf-8')) + else: + raise forms.ValidationError(_("Please supply an XML.")) + return super(BookImportForm, self).clean() + + def save(self, commit=True, **kwargs): + return Book.from_xml_file(self.cleaned_data['book_xml_file'], overwrite=True, **kwargs) + + +FORMATS = [(f, f.upper()) for f in Book.ebook_formats] + + +class DownloadFormatsForm(forms.Form): + formats = forms.MultipleChoiceField(required=False, choices=FORMATS, + widget=forms.CheckboxSelectMultiple) + + def __init__(self, *args, **kwargs): + super(DownloadFormatsForm, self).__init__(*args, **kwargs) + + +CUSTOMIZATION_FLAGS = ( + ('nofootnotes', _("Don't show footnotes")), + ('nothemes', _("Don't disply themes")), + ('nowlfont', _("Don't use our custom font")), + ('no-cover', _("Without cover")), + ) +CUSTOMIZATION_OPTIONS = ( + ('leading', _("Leading"), ( + ('', _('Normal leading')), + ('onehalfleading', _('One and a half leading')), + ('doubleleading', _('Double leading')), + )), + ('fontsize', _("Font size"), ( + ('', _('Default')), + ('13pt', _('Big')) + )), +# ('pagesize', _("Paper size"), ( +# ('a4paper', _('A4')), +# ('a5paper', _('A5')), +# )), + ) + + +class CustomPDFForm(forms.Form): + def __init__(self, book, *args, **kwargs): + super(CustomPDFForm, self).__init__(*args, **kwargs) + self.book = book + for name, label in CUSTOMIZATION_FLAGS: + self.fields[name] = forms.BooleanField(required=False, label=label) + for name, label, choices in CUSTOMIZATION_OPTIONS: + self.fields[name] = forms.ChoiceField(choices, required=False, label=label) + + def clean(self): + self.cleaned_data['cust'] = self.customizations + self.cleaned_data['path'] = get_customized_pdf_path(self.book, + self.cleaned_data['cust']) + if not WaitedFile.can_order(self.cleaned_data['path']): + raise ValidationError(_('Queue is full. Please try again later.')) + return self.cleaned_data + + @property + def customizations(self): + c = [] + for name, label in CUSTOMIZATION_FLAGS: + if self.cleaned_data.get(name): + c.append(name) + for name, label, choices in CUSTOMIZATION_OPTIONS: + option = self.cleaned_data.get(name) + if option: + c.append(option) + c.sort() + return c + + def save(self, *args, **kwargs): + if not self.cleaned_data['cust'] and self.book.pdf_file: + # Don't build with default options, just redirect to the standard file. + return {"redirect": self.book.pdf_file.url} + url = WaitedFile.order(self.cleaned_data['path'], + lambda p, waiter_id: build_custom_pdf.delay(self.book.id, + self.cleaned_data['cust'], p, waiter_id), + self.book.pretty_title() + ) + #return redirect(url) + return {"redirect": url} diff --git a/src/catalogue/helpers.py b/src/catalogue/helpers.py new file mode 100644 index 000000000..7ca2cbd3a --- /dev/null +++ b/src/catalogue/helpers.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib.contenttypes.models import ContentType +from django.db.models import Count +from .models import Tag, Book + + +BOOK_CATEGORIES = ('author', 'epoch', 'genre', 'kind') + + +def get_top_level_related_tags(tags=None, categories=BOOK_CATEGORIES): + """ + Finds tags related to given tags through books, and counts their usage. + + Takes ancestry into account: if a tag is applied to a book, its + usage on the book's descendants is ignored. + + This is tested for PostgreSQL 9.1+, and might not work elsewhere. + It particular, it uses raw SQL using WITH clause, which is + supported in SQLite from v. 3.8.3, and is missing in MySQL. + http://bugs.mysql.com/bug.php?id=16244 + + """ + # First, find all tag relations of relevant books. + bct = ContentType.objects.get_for_model(Book) + relations = Tag.intermediary_table_model.objects.filter( + content_type=bct) + if tags is not None: + tagged_books = Book.tagged.with_all(tags).only('pk') + relations = relations.filter( + object_id__in=tagged_books).exclude( + tag_id__in=[tag.pk for tag in tags]) + + rel_sql, rel_params = relations.query.sql_with_params() + + # Exclude those relations between a book and a tag, + # for which there is a relation between the book's ancestor + # and the tag and + + return Tag.objects.raw(''' + WITH AllTagged AS (''' + rel_sql + ''') + SELECT catalogue_tag.*, COUNT(catalogue_tag.id) AS count + FROM catalogue_tag, AllTagged + WHERE catalogue_tag.id=AllTagged.tag_id + AND catalogue_tag.category IN %s + AND NOT EXISTS ( + SELECT AncestorTagged.id + FROM catalogue_book_ancestor Ancestor, + AllTagged AncestorTagged + WHERE Ancestor.from_book_id=AllTagged.object_id + AND AncestorTagged.content_type_id=%s + AND AncestorTagged.object_id=Ancestor.to_book_id + AND AncestorTagged.tag_id=AllTagged.tag_id + ) + GROUP BY catalogue_tag.id + ORDER BY sort_key''', rel_params + (categories, bct.pk)) diff --git a/src/catalogue/import_utils.py b/src/catalogue/import_utils.py new file mode 100644 index 000000000..ca0c6efe5 --- /dev/null +++ b/src/catalogue/import_utils.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from librarian import DocProvider + +class ORMDocProvider(DocProvider): + """Used for getting books' children.""" + + def __init__(self, book): + self.book = book + + def by_slug(self, slug): + if slug == self.book.slug: + return open(self.book.xml_file.path) + else: + return type(self.book).objects.get(slug=slug).xml_file diff --git a/src/catalogue/locale/de/LC_MESSAGES/django.mo b/src/catalogue/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..1cd46613d Binary files /dev/null and b/src/catalogue/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/de/LC_MESSAGES/django.po b/src/catalogue/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..057dc348f --- /dev/null +++ b/src/catalogue/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,874 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: 2013-04-09 10:38+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "Bitte stellen Sie die XML bereit." + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "Zeige die FuÃnoten nicht" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "Zeige die Motive nicht " + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "Benutze voreingestellte Schrift nicht" + +#: forms.py:49 +msgid "Without cover" +msgstr "" + +#: forms.py:52 +msgid "Leading" +msgstr "Zeilenabstand" + +#: forms.py:53 +msgid "Normal leading" +msgstr "Normaler Zeilenabstand" + +#: forms.py:54 +msgid "One and a half leading" +msgstr "Zeilenabstand 1,5" + +#: forms.py:55 +msgid "Double leading" +msgstr "Doppelter Zeilenabstand" + +#: forms.py:57 +msgid "Font size" +msgstr "SchriftgröÃe" + +#: forms.py:58 +msgid "Default" +msgstr "Voreingestellt" + +#: forms.py:59 +msgid "Big" +msgstr "GroÃ" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "" + +#: views.py:585 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" +"Ein Fehler ist aufgetreten: %(exception)s\n" +"\n" +"%(tb)s" + +#: views.py:586 +msgid "Book imported successfully" +msgstr "Buch wurde erfolgreich importiert" + +#: views.py:588 +#, python-format +msgid "Error importing file: %r" +msgstr "Fehler beim Importieren der Datei: %r" + +#: views.py:620 +msgid "Download custom PDF" +msgstr "PDF-Datei herunterladen" + +#: views.py:621 templates/catalogue/book_short.html:92 +#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 +msgid "Download" +msgstr "Herunterladen" + +#: models/book.py:28 models/collection.py:11 +msgid "title" +msgstr "Titel" + +#: models/book.py:29 models/tag.py:34 +msgid "sort key" +msgstr "Sortierschlüssel" + +#: models/book.py:30 models/book.py:32 models/collection.py:12 +#: models/collection.py:15 models/tag.py:33 +msgid "slug" +msgstr "Slug" + +#: models/book.py:33 +msgid "language code" +msgstr "Sprachenkode" + +#: models/book.py:35 models/book.py:146 models/collection.py:13 +#: models/tag.py:37 models/tag.py:94 +msgid "description" +msgstr "Beschreibung" + +#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 +#: models/tag.py:47 +msgid "creation date" +msgstr "Erstellungsdatum" + +#: models/book.py:38 +msgid "parent number" +msgstr "Elternnummer" + +#: models/book.py:39 models/bookmedia.py:30 +msgid "extra information" +msgstr "zusätzliche Informationen" + +#: models/book.py:44 +msgid "cover" +msgstr "Umschlag" + +#: models/book.py:66 models/collection.py:18 models/tag.py:22 +msgid "book" +msgstr "Buch" + +#: models/book.py:67 +msgid "books" +msgstr "Bücher" + +#: models/book.py:244 +#, python-format +msgid "Book \"%s\" does not exist." +msgstr "Buch mit dem Slug = \"%s\" ist nicht vorhanden." + +#: models/book.py:258 +#, python-format +msgid "Book %s already exists" +msgstr "Buch %s ist bereits vorhanden" + +#: models/book.py:599 models/bookmedia.py:23 +#, python-format +msgid "%s file" +msgstr "%s XML-Datei" + +#: models/bookmedia.py:26 +msgid "type" +msgstr "Typ" + +#: models/bookmedia.py:27 models/tag.py:32 +msgid "name" +msgstr "Name" + +#: models/bookmedia.py:28 +#, fuzzy +msgid "file" +msgstr "XML-Datei" + +#: models/bookmedia.py:39 models/bookmedia.py:40 +msgid "book media" +msgstr "book media" + +#: models/collection.py:16 +msgid "book slugs" +msgstr "Büchervorschau" + +#: models/collection.py:18 models/tag.py:18 +msgid "kind" +msgstr "Art" + +#: models/collection.py:22 +msgid "collection" +msgstr "Sammlung" + +#: models/collection.py:23 +msgid "collections" +msgstr "Sammlungen" + +#: models/fragment.py:32 +msgid "fragment" +msgstr "Auszug" + +#: models/fragment.py:33 +msgid "fragments" +msgstr "Auszüge" + +#: models/tag.py:16 +msgid "author" +msgstr "Autor" + +#: models/tag.py:17 +msgid "epoch" +msgstr "Epoche" + +#: models/tag.py:19 +msgid "genre" +msgstr "Genre" + +#: models/tag.py:20 +msgid "theme" +msgstr "Motiv" + +#: models/tag.py:21 +msgid "set" +msgstr "Buchregal" + +#: models/tag.py:23 +msgid "thing" +msgstr "" + +#: models/tag.py:35 +msgid "category" +msgstr "Kategorie" + +#: models/tag.py:40 +msgid "book count" +msgstr "Anzahl der Bücher" + +#: models/tag.py:41 +msgid "picture count" +msgstr "" + +#: models/tag.py:65 +msgid "tag" +msgstr "Tag" + +#: models/tag.py:66 +msgid "tags" +msgstr "Tags" + +#: models/tag.py:83 +msgid "" +"Book tags can't have attached links. Set them directly on the book instead " +"of it's tag." +msgstr "" + +#: templates/catalogue/audiobook_list.html:7 +#: templates/catalogue/audiobook_list.html:16 +msgid "Listing of all audiobooks" +msgstr "Auflistung aller Audiobücher" + +#: templates/catalogue/audiobook_list.html:12 +msgid "Latest MP3 audiobooks" +msgstr "Neueste MP3-Audiobücher" + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "Neueste Ogg-Vorbis-Audiobuch-Dateien" + +#: templates/catalogue/audiobook_list.html:19 +msgid "" +"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +"Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +"Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." +msgstr "" +"Audiothek der Schullektüren, die der Stiftung Nowoczesna Polska gehört. \n" +"Sie können sie kostenlos und ohne Beschränkungen benutzen. \n" +"Audiobücher nehmen bekannte Schauspieler und Schauspielerinnen, darunter " +"Danuta Stenka und Jan Peszek." + +#: templates/catalogue/book_detail.html:20 +#: templates/catalogue/tagged_object_list.html:74 +#: templates/catalogue/tagged_object_list.html:109 +msgid "See also" +msgstr "Siehe auch" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "Motiv" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "Im Werk" + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "Dieses Werk steht unter Lizenz" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " +"Commons Attribution-ShareAlike 3.0</a>\n" +" license." +msgstr "" +"Dieses Werk ist nicht urheberrechtlich geschützt, dass sie frei benutzt " +"werden kann, vervielfältigt und veröffentlicht. Wenn es irgendwelche " +"zusätzlichen ürheberrechtlich geschützten Materialien an diesem Werk gibt " +"(Anmerkungen, Motive), sind sie unter der Lizenz http://creativecommons.org/" +"licenses/by-sa/3.0/ verfügbar." + +#: templates/catalogue/book_info.html:20 +#, fuzzy +msgid "Resource prepared based on:" +msgstr "Der Text basiert auf:" + +#: templates/catalogue/book_info.html:28 +msgid "Edited and annotated by:" +msgstr "Redigiert und kommentiert von:" + +#: templates/catalogue/book_info.html:33 +msgid "Publication funded by:" +msgstr "" + +#: templates/catalogue/book_info.html:39 +msgid "Cover image by:" +msgstr "" + +#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 +msgid "Listing of all works" +msgstr "Auflistung von allen Werken" + +#: templates/catalogue/book_list.html:21 +msgid "Table of Content" +msgstr "Inhaltsverzeichnis" + +#: templates/catalogue/book_list.html:30 +msgid "â top â" +msgstr "â top â" + +#: templates/catalogue/book_short.html:59 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "Epoche" + +#: templates/catalogue/book_short.html:66 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "Sorte" + +#: templates/catalogue/book_short.html:73 +msgid "Genre" +msgstr "Gattung" + +#: templates/catalogue/book_short.html:88 +msgid "Read online" +msgstr "Online lesen" + +#: templates/catalogue/book_short.html:95 +#: templates/catalogue/book_text.html:40 +msgid "to print" +msgstr "Drucken" + +#: templates/catalogue/book_short.html:98 +msgid "for an e-book reader" +msgstr "Für ein E-Book-Reader" + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_text.html:46 +msgid "for Kindle" +msgstr "für Kindle" + +#: templates/catalogue/book_short.html:104 +#: templates/catalogue/book_text.html:49 +msgid "FictionBook" +msgstr "" + +#: templates/catalogue/book_short.html:107 +#: templates/catalogue/book_text.html:52 +msgid "for advanced usage" +msgstr "für fortgeschrittene Benutzung" + +#: templates/catalogue/book_short.html:113 +#: templates/catalogue/book_text.html:30 +msgid "Listen" +msgstr "Hören" + +#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/catalogue/book_text.html:22 +msgid "Table of contents" +msgstr "Inhaltsverzeichnis" + +#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 +msgid "Themes" +msgstr "Motive" + +#: templates/catalogue/book_text.html:24 +msgid "Edit. note" +msgstr "Editieren. Notiz" + +#: templates/catalogue/book_text.html:25 +msgid "Infobox" +msgstr "Infobox" + +#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "Bücherseite" + +#: templates/catalogue/book_text.html:43 +msgid "for a reader" +msgstr "für ein E-Book-Reader" + +#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 +msgid "Download all audiobooks for this book" +msgstr "Lade alle Audiobücher von diesem Buch herunter" + +#: templates/catalogue/book_wide.html:22 +#: templates/catalogue/tagged_object_list.html:60 +msgid "Motifs and themes" +msgstr "Motive und Themen" + +#: templates/catalogue/book_wide.html:44 +msgid "See" +msgstr "Siehe" + +#: templates/catalogue/book_wide.html:47 +msgid "Source" +msgstr "Quelle" + +#: templates/catalogue/book_wide.html:47 +msgid "of the book" +msgstr "vom Buch" + +#: templates/catalogue/book_wide.html:49 +msgid "Source XML file" +msgstr "XML-Ursprungsdatei" + +#: templates/catalogue/book_wide.html:51 +msgid "Book on" +msgstr "Buch über" + +#: templates/catalogue/book_wide.html:51 +msgid "Editor's Platform" +msgstr "Editor-Plattform" + +#: templates/catalogue/book_wide.html:54 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "Buchbeschreibung in Lektury.Gazeta.pl" + +#: templates/catalogue/book_wide.html:57 +msgid "Book description on Wikipedia" +msgstr "Buchbeschreibung in Wikipedia" + +#: templates/catalogue/book_wide.html:59 +msgid "Mix this book" +msgstr "Passe dieses Buch zusammen" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +msgid "Catalogue" +msgstr "Katalog" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "Laden Sie den Katalog als PDF-Datei" + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:17 +#: templates/catalogue/tagged_object_list.html:26 +#: templatetags/catalogue_tags.py:416 +msgid "Authors" +msgstr "Autoren" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:25 +#: templates/catalogue/tagged_object_list.html:34 +#: templatetags/catalogue_tags.py:418 +msgid "Kinds" +msgstr "Sorten" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:33 +#: templates/catalogue/tagged_object_list.html:42 +#: templatetags/catalogue_tags.py:417 +msgid "Genres" +msgstr "Gattungen" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:41 +#: templates/catalogue/tagged_object_list.html:50 +#: templatetags/catalogue_tags.py:419 +msgid "Epochs" +msgstr "Epochen" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "Themen und Motive" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 +#, fuzzy +msgid "Collections" +msgstr "Sammlungen" + +#: templates/catalogue/daisy_list.html:6 +#: templates/catalogue/daisy_list.html:12 +msgid "Listing of all DAISY files" +msgstr "Auflistung aller DAISY-Dateien" + +#: templates/catalogue/daisy_list.html:9 +msgid "Latest DAISY audiobooks" +msgstr "Neueste DAISY-Audiobücher" + +#: templates/catalogue/daisy_list.html:15 +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Å." +msgstr "" +"DAISY-System ist ein weltweit anerkanntes Buchformatr, \n" +"das an Bedürfnisse der Sehbehinderten, der Blinden und anderen Menschen mit " +"Leseschwierigkeiten. \n" +"Sie können es kostenlos und ohne Beschränkungen benutzen." + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "Die Kriterien sind mehrdeutig. Wählen Sie eine der folgenden Optionen:" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "Den ganzen Auszug zeigen" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "Den Auszug verstecken" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:4 +msgid "See full category" +msgstr "volle Kategorie sehen" + +#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 +msgid "Please waitâ¦" +msgstr "" + +#: templates/catalogue/menu.html:24 +msgid "All books" +msgstr "Alle Bücher" + +#: templates/catalogue/menu.html:28 +msgid "Audiobooks" +msgstr "Audioücher" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "DAISY" + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "Das Werk steht unter Lizenz" + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "Basiert auf" + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "Details" + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "Autor" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "Andere Ressoursen" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "Quelle des Bildes" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "Bild auf dem Editor-Plattform" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "Siehe XML-Quelle" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "Motive des Werkes" + +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all pictures" +msgstr "Auflistung aller Bilder" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "Herunterladen als" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "Künstler" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "Regisseur" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "Audiobücher wurden als Teil der folgenden Projekte vorbereitet:" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "%(cs)s, gestiftet von %(fb)s" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "" +"Audiobücher wurden als Teil des Projektes %(cs)s vorbereitet, gestiftet von " +"%(fb)s." + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "Audiobücher wurden als Teil des Projektes %(cs)s vorbereitet." + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +#, fuzzy +msgid "Recent audiobooks" +msgstr "Neueste MP3-Audiobücher" + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +#, fuzzy +msgid "Recent publications" +msgstr "gehe zur Public Domain" + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" +" and <a href=\"%(d)s\">recent DAISY files</a>." +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:5 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "Suchen" + +#: templates/catalogue/search_multiple_hits.html:11 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "Haben Sie gemeint" + +#: templates/catalogue/search_multiple_hits.html:52 +msgid "Results by title" +msgstr "Ergebnisse nach Titeln" + +#: templates/catalogue/search_multiple_hits.html:67 +msgid "Results by authors" +msgstr "Ergebnisse nach Autoren" + +#: templates/catalogue/search_multiple_hits.html:80 +#, fuzzy +msgid "Results by translators" +msgstr "Ergebnisse nach Autoren" + +#: templates/catalogue/search_multiple_hits.html:93 +msgid "Results in text" +msgstr "Ergebnisse im Text" + +#: templates/catalogue/search_multiple_hits.html:110 +msgid "Other results" +msgstr "Andere Ergebnisse" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:151 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "Sorry! Suchkriterien haben keine Ressourcen erwiesen" + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"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 "" +"Suchmaschine fördert die folgenden Kriterien: Titel, Autor, Thema/Motiv, " +"Epoche, Art und Genre. \n" +"Die Volltextsuche ist noch nicht möglich." + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "Sorry! Suchfrage muss zumindest zwei Buchstaben enthalten" + +#: templates/catalogue/tag_list_split.html:5 +msgid "Literature" +msgstr "" + +#: templates/catalogue/tag_list_split.html:14 +msgid "Gallery" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:78 +msgid "in Culture.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:113 +msgid "in Lektury.Gazeta.pl" +msgstr "in Lektury.Gazeta.pl" + +#: templates/catalogue/tagged_object_list.html:88 +#: templates/catalogue/tagged_object_list.html:118 +msgid "in Wikipedia" +msgstr "in Wikipedia" + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +#, fuzzy +msgid "Download a custom PDF" +msgstr "PDF-Datei herunterladen" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Leg das Buch aufs Regal ab!" + +#~ msgid "Create new shelf" +#~ msgstr "Neues Bücherregal erstellen" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Sie haben kein Bücherregal. Sie können eins unten erschaffen, wenn Sie " +#~ "wollen." + +#~ msgid "Put on the shelf!" +#~ msgstr "Aufs Bücherregal legen!" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Auschnitt aus dem Inhalt der Bücherregale" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Sie besitzen kein Bücherregal. Sie können eins unten erschaffen, wenn Sie " +#~ "wollen." + +#~ msgid "Save all shelves" +#~ msgstr "Alle Bücherregale speichern" + +#~ msgid "Your shelves with books" +#~ msgstr "Ihre Bücherregale" + +#~ msgid "remove" +#~ msgstr "Entfernen" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "" +#~ "Sie haben noch keine Bücherregale. Sie können eins unten erschaffen, wenn " +#~ "Sie wollen." + +#~ msgid "Create shelf" +#~ msgstr "Erschaffe ein Bücherregal" + +#~ msgid "Enter a valid JSON value. Error: %s" +#~ msgstr "Geben Sie eine gültige JSON-Wert ein. Fehler:% s" + +#~ msgid "A4" +#~ msgstr "A4 DIN" + +#~ msgid "A5" +#~ msgstr "A5 DIN" + +#~ msgid "Incorrect customization options for PDF" +#~ msgstr "Falsche Anpassungsoptionen für PDF-Datei" + +#~ msgid "Bad method" +#~ msgstr "Falsche Methode" + +#~ msgid "title, author, theme/topic, epoch, kind, genre" +#~ msgstr "Titel, Autor, Motiv/Thema, Epoche, Art, Gattung" + +#~ msgid "main page" +#~ msgstr "Startseite" + +#~ msgid "Show tag on main page" +#~ msgstr "Tag für die Startseite anzeigen" + +#~ msgid "year of death" +#~ msgstr "Todesjahr" + +#~ msgid "short HTML" +#~ msgstr "kurze HTML" + +#~ msgid "HTML file" +#~ msgstr "HTML-Datei" + +#~ msgid "PDF file" +#~ msgstr "PDF-Datei" + +#~ msgid "EPUB file" +#~ msgstr "EPUB-Datei" + +#~ msgid "ODT file" +#~ msgstr "ODT-Datei" + +#~ msgid "TXT file" +#~ msgstr "TXT-Datei" + +#~ msgid "MP3 file" +#~ msgstr "MP3-Datei" + +#~ msgid "OGG file" +#~ msgstr "OGG-Datei" + +#~ msgid "translator" +#~ msgstr "Ãbersetzer" + +#~ msgid "year of translator's death" +#~ msgstr "Todesjahr des Ãbersetzers" + +#~ msgid "book stub" +#~ msgstr "Buch Vorschau" + +#~ msgid "<p>To maintain your shelves you need to be logged in.</p>" +#~ msgstr "<p>Um die Bücherregale zu verwalten, musst du eingeloggt sein.</p>" + +#~ msgid "<p>Shelves were sucessfully saved.</p>" +#~ msgstr "<p>Bücherregale wurden erfolgreich gespeichert.</p>" + +#~ msgid "Book was successfully removed from the shelf" +#~ msgstr "Das Buch wurde erfolgreich entfernt" + +#~ msgid "<p>Shelf <strong>%s</strong> was successfully created</p>" +#~ msgstr "<p>Büchrregal <strong>%s</strong> wurde erfolgreich erstellt</p>" + +#~ msgid "<p>Shelf <strong>%s</strong> was successfully removed</p>" +#~ msgstr "<p>Bücherregal<strong>%s</strong> wurde erfolgreich entfernt</p>" + +#~ msgid "Today is %(month)s, %(day)s." +#~ msgstr "Heute ist %(month)s, %(day)s." + +#~ msgid "content type" +#~ msgstr "Inhaltstyp" + +#~ msgid "object id" +#~ msgstr "Objekt ID" diff --git a/src/catalogue/locale/en/LC_MESSAGES/django.mo b/src/catalogue/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..89aa2c84b Binary files /dev/null and b/src/catalogue/locale/en/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/en/LC_MESSAGES/django.po b/src/catalogue/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..f66d1efe0 --- /dev/null +++ b/src/catalogue/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,868 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:38+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "Please supply an XML." + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "Don't show footnotes" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "Don't display themes" + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "Don't use our custom font" + +#: forms.py:49 +msgid "Without cover" +msgstr "" + +#: forms.py:52 +msgid "Leading" +msgstr "Leading" + +#: forms.py:53 +msgid "Normal leading" +msgstr "Normal leading" + +#: forms.py:54 +msgid "One and a half leading" +msgstr "One and a half leading" + +#: forms.py:55 +msgid "Double leading" +msgstr "Double leading" + +#: forms.py:57 +msgid "Font size" +msgstr "Font size" + +#: forms.py:58 +msgid "Default" +msgstr "Default" + +#: forms.py:59 +msgid "Big" +msgstr "Big" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "" + +#: views.py:585 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" + +#: views.py:586 +msgid "Book imported successfully" +msgstr "Book imported succesfully" + +#: views.py:588 +#, python-format +msgid "Error importing file: %r" +msgstr "An error occured while importing file: %r" + +#: views.py:620 +msgid "Download custom PDF" +msgstr "Download custom PDF" + +#: views.py:621 templates/catalogue/book_short.html:92 +#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 +msgid "Download" +msgstr "Download" + +#: models/book.py:28 models/collection.py:11 +msgid "title" +msgstr "Title" + +#: models/book.py:29 models/tag.py:34 +msgid "sort key" +msgstr "Sort key" + +#: models/book.py:30 models/book.py:32 models/collection.py:12 +#: models/collection.py:15 models/tag.py:33 +msgid "slug" +msgstr "Slug" + +#: models/book.py:33 +msgid "language code" +msgstr "language code" + +#: models/book.py:35 models/book.py:146 models/collection.py:13 +#: models/tag.py:37 models/tag.py:94 +msgid "description" +msgstr "Description" + +#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 +#: models/tag.py:47 +msgid "creation date" +msgstr "creation date" + +#: models/book.py:38 +msgid "parent number" +msgstr "Parent number" + +#: models/book.py:39 models/bookmedia.py:30 +msgid "extra information" +msgstr "Additional information" + +#: models/book.py:44 +msgid "cover" +msgstr "cover" + +#: models/book.py:66 models/collection.py:18 models/tag.py:22 +msgid "book" +msgstr "book" + +#: models/book.py:67 +msgid "books" +msgstr "Books" + +#: models/book.py:244 +#, python-format +msgid "Book \"%s\" does not exist." +msgstr "Book with stub = \"%s\" does not exist." + +#: models/book.py:258 +#, python-format +msgid "Book %s already exists" +msgstr "Book %s already exists" + +#: models/book.py:599 models/bookmedia.py:23 +#, python-format +msgid "%s file" +msgstr "%s file" + +#: models/bookmedia.py:26 +msgid "type" +msgstr "type" + +#: models/bookmedia.py:27 models/tag.py:32 +msgid "name" +msgstr "name" + +#: models/bookmedia.py:28 +msgid "file" +msgstr "XML file" + +#: models/bookmedia.py:39 models/bookmedia.py:40 +msgid "book media" +msgstr "book media" + +#: models/collection.py:16 +msgid "book slugs" +msgstr "Book stubs" + +#: models/collection.py:18 models/tag.py:18 +msgid "kind" +msgstr "form" + +#: models/collection.py:22 +msgid "collection" +msgstr "collection" + +#: models/collection.py:23 +msgid "collections" +msgstr "collections" + +#: models/fragment.py:32 +msgid "fragment" +msgstr "Fragment" + +#: models/fragment.py:33 +msgid "fragments" +msgstr "Fragments" + +#: models/tag.py:16 +msgid "author" +msgstr "author" + +#: models/tag.py:17 +msgid "epoch" +msgstr "period" + +#: models/tag.py:19 +msgid "genre" +msgstr "genre" + +#: models/tag.py:20 +msgid "theme" +msgstr "motif" + +#: models/tag.py:21 +msgid "set" +msgstr "set" + +#: models/tag.py:23 +msgid "thing" +msgstr "" + +#: models/tag.py:35 +msgid "category" +msgstr "Category" + +#: models/tag.py:40 +msgid "book count" +msgstr "Number of books" + +#: models/tag.py:41 +msgid "picture count" +msgstr "" + +#: models/tag.py:65 +msgid "tag" +msgstr "tag" + +#: models/tag.py:66 +msgid "tags" +msgstr "tags" + +#: models/tag.py:83 +msgid "" +"Book tags can't have attached links. Set them directly on the book instead " +"of it's tag." +msgstr "" + +#: templates/catalogue/audiobook_list.html:7 +#: templates/catalogue/audiobook_list.html:16 +msgid "Listing of all audiobooks" +msgstr "List of the audiobooks" + +#: templates/catalogue/audiobook_list.html:12 +msgid "Latest MP3 audiobooks" +msgstr "Latest MP3 audiobooks" + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "Latest Ogg Vorbis audiobooks" + +#: templates/catalogue/audiobook_list.html:19 +msgid "" +"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +"Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +"Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." +msgstr "" +"Audio library of required readings of Modern Poland Foundation.\n" +"It is free of charge and you can use it without any limits. \n" +"Audiobooks are recorded with the participation of famous Polish actors like " +"Danuta Stenka or Jan Peszek." + +#: templates/catalogue/book_detail.html:20 +#: templates/catalogue/tagged_object_list.html:74 +#: templates/catalogue/tagged_object_list.html:109 +msgid "See also" +msgstr "See also" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "Theme" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "in work " + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "This work is licensed under:" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " +"Commons Attribution-ShareAlike 3.0</a>\n" +" license." +msgstr "" +"This work is not covered by copyright and is a part of the\n" +" public domain, which means that it can be used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " +"Commons Attribution-ShareAlike 3.0</a>\n" +" license." + +#: templates/catalogue/book_info.html:20 +#, fuzzy +msgid "Resource prepared based on:" +msgstr "Text based on:" + +#: templates/catalogue/book_info.html:28 +msgid "Edited and annotated by:" +msgstr "Edited and annotated by:" + +#: templates/catalogue/book_info.html:33 +msgid "Publication funded by:" +msgstr "" + +#: templates/catalogue/book_info.html:39 +msgid "Cover image by:" +msgstr "" + +#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 +msgid "Listing of all works" +msgstr "List of all works" + +#: templates/catalogue/book_list.html:21 +msgid "Table of Content" +msgstr "Table of Contents" + +#: templates/catalogue/book_list.html:30 +msgid "â top â" +msgstr "â top â" + +#: templates/catalogue/book_short.html:59 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "Period" + +#: templates/catalogue/book_short.html:66 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "Form" + +#: templates/catalogue/book_short.html:73 +msgid "Genre" +msgstr "Genre" + +#: templates/catalogue/book_short.html:88 +msgid "Read online" +msgstr "Read online" + +#: templates/catalogue/book_short.html:95 +#: templates/catalogue/book_text.html:40 +msgid "to print" +msgstr "to print" + +#: templates/catalogue/book_short.html:98 +msgid "for an e-book reader" +msgstr "for an e-book reader" + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_text.html:46 +msgid "for Kindle" +msgstr "for Kindle" + +#: templates/catalogue/book_short.html:104 +#: templates/catalogue/book_text.html:49 +msgid "FictionBook" +msgstr "" + +#: templates/catalogue/book_short.html:107 +#: templates/catalogue/book_text.html:52 +msgid "for advanced usage" +msgstr "" + +#: templates/catalogue/book_short.html:113 +#: templates/catalogue/book_text.html:30 +msgid "Listen" +msgstr "Listen" + +#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/catalogue/book_text.html:22 +msgid "Table of contents" +msgstr "Table of contents" + +#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 +msgid "Themes" +msgstr "Themes" + +#: templates/catalogue/book_text.html:24 +msgid "Edit. note" +msgstr "Edit. note" + +#: templates/catalogue/book_text.html:25 +msgid "Infobox" +msgstr "Infobox" + +#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "Book's page" + +#: templates/catalogue/book_text.html:43 +msgid "for a reader" +msgstr "for a reader" + +#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 +msgid "Download all audiobooks for this book" +msgstr "Download all audiobooks for this book" + +#: templates/catalogue/book_wide.html:22 +#: templates/catalogue/tagged_object_list.html:60 +msgid "Motifs and themes" +msgstr "Motifs and themes" + +#: templates/catalogue/book_wide.html:44 +msgid "See" +msgstr "See" + +#: templates/catalogue/book_wide.html:47 +msgid "Source" +msgstr "Source" + +#: templates/catalogue/book_wide.html:47 +msgid "of the book" +msgstr "of the book" + +#: templates/catalogue/book_wide.html:49 +msgid "Source XML file" +msgstr "Source XML file" + +#: templates/catalogue/book_wide.html:51 +msgid "Book on" +msgstr "Book on" + +#: templates/catalogue/book_wide.html:51 +msgid "Editor's Platform" +msgstr "Editor's Platform" + +#: templates/catalogue/book_wide.html:54 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "Book description on Lektury.Gazeta.pl" + +#: templates/catalogue/book_wide.html:57 +msgid "Book description on Wikipedia" +msgstr "Book description on Wikipedia" + +#: templates/catalogue/book_wide.html:59 +msgid "Mix this book" +msgstr "Mix this book" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +msgid "Catalogue" +msgstr "Catalogue" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "Download the catalogue in PDF format." + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:17 +#: templates/catalogue/tagged_object_list.html:26 +#: templatetags/catalogue_tags.py:416 +msgid "Authors" +msgstr "Authors" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:25 +#: templates/catalogue/tagged_object_list.html:34 +#: templatetags/catalogue_tags.py:418 +msgid "Kinds" +msgstr "Forms" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:33 +#: templates/catalogue/tagged_object_list.html:42 +#: templatetags/catalogue_tags.py:417 +msgid "Genres" +msgstr "Genres" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:41 +#: templates/catalogue/tagged_object_list.html:50 +#: templatetags/catalogue_tags.py:419 +msgid "Epochs" +msgstr "Periods" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "Motifs and themes" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 +#, fuzzy +msgid "Collections" +msgstr "collections" + +#: templates/catalogue/daisy_list.html:6 +#: templates/catalogue/daisy_list.html:12 +msgid "Listing of all DAISY files" +msgstr "List of all DAISY files" + +#: templates/catalogue/daisy_list.html:9 +msgid "Latest DAISY audiobooks" +msgstr "Latest DAISY audiobooks" + +#: templates/catalogue/daisy_list.html:15 +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Å." +msgstr "" +"The internationally recognized DAISY book format \n" +"provides the best possible standardized access to books for people who are \n" +"partially sighted, blind or are dyslexic. It is free of charge and you can " +"use it without any limits." + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "" +"The criteria are ambiguous. Please select one of the following options:" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "Expand fragment" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "Hide fragment" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:4 +msgid "See full category" +msgstr "See full category" + +#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 +msgid "Please waitâ¦" +msgstr "" + +#: templates/catalogue/menu.html:24 +msgid "All books" +msgstr "All books" + +#: templates/catalogue/menu.html:28 +msgid "Audiobooks" +msgstr "Audiobooks" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "DAISY" + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "Work is licensed under " + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "Based on" + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "Details" + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "Author" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "Other sources" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "Source of the image" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "Image on the Editor's Platform" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "View XML source" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "Work's themes " + +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all pictures" +msgstr "List of all pictures" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "Download as" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "Reader" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "Director" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "Audiobooks were prepared as a part of the following projects:" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "%(cs)s, funded by %(fb)s" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "Audiobooks were prepared as a part of the %(cs)s project." + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +#, fuzzy +msgid "Recent audiobooks" +msgstr "Latest MP3 audiobooks" + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +#, fuzzy +msgid "Recent publications" +msgstr "Goes to public domain" + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" +" and <a href=\"%(d)s\">recent DAISY files</a>." +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:5 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "Search" + +#: templates/catalogue/search_multiple_hits.html:11 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "Did you mean" + +#: templates/catalogue/search_multiple_hits.html:52 +msgid "Results by title" +msgstr "Results by title" + +#: templates/catalogue/search_multiple_hits.html:67 +msgid "Results by authors" +msgstr "Results by authors" + +#: templates/catalogue/search_multiple_hits.html:80 +#, fuzzy +msgid "Results by translators" +msgstr "Translator" + +#: templates/catalogue/search_multiple_hits.html:93 +msgid "Results in text" +msgstr "Results in text" + +#: templates/catalogue/search_multiple_hits.html:110 +msgid "Other results" +msgstr "Other results" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:151 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "Sorry! Search cirteria did not match any resources." + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"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 "" +"Search engine supports following criteria: title, author, theme/topic, " +"period, form and genre.\n" +"\t\tAs for now we do not support full text search." + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "Sorry! Search query must have at least two characters." + +#: templates/catalogue/tag_list_split.html:5 +msgid "Literature" +msgstr "" + +#: templates/catalogue/tag_list_split.html:14 +msgid "Gallery" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:78 +msgid "in Culture.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:113 +msgid "in Lektury.Gazeta.pl" +msgstr "in Lektury.Gazeta.pl" + +#: templates/catalogue/tagged_object_list.html:88 +#: templates/catalogue/tagged_object_list.html:118 +msgid "in Wikipedia" +msgstr "in Wikipedia" + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +msgid "Download a custom PDF" +msgstr "Download a custom PDF" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Put this book on the shelf!" + +#~ msgid "Create new shelf" +#~ msgstr "Create new shelf" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "You do not have any shelves. You can create one below, if you want to." + +#~ msgid "Put on the shelf!" +#~ msgstr "Put on the shelf!" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Shelves containing fragment" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "You do not own any shelves. You can create one below, if you want to." + +#~ msgid "Save all shelves" +#~ msgstr "Save all shelves" + +#~ msgid "Your shelves with books" +#~ msgstr "Your shelves with books" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "You do not own any shelves. You can create one below if you want to" + +#~ msgid "Create shelf" +#~ msgstr "Create shelf" + +#~ msgid "Enter a valid JSON value. Error: %s" +#~ msgstr "Enter a valid JSON value. Error: %s" + +#~ msgid "A4" +#~ msgstr "A4" + +#~ msgid "A5" +#~ msgstr "A5" + +#~ msgid "Incorrect customization options for PDF" +#~ msgstr "Incorrect customization options for PDF" + +#~ msgid "Bad method" +#~ msgstr "Bad method" + +#~ msgid "title, author, theme/topic, epoch, kind, genre" +#~ msgstr "title, author, motifs/theme, period, form, genre" + +#~ msgid "main page" +#~ msgstr "Main page" + +#~ msgid "Show tag on main page" +#~ msgstr "Show tag on main page" + +#~ msgid "year of death" +#~ msgstr "Year of death" + +#~ msgid "short HTML" +#~ msgstr "short HTML" + +#~ msgid "HTML file" +#~ msgstr "HTML file" + +#~ msgid "PDF file" +#~ msgstr "PDF file" + +#~ msgid "EPUB file" +#~ msgstr "EPUB file" + +#~ msgid "ODT file" +#~ msgstr "ODT file" + +#~ msgid "TXT file" +#~ msgstr "TXT file" + +#~ msgid "MP3 file" +#~ msgstr "MP3 file" + +#~ msgid "OGG file" +#~ msgstr "OGG file" + +#~ msgid "year of translator's death" +#~ msgstr "Year of translator's death" + +#~ msgid "book stub" +#~ msgstr "Book stub" + +#~ msgid "time" +#~ msgstr "time" + +#~ msgid "<p>To maintain your shelves you need to be logged in.</p>" +#~ msgstr "<p>To administer your shelves you need to be logged in.</p>" + +#~ msgid "<p>Shelves were sucessfully saved.</p>" +#~ msgstr "<p>Shelves were sucessfully saved.</p>" + +#~ msgid "Book was successfully removed from the shelf" +#~ msgstr "Book was successfully removed from the shelf" + +#~ msgid "<p>Shelf <strong>%s</strong> was successfully created</p>" +#~ msgstr "<p>Shelf <strong>%s</strong> was successfully created</p>" + +#~ msgid "<p>Shelf <strong>%s</strong> was successfully removed</p>" +#~ msgstr "<p>Shelf <strong>%s</strong> was successfully removed</p>" + +#~ msgid "Today is %(month)s, %(day)s." +#~ msgstr "Today is %(month)s, %(day)s." + +#~ msgid "content type" +#~ msgstr "content type" + +#~ msgid "object id" +#~ msgstr "object id" diff --git a/src/catalogue/locale/es/LC_MESSAGES/django.mo b/src/catalogue/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..cb82bd10f Binary files /dev/null and b/src/catalogue/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/es/LC_MESSAGES/django.po b/src/catalogue/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..aa3cd85f4 --- /dev/null +++ b/src/catalogue/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,885 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: 2013-04-09 10:39+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "Por favor, suministre un XML." + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "No mostres notas a pie de página" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "No mostres temas" + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "No uses nuestro tipo de la fuente de personalización " + +#: forms.py:49 +msgid "Without cover" +msgstr "" + +#: forms.py:52 +msgid "Leading" +msgstr "Interlineado" + +#: forms.py:53 +msgid "Normal leading" +msgstr "Interlineado normal" + +#: forms.py:54 +msgid "One and a half leading" +msgstr "Interlineado uno y medio" + +#: forms.py:55 +msgid "Double leading" +msgstr "Interlineado doble" + +#: forms.py:57 +msgid "Font size" +msgstr "Tamaño de la fuente" + +#: forms.py:58 +msgid "Default" +msgstr "Valor por defecto" + +#: forms.py:59 +msgid "Big" +msgstr "Grande" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "" + +# msgid "Today is %(month)s, %(day)s." +# msgstr "Hoy es el %(dÃa)s de %(mes)es" +#: views.py:585 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" +"Ha ocurrido un error: %(exception)s\n" +"\n" +"%(tb)s" + +#: views.py:586 +msgid "Book imported successfully" +msgstr "El libro ha sido importado con éxito" + +#: views.py:588 +#, python-format +msgid "Error importing file: %r" +msgstr "Ha ocurrido un error al cargar el archivo: %r" + +#: views.py:620 +msgid "Download custom PDF" +msgstr "Descarga PDF personalizado" + +#: views.py:621 templates/catalogue/book_short.html:92 +#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 +msgid "Download" +msgstr "Descargar" + +#: models/book.py:28 models/collection.py:11 +msgid "title" +msgstr "tÃtulo" + +#: models/book.py:29 models/tag.py:34 +msgid "sort key" +msgstr "clave de clasificación" + +#: models/book.py:30 models/book.py:32 models/collection.py:12 +#: models/collection.py:15 models/tag.py:33 +msgid "slug" +msgstr "slug" + +#: models/book.py:33 +msgid "language code" +msgstr "código de idioma" + +#: models/book.py:35 models/book.py:146 models/collection.py:13 +#: models/tag.py:37 models/tag.py:94 +msgid "description" +msgstr "descripción" + +#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 +#: models/tag.py:47 +msgid "creation date" +msgstr "fecha de creación" + +#: models/book.py:38 +msgid "parent number" +msgstr "cifra matriz" + +#: models/book.py:39 models/bookmedia.py:30 +msgid "extra information" +msgstr "información adicional" + +#: models/book.py:44 +msgid "cover" +msgstr "tapa" + +#: models/book.py:66 models/collection.py:18 models/tag.py:22 +msgid "book" +msgstr "libro" + +#: models/book.py:67 +msgid "books" +msgstr "libros" + +#: models/book.py:244 +#, fuzzy, python-format +msgid "Book \"%s\" does not exist." +msgstr "Libro con slug = \"%s\" no existe." + +#: models/book.py:258 +#, python-format +msgid "Book %s already exists" +msgstr "Libro %s ya existe" + +#: models/book.py:599 models/bookmedia.py:23 +#, python-format +msgid "%s file" +msgstr "%s archivo" + +#: models/bookmedia.py:26 +msgid "type" +msgstr "tipo" + +#: models/bookmedia.py:27 models/tag.py:32 +msgid "name" +msgstr "nombre" + +#: models/bookmedia.py:28 +msgid "file" +msgstr "archivo" + +#: models/bookmedia.py:39 models/bookmedia.py:40 +msgid "book media" +msgstr "los medios de el libro" + +#: models/collection.py:16 +#, fuzzy +msgid "book slugs" +msgstr "vista previa de libros" + +#: models/collection.py:18 models/tag.py:18 +msgid "kind" +msgstr "tipo" + +#: models/collection.py:22 +msgid "collection" +msgstr "colección" + +#: models/collection.py:23 +msgid "collections" +msgstr "colecciones" + +#: models/fragment.py:32 +msgid "fragment" +msgstr "fragmento" + +#: models/fragment.py:33 +msgid "fragments" +msgstr "fragmentos" + +#: models/tag.py:16 +msgid "author" +msgstr "autor" + +#: models/tag.py:17 +msgid "epoch" +msgstr "época" + +#: models/tag.py:19 +msgid "genre" +msgstr "género" + +#: models/tag.py:20 +msgid "theme" +msgstr "tema" + +#: models/tag.py:21 +msgid "set" +msgstr "colección" + +#: models/tag.py:23 +msgid "thing" +msgstr "" + +#: models/tag.py:35 +msgid "category" +msgstr "categorÃa" + +#: models/tag.py:40 +msgid "book count" +msgstr "número de libros" + +#: models/tag.py:41 +msgid "picture count" +msgstr "" + +#: models/tag.py:65 +msgid "tag" +msgstr "tag" + +#: models/tag.py:66 +msgid "tags" +msgstr "tags" + +#: models/tag.py:83 +msgid "" +"Book tags can't have attached links. Set them directly on the book instead " +"of it's tag." +msgstr "" + +#: templates/catalogue/audiobook_list.html:7 +#: templates/catalogue/audiobook_list.html:16 +msgid "Listing of all audiobooks" +msgstr "Lista de todos los audiolibros " + +#: templates/catalogue/audiobook_list.html:12 +msgid "Latest MP3 audiobooks" +msgstr "Los últimos audiolibros en formato MP3 " + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "Los últimos audiolibros en formato Ogg Vorbis " + +#: templates/catalogue/audiobook_list.html:19 +msgid "" +"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +"Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +"Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." +msgstr "" +"Colección de grabaciones de libros de lectura obligatoria de la Fundación " +"Polonia Moderna.\n" +"Podéis disfrutar de ella gratuitamente y sin lÃmites.\n" +"Los audiolibros están grabados por actores conocidos, como Danuta Stenka y " +"Jan Peszek." + +#: templates/catalogue/book_detail.html:20 +#: templates/catalogue/tagged_object_list.html:74 +#: templates/catalogue/tagged_object_list.html:109 +msgid "See also" +msgstr "Véase también" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "Tema" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "en la obra" + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "Esta obra está autorizada bajo:" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " +"Commons Attribution-ShareAlike 3.0</a>\n" +" license." +msgstr "" +"Esta obra está libre de derechos de autor y es de dominio público, por ende " +"se puede usar,publicar y difundir libremente. Si esta obra tiene materiales " +"adicionales (como notas a pie de pá gina, temas lutrarios, etc.), que no " +"esten libres de derechos de autor, dichos materiales están publicados bajo " +"la \n" +"<a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative Commons " +"Attribution-ShareAlike 3.0</a>\n" +" licencia." + +#: templates/catalogue/book_info.html:20 +#, fuzzy +msgid "Resource prepared based on:" +msgstr "Texto preparado a base de:" + +#: templates/catalogue/book_info.html:28 +msgid "Edited and annotated by:" +msgstr "Editado y anotado por:" + +#: templates/catalogue/book_info.html:33 +msgid "Publication funded by:" +msgstr "" + +#: templates/catalogue/book_info.html:39 +msgid "Cover image by:" +msgstr "" + +#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 +msgid "Listing of all works" +msgstr "Lista de todas las obras" + +#: templates/catalogue/book_list.html:21 +msgid "Table of Content" +msgstr "Tabla de contenido" + +#: templates/catalogue/book_list.html:30 +msgid "â top â" +msgstr "âvolver arribaâ" + +#: templates/catalogue/book_short.html:59 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "Ãpoca" + +#: templates/catalogue/book_short.html:66 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "Género" + +#: templates/catalogue/book_short.html:73 +msgid "Genre" +msgstr "Subgénero" + +#: templates/catalogue/book_short.html:88 +msgid "Read online" +msgstr "Leer en lÃnea" + +#: templates/catalogue/book_short.html:95 +#: templates/catalogue/book_text.html:40 +msgid "to print" +msgstr "imprimir" + +#: templates/catalogue/book_short.html:98 +msgid "for an e-book reader" +msgstr "para el lector de audiolibro " + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_text.html:46 +msgid "for Kindle" +msgstr "para Kindle" + +#: templates/catalogue/book_short.html:104 +#: templates/catalogue/book_text.html:49 +msgid "FictionBook" +msgstr "" + +#: templates/catalogue/book_short.html:107 +#: templates/catalogue/book_text.html:52 +msgid "for advanced usage" +msgstr "para uso avanzado" + +#: templates/catalogue/book_short.html:113 +#: templates/catalogue/book_text.html:30 +msgid "Listen" +msgstr "Escuchar" + +#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/catalogue/book_text.html:22 +msgid "Table of contents" +msgstr "Tabla de contenido" + +#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 +msgid "Themes" +msgstr "Temas" + +# ! także: N.de la R. +#: templates/catalogue/book_text.html:24 +msgid "Edit. note" +msgstr "Nota de la redacción" + +#: templates/catalogue/book_text.html:25 +msgid "Infobox" +msgstr "Infobox" + +#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "Página del libro" + +#: templates/catalogue/book_text.html:43 +msgid "for a reader" +msgstr "para el lector" + +#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 +msgid "Download all audiobooks for this book" +msgstr "Descarga todos los audiolibros para este libro" + +#: templates/catalogue/book_wide.html:22 +#: templates/catalogue/tagged_object_list.html:60 +msgid "Motifs and themes" +msgstr "Motivos y temas" + +#: templates/catalogue/book_wide.html:44 +msgid "See" +msgstr "Vea" + +#: templates/catalogue/book_wide.html:47 +msgid "Source" +msgstr "Fuente" + +#: templates/catalogue/book_wide.html:47 +msgid "of the book" +msgstr "del libro" + +#: templates/catalogue/book_wide.html:49 +msgid "Source XML file" +msgstr "archivo fuente XML" + +#: templates/catalogue/book_wide.html:51 +msgid "Book on" +msgstr "El libro está en el estante" + +#: templates/catalogue/book_wide.html:51 +msgid "Editor's Platform" +msgstr "Plataforma de Editor" + +#: templates/catalogue/book_wide.html:54 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "Descripción del libro en Lektury.Gazeta.pl" + +#: templates/catalogue/book_wide.html:57 +msgid "Book description on Wikipedia" +msgstr "Descripción del libro en Wikipedia" + +# ! mezcla - jeÅli chodzi o pomieszanie +# ! relaciona lub combina - jeÅli chodzi o powiÄ zanie +# ! prepara - jeÅli chodzi o przygotowanie +# (zmieniÄ czasownik "mezcla" na któryÅ z powyższych jeÅli kontekst jest inny) +#: templates/catalogue/book_wide.html:59 +msgid "Mix this book" +msgstr "Mezcla este libro" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +msgid "Catalogue" +msgstr "Catálogo" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "Descarga el catálogo en formato PDF" + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:17 +#: templates/catalogue/tagged_object_list.html:26 +#: templatetags/catalogue_tags.py:416 +msgid "Authors" +msgstr "Autor" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:25 +#: templates/catalogue/tagged_object_list.html:34 +#: templatetags/catalogue_tags.py:418 +msgid "Kinds" +msgstr "Géneros" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:33 +#: templates/catalogue/tagged_object_list.html:42 +#: templatetags/catalogue_tags.py:417 +msgid "Genres" +msgstr "Subgénero" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:41 +#: templates/catalogue/tagged_object_list.html:50 +#: templatetags/catalogue_tags.py:419 +msgid "Epochs" +msgstr "Ãpocas" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "Temas" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 +#, fuzzy +msgid "Collections" +msgstr "colecciones" + +#: templates/catalogue/daisy_list.html:6 +#: templates/catalogue/daisy_list.html:12 +msgid "Listing of all DAISY files" +msgstr "Lista de todos los archivos DAISY" + +#: templates/catalogue/daisy_list.html:9 +msgid "Latest DAISY audiobooks" +msgstr "Los últimos audiolibros en formato DAISY" + +#: templates/catalogue/daisy_list.html:15 +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Å." +msgstr "" +"El sistema DAISY es un formato, reconocido en todo el mundo, que facilita el " +"acceso a los libros \n" +"y está adaptado a las necesidades de personas con baja visión, invidentes o " +"las que \n" +"tienen problemas de lectura. Los podéis disfrutar de manera gratuita y sin " +"lÃmites." + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "" +"Los criterios son ambiguos. Por favor, seleccione una de las siguientes " +"opciones:" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "Extender fragmento" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "Ocultar fragmento" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:4 +msgid "See full category" +msgstr "Ver la categorÃa completa" + +#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 +msgid "Please waitâ¦" +msgstr "" + +#: templates/catalogue/menu.html:24 +msgid "All books" +msgstr "Todos los libros" + +#: templates/catalogue/menu.html:28 +msgid "Audiobooks" +msgstr "Audiolibros" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "DAISY" + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "Esta obra está autorizada bajo" + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "Basado en " + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "Detalles" + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "Autor" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "Otros recursos" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "Fuente de la imagen" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "Imagen en la Plataforma de Editor" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "Ver código fuente XML" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "Temas de las obras" + +# ! los dibujos - obrazki, rysunki +# ! las fotos - jeÅli chodzi o zdjÄcia +# ! los cuadros - jeÅli chodzi o obrazy +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all pictures" +msgstr "Lista de todos los dibujos" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "Descargar como" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "Artista" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "Director" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "Audiolibros forman parte de los siguientes proyectos:" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "%(cs)s,financiado por %(fb)s" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "Audiolibros forman parte del proyecto %(cs)s financiado por %(fb)s." + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "Audiolibros forman parte del proyecto %(cs)s." + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +#, fuzzy +msgid "Recent audiobooks" +msgstr "Los últimos audiolibros en formato MP3 " + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +#, fuzzy +msgid "Recent publications" +msgstr "pasa al dominio público" + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" +" and <a href=\"%(d)s\">recent DAISY files</a>." +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:5 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "Buscar" + +#: templates/catalogue/search_multiple_hits.html:11 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "¿Te has referido a...?" + +#: templates/catalogue/search_multiple_hits.html:52 +msgid "Results by title" +msgstr "Resultados por tÃtulo" + +#: templates/catalogue/search_multiple_hits.html:67 +msgid "Results by authors" +msgstr "Resultados por autor" + +#: templates/catalogue/search_multiple_hits.html:80 +#, fuzzy +msgid "Results by translators" +msgstr "Resultados por autor" + +#: templates/catalogue/search_multiple_hits.html:93 +msgid "Results in text" +msgstr "Resultados en el texto" + +#: templates/catalogue/search_multiple_hits.html:110 +msgid "Other results" +msgstr "Otros resultados" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:151 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "" +"¡Lo siento! El criterio de la búsqueda no corresponde a ningún recurso." + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"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 "" +"El buscador admite los siguientes criterios: tÃtulo, autor, tema, época, " +"género y subgénero.\n" +"\t\tHasta ahora no se admite la búsqueda de texto completo. " + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "" +"¡Lo siento! La consulta de búsqueda tiene que consistir de dos caracteres " +"como mÃnimo." + +#: templates/catalogue/tag_list_split.html:5 +msgid "Literature" +msgstr "" + +#: templates/catalogue/tag_list_split.html:14 +msgid "Gallery" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:78 +msgid "in Culture.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:113 +msgid "in Lektury.Gazeta.pl" +msgstr "en Lektury.Gazeta.pl" + +#: templates/catalogue/tagged_object_list.html:88 +#: templates/catalogue/tagged_object_list.html:118 +msgid "in Wikipedia" +msgstr "en Wikipedia" + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +msgid "Download a custom PDF" +msgstr "Descarga un PDF personalisado" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "¡Ponlo en el estante!" + +#~ msgid "Create new shelf" +#~ msgstr "Crear estante nuevo" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "No tienes estante. Si quieres, puedes hacer uno aquÃ." + +#~ msgid "Put on the shelf!" +#~ msgstr "¡Ponlo en el estante! " + +#~ msgid "Shelves containing fragment" +#~ msgstr "Los estantes que contienen este fragmento" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "No tienes estante. Si quieres, puedes hacer uno aquÃ." + +#~ msgid "Save all shelves" +#~ msgstr "Guarda todos los estantes" + +#~ msgid "Your shelves with books" +#~ msgstr "Tu estanetrÃa con libros" + +#~ msgid "remove" +#~ msgstr "borre" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "No tienes estante. Si quieres, puedes hacer uno aquÃ." + +#~ msgid "Create shelf" +#~ msgstr "Crear estante" + +#~ msgid "Enter a valid JSON value. Error: %s" +#~ msgstr "Introducir un valor válido de JSON. Error: %s" + +#~ msgid "A4" +#~ msgstr "A4" + +#~ msgid "A5" +#~ msgstr "A5" + +#~ msgid "Incorrect customization options for PDF" +#~ msgstr "Opciones de personalización para PDF incorrectas" + +#, fuzzy +#~ msgid "Bad method" +#~ msgstr "Método incorrecto" + +#~ msgid "title, author, theme/topic, epoch, kind, genre" +#~ msgstr "tÃtulo, autor, tema/motivo, época, género, subgénero" + +#~ msgid "main page" +#~ msgstr "página principal" + +#~ msgid "Show tag on main page" +#~ msgstr "Mostrar tag en la página principal" + +#~ msgid "year of death" +#~ msgstr "año de muerte" + +#~ msgid "short HTML" +#~ msgstr "HTML corto" + +#~ msgid "HTML file" +#~ msgstr "archivo HTML" + +#~ msgid "PDF file" +#~ msgstr "archivo PDF" + +#~ msgid "EPUB file" +#~ msgstr "archivo EPUB" + +#~ msgid "ODT file" +#~ msgstr "archivo ODT" + +#~ msgid "TXT file" +#~ msgstr "archivo TXT" + +#~ msgid "MP3 file" +#~ msgstr "archivo MP3" + +#~ msgid "OGG file" +#~ msgstr "archivo OGG" + +#~ msgid "translator" +#~ msgstr "traductor" + +#~ msgid "year of translator's death" +#~ msgstr "año de la muerte del traductor" + +#~ msgid "book stub" +#~ msgstr "vista previa del libro" + +#, fuzzy +#~ msgid "<p>To maintain your shelves you need to be logged in.</p>" +#~ msgstr "<p>Para organizar tus estantes tienes que ingresar.</p> " + +#~ msgid "<p>Shelves were sucessfully saved.</p>" +#~ msgstr "<p>Estantes han sido guardados. </p>" + +#~ msgid "Book was successfully removed from the shelf" +#~ msgstr "El libro ha sido eliminado del estante." + +#~ msgid "<p>Shelf <strong>%s</strong> was successfully created</p>" +#~ msgstr "<p>Estante <strong>%s</strong> ha sido creado</p>" + +#~ msgid "<p>Shelf <strong>%s</strong> was successfully removed</p>" +#~ msgstr "<p>Estante <strong>%s</strong> ha sido eliminado</p>" + +#~ msgid "content type" +#~ msgstr "tipo de contenido" + +#~ msgid "object id" +#~ msgstr "id de objeto" diff --git a/src/catalogue/locale/fr/LC_MESSAGES/django.mo b/src/catalogue/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..3b0d2d304 Binary files /dev/null and b/src/catalogue/locale/fr/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/fr/LC_MESSAGES/django.po b/src/catalogue/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..7274d84eb --- /dev/null +++ b/src/catalogue/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,868 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: 2013-04-09 10:38+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "Fournissez un XML, s'il vous plaît." + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "Ne montre pas d'annotations" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "N'affiche pas de thèmes" + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "N'utilise pas notre caractère usuel" + +#: forms.py:49 +msgid "Without cover" +msgstr "" + +#: forms.py:52 +msgid "Leading" +msgstr "Interligne" + +#: forms.py:53 +msgid "Normal leading" +msgstr "Interligne normal" + +#: forms.py:54 +msgid "One and a half leading" +msgstr "Interligne et demi" + +#: forms.py:55 +msgid "Double leading" +msgstr "Interligne double" + +#: forms.py:57 +msgid "Font size" +msgstr "Taille des caractères" + +#: forms.py:58 +msgid "Default" +msgstr "Implicite" + +#: forms.py:59 +msgid "Big" +msgstr "Grand(e)(s)" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "" + +# msgid "Today is %(month)s, %(day)s." +# msgstr "Aujourd'hui nous sommes le" +#: views.py:585 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" +"Un erreur a eu lieu : %(exception)s\n" +"\n" +"%(tb)s" + +#: views.py:586 +msgid "Book imported successfully" +msgstr "Livre importé avec succès" + +#: views.py:588 +#, python-format +msgid "Error importing file: %r" +msgstr "Erreur pendant l'importation du fichier: %r" + +#: views.py:620 +msgid "Download custom PDF" +msgstr "Téléchargez un PDF personnalisé" + +#: views.py:621 templates/catalogue/book_short.html:92 +#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 +msgid "Download" +msgstr "Téléchargez" + +#: models/book.py:28 models/collection.py:11 +msgid "title" +msgstr "titre" + +#: models/book.py:29 models/tag.py:34 +msgid "sort key" +msgstr "critère de tri" + +#: models/book.py:30 models/book.py:32 models/collection.py:12 +#: models/collection.py:15 models/tag.py:33 +msgid "slug" +msgstr "ébauche" + +#: models/book.py:33 +msgid "language code" +msgstr "code de langue" + +#: models/book.py:35 models/book.py:146 models/collection.py:13 +#: models/tag.py:37 models/tag.py:94 +msgid "description" +msgstr "description" + +#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 +#: models/tag.py:47 +msgid "creation date" +msgstr "date de création" + +#: models/book.py:38 +msgid "parent number" +msgstr "nombre de parent" + +#: models/book.py:39 models/bookmedia.py:30 +msgid "extra information" +msgstr "information supplémentaire" + +#: models/book.py:44 +msgid "cover" +msgstr "couverture" + +#: models/book.py:66 models/collection.py:18 models/tag.py:22 +msgid "book" +msgstr "livre" + +#: models/book.py:67 +msgid "books" +msgstr "livres" + +#: models/book.py:244 +#, python-format +msgid "Book \"%s\" does not exist." +msgstr "Livre \"%s\" n'existe pas." + +#: models/book.py:258 +#, python-format +msgid "Book %s already exists" +msgstr "Livre %s existe déjà " + +#: models/book.py:599 models/bookmedia.py:23 +#, python-format +msgid "%s file" +msgstr "fichier %s" + +#: models/bookmedia.py:26 +msgid "type" +msgstr "type" + +#: models/bookmedia.py:27 models/tag.py:32 +msgid "name" +msgstr "nom" + +#: models/bookmedia.py:28 +msgid "file" +msgstr "fichier" + +#: models/bookmedia.py:39 models/bookmedia.py:40 +msgid "book media" +msgstr "book media" + +#: models/collection.py:16 +#, fuzzy +msgid "book slugs" +msgstr "ébauches des livres" + +#: models/collection.py:18 models/tag.py:18 +msgid "kind" +msgstr "type" + +#: models/collection.py:22 +msgid "collection" +msgstr "collection" + +#: models/collection.py:23 +msgid "collections" +msgstr "collections" + +#: models/fragment.py:32 +msgid "fragment" +msgstr "extrait" + +#: models/fragment.py:33 +msgid "fragments" +msgstr "extraits" + +#: models/tag.py:16 +msgid "author" +msgstr "auteur" + +#: models/tag.py:17 +msgid "epoch" +msgstr "époque" + +#: models/tag.py:19 +msgid "genre" +msgstr "genre" + +#: models/tag.py:20 +msgid "theme" +msgstr "thème" + +#: models/tag.py:21 +msgid "set" +msgstr "série" + +#: models/tag.py:23 +msgid "thing" +msgstr "" + +#: models/tag.py:35 +msgid "category" +msgstr "catégorie" + +#: models/tag.py:40 +msgid "book count" +msgstr "nombre des livres" + +#: models/tag.py:41 +msgid "picture count" +msgstr "" + +#: models/tag.py:65 +msgid "tag" +msgstr "tag" + +#: models/tag.py:66 +msgid "tags" +msgstr "tags" + +#: models/tag.py:83 +msgid "" +"Book tags can't have attached links. Set them directly on the book instead " +"of it's tag." +msgstr "" + +#: templates/catalogue/audiobook_list.html:7 +#: templates/catalogue/audiobook_list.html:16 +msgid "Listing of all audiobooks" +msgstr "Liste des tous les livres audio" + +#: templates/catalogue/audiobook_list.html:12 +msgid "Latest MP3 audiobooks" +msgstr "Les plus nouveaux livres audio MP3" + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "Les plus nouveaux livres audio Ogg Vorbis" + +#: templates/catalogue/audiobook_list.html:19 +msgid "" +"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +"Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +"Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." +msgstr "" +"Audiothèque des lectures scolaires de la Fondation Pologne Moderne.\n" +"Vous pouvez l'utiliser gratuitement et sans limites. \n" +"Les livres audio sont lus par les acteurs connus, comme par exemple: Danuta " +"Stenka et Jan Peszek." + +#: templates/catalogue/book_detail.html:20 +#: templates/catalogue/tagged_object_list.html:74 +#: templates/catalogue/tagged_object_list.html:109 +msgid "See also" +msgstr "Voir aussi" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "Thème" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "dans l'oeuvre" + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "Cet oeuvre est publié sous la licence" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " +"Commons Attribution-ShareAlike 3.0</a>\n" +" license." +msgstr "" +"Cet ouvrage n'est pas protégé par le droit d'auteur et appartiennent au\n" +"domaine public; c'est-à -dire qu'il peut être publié et divulgué librement.\n" +"Si l'ouvrage est accompagné des matériaux supplémentaires (annotations, " +"motifs littéraires, etc.),\n" +"ces derniers sont donc distribués sous la licence:\n" +"<a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Paternité " +"- Partage à l'Identique 3.0 non transposé</a>." + +#: templates/catalogue/book_info.html:20 +#, fuzzy +msgid "Resource prepared based on:" +msgstr "Préparation du texte basée sur:" + +#: templates/catalogue/book_info.html:28 +msgid "Edited and annotated by:" +msgstr "Les éditions et annotations par:" + +#: templates/catalogue/book_info.html:33 +msgid "Publication funded by:" +msgstr "" + +#: templates/catalogue/book_info.html:39 +msgid "Cover image by:" +msgstr "" + +#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 +msgid "Listing of all works" +msgstr "Liste des tous les ouvrages" + +#: templates/catalogue/book_list.html:21 +msgid "Table of Content" +msgstr "Table des matières" + +#: templates/catalogue/book_list.html:30 +msgid "â top â" +msgstr "â top â" + +#: templates/catalogue/book_short.html:59 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "Ãpoque" + +#: templates/catalogue/book_short.html:66 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "Type" + +#: templates/catalogue/book_short.html:73 +msgid "Genre" +msgstr "Genre" + +#: templates/catalogue/book_short.html:88 +msgid "Read online" +msgstr "Lire en ligne" + +#: templates/catalogue/book_short.html:95 +#: templates/catalogue/book_text.html:40 +msgid "to print" +msgstr "pour imprimer" + +#: templates/catalogue/book_short.html:98 +msgid "for an e-book reader" +msgstr "pour un lecteur des livres numeriques" + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_text.html:46 +msgid "for Kindle" +msgstr "pour Kindle" + +#: templates/catalogue/book_short.html:104 +#: templates/catalogue/book_text.html:49 +msgid "FictionBook" +msgstr "" + +#: templates/catalogue/book_short.html:107 +#: templates/catalogue/book_text.html:52 +msgid "for advanced usage" +msgstr "pour lâutilisation avancée" + +#: templates/catalogue/book_short.html:113 +#: templates/catalogue/book_text.html:30 +msgid "Listen" +msgstr "Ãcoutez" + +#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 +msgid "Wolne Lektury" +msgstr "Wolne Lektury (Lectures Libres)" + +#: templates/catalogue/book_text.html:22 +msgid "Table of contents" +msgstr "Table des matières" + +#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 +msgid "Themes" +msgstr "Thèmes" + +#: templates/catalogue/book_text.html:24 +msgid "Edit. note" +msgstr "Note d'éditeur" + +#: templates/catalogue/book_text.html:25 +msgid "Infobox" +msgstr "Infobox" + +#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "Site du livre" + +#: templates/catalogue/book_text.html:43 +msgid "for a reader" +msgstr "pour un lecteur" + +#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 +msgid "Download all audiobooks for this book" +msgstr "Téléchargez tous les livres audio pour ce livre" + +#: templates/catalogue/book_wide.html:22 +#: templates/catalogue/tagged_object_list.html:60 +msgid "Motifs and themes" +msgstr "Motifs et thèmes" + +#: templates/catalogue/book_wide.html:44 +msgid "See" +msgstr "Voir" + +#: templates/catalogue/book_wide.html:47 +msgid "Source" +msgstr "Source" + +#: templates/catalogue/book_wide.html:47 +msgid "of the book" +msgstr "du livre" + +#: templates/catalogue/book_wide.html:49 +msgid "Source XML file" +msgstr "Fichier source XML" + +#: templates/catalogue/book_wide.html:51 +msgid "Book on" +msgstr "Livre sur" + +#: templates/catalogue/book_wide.html:51 +msgid "Editor's Platform" +msgstr "Plateforme d'éditeur" + +#: templates/catalogue/book_wide.html:54 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "Description du livre sur Lektury.Gazeta.pl" + +#: templates/catalogue/book_wide.html:57 +msgid "Book description on Wikipedia" +msgstr "Description du livre sur Wikipédia" + +#: templates/catalogue/book_wide.html:59 +msgid "Mix this book" +msgstr "Mixez ce livre" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +msgid "Catalogue" +msgstr "Catalogue" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "Téléchargez le catalogue au format PDF" + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:17 +#: templates/catalogue/tagged_object_list.html:26 +#: templatetags/catalogue_tags.py:416 +msgid "Authors" +msgstr "Auteurs" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:25 +#: templates/catalogue/tagged_object_list.html:34 +#: templatetags/catalogue_tags.py:418 +msgid "Kinds" +msgstr "Types" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:33 +#: templates/catalogue/tagged_object_list.html:42 +#: templatetags/catalogue_tags.py:417 +msgid "Genres" +msgstr "Genres" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:41 +#: templates/catalogue/tagged_object_list.html:50 +#: templatetags/catalogue_tags.py:419 +msgid "Epochs" +msgstr "Ãpoques" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "Thèmes et sujets" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 +#, fuzzy +msgid "Collections" +msgstr "collections" + +#: templates/catalogue/daisy_list.html:6 +#: templates/catalogue/daisy_list.html:12 +msgid "Listing of all DAISY files" +msgstr "Liste des tous les livres audio DAISY" + +#: templates/catalogue/daisy_list.html:9 +msgid "Latest DAISY audiobooks" +msgstr "Le plus nouveaux livres audio DAISY" + +#: templates/catalogue/daisy_list.html:15 +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Å." +msgstr "" +"DAISY est un système pour rendre les livres accessibles, apprécié autour du " +"monde, \n" +"approprié à des non voyants et à des malvoyants et à des personnes \n" +"qui ont des difficultés à lire. Vous pouvez l'utiliser gratuitement et sans " +"limites." + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "Les critères sont ambigus. Choisissez parmi les options ci-dessous:" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "Montrer l'extrait" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "Cacher l'extrait" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:4 +msgid "See full category" +msgstr "Voir catégorie entière" + +#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 +msgid "Please waitâ¦" +msgstr "" + +#: templates/catalogue/menu.html:24 +msgid "All books" +msgstr "Tous les livres" + +#: templates/catalogue/menu.html:28 +msgid "Audiobooks" +msgstr "Livres audio" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "DAISY" + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "Ouvrage sous la licence" + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "Basé sur" + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "Détails" + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "Auteur" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "Autres ressources" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "Source d'image" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "L'image sur la Plateforme d'éditeur" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "Voir source XML" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "Les thèmes de l'oeuvre" + +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all pictures" +msgstr "Liste de tous les images" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "Téléchargez comme" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "Artiste" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "Metteur en scène" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "Livres audios ont été préparés comme une part des projets:" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "%(cs)s, sponsorisé par %(fb)s" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "" +"Livres audios ont été préparés comme une part du projet %(cs)s sponsorisé " +"par %(fb)s." + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "Livres audios ont été préparés comme une part du projet %(cs)s." + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +#, fuzzy +msgid "Recent audiobooks" +msgstr "Les plus nouveaux livres audio MP3" + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +#, fuzzy +msgid "Recent publications" +msgstr "entre dans le domaine public" + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" +" and <a href=\"%(d)s\">recent DAISY files</a>." +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:5 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "Rechercher" + +#: templates/catalogue/search_multiple_hits.html:11 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "Est-ce que vous cherchez" + +#: templates/catalogue/search_multiple_hits.html:52 +msgid "Results by title" +msgstr "Résultats par le titre" + +#: templates/catalogue/search_multiple_hits.html:67 +msgid "Results by authors" +msgstr "Résultats par l'auteur" + +#: templates/catalogue/search_multiple_hits.html:80 +#, fuzzy +msgid "Results by translators" +msgstr "traducteur" + +#: templates/catalogue/search_multiple_hits.html:93 +msgid "Results in text" +msgstr "Résultats dans le texte" + +#: templates/catalogue/search_multiple_hits.html:110 +msgid "Other results" +msgstr "Autres résultats" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:151 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "" +"Nous sommes désolés, aucune ressource ne répond aux critères de recherche." + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"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 "" +"Le moteur de recherche permet de chercher selon le titre, auteur, sujet/" +"thème, époque, type et genre.\n" +"\t\tPour le moment nous n'assurons pas la recherche en plein texte." + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "" +"Nous sommes désolés, pour effectuer la recherche il faut entrer au moins " +"deux caractères." + +#: templates/catalogue/tag_list_split.html:5 +msgid "Literature" +msgstr "" + +#: templates/catalogue/tag_list_split.html:14 +msgid "Gallery" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:78 +msgid "in Culture.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:113 +msgid "in Lektury.Gazeta.pl" +msgstr "sur Lektury.Gazeta.pl" + +#: templates/catalogue/tagged_object_list.html:88 +#: templates/catalogue/tagged_object_list.html:118 +msgid "in Wikipedia" +msgstr "sur Wikipédia" + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +msgid "Download a custom PDF" +msgstr "Téléchargez un PDF pérsonnalisé" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Mettre un livre sur l'étagère!" + +#~ msgid "Create new shelf" +#~ msgstr "Créez une nouvelle étagère" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une au-dessous, si " +#~ "vous voulez." + +#~ msgid "Put on the shelf!" +#~ msgstr "Mettre sur l'étagère!" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Ãtagères qui contiennent l'extrait" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une au-dessous, si " +#~ "vous voulez." + +#~ msgid "Save all shelves" +#~ msgstr "Enregistrer toutes les étagères" + +#~ msgid "Your shelves with books" +#~ msgstr "Vos étagères avec les livres" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "" +#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une en-dessus, si " +#~ "vous voulez." + +#~ msgid "Create shelf" +#~ msgstr "Créez une étagère" + +#~ msgid "Enter a valid JSON value. Error: %s" +#~ msgstr "Entrer une valeur JSON valide. Erreur: %s." + +#~ msgid "A4" +#~ msgstr "A4" + +#~ msgid "A5" +#~ msgstr "A5" + +#~ msgid "Incorrect customization options for PDF" +#~ msgstr "Options de personnalisation incorrectes pour PDF" + +#~ msgid "Bad method" +#~ msgstr "Mauvaise méthode" + +#~ msgid "title, author, theme/topic, epoch, kind, genre" +#~ msgstr "titre, auteur, thème/sujet, époque, type, genre" + +#~ msgid "main page" +#~ msgstr "page d'accueil" + +#~ msgid "Show tag on main page" +#~ msgstr "Montrer le tag au page d'accueil" + +#~ msgid "year of death" +#~ msgstr "année de la mort" + +#~ msgid "short HTML" +#~ msgstr "HTML court" + +#~ msgid "HTML file" +#~ msgstr "fichier HTML" + +#~ msgid "PDF file" +#~ msgstr "fichier PDF" + +#~ msgid "ODT file" +#~ msgstr "fichier ODT" + +#~ msgid "TXT file" +#~ msgstr "fichier TXT" + +#~ msgid "MP3 file" +#~ msgstr "fichier MP3" + +#~ msgid "OGG file" +#~ msgstr "fichier OGG" + +#~ msgid "year of translator's death" +#~ msgstr "année de la mort du traducteur" + +#~ msgid "book stub" +#~ msgstr "ébauche du livre" + +#~ msgid "<p>To maintain your shelves you need to be logged in.</p>" +#~ msgstr "<p>Connectez-vous pour gérer vos étagères.</p>" + +#~ msgid "<p>Shelves were sucessfully saved.</p>" +#~ msgstr "<p>Les étagères <strong>%s</strong>ont été enregistrées</p>" + +#~ msgid "Book was successfully removed from the shelf" +#~ msgstr "Le livre a été supprimé de l'étagère" + +#~ msgid "<p>Shelf <strong>%s</strong> was successfully created</p>" +#~ msgstr "<p>L'étagère <strong>%s</strong>a été créée</p>" + +#~ msgid "<p>Shelf <strong>%s</strong> was successfully removed</p>" +#~ msgstr "<p>L'étagère <strong>%s</strong>a été supprimée</p>" + +#~ msgid "content type" +#~ msgstr "type du contenu" + +#~ msgid "object id" +#~ msgstr "ID de l'objet" diff --git a/src/catalogue/locale/it/LC_MESSAGES/django.mo b/src/catalogue/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..a164e91b0 Binary files /dev/null and b/src/catalogue/locale/it/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/it/LC_MESSAGES/django.po b/src/catalogue/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..c5eabd259 --- /dev/null +++ b/src/catalogue/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,793 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: 2013-04-09 10:39+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "Si prega di fornire un XML." + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "Non mostrare le note" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "Non visualizzare i temi" + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "Non utilizzare il nostro font personalizzato" + +#: forms.py:49 +msgid "Without cover" +msgstr "" + +#: forms.py:52 +msgid "Leading" +msgstr "Interlinea" + +#: forms.py:53 +msgid "Normal leading" +msgstr "Interlinea normale" + +#: forms.py:54 +msgid "One and a half leading" +msgstr " Interlinea 1,5" + +#: forms.py:55 +msgid "Double leading" +msgstr "Interlinea doppia" + +#: forms.py:57 +msgid "Font size" +msgstr "Grandezza del carattere" + +#: forms.py:58 +msgid "Default" +msgstr "Predefinito" + +#: forms.py:59 +msgid "Big" +msgstr "Grande" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "" + +#: views.py:585 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" +"Si e verificato un errore: %(exception)s \n" +"\n" +"%(tb)s" + +#: views.py:586 +msgid "Book imported successfully" +msgstr "Libro scaricato con successo" + +#: views.py:588 +#, python-format +msgid "Error importing file: %r" +msgstr "Errore dell'importazione del file: %r" + +#: views.py:620 +msgid "Download custom PDF" +msgstr "Scarica PDF personalizzato" + +#: views.py:621 templates/catalogue/book_short.html:92 +#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 +msgid "Download" +msgstr "Scarica" + +#: models/book.py:28 models/collection.py:11 +msgid "title" +msgstr "titolo" + +#: models/book.py:29 models/tag.py:34 +msgid "sort key" +msgstr "chiave di ordinamento" + +#: models/book.py:30 models/book.py:32 models/collection.py:12 +#: models/collection.py:15 models/tag.py:33 +msgid "slug" +msgstr "slug" + +#: models/book.py:33 +msgid "language code" +msgstr "codice della lingua" + +#: models/book.py:35 models/book.py:146 models/collection.py:13 +#: models/tag.py:37 models/tag.py:94 +msgid "description" +msgstr "descrizione" + +#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 +#: models/tag.py:47 +msgid "creation date" +msgstr "data di creazione" + +#: models/book.py:38 +msgid "parent number" +msgstr "numero del genitore" + +#: models/book.py:39 models/bookmedia.py:30 +msgid "extra information" +msgstr " ulteriori informazioni" + +#: models/book.py:44 +msgid "cover" +msgstr "copertina" + +#: models/book.py:66 models/collection.py:18 models/tag.py:22 +msgid "book" +msgstr "libro" + +#: models/book.py:67 +msgid "books" +msgstr "Libri" + +#: models/book.py:244 +#, python-format +msgid "Book \"%s\" does not exist." +msgstr "Il libro \"%s\" non esiste." + +#: models/book.py:258 +#, python-format +msgid "Book %s already exists" +msgstr "Il libro %s esiste già " + +#: models/book.py:599 models/bookmedia.py:23 +#, python-format +msgid "%s file" +msgstr "i %s di file" + +#: models/bookmedia.py:26 +msgid "type" +msgstr "tipo" + +#: models/bookmedia.py:27 models/tag.py:32 +msgid "name" +msgstr "nome" + +#: models/bookmedia.py:28 +msgid "file" +msgstr "file" + +#: models/bookmedia.py:39 models/bookmedia.py:40 +msgid "book media" +msgstr "book media" + +#: models/collection.py:16 +msgid "book slugs" +msgstr " slug del libro " + +#: models/collection.py:18 models/tag.py:18 +msgid "kind" +msgstr "categoria" + +#: models/collection.py:22 +msgid "collection" +msgstr "raccolta" + +#: models/collection.py:23 +msgid "collections" +msgstr " raccolte" + +#: models/fragment.py:32 +msgid "fragment" +msgstr "Frammento" + +#: models/fragment.py:33 +msgid "fragments" +msgstr "Frammenti" + +#: models/tag.py:16 +msgid "author" +msgstr "autore" + +#: models/tag.py:17 +msgid "epoch" +msgstr "epoca" + +#: models/tag.py:19 +msgid "genre" +msgstr "genere" + +#: models/tag.py:20 +msgid "theme" +msgstr "tema" + +#: models/tag.py:21 +msgid "set" +msgstr "raccolta" + +#: models/tag.py:23 +msgid "thing" +msgstr "" + +#: models/tag.py:35 +msgid "category" +msgstr "categoria" + +#: models/tag.py:40 +msgid "book count" +msgstr "conteggio dei libri" + +#: models/tag.py:41 +msgid "picture count" +msgstr "" + +#: models/tag.py:65 +msgid "tag" +msgstr "tag" + +#: models/tag.py:66 +msgid "tags" +msgstr "i tag" + +#: models/tag.py:83 +msgid "" +"Book tags can't have attached links. Set them directly on the book instead " +"of it's tag." +msgstr "" + +#: templates/catalogue/audiobook_list.html:7 +#: templates/catalogue/audiobook_list.html:16 +msgid "Listing of all audiobooks" +msgstr "Elenco di tutti gli audiolibri " + +#: templates/catalogue/audiobook_list.html:12 +msgid "Latest MP3 audiobooks" +msgstr "Ultimi audiolibri MP3" + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "Ultimi audiolibri Ogg Vorbis" + +#: templates/catalogue/audiobook_list.html:19 +msgid "" +"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +"Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +"Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." +msgstr "" + +#: templates/catalogue/book_detail.html:20 +#: templates/catalogue/tagged_object_list.html:74 +#: templates/catalogue/tagged_object_list.html:109 +msgid "See also" +msgstr "Vedi anche" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "tema" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "in corso" + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "Questa opera è pubblicata su licenza:" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " +"Commons Attribution-ShareAlike 3.0</a>\n" +" license." +msgstr "" +"Questa opera non è sotto il diritto d'autore e fa parte del\n" +"pubblico dominio, il che significa che è possibile pubblicarla \n" +"e distribuirla liberamente. Se un'opera è completata con i materiali " +"aggiuntivi \n" +"(le annotazioni, i motivi letterari ecc.) che sono protette dal diritto " +"d'autore, quei\n" +"materiali aggiuntivi sono disponibili secondo la \n" +" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " +"Commons Attribution-ShareAlike 3.0</a>\n" +"licenza." + +#: templates/catalogue/book_info.html:20 +#, fuzzy +msgid "Resource prepared based on:" +msgstr "Il testo preparato e basato su:" + +#: templates/catalogue/book_info.html:28 +msgid "Edited and annotated by:" +msgstr "Curato ed elaborato da:" + +#: templates/catalogue/book_info.html:33 +msgid "Publication funded by:" +msgstr "" + +#: templates/catalogue/book_info.html:39 +msgid "Cover image by:" +msgstr "" + +#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 +msgid "Listing of all works" +msgstr "Elenco di tutte le opere" + +#: templates/catalogue/book_list.html:21 +msgid "Table of Content" +msgstr "Indice" + +#: templates/catalogue/book_list.html:30 +msgid "â top â" +msgstr "" + +#: templates/catalogue/book_short.html:59 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "Epoca" + +#: templates/catalogue/book_short.html:66 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "Categoria" + +#: templates/catalogue/book_short.html:73 +msgid "Genre" +msgstr "Genere" + +#: templates/catalogue/book_short.html:88 +msgid "Read online" +msgstr "Leggi online" + +#: templates/catalogue/book_short.html:95 +#: templates/catalogue/book_text.html:40 +msgid "to print" +msgstr "" + +#: templates/catalogue/book_short.html:98 +msgid "for an e-book reader" +msgstr "" + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_text.html:46 +msgid "for Kindle" +msgstr "" + +#: templates/catalogue/book_short.html:104 +#: templates/catalogue/book_text.html:49 +msgid "FictionBook" +msgstr "" + +#: templates/catalogue/book_short.html:107 +#: templates/catalogue/book_text.html:52 +msgid "for advanced usage" +msgstr "" + +#: templates/catalogue/book_short.html:113 +#: templates/catalogue/book_text.html:30 +msgid "Listen" +msgstr "Ascolta" + +#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/catalogue/book_text.html:22 +msgid "Table of contents" +msgstr "Indice" + +#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 +msgid "Themes" +msgstr "Temi" + +#: templates/catalogue/book_text.html:24 +msgid "Edit. note" +msgstr "Modifica. nota" + +#: templates/catalogue/book_text.html:25 +msgid "Infobox" +msgstr "Infobox" + +#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "Pagina del libro" + +#: templates/catalogue/book_text.html:43 +msgid "for a reader" +msgstr "" + +#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 +msgid "Download all audiobooks for this book" +msgstr "Scarica tutti gli audiolibri per questo libro." + +#: templates/catalogue/book_wide.html:22 +#: templates/catalogue/tagged_object_list.html:60 +msgid "Motifs and themes" +msgstr "Motivi e temi" + +#: templates/catalogue/book_wide.html:44 +msgid "See" +msgstr "Vedi" + +#: templates/catalogue/book_wide.html:47 +msgid "Source" +msgstr "Fonte" + +#: templates/catalogue/book_wide.html:47 +msgid "of the book" +msgstr "del libro" + +#: templates/catalogue/book_wide.html:49 +msgid "Source XML file" +msgstr "File di fonte XML" + +#: templates/catalogue/book_wide.html:51 +msgid "Book on" +msgstr "Libro su" + +#: templates/catalogue/book_wide.html:51 +msgid "Editor's Platform" +msgstr " Piattaforma del editore" + +#: templates/catalogue/book_wide.html:54 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "Descrizione del libro su Lektury.Gazeta.pl" + +#: templates/catalogue/book_wide.html:57 +msgid "Book description on Wikipedia" +msgstr "Descrizione del libro su Wikipedia" + +#: templates/catalogue/book_wide.html:59 +msgid "Mix this book" +msgstr "Combina questo libro" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +msgid "Catalogue" +msgstr "Catalogo" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "Scarica il catalogo nel formato PDF." + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:17 +#: templates/catalogue/tagged_object_list.html:26 +#: templatetags/catalogue_tags.py:416 +msgid "Authors" +msgstr "Autori" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:25 +#: templates/catalogue/tagged_object_list.html:34 +#: templatetags/catalogue_tags.py:418 +msgid "Kinds" +msgstr "Categorie" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:33 +#: templates/catalogue/tagged_object_list.html:42 +#: templatetags/catalogue_tags.py:417 +msgid "Genres" +msgstr "Generi" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:41 +#: templates/catalogue/tagged_object_list.html:50 +#: templatetags/catalogue_tags.py:419 +msgid "Epochs" +msgstr "Epoche" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "temi e argomenti" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 +#, fuzzy +msgid "Collections" +msgstr " raccolte" + +#: templates/catalogue/daisy_list.html:6 +#: templates/catalogue/daisy_list.html:12 +msgid "Listing of all DAISY files" +msgstr "Elenco di tutti i file DAISY " + +#: templates/catalogue/daisy_list.html:9 +msgid "Latest DAISY audiobooks" +msgstr "Ultimi audiolibri DAISY" + +#: templates/catalogue/daisy_list.html:15 +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Å." +msgstr "" + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "" +"Questi criteri sono ambigui. Si prega di selezionare una delle seguenti " +"opzioni:" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "Espandi il frammento" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "Nascondi il frammento" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:4 +msgid "See full category" +msgstr "Vedi tutta la categoria" + +#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 +msgid "Please waitâ¦" +msgstr "" + +#: templates/catalogue/menu.html:24 +msgid "All books" +msgstr "Tutti i libri" + +#: templates/catalogue/menu.html:28 +msgid "Audiobooks" +msgstr "Audiolibri" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "DAISY" + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "L'opera è su licenza di" + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "Basato su" + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "Dettagli" + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "Autore" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "Altre fonti" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "Fonte dell'immagine" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "Immagine sulla piattaforma del editore" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "Visualizza la fonte XML" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "Temi dell'opera" + +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all pictures" +msgstr "Elenco di tutte le immagini" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "Scarica come" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "Artista" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "Direttore" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "Gli audilobri sono stati preparati come parte dei seguenti progetti:" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "%(cs)s, creato da %(fb)s // %(cs)s, finanziato da %(fb)s" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "" +"Gli audiollibri sono stati preparati come parte del progetto %(cs)s, " +"finanziato da %(fb)s" + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "Gli audiolibri sono stati preparati come parte di progetto %(cs)s." + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +#, fuzzy +msgid "Recent audiobooks" +msgstr "Ultimi audiolibri MP3" + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +msgid "Recent publications" +msgstr "" + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" +" and <a href=\"%(d)s\">recent DAISY files</a>." +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:5 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "Cerca" + +#: templates/catalogue/search_multiple_hits.html:11 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "Volevi dire" + +#: templates/catalogue/search_multiple_hits.html:52 +msgid "Results by title" +msgstr "Risultati per titolo" + +#: templates/catalogue/search_multiple_hits.html:67 +msgid "Results by authors" +msgstr "Risultati per autore" + +#: templates/catalogue/search_multiple_hits.html:80 +msgid "Results by translators" +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:93 +msgid "Results in text" +msgstr "Risultati nel testo" + +#: templates/catalogue/search_multiple_hits.html:110 +msgid "Other results" +msgstr "Altri risultati" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:151 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "Siamo spiacenti!I criteri di ricerca non corrispondono alle risorse." + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"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 "" +"Il motore di ricerca supporta i seguenti criteri: titolo, autore, tema, " +"epoca, genere.\n" +"\t\t Per il momento non supportiamo i criteri del testo intero." + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "" +"Siamo spiacenti! La ricerca viene effettuata su parole con almeno due " +"caratteri." + +#: templates/catalogue/tag_list_split.html:5 +msgid "Literature" +msgstr "" + +#: templates/catalogue/tag_list_split.html:14 +msgid "Gallery" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:78 +msgid "in Culture.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:113 +msgid "in Lektury.Gazeta.pl" +msgstr "su Lektury.Gazeta.pl" + +#: templates/catalogue/tagged_object_list.html:88 +#: templates/catalogue/tagged_object_list.html:118 +msgid "in Wikipedia" +msgstr "su Wikipedia" + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +msgid "Download a custom PDF" +msgstr " Scarica un PDF personalizzato" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Metti il libro sullo scaffale" + +#~ msgid "Create new shelf" +#~ msgstr "Crea un nuovo scaffale" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "Non hai nessuno scaffale. se vuoi puoi crearne uno, qui sotto." + +#~ msgid "Put on the shelf!" +#~ msgstr "Metti sullo scaffale!" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Gli scaffali che contengono il frammento" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "Non hai nessuno scaffale. Se vuoi puoi crearne uno, qui sotto." + +#~ msgid "Save all shelves" +#~ msgstr "Salva tutti gli scaffali" + +#~ msgid "Your shelves with books" +#~ msgstr "I tuoi scaffali con i libri" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "Non hai nessuno scaffale. se vuoi puoi crearne uno, qui sotto." + +#~ msgid "Create shelf" +#~ msgstr "Crea uno scaffale" + +#~ msgid "Enter a valid JSON value. Error: %s" +#~ msgstr "Inserire un valore valido JSON. Errore: %s" + +#~ msgid "A4" +#~ msgstr "A4" + +#~ msgid "A5" +#~ msgstr "A5" + +#~ msgid "Incorrect customization options for PDF" +#~ msgstr "Opzioni di personalizzazione non corrette per PDF" + +#~ msgid "Bad method" +#~ msgstr "Metodo non corretto" diff --git a/src/catalogue/locale/jp/LC_MESSAGES/django.mo b/src/catalogue/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 000000000..86b539e6b Binary files /dev/null and b/src/catalogue/locale/jp/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/jp/LC_MESSAGES/django.po b/src/catalogue/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 000000000..8de2d5621 --- /dev/null +++ b/src/catalogue/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,721 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "" + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "" + +#: forms.py:49 +msgid "Without cover" +msgstr "" + +#: forms.py:52 +msgid "Leading" +msgstr "" + +#: forms.py:53 +msgid "Normal leading" +msgstr "" + +#: forms.py:54 +msgid "One and a half leading" +msgstr "" + +#: forms.py:55 +msgid "Double leading" +msgstr "" + +#: forms.py:57 +msgid "Font size" +msgstr "" + +#: forms.py:58 +msgid "Default" +msgstr "" + +#: forms.py:59 +msgid "Big" +msgstr "" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "" + +#: views.py:585 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:586 +msgid "Book imported successfully" +msgstr "" + +#: views.py:588 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: views.py:620 +msgid "Download custom PDF" +msgstr "" + +#: views.py:621 templates/catalogue/book_short.html:92 +#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 +msgid "Download" +msgstr "" + +#: models/book.py:28 models/collection.py:11 +msgid "title" +msgstr "" + +#: models/book.py:29 models/tag.py:34 +msgid "sort key" +msgstr "" + +#: models/book.py:30 models/book.py:32 models/collection.py:12 +#: models/collection.py:15 models/tag.py:33 +msgid "slug" +msgstr "" + +#: models/book.py:33 +msgid "language code" +msgstr "" + +#: models/book.py:35 models/book.py:146 models/collection.py:13 +#: models/tag.py:37 models/tag.py:94 +msgid "description" +msgstr "" + +#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 +#: models/tag.py:47 +msgid "creation date" +msgstr "" + +#: models/book.py:38 +msgid "parent number" +msgstr "" + +#: models/book.py:39 models/bookmedia.py:30 +msgid "extra information" +msgstr "" + +#: models/book.py:44 +msgid "cover" +msgstr "" + +#: models/book.py:66 models/collection.py:18 models/tag.py:22 +msgid "book" +msgstr "" + +#: models/book.py:67 +msgid "books" +msgstr "" + +#: models/book.py:244 +#, python-format +msgid "Book \"%s\" does not exist." +msgstr "" + +#: models/book.py:258 +#, python-format +msgid "Book %s already exists" +msgstr "" + +#: models/book.py:599 models/bookmedia.py:23 +#, python-format +msgid "%s file" +msgstr "" + +#: models/bookmedia.py:26 +msgid "type" +msgstr "" + +#: models/bookmedia.py:27 models/tag.py:32 +msgid "name" +msgstr "" + +#: models/bookmedia.py:28 +msgid "file" +msgstr "" + +#: models/bookmedia.py:39 models/bookmedia.py:40 +msgid "book media" +msgstr "" + +#: models/collection.py:16 +msgid "book slugs" +msgstr "" + +#: models/collection.py:18 models/tag.py:18 +msgid "kind" +msgstr "" + +#: models/collection.py:22 +msgid "collection" +msgstr "" + +#: models/collection.py:23 +msgid "collections" +msgstr "" + +#: models/fragment.py:32 +msgid "fragment" +msgstr "" + +#: models/fragment.py:33 +msgid "fragments" +msgstr "" + +#: models/tag.py:16 +msgid "author" +msgstr "" + +#: models/tag.py:17 +msgid "epoch" +msgstr "" + +#: models/tag.py:19 +msgid "genre" +msgstr "" + +#: models/tag.py:20 +msgid "theme" +msgstr "" + +#: models/tag.py:21 +msgid "set" +msgstr "" + +#: models/tag.py:23 +msgid "thing" +msgstr "" + +#: models/tag.py:35 +msgid "category" +msgstr "" + +#: models/tag.py:40 +msgid "book count" +msgstr "" + +#: models/tag.py:41 +msgid "picture count" +msgstr "" + +#: models/tag.py:65 +msgid "tag" +msgstr "" + +#: models/tag.py:66 +msgid "tags" +msgstr "" + +#: models/tag.py:83 +msgid "" +"Book tags can't have attached links. Set them directly on the book instead " +"of it's tag." +msgstr "" + +#: templates/catalogue/audiobook_list.html:7 +#: templates/catalogue/audiobook_list.html:16 +msgid "Listing of all audiobooks" +msgstr "" + +#: templates/catalogue/audiobook_list.html:12 +msgid "Latest MP3 audiobooks" +msgstr "" + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "" + +#: templates/catalogue/audiobook_list.html:19 +msgid "" +"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +"Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +"Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." +msgstr "" + +#: templates/catalogue/book_detail.html:20 +#: templates/catalogue/tagged_object_list.html:74 +#: templates/catalogue/tagged_object_list.html:109 +msgid "See also" +msgstr "" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "" + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " +"Commons Attribution-ShareAlike 3.0</a>\n" +" license." +msgstr "" + +#: templates/catalogue/book_info.html:20 +msgid "Resource prepared based on:" +msgstr "" + +#: templates/catalogue/book_info.html:28 +msgid "Edited and annotated by:" +msgstr "" + +#: templates/catalogue/book_info.html:33 +msgid "Publication funded by:" +msgstr "" + +#: templates/catalogue/book_info.html:39 +msgid "Cover image by:" +msgstr "" + +#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 +msgid "Listing of all works" +msgstr "" + +#: templates/catalogue/book_list.html:21 +msgid "Table of Content" +msgstr "" + +#: templates/catalogue/book_list.html:30 +msgid "â top â" +msgstr "" + +#: templates/catalogue/book_short.html:59 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "" + +#: templates/catalogue/book_short.html:66 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "" + +#: templates/catalogue/book_short.html:73 +msgid "Genre" +msgstr "" + +#: templates/catalogue/book_short.html:88 +msgid "Read online" +msgstr "" + +#: templates/catalogue/book_short.html:95 +#: templates/catalogue/book_text.html:40 +msgid "to print" +msgstr "" + +#: templates/catalogue/book_short.html:98 +msgid "for an e-book reader" +msgstr "" + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_text.html:46 +msgid "for Kindle" +msgstr "" + +#: templates/catalogue/book_short.html:104 +#: templates/catalogue/book_text.html:49 +msgid "FictionBook" +msgstr "" + +#: templates/catalogue/book_short.html:107 +#: templates/catalogue/book_text.html:52 +msgid "for advanced usage" +msgstr "" + +#: templates/catalogue/book_short.html:113 +#: templates/catalogue/book_text.html:30 +msgid "Listen" +msgstr "" + +#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/catalogue/book_text.html:22 +msgid "Table of contents" +msgstr "" + +#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 +msgid "Themes" +msgstr "" + +#: templates/catalogue/book_text.html:24 +msgid "Edit. note" +msgstr "" + +#: templates/catalogue/book_text.html:25 +msgid "Infobox" +msgstr "" + +#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "" + +#: templates/catalogue/book_text.html:43 +msgid "for a reader" +msgstr "" + +#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 +msgid "Download all audiobooks for this book" +msgstr "" + +#: templates/catalogue/book_wide.html:22 +#: templates/catalogue/tagged_object_list.html:60 +msgid "Motifs and themes" +msgstr "" + +#: templates/catalogue/book_wide.html:44 +msgid "See" +msgstr "" + +#: templates/catalogue/book_wide.html:47 +msgid "Source" +msgstr "" + +#: templates/catalogue/book_wide.html:47 +msgid "of the book" +msgstr "" + +#: templates/catalogue/book_wide.html:49 +msgid "Source XML file" +msgstr "" + +#: templates/catalogue/book_wide.html:51 +msgid "Book on" +msgstr "" + +#: templates/catalogue/book_wide.html:51 +msgid "Editor's Platform" +msgstr "" + +#: templates/catalogue/book_wide.html:54 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/catalogue/book_wide.html:57 +msgid "Book description on Wikipedia" +msgstr "" + +#: templates/catalogue/book_wide.html:59 +msgid "Mix this book" +msgstr "" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +msgid "Catalogue" +msgstr "" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "" + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:17 +#: templates/catalogue/tagged_object_list.html:26 +#: templatetags/catalogue_tags.py:416 +msgid "Authors" +msgstr "" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:25 +#: templates/catalogue/tagged_object_list.html:34 +#: templatetags/catalogue_tags.py:418 +msgid "Kinds" +msgstr "" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:33 +#: templates/catalogue/tagged_object_list.html:42 +#: templatetags/catalogue_tags.py:417 +msgid "Genres" +msgstr "" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:41 +#: templates/catalogue/tagged_object_list.html:50 +#: templatetags/catalogue_tags.py:419 +msgid "Epochs" +msgstr "" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 +msgid "Collections" +msgstr "" + +#: templates/catalogue/daisy_list.html:6 +#: templates/catalogue/daisy_list.html:12 +msgid "Listing of all DAISY files" +msgstr "" + +#: templates/catalogue/daisy_list.html:9 +msgid "Latest DAISY audiobooks" +msgstr "" + +#: templates/catalogue/daisy_list.html:15 +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Å." +msgstr "" + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:4 +msgid "See full category" +msgstr "" + +#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 +msgid "Please waitâ¦" +msgstr "" + +#: templates/catalogue/menu.html:24 +msgid "All books" +msgstr "" + +#: templates/catalogue/menu.html:28 +msgid "Audiobooks" +msgstr "" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "" + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "" + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "" + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "" + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "" + +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all pictures" +msgstr "" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "" + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "" + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +msgid "Recent audiobooks" +msgstr "" + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +msgid "Recent publications" +msgstr "" + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" +" and <a href=\"%(d)s\">recent DAISY files</a>." +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:5 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:11 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:52 +msgid "Results by title" +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:67 +msgid "Results by authors" +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:80 +msgid "Results by translators" +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:93 +msgid "Results in text" +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:110 +msgid "Other results" +msgstr "" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:151 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "" + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"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 "" + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "" + +#: templates/catalogue/tag_list_split.html:5 +msgid "Literature" +msgstr "" + +#: templates/catalogue/tag_list_split.html:14 +msgid "Gallery" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:78 +msgid "in Culture.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:113 +msgid "in Lektury.Gazeta.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:88 +#: templates/catalogue/tagged_object_list.html:118 +msgid "in Wikipedia" +msgstr "" + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +msgid "Download a custom PDF" +msgstr "" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "" diff --git a/src/catalogue/locale/lt/LC_MESSAGES/django.mo b/src/catalogue/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..04cdc6613 Binary files /dev/null and b/src/catalogue/locale/lt/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/lt/LC_MESSAGES/django.po b/src/catalogue/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..0889888c4 --- /dev/null +++ b/src/catalogue/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,879 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: 2013-04-09 10:40+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "PraÅ¡ome pateikti XML." + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "Nerodyti iÅ¡našų" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "Nerodyti motyvų" + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "Nenaudoti derinÄių Å¡riftų" + +#: forms.py:49 +msgid "Without cover" +msgstr "" + +#: forms.py:52 +msgid "Leading" +msgstr "eiluÄių intervalas" + +#: forms.py:53 +msgid "Normal leading" +msgstr "Normalus intervalas" + +#: forms.py:54 +msgid "One and a half leading" +msgstr "Pusantro intervalo" + +#: forms.py:55 +msgid "Double leading" +msgstr "Dvigubasis intervalas" + +#: forms.py:57 +msgid "Font size" +msgstr "Å rifto dydis" + +#: forms.py:58 +msgid "Default" +msgstr "Numatytasis " + +#: forms.py:59 +msgid "Big" +msgstr "Didelis" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "" + +#: views.py:585 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" +"Ä®vyko klaida: %(exception)s\n" +"\n" +"%(tb)s" + +#: views.py:586 +msgid "Book imported successfully" +msgstr "Knyga buvo sÄkmingai importuota" + +#: views.py:588 +#, python-format +msgid "Error importing file: %r" +msgstr "Importuojant failÄ Ä¯vyko klaida: %r" + +#: views.py:620 +msgid "Download custom PDF" +msgstr "Sukurti ir atsisiųsti PDF failÄ " + +#: views.py:621 templates/catalogue/book_short.html:92 +#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 +msgid "Download" +msgstr "Atsisiųsti" + +#: models/book.py:28 models/collection.py:11 +msgid "title" +msgstr "pavadinimas" + +#: models/book.py:29 models/tag.py:34 +msgid "sort key" +msgstr "rikiavimo raktas" + +#: models/book.py:30 models/book.py:32 models/collection.py:12 +#: models/collection.py:15 models/tag.py:33 +msgid "slug" +msgstr "slug" + +#: models/book.py:33 +msgid "language code" +msgstr "kalbos kodas" + +#: models/book.py:35 models/book.py:146 models/collection.py:13 +#: models/tag.py:37 models/tag.py:94 +msgid "description" +msgstr "apraÅ¡ymas" + +#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 +#: models/tag.py:47 +msgid "creation date" +msgstr "sukÅ«rimo data" + +# sprawdz +#: models/book.py:38 +msgid "parent number" +msgstr "pirminis numeris" + +#: models/book.py:39 models/bookmedia.py:30 +msgid "extra information" +msgstr "papildomos informacijos" + +#: models/book.py:44 +msgid "cover" +msgstr "virÅ¡elis" + +#: models/book.py:66 models/collection.py:18 models/tag.py:22 +msgid "book" +msgstr "knyga" + +#: models/book.py:67 +msgid "books" +msgstr "knygos" + +#: models/book.py:244 +#, python-format +msgid "Book \"%s\" does not exist." +msgstr "Knyga \"%s\" neegzistuoja." + +#: models/book.py:258 +#, python-format +msgid "Book %s already exists" +msgstr "Knyga %s jau egzistuoja" + +#: models/book.py:599 models/bookmedia.py:23 +#, python-format +msgid "%s file" +msgstr "%s failas " + +#: models/bookmedia.py:26 +msgid "type" +msgstr "tipas" + +#: models/bookmedia.py:27 models/tag.py:32 +msgid "name" +msgstr "pavadinimas" + +#: models/bookmedia.py:28 +msgid "file" +msgstr "failas " + +#: models/bookmedia.py:39 models/bookmedia.py:40 +msgid "book media" +msgstr "book media" + +#: models/collection.py:16 +msgid "book slugs" +msgstr "book slugs" + +#: models/collection.py:18 models/tag.py:18 +msgid "kind" +msgstr "rÅ«Å¡is" + +#: models/collection.py:22 +msgid "collection" +msgstr "kolekcija" + +#: models/collection.py:23 +msgid "collections" +msgstr "kolekcijos" + +#: models/fragment.py:32 +msgid "fragment" +msgstr "fragmentas" + +#: models/fragment.py:33 +msgid "fragments" +msgstr "fragmentai" + +#: models/tag.py:16 +msgid "author" +msgstr "autorius" + +#: models/tag.py:17 +msgid "epoch" +msgstr "epocha" + +#: models/tag.py:19 +msgid "genre" +msgstr "žanras" + +#: models/tag.py:20 +msgid "theme" +msgstr "motyvas" + +#: models/tag.py:21 +msgid "set" +msgstr "rinkinys" + +#: models/tag.py:23 +msgid "thing" +msgstr "" + +#: models/tag.py:35 +msgid "category" +msgstr "kategorija " + +#: models/tag.py:40 +msgid "book count" +msgstr "knygų skaiÄius" + +#: models/tag.py:41 +msgid "picture count" +msgstr "" + +#: models/tag.py:65 +msgid "tag" +msgstr "žymÄ" + +#: models/tag.py:66 +msgid "tags" +msgstr "žymÄs" + +#: models/tag.py:83 +msgid "" +"Book tags can't have attached links. Set them directly on the book instead " +"of it's tag." +msgstr "" + +#: templates/catalogue/audiobook_list.html:7 +#: templates/catalogue/audiobook_list.html:16 +msgid "Listing of all audiobooks" +msgstr "Visų audio knygų sÄ raÅ¡as" + +#: templates/catalogue/audiobook_list.html:12 +msgid "Latest MP3 audiobooks" +msgstr "Naujosios MP3 audio knygos" + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "Naujosios Ogg Vorbis audio knygos" + +#: templates/catalogue/audiobook_list.html:19 +msgid "" +"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +"Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +"Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." +msgstr "" +"Fondo Å iuolaikinÄ Lenkija privalomos literatÅ«ros audio knygų rinkinys.\n" +"Galite juo naudotis nemokamai ir be apribojimų.\n" +"Audio knygos yra garsių aktorių įraÅ¡omos, tokių kaip Danuta Stenka ir Jan " +"Peszek." + +#: templates/catalogue/book_detail.html:20 +#: templates/catalogue/tagged_object_list.html:74 +#: templates/catalogue/tagged_object_list.html:109 +msgid "See also" +msgstr "ŽiÅ«rÄti daugiau" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "Motyvas" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "kÅ«rinyje" + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "Å is kÅ«rinys yra licencijuotas pagal:" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " +"Commons Attribution-ShareAlike 3.0</a>\n" +" license." +msgstr "" +"Å io visuomenÄs srities kÅ«rinio autorių teisÄ neapima,\n" +"tai reiÅ¡kia, kad gali bÅ«ti laisvai naudojamas bei\n" +"platinamas. Jei su Å¡iuo kÅ«riniu yra pateikiamos bet kokios\n" +"papildomos autorinių teisių saugomos medžiagos (kaip pastabos, motyvai ir t." +"t.), Å¡ios\n" +"medžiagos yra licencijuotos pagal\n" +"<a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative Commons " +"Attribution-ShareAlike 3.0</a>\n" +"licencijÄ ." + +#: templates/catalogue/book_info.html:20 +#, fuzzy +msgid "Resource prepared based on:" +msgstr "Tekstas paruoÅ¡tas remiantis:" + +#: templates/catalogue/book_info.html:28 +msgid "Edited and annotated by:" +msgstr "Redagavimas ir pastabos:" + +#: templates/catalogue/book_info.html:33 +msgid "Publication funded by:" +msgstr "" + +#: templates/catalogue/book_info.html:39 +msgid "Cover image by:" +msgstr "" + +#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 +msgid "Listing of all works" +msgstr "Visų kÅ«rinių sÄ raÅ¡as" + +#: templates/catalogue/book_list.html:21 +msgid "Table of Content" +msgstr "Turinys" + +#: templates/catalogue/book_list.html:30 +msgid "â top â" +msgstr "âį viršųâ" + +#: templates/catalogue/book_short.html:59 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "Epocha" + +#: templates/catalogue/book_short.html:66 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "RÅ«Å¡is " + +#: templates/catalogue/book_short.html:73 +msgid "Genre" +msgstr "Žanras" + +#: templates/catalogue/book_short.html:88 +msgid "Read online" +msgstr "Skaityti online" + +#: templates/catalogue/book_short.html:95 +#: templates/catalogue/book_text.html:40 +msgid "to print" +msgstr "Spausdinti" + +#: templates/catalogue/book_short.html:98 +msgid "for an e-book reader" +msgstr "e-knygos skaitytojui" + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_text.html:46 +msgid "for Kindle" +msgstr "skaityklei Kindle" + +#: templates/catalogue/book_short.html:104 +#: templates/catalogue/book_text.html:49 +msgid "FictionBook" +msgstr "" + +#: templates/catalogue/book_short.html:107 +#: templates/catalogue/book_text.html:52 +msgid "for advanced usage" +msgstr " iÅ¡plÄstiniam naudojimui" + +#: templates/catalogue/book_short.html:113 +#: templates/catalogue/book_text.html:30 +msgid "Listen" +msgstr "Klausytis" + +#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/catalogue/book_text.html:22 +msgid "Table of contents" +msgstr "Turinys" + +#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 +msgid "Themes" +msgstr "Motyvai" + +#: templates/catalogue/book_text.html:24 +msgid "Edit. note" +msgstr "Redaguoti pastabÄ " + +#: templates/catalogue/book_text.html:25 +msgid "Infobox" +msgstr "Infobox" + +#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "Knygos puslapis" + +#: templates/catalogue/book_text.html:43 +msgid "for a reader" +msgstr "skaitytojui" + +#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 +msgid "Download all audiobooks for this book" +msgstr "Atsisiųsti visas Å¡ios knygos audio knygas" + +#: templates/catalogue/book_wide.html:22 +#: templates/catalogue/tagged_object_list.html:60 +msgid "Motifs and themes" +msgstr "Motyvai ir temos" + +#: templates/catalogue/book_wide.html:44 +msgid "See" +msgstr "ŽiÅ«rÄti" + +#: templates/catalogue/book_wide.html:47 +msgid "Source" +msgstr "Knygos" + +#: templates/catalogue/book_wide.html:47 +msgid "of the book" +msgstr "Å¡altinis" + +#: templates/catalogue/book_wide.html:49 +msgid "Source XML file" +msgstr "Å altinio XML failas" + +#: templates/catalogue/book_wide.html:51 +msgid "Book on" +msgstr "Knyga " + +#: templates/catalogue/book_wide.html:51 +msgid "Editor's Platform" +msgstr "Redaktoriaus Platformoje" + +#: templates/catalogue/book_wide.html:54 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "Knygos apraÅ¡ymas Lektury.Gazeta.pl interneto svetainÄje" + +#: templates/catalogue/book_wide.html:57 +msgid "Book description on Wikipedia" +msgstr "Knygos apraÅ¡ymas Vikipedijoje" + +#: templates/catalogue/book_wide.html:59 +msgid "Mix this book" +msgstr "MaiÅ¡yti Å¡iÄ knygÄ " + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +msgid "Catalogue" +msgstr "Katalogas" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "Atsisiųsti katalogÄ PDF formatu." + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:17 +#: templates/catalogue/tagged_object_list.html:26 +#: templatetags/catalogue_tags.py:416 +msgid "Authors" +msgstr "Autoriai" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:25 +#: templates/catalogue/tagged_object_list.html:34 +#: templatetags/catalogue_tags.py:418 +msgid "Kinds" +msgstr "RÅ«Å¡ys" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:33 +#: templates/catalogue/tagged_object_list.html:42 +#: templatetags/catalogue_tags.py:417 +msgid "Genres" +msgstr "Žanrai" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:41 +#: templates/catalogue/tagged_object_list.html:50 +#: templatetags/catalogue_tags.py:419 +msgid "Epochs" +msgstr "Epochos" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "Motyvai ir temos" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 +#, fuzzy +msgid "Collections" +msgstr "kolekcijos" + +#: templates/catalogue/daisy_list.html:6 +#: templates/catalogue/daisy_list.html:12 +msgid "Listing of all DAISY files" +msgstr "Visų DAISY failų sÄ raÅ¡as" + +#: templates/catalogue/daisy_list.html:9 +msgid "Latest DAISY audiobooks" +msgstr "Naujosios DAISY audio knygos" + +#: templates/catalogue/daisy_list.html:15 +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Å." +msgstr "" +"DAISY sistema yra visame pasaulyje pripažintas knygų bendrinimo formatas\n" +"pritaikytas silpnesnio regÄjimo žmonÄms, akliesiems bei kitiems\n" +"skaitymo problemų turintiems žmonÄms.Galite jomis naudotis nemokamai ir be " +"apribojimų." + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "" +"PaieÅ¡kos kriterijai nÄra tikslÅ«s. PraÅ¡ome iÅ¡rinkti vienÄ iÅ¡ žemiau nurodytų " +"galimybių:" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "IÅ¡plÄsti fragmentÄ " + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "SlÄpti fragmentÄ " + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:4 +msgid "See full category" +msgstr "ŽiÅ«rÄti visÄ kategorijÄ " + +#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 +msgid "Please waitâ¦" +msgstr "" + +#: templates/catalogue/menu.html:24 +msgid "All books" +msgstr "Visos knygos" + +#: templates/catalogue/menu.html:28 +msgid "Audiobooks" +msgstr "Audio knygos" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "DAISY " + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "KÅ«rinys yra licencijuotas pagal:" + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "Remiantis" + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "DetalÄs " + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "Autorius" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "Kiti iÅ¡tekliai" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "PaveikslÄlio Å¡altinis" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "PaveikslÄlis Redaktoriaus Platformoje" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "ŽiÅ«rÄti XML Å¡altinį" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "KÅ«rinio motyvai" + +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all pictures" +msgstr "Visų vaizdų sÄ raÅ¡as" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "Atsisiųsti kaip" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "Artistas" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "Režisierus" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "Audio knygos buvo paruoÅ¡tos kaip projektų dalis:" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "\"%(cs)s, %(fb)s finansuotų" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "" +"Audio knygos buvo paruoÅ¡tos kaip dalis %(fb)s. finansuoto %(cs)s projekto." + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "Audio knygos buvo paruoÅ¡tos kaip dalis %(cs)s projekto." + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +#, fuzzy +msgid "Recent audiobooks" +msgstr "Naujosios MP3 audio knygos" + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +#, fuzzy +msgid "Recent publications" +msgstr "keliauja į vieÅ¡Ä tinklapį " + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" +" and <a href=\"%(d)s\">recent DAISY files</a>." +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:5 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "IeÅ¡koti" + +#: templates/catalogue/search_multiple_hits.html:11 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "Gal turÄjote omenyje" + +#: templates/catalogue/search_multiple_hits.html:52 +msgid "Results by title" +msgstr "Rezultatai pagal pavadinimÄ " + +#: templates/catalogue/search_multiple_hits.html:67 +msgid "Results by authors" +msgstr "Rezultatai pagal autorius" + +#: templates/catalogue/search_multiple_hits.html:80 +#, fuzzy +msgid "Results by translators" +msgstr "Rezultatai pagal autorius" + +#: templates/catalogue/search_multiple_hits.html:93 +msgid "Results in text" +msgstr "Rezultatai tekste" + +#: templates/catalogue/search_multiple_hits.html:110 +msgid "Other results" +msgstr "Kiti rezultatai" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:151 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "AtsipraÅ¡ome! Rezultatų, atitinkanÄių paieÅ¡kos kriterijus nÄra." + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"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 "" +"PaieÅ¡kos sistema palaiko nurodytus kriterijus: pavadinimas, autorius, tema, " +"epocha, rÅ«Å¡is ir žanras.\n" +"\t\t Kol kas negalima atlikti viso teksto paieÅ¡kos." + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "" +"AtsipraÅ¡ome! PaieÅ¡kos užklausa turi susidÄti mažiausiai iÅ¡ dviejų simbolių." + +#: templates/catalogue/tag_list_split.html:5 +msgid "Literature" +msgstr "" + +#: templates/catalogue/tag_list_split.html:14 +msgid "Gallery" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:78 +msgid "in Culture.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:113 +msgid "in Lektury.Gazeta.pl" +msgstr "Lektury.Gazeta.pl interneto svetainÄje" + +#: templates/catalogue/tagged_object_list.html:88 +#: templates/catalogue/tagged_object_list.html:118 +msgid "in Wikipedia" +msgstr "Vikipedijoje" + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +msgid "Download a custom PDF" +msgstr "Sukurti ir atsisiųsti PDF failÄ " + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "PadÄkite knygÄ Ä¯ lentynÄ !" + +#~ msgid "Create new shelf" +#~ msgstr "Sukurti naujÄ lentynÄ " + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naujÄ lentynÄ " +#~ "žemiau." + +#~ msgid "Put on the shelf!" +#~ msgstr "PadÄkite į lentynÄ !" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Lentynos turinÄios fragmentus " + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naujÄ lentynÄ " +#~ "žemiau." + +#~ msgid "Save all shelves" +#~ msgstr "Ä®raÅ¡yti visas lentynas" + +#~ msgid "Your shelves with books" +#~ msgstr "Tavo lentynos su knygomis" + +#~ msgid "remove" +#~ msgstr "paÅ¡alinti" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "" +#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naujÄ lentynÄ " +#~ "žemiau." + +#~ msgid "Create shelf" +#~ msgstr "Sukurti lentynÄ " + +#~ msgid "Enter a valid JSON value. Error: %s" +#~ msgstr "Ä®vesti atitinkamÄ vertybÄ JSON. Klaida: %s" + +#~ msgid "A4" +#~ msgstr "A4" + +#~ msgid "A5" +#~ msgstr "A5" + +#~ msgid "Incorrect customization options for PDF" +#~ msgstr "Neteisingi PDF tinkinimo pasirinkimai" + +#~ msgid "Bad method" +#~ msgstr "Blogas metodas" + +#~ msgid "title, author, theme/topic, epoch, kind, genre" +#~ msgstr "Pavadinimas , autorius, motyvas /tema, gadynÄ, \trÅ«Å¡is, sortas" + +#~ msgid "main page" +#~ msgstr "pagrindinis puslapis" + +#~ msgid "Show tag on main page" +#~ msgstr "Parodyk tagÄ pagrindinemÄ puslapyjÄ" + +#~ msgid "year of death" +#~ msgstr "mirimo metai" + +#~ msgid "short HTML" +#~ msgstr "trumpas HTML" + +#~ msgid "HTML file" +#~ msgstr "HTML failas" + +#~ msgid "PDF file" +#~ msgstr "PDF failas" + +#~ msgid "EPUB file" +#~ msgstr "EPUB failas" + +#~ msgid "ODT file" +#~ msgstr "ODT failas" + +#~ msgid "TXT file" +#~ msgstr "TXT failsa" + +#~ msgid "MP3 file" +#~ msgstr "MP3 failas" + +#~ msgid "OGG file" +#~ msgstr "OGG failas" + +#~ msgid "translator" +#~ msgstr "vertÄjas" + +#~ msgid "year of translator's death" +#~ msgstr "vertÄjo mirimo metai" + +#~ msgid "book stub" +#~ msgstr "knygos paskelbimas" + +#~ msgid "<p>To maintain your shelves you need to be logged in.</p>" +#~ msgstr "<p>Kad valdyti savo lentynom, turi prisijungti.</p>" + +#~ msgid "<p>Shelves were sucessfully saved.</p>" +#~ msgstr "<p>Lentynos liko užraÅ¡ytos.</p>" + +#~ msgid "Book was successfully removed from the shelf" +#~ msgstr "paÅ¡alinta" + +#~ msgid "<p>Shelf <strong>%s</strong> was successfully created</p>" +#~ msgstr "<p>Lentyna <strong>%s</strong> sukurta</p>" + +#~ msgid "<p>Shelf <strong>%s</strong> was successfully removed</p>" +#~ msgstr "<p>Lentyna <strong>%s</strong>paÅ¡alinta</p>" + +#~ msgid "Today is %(month)s, %(day)s." +#~ msgstr "Å iandien yra %(month)s, %(day)s." + +#~ msgid "content type" +#~ msgstr "turinio rÅ«Å¡is" + +#~ msgid "object id" +#~ msgstr "id obiektas" diff --git a/src/catalogue/locale/pl/LC_MESSAGES/django.mo b/src/catalogue/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..739f69b2d Binary files /dev/null and b/src/catalogue/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/pl/LC_MESSAGES/django.po b/src/catalogue/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..c1a8aac2b --- /dev/null +++ b/src/catalogue/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,948 @@ +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +msgid "" +msgstr "" +"Project-Id-Version: WolneLektury\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-10-16 13:54+0200\n" +"PO-Revision-Date: 2014-10-16 13:55+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: Fundacja Nowoczesna Polska <fundacja@nowoczesnapolska.org." +"pl>\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" +"X-Generator: Poedit 1.5.4\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" +"Creative Commons Uznanie autorstwa â Na tych samych warunkach 3.0 Unported" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "ProszÄ podaÄ XML." + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "Bez przypisów" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "Bez motywów" + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "Bez naszego kroju pisma" + +#: forms.py:49 +msgid "Without cover" +msgstr "Bez okÅadki" + +#: forms.py:52 +msgid "Leading" +msgstr "Interlinia" + +#: forms.py:53 +msgid "Normal leading" +msgstr "ZwykÅa interlinia" + +#: forms.py:54 +msgid "One and a half leading" +msgstr "PowiÄkszona interlinia" + +#: forms.py:55 +msgid "Double leading" +msgstr "Podwójna interlinia" + +#: forms.py:57 +msgid "Font size" +msgstr "Rozmiar tekstu" + +#: forms.py:58 +msgid "Default" +msgstr "DomyÅlnie" + +#: forms.py:59 +msgid "Big" +msgstr "Duży" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "Kolejka jest peÅna. ProszÄ spróbowaÄ ponownie później." + +#: models/book.py:43 models/collection.py:13 +msgid "title" +msgstr "tytuÅ" + +#: models/book.py:44 models/tag.py:35 +msgid "sort key" +msgstr "klucz sortowania" + +#: models/book.py:45 +#, fuzzy +msgid "sort key by author" +msgstr "Znalezieni autorzy" + +#: models/book.py:46 models/book.py:48 models/collection.py:14 +#: models/collection.py:17 models/tag.py:34 +msgid "slug" +msgstr "slug" + +#: models/book.py:49 +msgid "language code" +msgstr "Kod jÄzyka" + +#: models/book.py:51 models/book.py:160 models/collection.py:15 +#: models/tag.py:38 models/tag.py:144 +msgid "description" +msgstr "opis" + +#: models/book.py:52 models/book.py:53 models/bookmedia.py:34 models/tag.py:45 +#: models/tag.py:46 +msgid "creation date" +msgstr "data utworzenia" + +#: models/book.py:54 +msgid "parent number" +msgstr "numer rodzica" + +#: models/book.py:55 models/bookmedia.py:35 +msgid "extra information" +msgstr "dodatkowe informacje" + +#: models/book.py:60 +msgid "cover" +msgstr "okÅadka" + +#: models/book.py:65 +msgid "cover thumbnail" +msgstr "podglÄ d okÅadki" + +#: models/book.py:92 models/collection.py:20 +msgid "book" +msgstr "ksiÄ Å¼ka" + +#: models/book.py:93 +msgid "books" +msgstr "ksiÄ Å¼ki" + +#: models/book.py:258 +#, python-format +msgid "Book \"%s\" does not exist." +msgstr "Utwór \"%s\" nie istnieje." + +#: models/book.py:272 +#, python-format +msgid "Book %s already exists" +msgstr "KsiÄ Å¼ka %s już istnieje" + +#: models/book.py:519 +msgid "This work needs modernisation" +msgstr "Ten utwór wymaga uwspóÅczeÅnienia" + +#: models/book.py:546 models/bookmedia.py:27 +#, python-format +msgid "%s file" +msgstr "plik %s" + +#: models/bookmedia.py:30 +msgid "type" +msgstr "typ" + +#: models/bookmedia.py:31 models/source.py:12 models/tag.py:33 +msgid "name" +msgstr "nazwa" + +#: models/bookmedia.py:32 +msgid "file" +msgstr "plik" + +#: models/bookmedia.py:44 models/bookmedia.py:45 +msgid "book media" +msgstr "media ksiÄ Å¼ki" + +#: models/collection.py:18 +msgid "book slugs" +msgstr "slugi utworów" + +#: models/collection.py:20 models/tag.py:20 +msgid "kind" +msgstr "rodzaj" + +#: models/collection.py:24 +msgid "collection" +msgstr "kolekcja" + +#: models/collection.py:25 +msgid "collections" +msgstr "kolekcje" + +#: models/fragment.py:31 +msgid "fragment" +msgstr "fragment" + +#: models/fragment.py:32 +msgid "fragments" +msgstr "fragmenty" + +#: models/source.py:11 +msgid "network location" +msgstr "poÅożenie sieciowe" + +#: models/source.py:16 +msgid "source" +msgstr "źródÅo" + +#: models/source.py:17 +msgid "sources" +msgstr "źródÅa" + +#: models/tag.py:18 +msgid "author" +msgstr "autor" + +#: models/tag.py:19 +msgid "epoch" +msgstr "epoka" + +#: models/tag.py:21 +msgid "genre" +msgstr "gatunek" + +#: models/tag.py:22 +msgid "theme" +msgstr "motyw" + +#: models/tag.py:23 +msgid "set" +msgstr "póÅka" + +#: models/tag.py:24 +msgid "thing" +msgstr "przedmiot" + +#: models/tag.py:36 +msgid "category" +msgstr "kategoria" + +#: models/tag.py:66 +msgid "tag" +msgstr "tag" + +#: models/tag.py:67 +msgid "tags" +msgstr "tagi" + +#: templates/catalogue/audiobook_list.html:8 +#: templates/catalogue/audiobook_list.html:17 +msgid "Listing of all audiobooks" +msgstr "Spis wszystkich audiobooków" + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest MP3 audiobooks" +msgstr "Ostatnio dodane audiobooki w formacie MP3" + +#: templates/catalogue/audiobook_list.html:14 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "Ostatnio dodane audiobooki w formacie Ogg Vorbis" + +#: templates/catalogue/book_detail.html:23 +#: templates/catalogue/book_text.html:20 +msgid "Other versions" +msgstr "Inne wersje" + +#: templates/catalogue/book_detail.html:31 +#: templates/catalogue/tagged_object_list.html:75 +#: templates/catalogue/tagged_object_list.html:118 +msgid "See also" +msgstr "Zobacz też" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "Motyw" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "w utworze" + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "Utwór jest udostÄpniony na licencji:" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " +"Commons Attribution-ShareAlike 3.0</a>\n" +" license." +msgstr "" +"Ten utwór nie jest objÄty majÄ tkowym 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 <a href=" +"\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie autorstwa-" +"Na tych samych warunkach 3.0</a>." + +#: templates/catalogue/book_info.html:20 +msgid "Resource prepared based on:" +msgstr "Zasób opracowany na podstawie:" + +#: templates/catalogue/book_info.html:29 +msgid "Edited by:" +msgstr "Opracowanie redakcyjne:" + +#: templates/catalogue/book_info.html:31 +msgid "Edited and annotated by:" +msgstr "Opracowanie redakcyjne i przypisy:" + +#: templates/catalogue/book_info.html:37 +msgid "Publication funded by:" +msgstr "PublikacjÄ ufundowali i ufundowaÅy:" + +#: templates/catalogue/book_info.html:43 +msgid "Cover image by:" +msgstr "Ilustracja na okÅadce:" + +#: templates/catalogue/book_list.html:8 templates/catalogue/book_list.html:13 +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all works" +msgstr "Spis wszystkich utworów" + +#: templates/catalogue/book_list.html:26 +msgid "Table of Content" +msgstr "Spis treÅci" + +#: templates/catalogue/book_list.html:36 +msgid "â top â" +msgstr "â góra â" + +#: templates/catalogue/book_short.html:53 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "Epoka" + +#: templates/catalogue/book_short.html:61 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "Rodzaj" + +#: templates/catalogue/book_short.html:69 +msgid "Genre" +msgstr "Gatunek" + +#: templates/catalogue/book_short.html:78 +msgid "Language" +msgstr "JÄzyk" + +#: templates/catalogue/book_short.html:97 +msgid "Read online" +msgstr "Czytaj online" + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_wide.html:72 views.py:594 +msgid "Download" +msgstr "Pobierz" + +#: templates/catalogue/book_short.html:104 +msgid "to print" +msgstr "do druku" + +#: templates/catalogue/book_short.html:107 +msgid "for an e-book reader" +msgstr "na czytnik e-booków" + +#: templates/catalogue/book_short.html:110 +msgid "for Kindle" +msgstr "na Kindle" + +#: templates/catalogue/book_short.html:113 +msgid "FictionBook" +msgstr "FictionBook" + +#: templates/catalogue/book_short.html:116 +msgid "for advanced usage" +msgstr "do zadaÅ specjalnych" + +#: templates/catalogue/book_short.html:122 +msgid "Listen" +msgstr "SÅuchaj" + +#: templates/catalogue/book_text.html:26 +msgid "Table of contents" +msgstr "Spis treÅci" + +#: templates/catalogue/book_text.html:30 templatetags/catalogue_tags.py:336 +msgid "Themes" +msgstr "Motywy" + +#: templates/catalogue/book_text.html:34 templates/catalogue/book_text.html:91 +msgid "Settings" +msgstr "Ustawienia" + +#: templates/catalogue/book_text.html:38 +msgid "Edit. note" +msgstr "Nota red." + +#: templates/catalogue/book_text.html:42 +msgid "Infobox" +msgstr "Informacje" + +#: templates/catalogue/book_text.html:56 +#: templates/catalogue/viewer_base.html:53 +msgid "Close" +msgstr "Zamknij" + +#: templates/catalogue/book_text.html:57 +msgid "Please wait..." +msgstr "ProszÄ czekaÄâ¦" + +#: templates/catalogue/book_text.html:73 +msgid "Other versions of the book" +msgstr "Inne wersje utworu" + +#: templates/catalogue/book_text.html:74 +msgid "Close the other version" +msgstr "Zamknij drugÄ wersjÄ" + +#: templates/catalogue/book_text.html:92 +msgid "Display line numbers" +msgstr "WyÅwietlaj numeracjÄ" + +#: templates/catalogue/book_text.html:93 +msgid "Display themes" +msgstr "WyÅwietlaj motywy" + +#: templates/catalogue/book_text.html:94 +msgid "Display footnotes" +msgstr "WyÅwietlaj przypisy" + +#: templates/catalogue/book_wide.html:23 +#: templates/catalogue/tagged_object_list.html:61 +msgid "Motifs and themes" +msgstr "Motywy i tematy" + +#: templates/catalogue/book_wide.html:52 +msgid "See" +msgstr "Zobacz" + +#: templates/catalogue/book_wide.html:55 +msgid "Source" +msgstr "ŹródÅo" + +#: templates/catalogue/book_wide.html:55 +msgid "of the book" +msgstr "utworu" + +#: templates/catalogue/book_wide.html:56 +msgid "in" +msgstr "w serwisie" + +#: templates/catalogue/book_wide.html:58 +msgid "Source XML file" +msgstr "ŹródÅowy plik XML" + +#: templates/catalogue/book_wide.html:60 +msgid "Book on" +msgstr "Utwór na" + +#: templates/catalogue/book_wide.html:60 +msgid "Editor's Platform" +msgstr "Platformie Redakcyjnej" + +#: templates/catalogue/book_wide.html:63 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "Opis lektury w Lektury.Gazeta.pl" + +#: templates/catalogue/book_wide.html:66 +msgid "Book description on Wikipedia" +msgstr "Opis lektury w Wikipedii" + +#: templates/catalogue/book_wide.html:68 +msgid "Mix this book" +msgstr "Miksuj treÅÄ utworu" + +#: templates/catalogue/book_wide.html:76 +msgid "Download all audiobooks for this book" +msgstr "Pobierz wszystkie audiobooki tego utworu" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +#: templates/catalogue/menu.html:6 +msgid "Catalogue" +msgstr "Katalog" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "Pobierz katalog w formacie PDF." + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:20 +#: templates/catalogue/tagged_object_list.html:27 +#: templatetags/catalogue_tags.py:332 +msgid "Authors" +msgstr "Autorzy" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:28 +#: templates/catalogue/tagged_object_list.html:35 +#: templatetags/catalogue_tags.py:334 +msgid "Kinds" +msgstr "Rodzaje" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:36 +#: templates/catalogue/tagged_object_list.html:43 +#: templatetags/catalogue_tags.py:333 +msgid "Genres" +msgstr "Gatunki" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:44 +#: templates/catalogue/tagged_object_list.html:51 +#: templatetags/catalogue_tags.py:335 +msgid "Epochs" +msgstr "Epoki" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "Motywy i tematy" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:19 +msgid "Collections" +msgstr "Kolekcje" + +#: templates/catalogue/daisy_list.html:7 +#: templates/catalogue/daisy_list.html:13 +msgid "Listing of all DAISY files" +msgstr "Spis wszystkich plików DAISY" + +#: templates/catalogue/daisy_list.html:10 +msgid "Latest DAISY audiobooks" +msgstr "Ostatnio dodane audiobooki w formacie DAISY" + +#: 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:" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "RozwiÅ fragment" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "ZwiÅ fragment" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:6 +msgid "See full category" +msgstr "Zobacz caÅÄ kategoriÄ" + +#: templates/catalogue/menu.html:5 +msgid "Catalogue of the library" +msgstr "Katalog biblioteki" + +#: templates/catalogue/menu.html:13 templates/catalogue/menu.html.py:21 +msgid "Please waitâ¦" +msgstr "ProszÄ czekaÄâ¦" + +#: templates/catalogue/menu.html:26 +msgid "All books" +msgstr "Wszystkie utwory" + +#: templates/catalogue/menu.html:29 +msgid "Audiobooks" +msgstr "Audiobooki" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "DAISY" + +#: templates/catalogue/menu.html:36 templates/catalogue/tag_list_split.html:8 +msgid "Gallery" +msgstr "Galeria" + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "Utwór jest udostÄpniony na licencji" + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "Na podstawie" + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "O utworze" + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "Autor" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "W innych miejscach" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "ŹródÅo obrazu" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "Obraz na Platformie Redakcyjnej" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "ŹródÅowy plik XML" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "Motywy w utworze" + +#: templates/catalogue/player.html:11 templates/catalogue/viewer_base.html:9 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "Strona utworu" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "Pobierz jako" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "Czyta" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "Reżyseruje" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "Audiobooki przygotowane w ramach projektów:" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "%(cs)s, finansowanego przez %(fb)s" + +#: templates/catalogue/player.html:125 +#, 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/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "Audiobooki przygotowane w ramach projektu %(cs)s." + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +msgid "Recent audiobooks" +msgstr "Ostatnio dodane audiobooki" + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "Ostatnio dodane pliki DAISY" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +msgid "Recent publications" +msgstr "Ostatnie publikacje" + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" +" and <a href=\"%(d)s\">recent DAISY files</a>." +msgstr "" +"Zobacz też listÄ <a href=\"%(a)s\">ostatnio dodanych audiobooków</a>\n" +" i <a href=\"%(d)s\">plików DAISY</a>." + +#: templates/catalogue/search_multiple_hits.html:8 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "Szukaj" + +#: templates/catalogue/search_multiple_hits.html:14 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "Czy chodziÅo Ci o" + +#: templates/catalogue/search_multiple_hits.html:55 +msgid "Results by title" +msgstr "Znalezione w tytuÅach" + +#: templates/catalogue/search_multiple_hits.html:70 +msgid "Results by authors" +msgstr "Znalezieni autorzy" + +#: templates/catalogue/search_multiple_hits.html:83 +msgid "Results by translators" +msgstr "Znalezieni tÅumacze" + +#: templates/catalogue/search_multiple_hits.html:96 +msgid "Results in text" +msgstr "Znalezione w treÅci" + +#: templates/catalogue/search_multiple_hits.html:113 +msgid "Other results" +msgstr "Inne wyniki" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:162 +msgid "Sorry! Search cirteria did not match any resources." +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" +"\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." + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "Przepraszamy! Zapytanie musi zawieraÄ co najmniej dwa znaki." + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +msgid "Download a custom PDF" +msgstr "Stwórz wÅasny plik PDF" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "Wolna licencja" + +#: templates/catalogue/tag_list_split.html:3 +msgid "Literature" +msgstr "Literatura" + +#: templates/catalogue/tagged_object_list.html:79 +#: templates/catalogue/tagged_object_list.html:132 +msgid "in Culture.pl" +msgstr "w Culture.pl" + +#: templates/catalogue/tagged_object_list.html:84 +#: templates/catalogue/tagged_object_list.html:122 +msgid "in Lektury.Gazeta.pl" +msgstr "w serwisie Lektury.Gazeta.pl" + +#: templates/catalogue/tagged_object_list.html:89 +#: templates/catalogue/tagged_object_list.html:127 +msgid "in Wikipedia" +msgstr "w Wikipedii" + +#: templates/catalogue/viewer_base.html:55 +msgid "Loading" +msgstr "Åadowanie" + +#: views.py:558 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" +"WystÄ piÅ bÅÄ d: %(exception)s\n" +"\n" +"%(tb)s" + +#: views.py:559 +msgid "Book imported successfully" +msgstr "KsiÄ Å¼ka zaimportowana" + +#: views.py:561 +#, python-format +msgid "Error importing file: %r" +msgstr "BÅÄ d podczas importowania pliku: %r" + +#: views.py:593 +msgid "Download custom PDF" +msgstr "Stwórz wÅasny PDF" + +#~ msgid "book count" +#~ msgstr "liczba ksiÄ Å¼ek" + +#~ msgid "picture count" +#~ msgstr "liczba obrazów" + +#~ msgid "" +#~ "Book tags can't have attached links. Set them directly on the book " +#~ "instead of it's tag." +#~ msgstr "" +#~ "Tagi typu ksiÄ Å¼ka nie mogÄ mieÄ ustawionych linków. Ustaw je bezpoÅrednio " +#~ "dla ksiÄ Å¼ki, zamiast dla jej tagu." + +#~ msgid "Wikisource" +#~ msgstr "WikiźródÅa" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." +#~ msgstr "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." + +#~ 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Å." +#~ 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Å." + +#~ msgid "Listing of all pictures" +#~ msgstr "Spis wszystkich obrazów" + +#~ msgid "for a reader" +#~ msgstr "na czytnik" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "WrzuÄ lekturÄ na póÅkÄ!" + +#~ msgid "Create new shelf" +#~ msgstr "Utwórz nowÄ póÅkÄ" + +#~ 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." + +#~ msgid "Put on the shelf!" +#~ msgstr "WrzuÄ na póÅkÄ" + +#~ msgid "Shelves containing fragment" +#~ msgstr "PóÅki zawierajÄ ce fragment" + +#~ 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." + +#~ msgid "Save all shelves" +#~ msgstr "Zapisz póÅki" + +#~ msgid "Your shelves with books" +#~ msgstr "Twoje póÅki z lekturami" + +#~ msgid "remove" +#~ msgstr "usuÅ" + +#~ 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." + +#~ msgid "Create shelf" +#~ msgstr "Utwórz póÅkÄ" + +#~ msgid "Enter a valid JSON value. Error: %s" +#~ msgstr "Wprowadź prawidÅowÄ wartoÅÄ JSON. BÅÄ d: %s" + +#~ msgid "A4" +#~ msgstr "A4" + +#~ msgid "A5" +#~ msgstr "A5" + +#~ msgid "Incorrect customization options for PDF" +#~ msgstr "Niepoprawne opcje dla PDF" + +#~ msgid "Bad method" +#~ msgstr "ZÅa metoda" + +#~ msgid "title, author, theme/topic, epoch, kind, genre" +#~ msgstr "tytuÅ, autor, motyw/temat, epoka, rodzaj, gatunek" + +#~ msgid "ODT file" +#~ msgstr "Plik ODT" + +#~ msgid "MP3 file" +#~ msgstr "Plik MP3" + +#~ msgid "OGG file" +#~ msgstr "Plik OGG" + +#~ msgid "main page" +#~ msgstr "strona gÅówna" + +#~ msgid "Show tag on main page" +#~ msgstr "Pokazuj tag na stronie gÅównej" + +#~ msgid "HTML file" +#~ msgstr "Plik HTML" + +#~ msgid "PDF file" +#~ msgstr "Plik PDF" + +#~ msgid "EPUB file" +#~ msgstr "Plik EPUB" + +#~ msgid "TXT file" +#~ msgstr "Plik TXT" + +#~ msgid "sha-1 hash" +#~ msgstr "hash sha-1" + +#~ msgid "time" +#~ msgstr "czas" + +#~ msgid "<p>To maintain your shelves you need to be logged in.</p>" +#~ msgstr "<p>Aby zarzÄ dzaÄ swoimi póÅkami, musisz siÄ zalogowaÄ.</p>" + +#~ msgid "<p>Shelves were sucessfully saved.</p>" +#~ msgstr "<p>PóÅki zostaÅy zapisane.</p>" + +#~ msgid "Book was successfully removed from the shelf" +#~ msgstr "UsuniÄto" + +#~ msgid "<p>Shelf <strong>%s</strong> was successfully removed</p>" +#~ msgstr "<p>PóÅka <strong>%s</strong> zostaÅa usuniÄta</p>" + +#, fuzzy +#~ msgid "sort_key" +#~ msgstr "klucz sortowania" + +#~ msgid "year of death" +#~ msgstr "rok Åmierci" + +#~ msgid "short HTML" +#~ msgstr "krótki HTML" + +#~ msgid "year of translator's death" +#~ msgstr "rok Åmierci tÅumacza" + +#~ msgid "book stub" +#~ msgstr "zapowiedź ksiÄ Å¼ki" + +#~ msgid "<p>Shelf <strong>%s</strong> was successfully created</p>" +#~ msgstr "<p>PóÅka <strong>%s</strong> zostaÅa utworzona</p>" diff --git a/src/catalogue/locale/ru/LC_MESSAGES/django.mo b/src/catalogue/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..28bb9da3c Binary files /dev/null and b/src/catalogue/locale/ru/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/ru/LC_MESSAGES/django.po b/src/catalogue/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..dec617fc1 --- /dev/null +++ b/src/catalogue/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,874 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: 2013-04-09 10:40+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "УкажиÑе, пожалÑйÑÑа, XML." + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "Ðе показÑваÑÑ ÑноÑки" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "Ðе показÑваÑÑ ÑемÑ" + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "Ðе иÑполÑзÑйÑе Ð½Ð°Ñ ÑпеÑиалÑнÑй ÑÑиÑÑ" + +#: forms.py:49 +msgid "Without cover" +msgstr "" + +#: forms.py:52 +msgid "Leading" +msgstr "Ðедение" + +#: forms.py:53 +msgid "Normal leading" +msgstr "ÐоÑмалÑное ведение" + +#: forms.py:54 +msgid "One and a half leading" +msgstr "1,5 ведениÑ" + +#: forms.py:55 +msgid "Double leading" +msgstr "Ðвойное ведение" + +#: forms.py:57 +msgid "Font size" +msgstr "Ð Ð°Ð·Ð¼ÐµÑ ÑÑиÑÑа" + +#: forms.py:58 +msgid "Default" +msgstr "УмолÑание" + +#: forms.py:59 +msgid "Big" +msgstr "ÐолÑÑой" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "" + +#: views.py:585 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" +"ÐоÑвилаÑÑ Ð¾Ñибка: %(exception)s\n" +"\n" +"%(tb)s" + +#: views.py:586 +msgid "Book imported successfully" +msgstr "ÐÑ ÑдаÑно заимпоÑÑиÑовали книгÑ" + +#: views.py:588 +#, python-format +msgid "Error importing file: %r" +msgstr "ÐÑибка импоÑÑа Ñайла: %r" + +#: views.py:620 +msgid "Download custom PDF" +msgstr "СкаÑаÑÑ PDF полÑзоваÑелÑ" + +#: views.py:621 templates/catalogue/book_short.html:92 +#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 +msgid "Download" +msgstr "ÐагÑÑзиÑÑ" + +#: models/book.py:28 models/collection.py:11 +msgid "title" +msgstr "заглавие" + +#: models/book.py:29 models/tag.py:34 +msgid "sort key" +msgstr "клÑÑ ÑоÑÑиÑовки " + +#: models/book.py:30 models/book.py:32 models/collection.py:12 +#: models/collection.py:15 models/tag.py:33 +msgid "slug" +msgstr "slug" + +#: models/book.py:33 +msgid "language code" +msgstr "код ÑзÑка" + +#: models/book.py:35 models/book.py:146 models/collection.py:13 +#: models/tag.py:37 models/tag.py:94 +msgid "description" +msgstr "опиÑание" + +#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 +#: models/tag.py:47 +msgid "creation date" +msgstr "даÑа ÑозданиÑ" + +#: models/book.py:38 +msgid "parent number" +msgstr "Ð½Ð¾Ð¼ÐµÑ ÑодиÑелÑ" + +#: models/book.py:39 models/bookmedia.py:30 +msgid "extra information" +msgstr "дополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ" + +#: models/book.py:44 +msgid "cover" +msgstr "обложка" + +#: models/book.py:66 models/collection.py:18 models/tag.py:22 +msgid "book" +msgstr "книга" + +#: models/book.py:67 +msgid "books" +msgstr "книги" + +#: models/book.py:244 +#, fuzzy, python-format +msgid "Book \"%s\" does not exist." +msgstr "Ðнига Ñо slug = \"%s\" не ÑÑÑеÑÑвÑеÑ." + +#: models/book.py:258 +#, python-format +msgid "Book %s already exists" +msgstr "Ðнига %s Ñже ÑÑÑеÑÑвÑеÑ" + +#: models/book.py:599 models/bookmedia.py:23 +#, fuzzy, python-format +msgid "%s file" +msgstr "XML Ñайл" + +#: models/bookmedia.py:26 +msgid "type" +msgstr "Ñип" + +#: models/bookmedia.py:27 models/tag.py:32 +msgid "name" +msgstr "название" + +#: models/bookmedia.py:28 +#, fuzzy +msgid "file" +msgstr "XML Ñайл" + +#: models/bookmedia.py:39 models/bookmedia.py:40 +msgid "book media" +msgstr "аÑдиокнига" + +#: models/collection.py:16 +#, fuzzy +msgid "book slugs" +msgstr "анонÑÑ ÐºÐ½Ð¸Ð³Ð¸" + +#: models/collection.py:18 models/tag.py:18 +msgid "kind" +msgstr "ÑоÑма" + +#: models/collection.py:22 +msgid "collection" +msgstr "ÑбоÑ" + +#: models/collection.py:23 +msgid "collections" +msgstr "ÑбоÑÑ" + +#: models/fragment.py:32 +msgid "fragment" +msgstr "ÑÑагменÑ" + +#: models/fragment.py:33 +msgid "fragments" +msgstr "ÑÑагменÑÑ" + +#: models/tag.py:16 +msgid "author" +msgstr "авÑоÑ" + +#: models/tag.py:17 +msgid "epoch" +msgstr "ÑÐ¿Ð¾Ñ Ð°" + +#: models/tag.py:19 +msgid "genre" +msgstr "жанÑ" + +#: models/tag.py:20 +msgid "theme" +msgstr "моÑив" + +#: models/tag.py:21 +msgid "set" +msgstr "набоÑ" + +#: models/tag.py:23 +msgid "thing" +msgstr "" + +#: models/tag.py:35 +msgid "category" +msgstr "каÑегоÑиÑ" + +#: models/tag.py:40 +msgid "book count" +msgstr "ÑиÑло книг" + +#: models/tag.py:41 +msgid "picture count" +msgstr "" + +#: models/tag.py:65 +msgid "tag" +msgstr "Ñаг" + +#: models/tag.py:66 +msgid "tags" +msgstr "Ñаги" + +#: models/tag.py:83 +msgid "" +"Book tags can't have attached links. Set them directly on the book instead " +"of it's tag." +msgstr "" + +#: templates/catalogue/audiobook_list.html:7 +#: templates/catalogue/audiobook_list.html:16 +msgid "Listing of all audiobooks" +msgstr "СпиÑок ÑабоÑ" + +#: templates/catalogue/audiobook_list.html:12 +msgid "Latest MP3 audiobooks" +msgstr "ÐоÑледние MP3 аÑдиокниги" + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "ÐоÑледние Ogg Vorbis аÑдиокниги" + +#: templates/catalogue/audiobook_list.html:19 +msgid "" +"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +"Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +"Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." +msgstr "" +"ÐÑдиоÑека ÑколÑнÑÑ ÑÑений Фонда Nowoczesna Polska.\n" +". ÐожеÑе иÑполÑзоваÑÑ ÐµÐµ беÑплаÑно и без огÑаниÑений. \n" +"ÐÑдиокниги запиÑÑваÑÑ Ð¸Ð·Ð²ÐµÑÑнÑе акÑеÑÑ, в Ñом ÑиÑле ÐанÑÑа СÑенка и Ян ÐеÑек." + +#: templates/catalogue/book_detail.html:20 +#: templates/catalogue/tagged_object_list.html:74 +#: templates/catalogue/tagged_object_list.html:109 +msgid "See also" +msgstr "ÐодÑобнее" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "ÐоÑив" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "в ÑÑÑде" + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "РазÑеÑение на ÑабоÑÑ Ñо ÑÑоÑонÑ" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " +"Commons Attribution-ShareAlike 3.0</a>\n" +" license." +msgstr "" +"ÐÑÐ¾Ñ ÑÑÑд не заÑиÑен авÑоÑÑким пÑавом и ÑвлÑеÑÑÑ ÑаÑÑÑÑ \n" +"        обÑеÑÑвенного домена, ÑÑо обознаÑаеÑ, нем можно Ñвободно " +"ÑполÑзоваÑÑÑÑ, пÑбликоваÑÑ Ð¸ \n" +"        ÑаÑпÑоÑÑÑанÑÑÑ. ÐÑли еÑÑÑ ÐºÐ°ÐºÐ¸Ðµ-либо дополниÑелÑнÑе маÑеÑиалÑ, " +"заÑиÑеннÑе авÑоÑÑкими пÑавами \n" +"        пÑедоÑÑавленнÑе Ñ ÑÑой ÑабоÑой (напÑимеÑ, анноÑаÑии, моÑÐ¸Ð²Ñ Ð¸ Ñ." +"д.), ÑÑи \n" +"        маÑеÑÐ¸Ð°Ð»Ñ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ð¿Ð¾ лиÑензией \n" +"        <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\"> " +"Creative Commons Attribution-ShareAlike 3.0 </ a>" + +#: templates/catalogue/book_info.html:20 +#, fuzzy +msgid "Resource prepared based on:" +msgstr "ТекÑÑ Ð¿Ð¾Ð´Ð³Ð¾Ñовлен на оÑнове:" + +#: templates/catalogue/book_info.html:28 +msgid "Edited and annotated by:" +msgstr "Ðод ÑедакÑией и Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑиÑми:" + +#: templates/catalogue/book_info.html:33 +msgid "Publication funded by:" +msgstr "" + +#: templates/catalogue/book_info.html:39 +msgid "Cover image by:" +msgstr "" + +#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 +msgid "Listing of all works" +msgstr "СпиÑок ÑабоÑ" + +#: templates/catalogue/book_list.html:21 +msgid "Table of Content" +msgstr "Ðглавление" + +#: templates/catalogue/book_list.html:30 +msgid "â top â" +msgstr "â Ñоп â" + +#: templates/catalogue/book_short.html:59 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "ÑÐ¿Ð¾Ñ Ð°" + +#: templates/catalogue/book_short.html:66 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "ÑоÑма" + +#: templates/catalogue/book_short.html:73 +msgid "Genre" +msgstr "жанÑ" + +#: templates/catalogue/book_short.html:88 +msgid "Read online" +msgstr "ЧиÑаÑÑ Ð¾Ð½Ð»Ð°Ð¹Ð½" + +#: templates/catalogue/book_short.html:95 +#: templates/catalogue/book_text.html:40 +msgid "to print" +msgstr "пеÑаÑаÑÑ" + +#: templates/catalogue/book_short.html:98 +msgid "for an e-book reader" +msgstr "Ð´Ð»Ñ ÑиÑаÑÐµÐ»Ñ ÑлекÑÑонной книги" + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_text.html:46 +msgid "for Kindle" +msgstr "Ð´Ð»Ñ Ðиндле" + +#: templates/catalogue/book_short.html:104 +#: templates/catalogue/book_text.html:49 +msgid "FictionBook" +msgstr "" + +#: templates/catalogue/book_short.html:107 +#: templates/catalogue/book_text.html:52 +msgid "for advanced usage" +msgstr "пÑодвинÑÑое иÑполÑзование" + +#: templates/catalogue/book_short.html:113 +#: templates/catalogue/book_text.html:30 +msgid "Listen" +msgstr "ÐоÑлÑÑайÑе" + +#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 +msgid "Wolne Lektury" +msgstr "на WolneLektury.pl" + +#: templates/catalogue/book_text.html:22 +msgid "Table of contents" +msgstr "Ðглавление" + +#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 +msgid "Themes" +msgstr "ÐоÑивÑ" + +#: templates/catalogue/book_text.html:24 +msgid "Edit. note" +msgstr "ÐзмениÑÑ Ð¿ÑимеÑание" + +#: templates/catalogue/book_text.html:25 +msgid "Infobox" +msgstr "ÐнÑобокÑ" + +#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "ÐозÑаÑиÑеÑÑ Ð½Ð° ÑÐ°Ð¹Ñ ÐºÐ½Ð¸Ð³Ð¸" + +#: templates/catalogue/book_text.html:43 +msgid "for a reader" +msgstr "Ð´Ð»Ñ ÑиÑаÑелÑ" + +#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 +msgid "Download all audiobooks for this book" +msgstr "СкаÑаÑÑ Ð²Ñе книги Ñ ÑÑой полки" + +#: templates/catalogue/book_wide.html:22 +#: templates/catalogue/tagged_object_list.html:60 +msgid "Motifs and themes" +msgstr "ÐоÑÐ¸Ð²Ñ Ð¸ ÑемÑ" + +#: templates/catalogue/book_wide.html:44 +msgid "See" +msgstr "ÐоÑмоÑÑиÑе" + +#: templates/catalogue/book_wide.html:47 +msgid "Source" +msgstr "ÐÑÑоÑник" + +#: templates/catalogue/book_wide.html:47 +msgid "of the book" +msgstr "данной книги" + +#: templates/catalogue/book_wide.html:49 +msgid "Source XML file" +msgstr "ÐÑÑ Ð¾Ð´Ð½Ñй Ñайл" + +#: templates/catalogue/book_wide.html:51 +msgid "Book on" +msgstr "Ðнига на" + +#: templates/catalogue/book_wide.html:51 +msgid "Editor's Platform" +msgstr "ÐлаÑÑоÑма ÑедакÑоÑов" + +#: templates/catalogue/book_wide.html:54 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "ÐпиÑание книги на Lektury.Gazeta.pl" + +#: templates/catalogue/book_wide.html:57 +msgid "Book description on Wikipedia" +msgstr "ÐпиÑание книги на Wikipedia" + +#: templates/catalogue/book_wide.html:59 +msgid "Mix this book" +msgstr "данной книги" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +msgid "Catalogue" +msgstr "ÐаÑалог" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "СкаÑаÑÑ ÐºÐ°Ñалог в PDF ÑоÑмаÑе." + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:17 +#: templates/catalogue/tagged_object_list.html:26 +#: templatetags/catalogue_tags.py:416 +msgid "Authors" +msgstr "ÐвÑоÑÑ" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:25 +#: templates/catalogue/tagged_object_list.html:34 +#: templatetags/catalogue_tags.py:418 +msgid "Kinds" +msgstr "ФоÑмÑ" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:33 +#: templates/catalogue/tagged_object_list.html:42 +#: templatetags/catalogue_tags.py:417 +msgid "Genres" +msgstr "ÐанÑÑ" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:41 +#: templates/catalogue/tagged_object_list.html:50 +#: templatetags/catalogue_tags.py:419 +msgid "Epochs" +msgstr "ÐÐ¿Ð¾Ñ Ð¸" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "ÐоÑÐ¸Ð²Ñ Ð¸ ÑемÑ" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 +#, fuzzy +msgid "Collections" +msgstr "ÑбоÑÑ" + +#: templates/catalogue/daisy_list.html:6 +#: templates/catalogue/daisy_list.html:12 +msgid "Listing of all DAISY files" +msgstr "СпиÑок вÑÐµÑ DAISY Ñайлов" + +#: templates/catalogue/daisy_list.html:9 +msgid "Latest DAISY audiobooks" +msgstr "ÐоÑледние DAISY аÑдиокниги" + +#: templates/catalogue/daisy_list.html:15 +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Å." +msgstr "" +"СиÑÑема DAISY ÑÑо извеÑÑнÑй во вÑем миÑе ÑоÑÐ¼Ð°Ñ Ð·Ð°Ð¿Ð¸Ñи книг\n" +", пÑедназнаÑен Ð´Ð»Ñ Ð»Ñдей Ñ Ð¿Ð»Ð¾Ñ Ð¸Ð¼ зÑением, Ð¿Ð»Ð¾Ñ Ð¾ видÑÑÐ¸Ñ Ð¸ дÑÑÐ³Ð¸Ñ Ð»Ð¸Ñ\n" +", имеÑÑÐ¸Ñ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ ÑÑением. Ðнигами можно полÑзоваÑÑÑÑ Ð±ÐµÑплаÑно и без " +"огÑаниÑений." + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "" +"ÐÑиÑеÑÐ¸Ñ ÑвлÑÑÑÑÑ Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°ÑнÑми. ÐожалÑйÑÑа, вÑбеÑиÑе один из ÑледÑÑÑÐ¸Ñ " +"ваÑианÑов:" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "РаÑÑÑнÑÑÑ ÑÑагменÑ" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "СкÑÑÑÑ ÑÑагменÑ" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:4 +msgid "See full category" +msgstr "ÐÑÑ ÐºÐ°ÑегоÑиÑ" + +#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 +msgid "Please waitâ¦" +msgstr "" + +#: templates/catalogue/menu.html:24 +msgid "All books" +msgstr "ÐÑе книги" + +#: templates/catalogue/menu.html:28 +msgid "Audiobooks" +msgstr "ÐÑдиокниги" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "ÐаиÑÑ" + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "РазÑеÑение на ÑабоÑÑ Ñо ÑÑоÑонÑ" + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "ÐÑнованнÑй на" + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "ÐодÑобнее" + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "ÐвÑоÑ" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "дÑÑгие ÑеÑÑÑÑÑ" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "ÐÑÑоÑник книги" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "ÐзобÑажение на плаÑÑоÑме ÑедакÑоÑов" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "ÐÑоÑмоÑÑ XML-иÑÑоÑник" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "Ð¢ÐµÐ¼Ñ ÑÑÑда" + +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all pictures" +msgstr "СпиÑок ÑабоÑ" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "СкаÑаÑÑ" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "ÐÑÑиÑÑ" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "ÑежиÑÑеÑ" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "ÐÑдиокниги бÑли подгоÑÐ¾Ð²Ð»ÐµÐ½Ñ Ð² ÑÐ°Ð¼ÐºÐ°Ñ Ð¿ÑоекÑа:" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "%(cs)s, ÑинанÑиÑÑемого %(fb)s" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "" +"ÐÑдиокниги бÑли подгоÑÐ¾Ð²Ð»ÐµÐ½Ñ Ð² ÑÐ°Ð¼ÐºÐ°Ñ %(cs)s пÑоекÑa, ÑинанÑиÑÑемого %(fb)s." + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "ÐÑдиокниги бÑли подгоÑÐ¾Ð²Ð»ÐµÐ½Ñ Ð² ÑÐ°Ð¼ÐºÐ°Ñ %(cs)s пÑоекÑa." + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +#, fuzzy +msgid "Recent audiobooks" +msgstr "ÐоÑледние MP3 аÑдиокниги" + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +#, fuzzy +msgid "Recent publications" +msgstr "идÑи к пÑблиÑной домене" + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" +" and <a href=\"%(d)s\">recent DAISY files</a>." +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:5 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "ÐоиÑк" + +#: templates/catalogue/search_multiple_hits.html:11 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "ÐÑ Ð¸Ð¼ÐµÐ»Ð¸ в видÑ" + +#: templates/catalogue/search_multiple_hits.html:52 +msgid "Results by title" +msgstr "РезÑлÑÑаÑÑ Ð¿Ð¾ заглавиÑм" + +#: templates/catalogue/search_multiple_hits.html:67 +msgid "Results by authors" +msgstr "РезÑлÑÑаÑÑ Ð¿Ð¾ авÑоÑам" + +#: templates/catalogue/search_multiple_hits.html:80 +#, fuzzy +msgid "Results by translators" +msgstr "пеÑеводÑик" + +#: templates/catalogue/search_multiple_hits.html:93 +msgid "Results in text" +msgstr "РезÑлÑÑаÑÑ Ð² ÑекÑÑÐ°Ñ " + +#: templates/catalogue/search_multiple_hits.html:110 +msgid "Other results" +msgstr "дÑÑгие ÑеÑÑÑÑÑ" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:151 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "ÐзвиниÑе! ÐÑиÑеÑий поиÑка не ÑооÑвеÑÑÑвÑÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ð¼ ÑеÑÑÑÑам." + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"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 "" +"ÐÑкаÑÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ Ð´Ð²Ð¸Ð³Ð°ÑÐµÐ»Ñ Ð¸ÑполÑзÑÑ ÐºÑиÑеÑии: заглавие, авÑоÑ, Ñема/ÑÑжеÑ, " +"ÑÐ¿Ð¾Ñ Ð°, ÑоÑма и жанÑ.\n" +"\t\tÐока Ð¼Ñ Ð½Ðµ поддеÑживаем поиÑка вÑего ÑекÑÑа." + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "" +"ÐзвиниÑе! У иÑкаемого вопÑоÑа Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿Ð¾ кÑайней меÑе два ÑвойÑÑва." + +#: templates/catalogue/tag_list_split.html:5 +msgid "Literature" +msgstr "" + +#: templates/catalogue/tag_list_split.html:14 +msgid "Gallery" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:78 +msgid "in Culture.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:113 +msgid "in Lektury.Gazeta.pl" +msgstr "на Lektury.Gazeta.pl" + +#: templates/catalogue/tagged_object_list.html:88 +#: templates/catalogue/tagged_object_list.html:118 +msgid "in Wikipedia" +msgstr "в Ðикипедии" + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +msgid "Download a custom PDF" +msgstr "СкаÑаÑÑ PDF" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "ÐоÑÑавÑÑе ÐºÐ½Ð¸Ð³Ñ Ð½Ð° полкÑ!" + +#~ msgid "Create new shelf" +#~ msgstr "СоздаÑÑ Ð½Ð¾Ð²ÑÑ Ð¿Ð¾Ð»ÐºÑ" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "У Ð²Ð°Ñ Ð½ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ Ð¿Ð¾Ð»Ð¾Ðº. ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð¾Ð´Ð½Ñ Ð½Ð¸Ð¶Ðµ." + +#~ msgid "Put on the shelf!" +#~ msgstr "ÐоÑÑавÑÑе на полкÑ!" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Ðолки Ñ ÑÑагменÑом" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "У Ð²Ð°Ñ Ð½ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð¹ полки. ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð¾Ð´Ð½Ñ Ð½Ð¸Ð¶Ðµ." + +#~ msgid "Save all shelves" +#~ msgstr "Ð¡Ð¾Ñ ÑаниÑÑ Ð²Ñе полки" + +#~ msgid "Your shelves with books" +#~ msgstr "ÐаÑи книжнÑе полки" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "У Ð²Ð°Ñ Ð½ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ Ð¿Ð¾Ð»Ð¾Ðº. ÐÑли Ñ Ð¾ÑиÑе, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð¾Ð´Ð½Ñ Ð½Ð¸Ð¶Ðµ." + +#~ msgid "Create shelf" +#~ msgstr "СоздаÑÑ Ð¿Ð¾Ð»ÐºÑ" + +#~ msgid "Enter a valid JSON value. Error: %s" +#~ msgstr "ÐвеÑÑи пÑавилÑное JSON знаÑение. ÐÑибка: %s" + +#~ msgid "A4" +#~ msgstr "b2" + +#~ msgid "A5" +#~ msgstr "A5" + +#~ msgid "Incorrect customization options for PDF" +#~ msgstr "ÐепÑавилÑнÑе паÑамеÑÑÑ Ð½Ð°ÑÑÑойки Ð´Ð»Ñ PDF" + +#~ msgid "Bad method" +#~ msgstr "ÐÐ»Ð¾Ñ Ð¾Ð¹ меÑод" + +#~ msgid "title, author, theme/topic, epoch, kind, genre" +#~ msgstr "Ðаглавие, авÑоÑ, моÑив/Ñема, ÑÐ¿Ð¾Ñ Ð°, ÑоÑма, жанÑ" + +#~ msgid "main page" +#~ msgstr "Ð³Ð»Ð°Ð²Ð½Ð°Ñ ÑÑÑаниÑа" + +#~ msgid "Show tag on main page" +#~ msgstr "ÐоказаÑÑ Ñаг на главной ÑÑÑаниÑе" + +#~ msgid "year of death" +#~ msgstr "год ÑмеÑÑи" + +#~ msgid "short HTML" +#~ msgstr "коÑоÑкий HTML" + +#~ msgid "HTML file" +#~ msgstr "HTML Ñайл" + +#~ msgid "PDF file" +#~ msgstr "PDF Ñайл" + +#~ msgid "EPUB file" +#~ msgstr "EPUB Ñайл" + +#~ msgid "ODT file" +#~ msgstr "ODT Ñайл" + +#~ msgid "TXT file" +#~ msgstr "TXT Ñайл" + +#~ msgid "MP3 file" +#~ msgstr "MP3 Ñайл" + +#~ msgid "OGG file" +#~ msgstr "OGG Ñайл" + +#~ msgid "year of translator's death" +#~ msgstr "год ÑмеÑÑи пеÑеводÑика" + +#~ msgid "book stub" +#~ msgstr "Ð°Ð½Ð¾Ð½Ñ ÐºÐ½Ð¸Ð³Ð¸" + +#, fuzzy +#~ msgid "time" +#~ msgstr "моÑив" + +#~ msgid "<p>To maintain your shelves you need to be logged in.</p>" +#~ msgstr "<p>ÐаÑегиÑÑÑÑйÑеÑÑ, ÑÑÐ¾Ð±Ñ ÑÐ¾Ñ ÑаниÑÑ Ñвои полки.</p>" + +#~ msgid "<p>Shelves were sucessfully saved.</p>" +#~ msgstr "<p>Ðолки - ÑдаÑно ÑÐ¾Ñ ÑаненÑ.</p>" + +#~ msgid "Book was successfully removed from the shelf" +#~ msgstr "Ðнига бÑла ÑдаÑно Ñдалена Ñ Ð¿Ð¾Ð»ÐºÐ¸" + +#~ msgid "<p>Shelf <strong>%s</strong> was successfully created</p>" +#~ msgstr "<p>Ðолка <strong>%s</strong>бÑла ÑдаÑно Ñоздана</p>" + +#~ msgid "<p>Shelf <strong>%s</strong> was successfully removed</p>" +#~ msgstr "<p>Ðолка<strong>%s</strong>бÑла ÑдаÑно Ñдалена." + +#~ msgid "Today is %(month)s, %(day)s." +#~ msgstr "Ð¡ÐµÐ³Ð¾Ð´Ð½Ñ %(month)s, %(day)s." + +#~ msgid "content type" +#~ msgstr "Ñип ÑодеÑжаниÑ" + +#~ msgid "object id" +#~ msgstr "ID обÑекÑа" diff --git a/src/catalogue/locale/uk/LC_MESSAGES/django.mo b/src/catalogue/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..cea863ee3 Binary files /dev/null and b/src/catalogue/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/catalogue/locale/uk/LC_MESSAGES/django.po b/src/catalogue/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..6424340b4 --- /dev/null +++ b/src/catalogue/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,870 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:19+0100\n" +"PO-Revision-Date: 2013-04-09 10:40+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: constants.py:10 +msgid "Creative Commons Attribution-ShareAlike 3.0 Unported" +msgstr "" + +#: forms.py:27 +msgid "Please supply an XML." +msgstr "ÐведÑÑÑ Ð±ÑÐ´Ñ Ð»Ð°Ñка XML." + +#: forms.py:46 +msgid "Don't show footnotes" +msgstr "Ð¡Ñ Ð¾Ð²Ð°Ñи пÑимÑÑки" + +#: forms.py:47 +msgid "Don't disply themes" +msgstr "Ð¡Ñ Ð¾Ð²Ð°Ñи Ñеми" + +#: forms.py:48 +msgid "Don't use our custom font" +msgstr "Ðе викоÑиÑÑовÑваÑи наÑого наÑÑÑоÑваного ÑÑиÑÑÑ" + +#: forms.py:49 +msgid "Without cover" +msgstr "" + +#: forms.py:52 +msgid "Leading" +msgstr "Leading" + +#: forms.py:53 +msgid "Normal leading" +msgstr "Normal leading" + +#: forms.py:54 +msgid "One and a half leading" +msgstr "One and a half leading" + +#: forms.py:55 +msgid "Double leading" +msgstr "Double leading" + +#: forms.py:57 +msgid "Font size" +msgstr "РозмÑÑ ÑÑиÑÑÑ" + +#: forms.py:58 +msgid "Default" +msgstr "Ðа ÑмовÑаннÑм" + +#: forms.py:59 +msgid "Big" +msgstr "Ðеликий" + +#: forms.py:82 +msgid "Queue is full. Please try again later." +msgstr "" + +#: views.py:585 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" +"СиÑÑема виÑвила Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑ %(exception)s\n" +"\n" +"%(tb)s" + +#: views.py:586 +msgid "Book imported successfully" +msgstr "ÐÐ½Ð¸Ð¶ÐºÑ ÑÑпÑÑно заванÑажено" + +#: views.py:588 +#, python-format +msgid "Error importing file: %r" +msgstr "Ðомилка в заванÑÐ°Ð¶ÐµÐ½Ð½Ñ Ñайла: %r" + +#: views.py:620 +msgid "Download custom PDF" +msgstr "ÐаванÑажиÑи наÑÑÑоÑваний PDF" + +#: views.py:621 templates/catalogue/book_short.html:92 +#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63 +msgid "Download" +msgstr "ÐаванÑажиÑи" + +#: models/book.py:28 models/collection.py:11 +msgid "title" +msgstr "заголовок" + +#: models/book.py:29 models/tag.py:34 +msgid "sort key" +msgstr "клÑÑ ÑоÑÑÑваннÑ" + +#: models/book.py:30 models/book.py:32 models/collection.py:12 +#: models/collection.py:15 models/tag.py:33 +msgid "slug" +msgstr "slug" + +#: models/book.py:33 +msgid "language code" +msgstr "мовний код" + +#: models/book.py:35 models/book.py:146 models/collection.py:13 +#: models/tag.py:37 models/tag.py:94 +msgid "description" +msgstr "опиÑ" + +#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46 +#: models/tag.py:47 +msgid "creation date" +msgstr "даÑа ÑÑвоÑеннÑ" + +#: models/book.py:38 +msgid "parent number" +msgstr "Ð½Ð¾Ð¼ÐµÑ Ð±Ð°ÑÑка" + +#: models/book.py:39 models/bookmedia.py:30 +msgid "extra information" +msgstr "додаÑкова ÑнÑоÑмаÑÑÑ" + +#: models/book.py:44 +msgid "cover" +msgstr "обкладинка" + +#: models/book.py:66 models/collection.py:18 models/tag.py:22 +msgid "book" +msgstr "книжка" + +#: models/book.py:67 +msgid "books" +msgstr "книжки" + +#: models/book.py:244 +#, python-format +msgid "Book \"%s\" does not exist." +msgstr "Ðнижка \"%s\" не ÑÑнÑÑ." + +#: models/book.py:258 +#, python-format +msgid "Book %s already exists" +msgstr "Ðнижка %s вже ÑÑнÑÑ" + +#: models/book.py:599 models/bookmedia.py:23 +#, python-format +msgid "%s file" +msgstr "Ñайл %s" + +#: models/bookmedia.py:26 +msgid "type" +msgstr "Ñип" + +#: models/bookmedia.py:27 models/tag.py:32 +msgid "name" +msgstr "назва" + +#: models/bookmedia.py:28 +msgid "file" +msgstr "Ñайл" + +#: models/bookmedia.py:39 models/bookmedia.py:40 +msgid "book media" +msgstr "book media" + +#: models/collection.py:16 +msgid "book slugs" +msgstr "slugs книжок" + +#: models/collection.py:18 models/tag.py:18 +msgid "kind" +msgstr "ÑÑд" + +#: models/collection.py:22 +msgid "collection" +msgstr "колекÑÑÑ" + +#: models/collection.py:23 +msgid "collections" +msgstr "колекÑÑÑ" + +#: models/fragment.py:32 +msgid "fragment" +msgstr "ÑÑагменÑ" + +#: models/fragment.py:33 +msgid "fragments" +msgstr "ÑÑагменÑи" + +#: models/tag.py:16 +msgid "author" +msgstr "авÑоÑ" + +#: models/tag.py:17 +msgid "epoch" +msgstr "ÐµÐ¿Ð¾Ñ Ð°" + +#: models/tag.py:19 +msgid "genre" +msgstr "жанÑ" + +#: models/tag.py:20 +msgid "theme" +msgstr "Ñема" + +#: models/tag.py:21 +msgid "set" +msgstr "вибÑÑ" + +#: models/tag.py:23 +msgid "thing" +msgstr "" + +#: models/tag.py:35 +msgid "category" +msgstr "каÑегоÑÑÑ" + +#: models/tag.py:40 +msgid "book count" +msgstr "кÑлÑкÑÑÑÑ ÐºÐ½Ð¸Ð¶Ð¾Ðº" + +#: models/tag.py:41 +msgid "picture count" +msgstr "" + +#: models/tag.py:65 +msgid "tag" +msgstr "ÑеÒ" + +#: models/tag.py:66 +msgid "tags" +msgstr "ÑеÒи" + +#: models/tag.py:83 +msgid "" +"Book tags can't have attached links. Set them directly on the book instead " +"of it's tag." +msgstr "" + +#: templates/catalogue/audiobook_list.html:7 +#: templates/catalogue/audiobook_list.html:16 +msgid "Listing of all audiobooks" +msgstr "СпиÑок ÑÑÑÑ Ð°ÑдÑокниг" + +#: templates/catalogue/audiobook_list.html:12 +msgid "Latest MP3 audiobooks" +msgstr "ÐÑÑÐ°Ð½Ð½Ñ Ð°ÑдÑокниги MP3" + +#: templates/catalogue/audiobook_list.html:13 +msgid "Latest Ogg Vorbis audiobooks" +msgstr "ÐÑÑÐ°Ð½Ð½Ñ Ð°ÑдÑокниги Ogg Vorbis" + +#: templates/catalogue/audiobook_list.html:19 +msgid "" +"Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +"Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +"Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." +msgstr "" +"ÐÑдÑоÑека ÑкÑлÑÐ½Ð¾Ñ Ð»ÑÑеÑаÑÑÑи Ð¤Ð¾Ð½Ð´Ñ Ð¡ÑÑаÑна ÐолÑÑа (Fundacja Nowoczesna " +"Polska).\n" +"Ðожна Ð½ÐµÑ ÐºÐ¾ÑиÑÑÑваÑиÑÑ Ð±ÐµÐ·ÐºÐ¾ÑÑовно Ñ Ð±ÐµÐ· обмеженÑ.\n" +"ÐÑдÑокниги заÑиÑÑÑÑÑ Ð²ÑÐ´Ð¾Ð¼Ñ Ð°ÐºÑоÑи, ÑеÑед ÑÐºÐ¸Ñ ÐанÑÑа СÑенка Ñа Ян ÐеÑек." + +#: templates/catalogue/book_detail.html:20 +#: templates/catalogue/tagged_object_list.html:74 +#: templates/catalogue/tagged_object_list.html:109 +msgid "See also" +msgstr "ÐивÑÑÑÑÑ Ñакож" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:11 +msgid "Theme" +msgstr "Тема" + +#: templates/catalogue/book_fragments.html:5 +#: templates/catalogue/book_fragments.html:13 +msgid "in work " +msgstr "Ñ ÑвоÑÑ" + +#: templates/catalogue/book_info.html:6 +msgid "This work is licensed under:" +msgstr "Цей ÑвÑÑ Ñ Ð´Ð¾ÑÑÑпним на лÑÑензÑÑ:" + +#: templates/catalogue/book_info.html:9 +msgid "" +"This work isn't covered by copyright and is part of the\n" +" public domain, which means it can be freely used, published and\n" +" distributed. If there are any additional copyrighted materials\n" +" provided with this work (such as annotations, motifs etc.), those\n" +" materials are licensed under the \n" +" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " +"Commons Attribution-ShareAlike 3.0</a>\n" +" license." +msgstr "" +"Цей ÑвÑÑ Ð½Ðµ Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом Ñ Ñ ÑаÑÑиноÑ\n" +" ÑÑÑпÑлÑного надбаннÑ, ÑÐ¾Ð¼Ñ Ð¹Ð¾Ð³Ð¾ можна викоÑиÑÑовÑваÑи без обмеженÑ, " +"пÑблÑкÑваÑи, Ñа\n" +" ÑозповÑÑджÑваÑи. ЯкÑо ÑвÑÑ Ð¼ÑÑÑиÑÑ Ð´Ð¾Ð´Ð°ÑÐºÐ¾Ð²Ñ Ð¼Ð°ÑеÑÑали, коÑÑÑ " +"Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом\n" +" (напÑиклад пÑимÑÑки, моÑиви, ÑоÑо), доÑÑÑп до ÑÐ¸Ñ \n" +" додаÑÐºÐ¾Ð²Ð¸Ñ Ð¼Ð°ÑеÑÑалÑв надаÑÑÑÑÑ Ð½Ð° ÑÐ¼Ð¾Ð²Ð°Ñ Ð»ÑÑензÑÑ \n" +" <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " +"Commons Ðз зазнаÑеннÑм ÑÐ¼ÐµÐ½Ñ Ð°Ð²ÑоÑа â Ðа ÑÐ¸Ñ Ð¶Ðµ ÑÐ¼Ð¾Ð²Ð°Ñ 3.0</a>\n" +" ." + +#: templates/catalogue/book_info.html:20 +#, fuzzy +msgid "Resource prepared based on:" +msgstr "ТекÑÑ Ð¿ÑдгоÑовлено на оÑновÑ" + +#: templates/catalogue/book_info.html:28 +msgid "Edited and annotated by:" +msgstr "РедагÑÐ²Ð°Ð½Ð½Ñ Ñа пÑимÑÑки:" + +#: templates/catalogue/book_info.html:33 +msgid "Publication funded by:" +msgstr "" + +#: templates/catalogue/book_info.html:39 +msgid "Cover image by:" +msgstr "" + +#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10 +msgid "Listing of all works" +msgstr "СпиÑок ÑÑÑÑ ÑвоÑÑв" + +#: templates/catalogue/book_list.html:21 +msgid "Table of Content" +msgstr "ÐмÑÑÑ" + +#: templates/catalogue/book_list.html:30 +msgid "â top â" +msgstr "â вгоÑÑ â" + +#: templates/catalogue/book_short.html:59 +#: templates/catalogue/picture_detail.html:54 +msgid "Epoch" +msgstr "ÐÐ¿Ð¾Ñ Ð°" + +#: templates/catalogue/book_short.html:66 +#: templates/catalogue/picture_detail.html:60 +msgid "Kind" +msgstr "Ð Ñд" + +#: templates/catalogue/book_short.html:73 +msgid "Genre" +msgstr "ÐанÑ" + +#: templates/catalogue/book_short.html:88 +msgid "Read online" +msgstr "ЧиÑаÑи онлайн" + +#: templates/catalogue/book_short.html:95 +#: templates/catalogue/book_text.html:40 +msgid "to print" +msgstr "до дÑÑкÑ" + +#: templates/catalogue/book_short.html:98 +msgid "for an e-book reader" +msgstr "Ð´Ð»Ñ ÑÑдеÑа елекÑÑÐ¾Ð½Ð½Ð¸Ñ ÐºÐ½Ð¸Ð³" + +#: templates/catalogue/book_short.html:101 +#: templates/catalogue/book_text.html:46 +msgid "for Kindle" +msgstr "на Kindle" + +#: templates/catalogue/book_short.html:104 +#: templates/catalogue/book_text.html:49 +msgid "FictionBook" +msgstr "" + +#: templates/catalogue/book_short.html:107 +#: templates/catalogue/book_text.html:52 +msgid "for advanced usage" +msgstr "Ð´Ð»Ñ ÑозÑиÑеного коÑиÑÑÑваннÑ" + +#: templates/catalogue/book_short.html:113 +#: templates/catalogue/book_text.html:30 +msgid "Listen" +msgstr "ÐоÑлÑÑ Ð°Ñи" + +#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/catalogue/book_text.html:22 +msgid "Table of contents" +msgstr "ÐмÑÑÑ" + +#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420 +msgid "Themes" +msgstr "Теми" + +#: templates/catalogue/book_text.html:24 +msgid "Edit. note" +msgstr "РедакÑоÑÑÑкий коменÑаÑ" + +#: templates/catalogue/book_text.html:25 +msgid "Infobox" +msgstr "ÐнÑобокÑ" + +#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34 +msgid "Book's page" +msgstr "СÑоÑÑнка книжки" + +#: templates/catalogue/book_text.html:43 +msgid "for a reader" +msgstr "на ÑÑдеÑ" + +#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67 +msgid "Download all audiobooks for this book" +msgstr "ÐаванÑажиÑи ÑÑÑ Ð°ÑдÑокниги Ð´Ð»Ñ ÑÑÑÑ ÐºÐ½Ð¸Ð¶ÐºÐ¸" + +#: templates/catalogue/book_wide.html:22 +#: templates/catalogue/tagged_object_list.html:60 +msgid "Motifs and themes" +msgstr "ÐоÑиви Ñа Ñеми" + +#: templates/catalogue/book_wide.html:44 +msgid "See" +msgstr "ÐивиÑÑ" + +#: templates/catalogue/book_wide.html:47 +msgid "Source" +msgstr "ÐжеÑело" + +#: templates/catalogue/book_wide.html:47 +msgid "of the book" +msgstr "книжки" + +#: templates/catalogue/book_wide.html:49 +msgid "Source XML file" +msgstr "Файл джеÑела XML" + +#: templates/catalogue/book_wide.html:51 +msgid "Book on" +msgstr "Ðнижка на" + +#: templates/catalogue/book_wide.html:51 +msgid "Editor's Platform" +msgstr "ÐлаÑÑоÑма ÑедагÑваннÑ" + +#: templates/catalogue/book_wide.html:54 +msgid "Book description on Lektury.Gazeta.pl" +msgstr "ÐÐ¿Ð¸Ñ ÐºÐ½Ð¸Ð¶ÐºÐ¸ на Lektury.Gazeta.pl" + +#: templates/catalogue/book_wide.html:57 +msgid "Book description on Wikipedia" +msgstr "ÐÐ¿Ð¸Ñ ÐºÐ½Ð¸Ð¶ÐºÐ¸ на ÐÑкÑпедÑÑ" + +#: templates/catalogue/book_wide.html:59 +msgid "Mix this book" +msgstr "ÐÑкÑÑваÑи ÑÑ ÐºÐ½Ð¸Ð¶ÐºÑ" + +#: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11 +msgid "Catalogue" +msgstr "ÐаÑалог" + +#: templates/catalogue/catalogue.html:16 +msgid "Download the catalogue in PDF format." +msgstr "ÐаванÑажиÑи каÑалог Ñ ÑоÑмаÑÑ PDF" + +#: templates/catalogue/catalogue.html:19 +#: templates/catalogue/search_multiple_hits.html:17 +#: templates/catalogue/tagged_object_list.html:26 +#: templatetags/catalogue_tags.py:416 +msgid "Authors" +msgstr "ÐвÑоÑи" + +#: templates/catalogue/catalogue.html:22 +#: templates/catalogue/search_multiple_hits.html:25 +#: templates/catalogue/tagged_object_list.html:34 +#: templatetags/catalogue_tags.py:418 +msgid "Kinds" +msgstr "Роди" + +#: templates/catalogue/catalogue.html:25 +#: templates/catalogue/search_multiple_hits.html:33 +#: templates/catalogue/tagged_object_list.html:42 +#: templatetags/catalogue_tags.py:417 +msgid "Genres" +msgstr "ÐанÑи" + +#: templates/catalogue/catalogue.html:28 +#: templates/catalogue/search_multiple_hits.html:41 +#: templates/catalogue/tagged_object_list.html:50 +#: templatetags/catalogue_tags.py:419 +msgid "Epochs" +msgstr "ÐÐ¿Ð¾Ñ Ð¸" + +#: templates/catalogue/catalogue.html:31 +msgid "Themes and topics" +msgstr "Теми" + +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16 +#, fuzzy +msgid "Collections" +msgstr "колекÑÑÑ" + +#: templates/catalogue/daisy_list.html:6 +#: templates/catalogue/daisy_list.html:12 +msgid "Listing of all DAISY files" +msgstr "СпиÑок ÑÑÑÑ ÑайлÑв DAISY" + +#: templates/catalogue/daisy_list.html:9 +msgid "Latest DAISY audiobooks" +msgstr "ÐÑÑÐ°Ð½Ð½Ñ Ð°ÑдÑокниги DAISY" + +#: templates/catalogue/daisy_list.html:15 +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Å." +msgstr "" +"СиÑÑема DAISY Ñе визнаний Ñ Ð²ÑÑÐ¾Ð¼Ñ ÑвÑÑÑ ÑоÑÐ¼Ð°Ñ Ð½Ð°Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð¾ÑÑÑÐ¿Ñ Ð´Ð¾ книжок\n" +" коÑÑий вÑдповÑÐ´Ð°Ñ Ð¿Ð¾ÑÑебам оÑÑб ÑлабозоÑÐ¸Ñ , ÑлÑÐ¿Ð¸Ñ , а Ñакож ÑнÑÐ¸Ñ Ð¾ÑÑб\n" +" ÑÐºÑ Ð¼Ð°ÑÑÑ ÑÑÑдноÑÑ Ð· ÑиÑаннÑм. ÐожеÑе ними коÑиÑÑÑваÑиÑÑ Ð±ÐµÐ·ÐºÐ¾ÑÑовно Ñ Ð±ÐµÐ· " +"обмеженÑ." + +#: templates/catalogue/differentiate_tags.html:12 +msgid "The criteria are ambiguous. Please select one of the following options:" +msgstr "ÐÑиÑеÑÑÑ Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°ÑнÑ. ÐибеÑÑÑÑ Ð¾Ð´Ð¸Ð½ з ваÑÑанÑÑв нижÑе:" + +#: templates/catalogue/fragment_short.html:12 +msgid "Expand fragment" +msgstr "РозвинÑÑи ÑÑагменÑ" + +#: templates/catalogue/fragment_short.html:22 +msgid "Hide fragment" +msgstr "Ð¡Ñ Ð¾Ð²Ð°Ñи ÑÑагменÑ" + +#: templates/catalogue/inline_tag_list.html:4 +#: templates/catalogue/tag_list.html:4 +msgid "See full category" +msgstr "ÐивиÑиÑÑ Ð¿Ð¾Ð²Ð½Ñ ÐºÐ°ÑегоÑÑÑ" + +#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18 +msgid "Please waitâ¦" +msgstr "" + +#: templates/catalogue/menu.html:24 +msgid "All books" +msgstr "УÑÑ ÐºÐ½Ð¸Ð¶ÐºÐ¸" + +#: templates/catalogue/menu.html:28 +msgid "Audiobooks" +msgstr "ÐÑдÑокниги" + +#: templates/catalogue/menu.html:32 +msgid "DAISY" +msgstr "DAISY" + +#: templates/catalogue/picture_detail.html:29 +msgid "Work is licensed under " +msgstr "ТвÑÑ Ð½Ð° лÑÑензÑÑ" + +#: templates/catalogue/picture_detail.html:31 +msgid "Based on" +msgstr "Ðа оÑновÑ" + +#: templates/catalogue/picture_detail.html:45 +msgid "Details" +msgstr "ÐеÑалÑ" + +#: templates/catalogue/picture_detail.html:48 +msgid "Author" +msgstr "ÐвÑоÑ" + +#: templates/catalogue/picture_detail.html:66 +msgid "Other resources" +msgstr "ÐнÑÑ ÑеÑÑÑÑи" + +#: templates/catalogue/picture_detail.html:69 +msgid "Source of the image" +msgstr "ÐжеÑело гÑаÑÑки" + +#: templates/catalogue/picture_detail.html:72 +msgid "Image on the Editor's Platform" +msgstr "ÐÑаÑÑка на ÑедакÑоÑÑÑкÑй плаÑÑоÑмÑ" + +#: templates/catalogue/picture_detail.html:83 +msgid "View XML source" +msgstr "ÐивиÑиÑÑ Ð´Ð¶ÐµÑело XML" + +#: templates/catalogue/picture_detail.html:86 +msgid "Work's themes " +msgstr "Теми Ñ ÑвоÑÑ" + +#: templates/catalogue/picture_list.html:8 +#: templates/catalogue/picture_list.html:10 +msgid "Listing of all pictures" +msgstr "СпиÑок ÑÑÑÑ Ð³ÑаÑÑк" + +#: templates/catalogue/player.html:35 +msgid "Download as" +msgstr "ÐаванÑажиÑи Ñк" + +#: templates/catalogue/player.html:88 +msgid "Artist" +msgstr "Ð¥Ñдожник" + +#: templates/catalogue/player.html:89 +msgid "Director" +msgstr "РежиÑеÑ" + +#: templates/catalogue/player.html:108 +msgid "Audiobooks were prepared as a part of the projects:" +msgstr "ÐÑдÑокниги вигоÑовлено в ÑÐ°Ð¼ÐºÐ°Ñ Ð¿ÑоекÑÑв:" + +#: templates/catalogue/player.html:113 +#, python-format +msgid "%(cs)s, funded by %(fb)s" +msgstr "%(cs)s, ÑÑнанÑованого Ñз коÑÑÑв %(fb)s" + +#: templates/catalogue/player.html:125 +#, python-format +msgid "" +"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +msgstr "" +"ÐÑдÑокниги вигоÑовлено в ÑÐ°Ð¼ÐºÐ°Ñ Ð¿ÑоекÑÑ %(cs)s, ÑÑнанÑованого Ñз коÑÑÑв " +"%(fb)s." + +#: templates/catalogue/player.html:127 +#, python-format +msgid "Audiobooks were prepared as a part of the %(cs)s project." +msgstr "ÐÑдÑокниги вигоÑовлено в ÑÐ°Ð¼ÐºÐ°Ñ Ð¿ÑоекÑÑ %(cs)s." + +#: templates/catalogue/recent_audiobooks_list.html:5 +#: templates/catalogue/recent_audiobooks_list.html:10 +#, fuzzy +msgid "Recent audiobooks" +msgstr "ÐÑÑÐ°Ð½Ð½Ñ Ð°ÑдÑокниги MP3" + +#: templates/catalogue/recent_daisy_list.html:5 +#: templates/catalogue/recent_daisy_list.html:10 +msgid "Recent DAISY files" +msgstr "" + +#: templates/catalogue/recent_list.html:5 +#: templates/catalogue/recent_list.html:10 +#, fuzzy +msgid "Recent publications" +msgstr "Ð²Ñ Ð¾Ð´Ð¸ÑÑ Ñ ÑÑÑпÑлÑне надбаннÑ" + +#: templates/catalogue/recent_list.html:15 +#, python-format +msgid "" +"You can also see <a href=\"%(a)s\">recent audiobooks</a>\n" +" and <a href=\"%(d)s\">recent DAISY files</a>." +msgstr "" + +#: templates/catalogue/search_multiple_hits.html:5 +#: templates/catalogue/search_no_hits.html:5 +#: templates/catalogue/search_no_hits.html:10 +#: templates/catalogue/search_too_short.html:5 +#: templates/catalogue/search_too_short.html:10 +msgid "Search" +msgstr "ÐоÑÑк" + +#: templates/catalogue/search_multiple_hits.html:11 +#: templates/catalogue/search_no_hits.html:16 +msgid "Did you mean" +msgstr "Ðи мали на ÑвазÑ" + +#: templates/catalogue/search_multiple_hits.html:52 +msgid "Results by title" +msgstr "РезÑлÑÑаÑи за заголовком" + +#: templates/catalogue/search_multiple_hits.html:67 +msgid "Results by authors" +msgstr "РезÑлÑÑаÑи за авÑоÑами" + +#: templates/catalogue/search_multiple_hits.html:80 +#, fuzzy +msgid "Results by translators" +msgstr "РезÑлÑÑаÑи за авÑоÑами" + +#: templates/catalogue/search_multiple_hits.html:93 +msgid "Results in text" +msgstr "РезÑлÑÑаÑи в ÑекÑÑÑ" + +#: templates/catalogue/search_multiple_hits.html:110 +msgid "Other results" +msgstr "ÐнÑÑ ÑезÑлÑÑаÑи" + +#: templates/catalogue/search_no_hits.html:19 +#: templates/catalogue/tagged_object_list.html:151 +msgid "Sorry! Search cirteria did not match any resources." +msgstr "Ðа жалÑ, ÐаÑÑ ÐºÑиÑеÑÑÑ Ð¿Ð¾ÑÑÐºÑ Ð½Ðµ вÑдповÑдаÑÑÑ Ð¶Ð¾Ð´Ð½Ð¸Ð¼ ÑезÑлÑÑаÑам." + +#: templates/catalogue/search_no_hits.html:21 +msgid "" +"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 "" +"СиÑÑема поÑÑÐºÑ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑ Ð·Ð´ÑйÑнÑваÑи поÑÑк за наÑÑÑпними кÑиÑеÑÑÑми: " +"заголовок, авÑоÑ, Ñема, ÐµÐ¿Ð¾Ñ Ð°, ÑÑд Ñа жанÑ.\n" +"\t\tÐа даний Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¿Ð¾ÑÑк Ñ Ð¿Ð¾Ð²Ð½Ð¾Ð¼Ñ Ð¾Ð±ÑÑÐ·Ñ ÑекÑÑÑ Ð½Ðµ Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¸Ð¼." + +#: templates/catalogue/search_too_short.html:13 +msgid "Sorry! Search query must have at least two characters." +msgstr "Ðа жалÑ, Ð´Ð»Ñ Ð¿Ð¾ÑÑÐºÑ Ð¿Ð¾ÑÑÑбно ввеÑÑи ÑонайменÑе два знаки." + +#: templates/catalogue/tag_list_split.html:5 +msgid "Literature" +msgstr "" + +#: templates/catalogue/tag_list_split.html:14 +msgid "Gallery" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:78 +msgid "in Culture.pl" +msgstr "" + +#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:113 +msgid "in Lektury.Gazeta.pl" +msgstr "на Lektury.Gazeta.pl" + +#: templates/catalogue/tagged_object_list.html:88 +#: templates/catalogue/tagged_object_list.html:118 +msgid "in Wikipedia" +msgstr "на ÐÑкÑпедÑÑ" + +#: templates/catalogue/snippets/custom_pdf_link_li.html:5 +msgid "Download a custom PDF" +msgstr "ÐаванÑажиÑи наÑÑÑоÑваний PDF" + +#: templates/catalogue/snippets/license_icon.html:6 +#: templates/catalogue/snippets/license_icon.html:8 +msgid "Free license" +msgstr "" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "ÐоклаÑÑи ÐºÐ½Ð¸Ð¶ÐºÑ Ð½Ð° полиÑÑ!" + +#~ msgid "Create new shelf" +#~ msgstr "СÑвоÑиÑи Ð½Ð¾Ð²Ñ Ð¿Ð¾Ð»Ð¸ÑÑ" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ Ð¶Ð¾Ð´Ð½Ð¸Ñ Ð¿Ð¾Ð»Ð¸ÑÑ. ÐожеÑе ÑÑвоÑиÑи полиÑÑ Ð½Ð¸Ð¶Ñе, ÑкÑо бажаÑÑе." + +#~ msgid "Put on the shelf!" +#~ msgstr "ÐоклаÑÑи на полиÑÑ!" + +#~ msgid "Shelves containing fragment" +#~ msgstr "ÐолиÑÑ, ÑÐºÑ Ð¼ÑÑÑÑÑÑ ÑÑагменÑ" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "У ÐÐ°Ñ Ð½ÐµÐ¼Ð°Ñ Ð¶Ð¾Ð´Ð½Ð¸Ñ Ð¿Ð¾Ð»Ð¸ÑÑ. ÐожеÑе ÑÑвоÑиÑи Ð¾Ð´Ð½Ñ Ð½Ð¸Ð¶Ñе, ÑкÑо бажаÑÑе." + +#~ msgid "Save all shelves" +#~ msgstr "ÐбеÑегÑи ÑÑÑ Ð¿Ð¾Ð»Ð¸ÑÑ" + +#~ msgid "Your shelves with books" +#~ msgstr "ÐаÑÑ Ð¿Ð¾Ð»Ð¸ÑÑ Ð· книжками" + +#~ msgid "remove" +#~ msgstr "видалиÑи" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "" +#~ "У ÐÐ°Ñ Ð½ÐµÐ¼Ð°Ñ Ð¶Ð¾Ð´Ð½Ð¾Ñ Ð¿Ð¾Ð»Ð¸ÑÑ. ÐожеÑе ÑÑвоÑиÑи Ð¾Ð´Ð½Ñ Ð½Ð¸Ð¶Ñе, ÑкÑо бажаÑÑе." + +#~ msgid "Create shelf" +#~ msgstr "СÑвоÑиÑи полиÑÑ" + +#~ msgid "Enter a valid JSON value. Error: %s" +#~ msgstr "ÐведÑÑÑ Ð¿ÑавилÑÐ½Ñ Ð²Ð°ÑÑÑÑÑÑ JSON. Ðомилка: %s" + +#~ msgid "A4" +#~ msgstr "Ð4" + +#~ msgid "A5" +#~ msgstr "Ð5" + +#~ msgid "Incorrect customization options for PDF" +#~ msgstr "ÐепÑавилÑÐ½Ñ Ð¿Ð°ÑамеÑÑи наÑÑÑоÑÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ PDF" + +#~ msgid "Bad method" +#~ msgstr "ÐепÑавилÑний ÑпоÑÑб" + +#~ msgid "title, author, theme/topic, epoch, kind, genre" +#~ msgstr "заголовок, авÑоÑ, Ñема, ÐµÐ¿Ð¾Ñ Ð°, ÑÑд, жанÑ" + +#~ msgid "main page" +#~ msgstr "головна ÑÑоÑÑнка" + +#~ msgid "Show tag on main page" +#~ msgstr "ÐоказаÑи ÑÐµÒ Ð½Ð° головнÑй ÑÑоÑÑнÑÑ" + +#~ msgid "year of death" +#~ msgstr "даÑа ÑмеÑÑÑ" + +#~ msgid "short HTML" +#~ msgstr "коÑоÑкий HTML" + +#~ msgid "HTML file" +#~ msgstr "Ñайл HTML" + +#~ msgid "PDF file" +#~ msgstr "Ñайл PDF" + +#~ msgid "EPUB file" +#~ msgstr "Ñайл EPUB" + +#~ msgid "ODT file" +#~ msgstr "Ñайл ODT" + +#~ msgid "TXT file" +#~ msgstr "Ñайл TXT" + +#~ msgid "MP3 file" +#~ msgstr "Ñайл MP3" + +#~ msgid "OGG file" +#~ msgstr "Ñайл OGG" + +#~ msgid "translator" +#~ msgstr "пеÑекладаÑ" + +#~ msgid "year of translator's death" +#~ msgstr "ÑÑк ÑмеÑÑÑ Ð¿ÐµÑекладаÑа" + +#~ msgid "book stub" +#~ msgstr "загоÑовка книжки" + +#~ msgid "<p>To maintain your shelves you need to be logged in.</p>" +#~ msgstr "<p>Щоб ÑпÑавлÑÑи ÑвоÑми полиÑÑми, ÑвÑйдÑÑ Ð² акаÑнÑ</p>" + +#~ msgid "<p>Shelves were sucessfully saved.</p>" +#~ msgstr "<p>ÐолиÑÑ ÑÑпÑÑно збеÑежено.</p>" + +#~ msgid "Book was successfully removed from the shelf" +#~ msgstr "ÐÐ½Ð¸Ð¶ÐºÑ Ð±Ñло ÑÑпÑÑно видалено з полиÑÑ" + +#~ msgid "<p>Shelf <strong>%s</strong> was successfully created</p>" +#~ msgstr "<p>ÐолиÑÑ <strong>%s</strong> ÑÑпÑÑно ÑÑвоÑено</p>" + +#~ msgid "<p>Shelf <strong>%s</strong> was successfully removed</p>" +#~ msgstr "<p>ÐолиÑÑ <strong>%s</strong> ÑÑпÑÑно видалено</p>" + +#~ msgid "content type" +#~ msgstr "Ñип змÑÑÑÑ" + +#~ msgid "object id" +#~ msgstr "ÐРоб'ÑкÑÑ" diff --git a/src/catalogue/management/__init__.py b/src/catalogue/management/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/catalogue/management/commands/__init__.py b/src/catalogue/management/commands/__init__.py new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/src/catalogue/management/commands/__init__.py @@ -0,0 +1 @@ + diff --git a/src/catalogue/management/commands/checkcovers.py b/src/catalogue/management/commands/checkcovers.py new file mode 100644 index 000000000..7535dd474 --- /dev/null +++ b/src/catalogue/management/commands/checkcovers.py @@ -0,0 +1,130 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from optparse import make_option +from django.contrib.sites.models import Site +from django.core.management.base import BaseCommand +from catalogue import app_settings +from django.utils.functional import lazy + + +def ancestor_has_cover(book): + while book.parent: + book = book.parent + if book.extra_info.get('cover_url'): + return True + return False + + +current_domain = lazy(lambda: Site.objects.get_current().domain, str)() +def full_url(obj): + return 'http://%s%s' % ( + current_domain, + obj.get_absolute_url()) + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, + help='Suppress output'), + ) + help = 'Checks cover sources and licenses.' + + def handle(self, **options): + from collections import defaultdict + import re + from django.db import transaction + from catalogue.models import Book + + verbose = options['verbose'] + + without_cover = [] + with_ancestral_cover = [] + not_redakcja = [] + bad_license = defaultdict(list) + no_license = [] + + re_license = re.compile(ur'.*,\s*(CC.*)') + + redakcja_url = app_settings.REDAKCJA_URL + good_license = re.compile("(%s)" % ")|(".join( + app_settings.GOOD_LICENSES)) + + with transaction.commit_on_success(): + for book in Book.objects.all().order_by('slug').iterator(): + extra_info = book.extra_info + if not extra_info.get('cover_url'): + if ancestor_has_cover(book): + with_ancestral_cover.append(book) + else: + without_cover.append(book) + else: + if not extra_info.get('cover_source', '' + ).startswith(redakcja_url): + not_redakcja.append(book) + match = re_license.match(extra_info.get('cover_by', '')) + if match: + if not good_license.match(match.group(1)): + bad_license[match.group(1)].append(book) + else: + no_license.append(book) + + print """%d books with no covers, %d with inherited covers. +Bad licenses used: %s (%d covers without license). +%d covers not from %s. +""" % ( + len(without_cover), + len(with_ancestral_cover), + ", ".join(sorted(bad_license.keys())) or "none", + len(no_license), + len(not_redakcja), + redakcja_url, + ) + + if verbose: + if bad_license: + print + print "Bad license:" + print "============" + for lic, books in bad_license.items(): + print + print lic + for book in books: + print full_url(book) + + if no_license: + print + print "No license:" + print "===========" + for book in no_license: + print + print full_url(book) + print book.extra_info.get('cover_by') + print book.extra_info.get('cover_source') + print book.extra_info.get('cover_url') + + if not_redakcja: + print + print "Not from Redakcja or source missing:" + print "====================================" + for book in not_redakcja: + print + print full_url(book) + print book.extra_info.get('cover_by') + print book.extra_info.get('cover_source') + print book.extra_info.get('cover_url') + + if without_cover: + print + print "No cover:" + print "=========" + for book in without_cover: + print full_url(book) + + if with_ancestral_cover: + print + print "With ancestral cover:" + print "=====================" + for book in with_ancestral_cover: + print full_url(book) diff --git a/src/catalogue/management/commands/checkintegrity.py b/src/catalogue/management/commands/checkintegrity.py new file mode 100644 index 000000000..6ae2b9a2f --- /dev/null +++ b/src/catalogue/management/commands/checkintegrity.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from optparse import make_option +from django.core.management.base import BaseCommand + +from catalogue.models import Book + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, + help='Suppress output'), + make_option('-d', '--dry-run', action='store_true', dest='dry_run', default=False, + help="Just check for problems, don't fix them"), + ) + help = 'Checks integrity of catalogue data.' + + def handle(self, **options): + from django.db import transaction + + verbose = options['verbose'] + + with transaction.commit_on_success(): + for book in Book.objects.all().iterator(): + try: + info = book.wldocument().book_info + except: + if verbose: + print "ERROR! Bad XML for book:", book.slug + print "To resolve: republish." + print + else: + should_be = [p.slug for p in info.parts] + is_now = [p.slug for p in book.children.all().order_by('parent_number')] + if should_be != is_now: + if verbose: + print "ERROR! Wrong children for book:", book.slug + print "Is: ", is_now + print "Should be:", should_be + print "To resolve: republish parent book." + print + + # Check for ancestry. + parents = [] + parent = book.parent + while parent: + parents.append(parent) + parent = parent.parent + ancestors = list(book.ancestor.all()) + if set(ancestors) != set(parents): + if options['verbose']: + print "Wrong ancestry for book:", book + print "Is: ", ", ".join(ancestors) + print "Should be:", ", ".join(parents) + if not options['dry_run']: + book.repopulate_ancestors() + if options['verbose']: + print "Fixed." + if options['verbose']: + print + + # TODO: check metadata tags, reset counters diff --git a/src/catalogue/management/commands/importbooks.py b/src/catalogue/management/commands/importbooks.py new file mode 100644 index 000000000..338fea6aa --- /dev/null +++ b/src/catalogue/management/commands/importbooks.py @@ -0,0 +1,173 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import os +import sys +import time +from optparse import make_option +from django.conf import settings +from django.core.management.base import BaseCommand +from django.core.management.color import color_style +from django.core.files import File +from catalogue.utils import trim_query_log +from librarian.picture import ImageStore +from wolnelektury.management.profile import profile + +from catalogue.models import Book +from picture.models import Picture + +from search.index import Index + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, + help='Verbosity level; 0=minimal output, 1=normal output, 2=all output'), + make_option('-f', '--force', action='store_true', dest='force', default=False, + help='Overwrite works already in the catalogue'), + make_option('-D', '--dont-build', dest='dont_build', + metavar="FORMAT,...", + help="Skip building specified formats"), + make_option('-S', '--no-search-index', action='store_false', dest='search_index', default=True, + help='Skip indexing imported works for search'), + make_option('-w', '--wait-until', dest='wait_until', metavar='TIME', + help='Wait until specified time (Y-M-D h:m:s)'), + make_option('-p', '--picture', action='store_true', dest='import_picture', default=False, + help='Import pictures'), + ) + help = 'Imports books from the specified directories.' + args = 'directory [directory ...]' + + def import_book(self, file_path, options): + verbose = options.get('verbose') + if options.get('dont_build'): + dont_build = options.get('dont_build').lower().split(',') + else: + dont_build = None + file_base, ext = os.path.splitext(file_path) + book = Book.from_xml_file(file_path, overwrite=options.get('force'), + dont_build=dont_build, + search_index_tags=False) + for ebook_format in Book.ebook_formats: + if os.path.isfile(file_base + '.' + ebook_format): + getattr(book, '%s_file' % ebook_format).save( + '%s.%s' % (book.slug, ebook_format), + File(file(file_base + '.' + ebook_format)), + save=False + ) + if verbose: + print "Importing %s.%s" % (file_base, ebook_format) + book.save() + + def import_picture(self, file_path, options, continue_on_error=True): + try: + image_store = ImageStore(os.path.dirname(file_path)) + picture = Picture.from_xml_file(file_path, image_store=image_store, overwrite=options.get('force')) + except Exception, ex: + if continue_on_error: + print "%s: %s" % (file_path, ex) + return + else: + raise ex + return picture + + # @profile + def handle(self, *directories, **options): + from django.db import transaction + + self.style = color_style() + + verbose = options.get('verbose') + import_picture = options.get('import_picture') + + wait_until = None + if options.get('wait_until'): + wait_until = time.mktime(time.strptime(options.get('wait_until'), '%Y-%m-%d %H:%M:%S')) + if verbose > 0: + print "Will wait until %s; it's %f seconds from now" % ( + time.strftime('%Y-%m-%d %H:%M:%S', + time.localtime(wait_until)), wait_until - time.time()) + + index = None + if options.get('search_index') and not settings.NO_SEARCH_INDEX: + index = Index() + try: + index.index_tags() + index.index.commit() + except Exception, e: + index.index.rollback() + raise e + + # Start transaction management. + transaction.commit_unless_managed() + transaction.enter_transaction_management() + transaction.managed(True) + + files_imported = 0 + files_skipped = 0 + + for dir_name in directories: + if not os.path.isdir(dir_name): + print self.style.ERROR("%s: Not a directory. Skipping." % dir_name) + else: + # files queue + files = sorted(os.listdir(dir_name)) + postponed = {} + while files: + trim_query_log(0) + file_name = files.pop(0) + file_path = os.path.join(dir_name, file_name) + file_base, ext = os.path.splitext(file_path) + + # Skip files that are not XML files + if not ext == '.xml': + continue + + if verbose > 0: + print "Parsing '%s'" % file_path + else: + sys.stdout.write('.') + sys.stdout.flush() + + # Import book files + try: + if import_picture: + self.import_picture(file_path, options) + else: + self.import_book(file_path, options) + + files_imported += 1 + transaction.commit() + + except (Book.AlreadyExists, Picture.AlreadyExists): + print self.style.ERROR('%s: Book or Picture already imported. Skipping. To overwrite use --force.' % + file_path) + files_skipped += 1 + + except Book.DoesNotExist, e: + if file_name not in postponed or postponed[file_name] < files_imported: + # push it back into the queue, maybe the missing child will show up + if verbose: + print self.style.NOTICE('Waiting for missing children') + files.append(file_name) + postponed[file_name] = files_imported + else: + # we're in a loop, nothing's being imported - some child is really missing + raise e + + # Print results + print + print "Results: %d files imported, %d skipped, %d total." % ( + files_imported, files_skipped, files_imported + files_skipped) + print + + if wait_until: + print 'Waiting...' + try: + time.sleep(wait_until - time.time()) + except IOError: + print "it's already too late" + + transaction.commit() + transaction.leave_transaction_management() diff --git a/src/catalogue/management/commands/pack.py b/src/catalogue/management/commands/pack.py new file mode 100755 index 000000000..ba06341b8 --- /dev/null +++ b/src/catalogue/management/commands/pack.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from optparse import make_option + +from django.core.management.base import BaseCommand +from django.core.management.color import color_style +import zipfile + +from catalogue.models import Book, Tag + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('-t', '--tags', dest='tags', metavar='SLUG,...', + help='Use only books tagged with this tags'), + make_option('-i', '--include', dest='include', metavar='SLUG,...', + help='Include specific books by slug'), + make_option('-e', '--exclude', dest='exclude', metavar='SLUG,...', + help='Exclude specific books by slug') + ) + help = 'Prepare ZIP package with files of given type.' + args = '[%s] output_path.zip' % '|'.join(Book.formats) + + def handle(self, ftype, path, **options): + self.style = color_style() + verbose = int(options.get('verbosity')) + tags = options.get('tags') + include = options.get('include') + exclude = options.get('exclude') + + if ftype in Book.formats: + field = "%s_file" % ftype + else: + print self.style.ERROR('Unknown file type.') + return + + books = [] + + if include: + books += list(Book.objects.filter(slug__in=include.split(',')).only('slug', field)) + + if tags: + books += list(Book.tagged.with_all(Tag.objects.filter(slug__in=tags.split(','))).only('slug', field)) + elif not include: + books = list(Book.objects.all().only('slug', field)) + + if exclude: + books = [book for book in books if book.slug not in exclude.split(',')] + + archive = zipfile.ZipFile(path, 'w', zipfile.ZIP_DEFLATED) + + processed = skipped = 0 + for book in books: + if verbose >= 2: + print 'Parsing', book.slug + content = getattr(book, field) + if not content: + if verbose >= 1: + print self.style.NOTICE('%s has no %s file' % (book.slug, ftype)) + skipped += 1 + continue + archive.write(content.path, str('%s.%s' % (book.slug, ftype))) + processed += 1 + archive.close() + + if not processed: + if skipped: + print self.style.ERROR("No books with %s files found" % ftype) + else: + print self.style.ERROR("No books found") + return + + if verbose >= 1: + print "%d processed, %d skipped" % (processed, skipped) + print "Results written to %s" % path diff --git a/src/catalogue/management/commands/report_dead_links.py b/src/catalogue/management/commands/report_dead_links.py new file mode 100644 index 000000000..34b1e7054 --- /dev/null +++ b/src/catalogue/management/commands/report_dead_links.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from __future__ import print_function, unicode_literals + +from django.core.management.base import BaseCommand + + +class Command(BaseCommand): + help = 'Checks for dead links.' + + def handle(self, **options): + from catalogue.models import Book + from picture.models import Picture + from urllib2 import urlopen, HTTPError, URLError + from django.core.urlresolvers import reverse + from django.contrib.sites.models import Site + from django.contrib.sites.shortcuts import get_current_site + + domain = get_current_site(None).domain + + fields = [ + (Book, [ + ('gazeta_link', lambda b: b.gazeta_link), + ('wiki_link', lambda b: b.wiki_link), + ('źródÅo', lambda b: b.extra_info.get('source_url')), + ], 'admin:catalogue_book_change' + ), + (Picture, [ + ('gazeta_link', lambda p: p.culturepl_link), + ('wiki_link', lambda p: p.wiki_link), + ('źródÅo', lambda p: p.extra_info.get('source_url')), + ], 'admin:pictures_picture_change' + ) + ] + + for model, model_fields, admin_name in fields: + for obj in model.objects.all(): + clean = True + for name, get in model_fields: + url = get(obj) + if url: + try: + urlopen(url) + except (HTTPError, URLError, ValueError), e: + if clean: + clean = False + print(unicode(obj).encode('utf-8')) + print(('Na stronie: https://%s%s' % (domain, obj.get_absolute_url())).encode('utf-8')) + print(('Administracja: https://%s%s' % (domain, reverse(admin_name, args=[obj.pk]))).encode('utf-8')) + if obj.extra_info.get('about'): + print(('Redakcja: %s' % (obj.extra_info.get('about'),)).encode('utf-8')) + print((' %s (%s): %s' % (name, getattr(e, 'code', 'bÅÄ d'), url)).encode('utf-8')) + if not clean: + print() diff --git a/src/catalogue/management/commands/savemedia.py b/src/catalogue/management/commands/savemedia.py new file mode 100755 index 000000000..216c5e335 --- /dev/null +++ b/src/catalogue/management/commands/savemedia.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import os.path + +from django.core.management.base import BaseCommand + +from catalogue.models import Book, BookMedia +from catalogue.utils import ExistingFile + + +class Command(BaseCommand): + help = "Saves uploaded media with a given book and a given name. If media has a source SHA1 info - matching media is replaced." + args = 'path slug name' + + def handle(self, *args, **options): + from django.db import transaction + + path, slug, name = args + + # Start transaction management. + transaction.commit_unless_managed() + transaction.enter_transaction_management() + transaction.managed(True) + + book = Book.objects.get(slug=slug) + + root, ext = os.path.splitext(path) + ext = ext.lower() + if ext: + ext = ext[1:] + if ext == 'zip': + ext = 'daisy' + + source_sha1 = BookMedia.read_source_sha1(path, ext) + print "Source file SHA1:", source_sha1 + try: + assert source_sha1 + bm = book.media.get(type=ext, source_sha1=source_sha1) + print "Replacing media: %s (%s)" % (bm.name.encode('utf-8'), ext) + except (AssertionError, BookMedia.DoesNotExist): + bm = BookMedia(book=book, type=ext) + print "Creating new media" + bm.name = name + bm.file.save(None, ExistingFile(path)) + bm.save() + transaction.commit() + transaction.leave_transaction_management() diff --git a/src/catalogue/migrations/0001_initial.py b/src/catalogue/migrations/0001_initial.py new file mode 100644 index 000000000..661fde840 --- /dev/null +++ b/src/catalogue/migrations/0001_initial.py @@ -0,0 +1,221 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import fnpdjango.storage +import jsonfield.fields +import catalogue.fields +import catalogue.models.bookmedia +from django.conf import settings +import catalogue.models.book + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('contenttypes', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Book', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('title', models.CharField(max_length=120, verbose_name='Title')), + ('sort_key', models.CharField(verbose_name='Sort key', max_length=120, editable=False, db_index=True)), + ('sort_key_author', models.CharField(default='', verbose_name='sort key by author', max_length=120, editable=False, db_index=True)), + ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), + ('common_slug', models.SlugField(max_length=120, verbose_name='Slug')), + ('language', models.CharField(default=b'pol', max_length=3, verbose_name='language code', db_index=True)), + ('description', models.TextField(verbose_name='Description', blank=True)), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date', db_index=True)), + ('changed_at', models.DateTimeField(auto_now=True, verbose_name='creation date', db_index=True)), + ('parent_number', models.IntegerField(default=0, verbose_name='Parent number')), + ('extra_info', jsonfield.fields.JSONField(default={}, verbose_name='Additional information')), + ('gazeta_link', models.CharField(max_length=240, blank=True)), + ('wiki_link', models.CharField(max_length=240, blank=True)), + ('cover', catalogue.fields.EbookField(b'cover', upload_to=catalogue.models.book._cover_upload_to, storage=fnpdjango.storage.BofhFileSystemStorage(), max_length=255, blank=True, null=True, verbose_name='cover')), + ('cover_thumb', catalogue.fields.EbookField(b'cover_thumb', max_length=255, upload_to=catalogue.models.book._cover_thumb_upload_to, null=True, verbose_name='cover thumbnail', blank=True)), + ('_related_info', jsonfield.fields.JSONField(null=True, editable=False, blank=True)), + ('txt_file', catalogue.fields.EbookField(b'txt', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._txt_upload_to, max_length=255, blank=True, verbose_name='TXT file')), + ('fb2_file', catalogue.fields.EbookField(b'fb2', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._fb2_upload_to, max_length=255, blank=True, verbose_name='FB2 file')), + ('pdf_file', catalogue.fields.EbookField(b'pdf', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._pdf_upload_to, max_length=255, blank=True, verbose_name='PDF file')), + ('epub_file', catalogue.fields.EbookField(b'epub', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._epub_upload_to, max_length=255, blank=True, verbose_name='EPUB file')), + ('mobi_file', catalogue.fields.EbookField(b'mobi', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._mobi_upload_to, max_length=255, blank=True, verbose_name='MOBI file')), + ('html_file', catalogue.fields.EbookField(b'html', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._html_upload_to, max_length=255, blank=True, verbose_name='HTML file')), + ('xml_file', catalogue.fields.EbookField(b'xml', default=b'', storage=fnpdjango.storage.BofhFileSystemStorage(), upload_to=catalogue.models.book._xml_upload_to, max_length=255, blank=True, verbose_name='XML file')), + ('parent', models.ForeignKey(related_name=b'children', blank=True, to='catalogue.Book', null=True)), + ], + options={ + 'ordering': ('sort_key',), + 'verbose_name': 'book', + 'verbose_name_plural': 'Books', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='BookMedia', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('type', models.CharField(db_index=True, max_length=20, verbose_name='type', choices=[(b'mp3', 'MP3 file'), (b'ogg', 'Ogg Vorbis file'), (b'daisy', 'DAISY file')])), + ('name', models.CharField(max_length=512, verbose_name='name')), + ('file', catalogue.fields.OverwritingFileField(upload_to=catalogue.models.bookmedia._file_upload_to, max_length=600, verbose_name='XML file')), + ('uploaded_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date', db_index=True)), + ('extra_info', jsonfield.fields.JSONField(default={}, verbose_name='Additional information', editable=False)), + ('source_sha1', models.CharField(max_length=40, null=True, editable=False, blank=True)), + ('book', models.ForeignKey(related_name=b'media', to='catalogue.Book')), + ], + options={ + 'ordering': ('type', 'name'), + 'verbose_name': 'book media', + 'verbose_name_plural': 'book media', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Collection', + fields=[ + ('title', models.CharField(max_length=120, verbose_name='Title', db_index=True)), + ('title_de', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), + ('title_en', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), + ('title_es', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), + ('title_fr', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), + ('title_it', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), + ('title_lt', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), + ('title_pl', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), + ('title_ru', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), + ('title_uk', models.CharField(max_length=120, null=True, verbose_name='Title', db_index=True)), + ('slug', models.SlugField(max_length=120, serialize=False, verbose_name='Slug', primary_key=True)), + ('description', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_de', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_en', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_es', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_fr', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_it', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_lt', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_pl', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_ru', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_uk', models.TextField(null=True, verbose_name='Description', blank=True)), + ('book_slugs', models.TextField(verbose_name='Book stubs')), + ('kind', models.CharField(default=b'book', max_length=10, verbose_name='form', db_index=True, choices=[(b'book', 'book'), (b'picture', b'picture')])), + ], + options={ + 'ordering': ('title',), + 'verbose_name': 'collection', + 'verbose_name_plural': 'collections', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Fragment', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('text', models.TextField()), + ('short_text', models.TextField(editable=False)), + ('anchor', models.CharField(max_length=120)), + ('book', models.ForeignKey(related_name=b'fragments', to='catalogue.Book')), + ], + options={ + 'ordering': ('book', 'anchor'), + 'verbose_name': 'Fragment', + 'verbose_name_plural': 'Fragments', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Source', + fields=[ + ('netloc', models.CharField(max_length=120, serialize=False, verbose_name='network location', primary_key=True)), + ('name', models.CharField(max_length=120, verbose_name='name', blank=True)), + ('name_de', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), + ('name_en', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), + ('name_es', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), + ('name_fr', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), + ('name_it', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), + ('name_lt', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), + ('name_pl', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), + ('name_ru', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), + ('name_uk', models.CharField(max_length=120, null=True, verbose_name='name', blank=True)), + ], + options={ + 'ordering': ('netloc',), + 'verbose_name': 'source', + 'verbose_name_plural': 'sources', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Tag', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=50, verbose_name='name', db_index=True)), + ('name_de', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), + ('name_en', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), + ('name_es', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), + ('name_fr', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), + ('name_it', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), + ('name_lt', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), + ('name_pl', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), + ('name_ru', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), + ('name_uk', models.CharField(max_length=50, null=True, verbose_name='name', db_index=True)), + ('slug', models.SlugField(max_length=120, verbose_name='Slug')), + ('sort_key', models.CharField(max_length=120, verbose_name='Sort key', db_index=True)), + ('category', models.CharField(db_index=True, max_length=50, verbose_name='Category', choices=[(b'author', 'author'), (b'epoch', 'period'), (b'kind', 'form'), (b'genre', 'genre'), (b'theme', 'motif'), (b'set', 'set'), (b'book', 'book'), (b'thing', 'thing')])), + ('description', models.TextField(verbose_name='Description', blank=True)), + ('description_de', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_en', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_es', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_fr', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_it', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_lt', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_pl', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_ru', models.TextField(null=True, verbose_name='Description', blank=True)), + ('description_uk', models.TextField(null=True, verbose_name='Description', blank=True)), + ('book_count', models.IntegerField(null=True, verbose_name='Number of books', blank=True)), + ('picture_count', models.IntegerField(null=True, verbose_name='picture count', blank=True)), + ('gazeta_link', models.CharField(max_length=240, blank=True)), + ('culturepl_link', models.CharField(max_length=240, blank=True)), + ('wiki_link', models.CharField(max_length=240, blank=True)), + ('wiki_link_de', models.CharField(max_length=240, null=True, blank=True)), + ('wiki_link_en', models.CharField(max_length=240, null=True, blank=True)), + ('wiki_link_es', models.CharField(max_length=240, null=True, blank=True)), + ('wiki_link_fr', models.CharField(max_length=240, null=True, blank=True)), + ('wiki_link_it', models.CharField(max_length=240, null=True, blank=True)), + ('wiki_link_lt', models.CharField(max_length=240, null=True, blank=True)), + ('wiki_link_pl', models.CharField(max_length=240, null=True, blank=True)), + ('wiki_link_ru', models.CharField(max_length=240, null=True, blank=True)), + ('wiki_link_uk', models.CharField(max_length=240, null=True, blank=True)), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date', db_index=True)), + ('changed_at', models.DateTimeField(auto_now=True, verbose_name='creation date', db_index=True)), + ('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)), + ], + options={ + 'ordering': ('sort_key',), + 'verbose_name': 'tag', + 'verbose_name_plural': 'tags', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='TagRelation', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('object_id', models.PositiveIntegerField(verbose_name='object id', db_index=True)), + ('content_type', models.ForeignKey(verbose_name='content type', to='contenttypes.ContentType')), + ('tag', models.ForeignKey(related_name=b'items', verbose_name='tag', to='catalogue.Tag')), + ], + options={ + 'db_table': 'catalogue_tag_relation', + }, + bases=(models.Model,), + ), + migrations.AlterUniqueTogether( + name='tagrelation', + unique_together=set([('tag', 'content_type', 'object_id')]), + ), + migrations.AlterUniqueTogether( + name='tag', + unique_together=set([('slug', 'category')]), + ), + ] diff --git a/src/catalogue/migrations/0002_book_ancestor.py b/src/catalogue/migrations/0002_book_ancestor.py new file mode 100644 index 000000000..9f304c3d7 --- /dev/null +++ b/src/catalogue/migrations/0002_book_ancestor.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='book', + name='ancestor', + field=models.ManyToManyField(related_name=b'descendant', null=True, editable=False, to='catalogue.Book', blank=True), + preserve_default=True, + ), + ] diff --git a/src/catalogue/migrations/0003_populate_ancestors.py b/src/catalogue/migrations/0003_populate_ancestors.py new file mode 100644 index 000000000..b6117570b --- /dev/null +++ b/src/catalogue/migrations/0003_populate_ancestors.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations + + +def populate_ancestors(apps, schema_editor): + """Fixes the ancestry cache.""" + # TODO: table names + from django.db import connection, transaction + if connection.vendor == 'postgres': + cursor = connection.cursor() + cursor.execute(""" + WITH RECURSIVE ancestry AS ( + SELECT book.id, book.parent_id + FROM catalogue_book AS book + WHERE book.parent_id IS NOT NULL + UNION + SELECT ancestor.id, book.parent_id + FROM ancestry AS ancestor, catalogue_book AS book + WHERE ancestor.parent_id = book.id + AND book.parent_id IS NOT NULL + ) + INSERT INTO catalogue_book_ancestor + (from_book_id, to_book_id) + SELECT id, parent_id + FROM ancestry + ORDER BY id; + """) + else: + Book = apps.get_model("catalogue", "Book") + for book in Book.objects.exclude(parent=None): + parent = book.parent + while parent is not None: + book.ancestor.add(parent) + parent = parent.parent + + +def remove_book_tags(apps, schema_editor): + Tag = apps.get_model("catalogue", "Tag") + Book = apps.get_model("catalogue", "Book") + Tag.objects.filter(category='book').delete() + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0002_book_ancestor'), + ] + + operations = [ + migrations.RunPython(populate_ancestors), + migrations.RunPython(remove_book_tags), + ] diff --git a/src/catalogue/migrations/0004_remove_booktags_count_related_info.py b/src/catalogue/migrations/0004_remove_booktags_count_related_info.py new file mode 100644 index 000000000..916224b25 --- /dev/null +++ b/src/catalogue/migrations/0004_remove_booktags_count_related_info.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0003_populate_ancestors'), + ] + + operations = [ + migrations.AlterField( + model_name='tag', + name='category', + field=models.CharField(db_index=True, max_length=50, verbose_name='Category', choices=[(b'author', 'author'), (b'epoch', 'period'), (b'kind', 'form'), (b'genre', 'genre'), (b'theme', 'motif'), (b'set', 'set'), (b'thing', 'thing')]), + ), + + migrations.RemoveField( + model_name='tag', + name='book_count', + ), + migrations.RemoveField( + model_name='tag', + name='picture_count', + ), + migrations.RemoveField( + model_name='book', + name='_related_info', + ), + ] diff --git a/src/catalogue/migrations/0005_auto_20141016_1337.py b/src/catalogue/migrations/0005_auto_20141016_1337.py new file mode 100644 index 000000000..6de315722 --- /dev/null +++ b/src/catalogue/migrations/0005_auto_20141016_1337.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0004_remove_booktags_count_related_info'), + ] + + operations = [ + migrations.AlterField( + model_name='book', + name='title', + field=models.CharField(max_length=32767, verbose_name='Title'), + ), + ] diff --git a/src/catalogue/migrations/0006_auto_20141022_1059.py b/src/catalogue/migrations/0006_auto_20141022_1059.py new file mode 100644 index 000000000..f36eb0742 --- /dev/null +++ b/src/catalogue/migrations/0006_auto_20141022_1059.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +def capitalize_objects(apps, schema_editor): + """Capitalize Polish names of things.""" + Tag = apps.get_model('catalogue', 'Tag') + for tag in Tag.objects.filter(category='thing'): + tag.name = tag.name_pl = tag.name.capitalize() + tag.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0005_auto_20141016_1337'), + ] + + operations = [ + migrations.RunPython(capitalize_objects), + ] diff --git a/src/catalogue/migrations/0007_auto_20151123_1529.py b/src/catalogue/migrations/0007_auto_20151123_1529.py new file mode 100644 index 000000000..86afa9889 --- /dev/null +++ b/src/catalogue/migrations/0007_auto_20151123_1529.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0006_auto_20141022_1059'), + ] + + operations = [ + migrations.AlterField( + model_name='tag', + name='name', + field=models.CharField(max_length=120, verbose_name='name', db_index=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='tag', + name='name_de', + field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='tag', + name='name_en', + field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='tag', + name='name_es', + field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='tag', + name='name_fr', + field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='tag', + name='name_it', + field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='tag', + name='name_lt', + field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='tag', + name='name_pl', + field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='tag', + name='name_ru', + field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='tag', + name='name_uk', + field=models.CharField(max_length=120, null=True, verbose_name='name', db_index=True), + preserve_default=True, + ), + ] diff --git a/src/catalogue/migrations/0008_auto_20151221_1225.py b/src/catalogue/migrations/0008_auto_20151221_1225.py new file mode 100644 index 000000000..ba6c47027 --- /dev/null +++ b/src/catalogue/migrations/0008_auto_20151221_1225.py @@ -0,0 +1,255 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import jsonfield.fields +import catalogue.fields +import catalogue.models.bookmedia + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0007_auto_20151123_1529'), + ] + + operations = [ + migrations.AlterModelOptions( + name='book', + options={'ordering': ('sort_key',), 'verbose_name': 'book', 'verbose_name_plural': 'books'}, + ), + migrations.AlterModelOptions( + name='fragment', + options={'ordering': ('book', 'anchor'), 'verbose_name': 'fragment', 'verbose_name_plural': 'fragments'}, + ), + migrations.AlterField( + model_name='book', + name='ancestor', + field=models.ManyToManyField(related_name='descendant', editable=False, to='catalogue.Book', blank=True), + ), + migrations.AlterField( + model_name='book', + name='common_slug', + field=models.SlugField(max_length=120, verbose_name='slug'), + ), + migrations.AlterField( + model_name='book', + name='description', + field=models.TextField(verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='book', + name='extra_info', + field=jsonfield.fields.JSONField(default={}, verbose_name='extra information'), + ), + migrations.AlterField( + model_name='book', + name='parent_number', + field=models.IntegerField(default=0, verbose_name='parent number'), + ), + migrations.AlterField( + model_name='book', + name='slug', + field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), + ), + migrations.AlterField( + model_name='book', + name='sort_key', + field=models.CharField(verbose_name='sort key', max_length=120, editable=False, db_index=True), + ), + migrations.AlterField( + model_name='book', + name='title', + field=models.CharField(max_length=32767, verbose_name='title'), + ), + migrations.AlterField( + model_name='bookmedia', + name='extra_info', + field=jsonfield.fields.JSONField(default={}, verbose_name='extra information', editable=False), + ), + migrations.AlterField( + model_name='bookmedia', + name='file', + field=catalogue.fields.OverwritingFileField(upload_to=catalogue.models.bookmedia._file_upload_to, max_length=600, verbose_name='file'), + ), + migrations.AlterField( + model_name='collection', + name='book_slugs', + field=models.TextField(verbose_name='book slugs'), + ), + migrations.AlterField( + model_name='collection', + name='description', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='description_de', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='description_en', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='description_es', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='description_fr', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='description_it', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='description_lt', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='description_pl', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='description_ru', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='description_uk', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='collection', + name='kind', + field=models.CharField(default=b'book', max_length=10, verbose_name='kind', db_index=True, choices=[(b'book', 'book'), (b'picture', b'picture')]), + ), + migrations.AlterField( + model_name='collection', + name='slug', + field=models.SlugField(max_length=120, serialize=False, verbose_name='slug', primary_key=True), + ), + migrations.AlterField( + model_name='collection', + name='title', + field=models.CharField(max_length=120, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='collection', + name='title_de', + field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='collection', + name='title_en', + field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='collection', + name='title_es', + field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='collection', + name='title_fr', + field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='collection', + name='title_it', + field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='collection', + name='title_lt', + field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='collection', + name='title_pl', + field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='collection', + name='title_ru', + field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='collection', + name='title_uk', + field=models.CharField(max_length=120, null=True, verbose_name='title', db_index=True), + ), + migrations.AlterField( + model_name='tag', + name='category', + field=models.CharField(db_index=True, max_length=50, verbose_name='category', choices=[(b'author', 'author'), (b'epoch', 'epoch'), (b'kind', 'kind'), (b'genre', 'genre'), (b'theme', 'theme'), (b'set', 'set'), (b'thing', 'thing')]), + ), + migrations.AlterField( + model_name='tag', + name='description', + field=models.TextField(verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='description_de', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='description_en', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='description_es', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='description_fr', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='description_it', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='description_lt', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='description_pl', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='description_ru', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='description_uk', + field=models.TextField(null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='tag', + name='slug', + field=models.SlugField(max_length=120, verbose_name='slug'), + ), + migrations.AlterField( + model_name='tag', + name='sort_key', + field=models.CharField(max_length=120, verbose_name='sort key', db_index=True), + ), + ] diff --git a/src/catalogue/migrations/__init__.py b/src/catalogue/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/catalogue/models/__init__.py b/src/catalogue/models/__init__.py new file mode 100644 index 000000000..73b51090c --- /dev/null +++ b/src/catalogue/models/__init__.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from catalogue.models.tag import Tag +from catalogue.models.bookmedia import BookMedia +from catalogue.models.fragment import Fragment +from catalogue.models.book import Book +from catalogue.models.collection import Collection +from catalogue.models.source import Source diff --git a/src/catalogue/models/book.py b/src/catalogue/models/book.py new file mode 100644 index 000000000..5f68e09ff --- /dev/null +++ b/src/catalogue/models/book.py @@ -0,0 +1,552 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from collections import OrderedDict +from random import randint +import re +from django.conf import settings +from django.db import connection, models, transaction +from django.db.models import permalink +import django.dispatch +from django.contrib.contenttypes.fields import GenericRelation +from django.core.urlresolvers import reverse +from django.utils.translation import ugettext_lazy as _ +import jsonfield +from fnpdjango.storage import BofhFileSystemStorage +from ssify import flush_ssi_includes +from newtagging import managers +from catalogue import constants +from catalogue.fields import EbookField +from catalogue.models import Tag, Fragment, BookMedia +from catalogue.utils import create_zip +from catalogue import app_settings +from catalogue import tasks + +bofh_storage = BofhFileSystemStorage() + + +def _cover_upload_to(i, n): + return 'book/cover/%s.jpg' % i.slug + +def _cover_thumb_upload_to(i, n): + return 'book/cover_thumb/%s.jpg' % i.slug + +def _ebook_upload_to(upload_path): + def _upload_to(i, n): + return upload_path % i.slug + return _upload_to + + +class Book(models.Model): + """Represents a book imported from WL-XML.""" + title = models.CharField(_('title'), max_length=32767) + sort_key = models.CharField(_('sort key'), max_length=120, db_index=True, editable=False) + sort_key_author = models.CharField(_('sort key by author'), max_length=120, db_index=True, editable=False, default=u'') + slug = models.SlugField(_('slug'), max_length=120, db_index=True, + unique=True) + common_slug = models.SlugField(_('slug'), max_length=120, db_index=True) + language = models.CharField(_('language code'), max_length=3, db_index=True, + default=app_settings.DEFAULT_LANGUAGE) + description = models.TextField(_('description'), blank=True) + created_at = models.DateTimeField(_('creation date'), auto_now_add=True, db_index=True) + changed_at = models.DateTimeField(_('creation date'), auto_now=True, db_index=True) + parent_number = models.IntegerField(_('parent number'), default=0) + extra_info = jsonfield.JSONField(_('extra information'), default={}) + gazeta_link = models.CharField(blank=True, max_length=240) + wiki_link = models.CharField(blank=True, max_length=240) + # files generated during publication + + cover = EbookField('cover', _('cover'), + null=True, blank=True, + upload_to=_cover_upload_to, + storage=bofh_storage, max_length=255) + # Cleaner version of cover for thumbs + cover_thumb = EbookField('cover_thumb', _('cover thumbnail'), + null=True, blank=True, + upload_to=_cover_thumb_upload_to, + max_length=255) + ebook_formats = constants.EBOOK_FORMATS + formats = ebook_formats + ['html', 'xml'] + + parent = models.ForeignKey('self', blank=True, null=True, + related_name='children') + ancestor = models.ManyToManyField('self', blank=True, + editable=False, related_name='descendant', symmetrical=False) + + objects = models.Manager() + tagged = managers.ModelTaggedItemManager(Tag) + tags = managers.TagDescriptor(Tag) + tag_relations = GenericRelation(Tag.intermediary_table_model) + + html_built = django.dispatch.Signal() + published = django.dispatch.Signal() + + short_html_url_name = 'catalogue_book_short' + + class AlreadyExists(Exception): + pass + + class Meta: + ordering = ('sort_key',) + verbose_name = _('book') + verbose_name_plural = _('books') + app_label = 'catalogue' + + def __unicode__(self): + return self.title + + def save(self, force_insert=False, force_update=False, **kwargs): + from sortify import sortify + + self.sort_key = sortify(self.title)[:120] + self.title = unicode(self.title) # ??? + + try: + author = self.tags.filter(category='author')[0].sort_key + except IndexError: + author = u'' + self.sort_key_author = author + + ret = super(Book, self).save(force_insert, force_update, **kwargs) + + return ret + + @permalink + def get_absolute_url(self): + return ('catalogue.views.book_detail', [self.slug]) + + @staticmethod + @permalink + def create_url(slug): + return ('catalogue.views.book_detail', [slug]) + + @property + def name(self): + return self.title + + def language_code(self): + return constants.LANGUAGES_3TO2.get(self.language, self.language) + + def language_name(self): + return dict(settings.LANGUAGES).get(self.language_code(), "") + + def has_media(self, type_): + if type_ in Book.formats: + return bool(getattr(self, "%s_file" % type_)) + else: + return self.media.filter(type=type_).exists() + + def get_media(self, type_): + if self.has_media(type_): + if type_ in Book.formats: + return getattr(self, "%s_file" % type_) + else: + return self.media.filter(type=type_) + else: + return None + + def get_mp3(self): + return self.get_media("mp3") + def get_odt(self): + return self.get_media("odt") + def get_ogg(self): + return self.get_media("ogg") + def get_daisy(self): + return self.get_media("daisy") + + def has_description(self): + return len(self.description) > 0 + has_description.short_description = _('description') + has_description.boolean = True + + # ugly ugly ugly + def has_mp3_file(self): + return bool(self.has_media("mp3")) + has_mp3_file.short_description = 'MP3' + has_mp3_file.boolean = True + + def has_ogg_file(self): + return bool(self.has_media("ogg")) + has_ogg_file.short_description = 'OGG' + has_ogg_file.boolean = True + + def has_daisy_file(self): + return bool(self.has_media("daisy")) + has_daisy_file.short_description = 'DAISY' + has_daisy_file.boolean = True + + def wldocument(self, parse_dublincore=True, inherit=True): + from catalogue.import_utils import ORMDocProvider + from librarian.parser import WLDocument + + if inherit and self.parent: + meta_fallbacks = self.parent.cover_info() + else: + meta_fallbacks = None + + return WLDocument.from_file(self.xml_file.path, + provider=ORMDocProvider(self), + parse_dublincore=parse_dublincore, + meta_fallbacks=meta_fallbacks) + + @staticmethod + def zip_format(format_): + def pretty_file_name(book): + return "%s/%s.%s" % ( + book.extra_info['author'], + book.slug, + format_) + + field_name = "%s_file" % format_ + books = Book.objects.filter(parent=None).exclude(**{field_name: ""}) + paths = [(pretty_file_name(b), getattr(b, field_name).path) + for b in books.iterator()] + return create_zip(paths, app_settings.FORMAT_ZIPS[format_]) + + def zip_audiobooks(self, format_): + bm = BookMedia.objects.filter(book=self, type=format_) + paths = map(lambda bm: (None, bm.file.path), bm) + return create_zip(paths, "%s_%s" % (self.slug, format_)) + + def search_index(self, book_info=None, index=None, index_tags=True, commit=True): + if index is None: + from search.index import Index + index = Index() + try: + index.index_book(self, book_info) + if index_tags: + index.index_tags() + if commit: + index.index.commit() + except Exception, e: + index.index.rollback() + raise e + + + @classmethod + def from_xml_file(cls, xml_file, **kwargs): + from django.core.files import File + from librarian import dcparser + + # use librarian to parse meta-data + book_info = dcparser.parse(xml_file) + + if not isinstance(xml_file, File): + xml_file = File(open(xml_file)) + + try: + return cls.from_text_and_meta(xml_file, book_info, **kwargs) + finally: + xml_file.close() + + @classmethod + def from_text_and_meta(cls, raw_file, book_info, overwrite=False, + dont_build=None, search_index=True, + search_index_tags=True): + if dont_build is None: + dont_build = set() + dont_build = set.union(set(dont_build), set(app_settings.DONT_BUILD)) + + # check for parts before we do anything + children = [] + if hasattr(book_info, 'parts'): + for part_url in book_info.parts: + try: + children.append(Book.objects.get(slug=part_url.slug)) + except Book.DoesNotExist: + raise Book.DoesNotExist(_('Book "%s" does not exist.') % + part_url.slug) + + # Read book metadata + book_slug = book_info.url.slug + if re.search(r'[^a-z0-9-]', book_slug): + raise ValueError('Invalid characters in slug') + book, created = Book.objects.get_or_create(slug=book_slug) + + if created: + book_shelves = [] + old_cover = None + else: + if not overwrite: + raise Book.AlreadyExists(_('Book %s already exists') % ( + book_slug)) + # Save shelves for this book + book_shelves = list(book.tags.filter(category='set')) + old_cover = book.cover_info() + + # Save XML file + book.xml_file.save('%s.xml' % book.slug, raw_file, save=False) + + book.language = book_info.language + book.title = book_info.title + if book_info.variant_of: + book.common_slug = book_info.variant_of.slug + else: + book.common_slug = book.slug + book.extra_info = book_info.to_dict() + book.save() + + meta_tags = Tag.tags_from_info(book_info) + + book.tags = set(meta_tags + book_shelves) + + cover_changed = old_cover != book.cover_info() + obsolete_children = set(b for b in book.children.all() + if b not in children) + notify_cover_changed = [] + for n, child_book in enumerate(children): + new_child = child_book.parent != book + child_book.parent = book + child_book.parent_number = n + child_book.save() + if new_child or cover_changed: + notify_cover_changed.append(child_book) + # Disown unfaithful children and let them cope on their own. + for child in obsolete_children: + child.parent = None + child.parent_number = 0 + child.save() + if old_cover: + notify_cover_changed.append(child) + + cls.repopulate_ancestors() + + # No saves beyond this point. + + # Build cover. + if 'cover' not in dont_build: + book.cover.build_delay() + book.cover_thumb.build_delay() + + # Build HTML and ebooks. + book.html_file.build_delay() + if not children: + for format_ in constants.EBOOK_FORMATS_WITHOUT_CHILDREN: + if format_ not in dont_build: + getattr(book, '%s_file' % format_).build_delay() + for format_ in constants.EBOOK_FORMATS_WITH_CHILDREN: + if format_ not in dont_build: + getattr(book, '%s_file' % format_).build_delay() + + if not settings.NO_SEARCH_INDEX and search_index: + tasks.index_book.delay(book.id, book_info=book_info, index_tags=search_index_tags) + + for child in notify_cover_changed: + child.parent_cover_changed() + + cls.published.send(sender=cls, instance=book) + return book + + @classmethod + def repopulate_ancestors(cls): + """Fixes the ancestry cache.""" + # TODO: table names + with transaction.atomic(): + cursor = connection.cursor() + if connection.vendor == 'postgres': + cursor.execute("TRUNCATE catalogue_book_ancestor") + cursor.execute(""" + WITH RECURSIVE ancestry AS ( + SELECT book.id, book.parent_id + FROM catalogue_book AS book + WHERE book.parent_id IS NOT NULL + UNION + SELECT ancestor.id, book.parent_id + FROM ancestry AS ancestor, catalogue_book AS book + WHERE ancestor.parent_id = book.id + AND book.parent_id IS NOT NULL + ) + INSERT INTO catalogue_book_ancestor + (from_book_id, to_book_id) + SELECT id, parent_id + FROM ancestry + ORDER BY id; + """) + else: + cursor.execute("DELETE FROM catalogue_book_ancestor") + for b in cls.objects.exclude(parent=None): + parent = b.parent + while parent is not None: + b.ancestor.add(parent) + parent = parent.parent + + def flush_includes(self, languages=True): + if not languages: + return + if languages is True: + languages = [lc for (lc, _ln) in settings.LANGUAGES] + flush_ssi_includes([ + template % (self.pk, lang) + for template in [ + '/katalog/b/%d/mini.%s.html', + '/katalog/b/%d/mini_nolink.%s.html', + '/katalog/b/%d/short.%s.html', + '/katalog/b/%d/wide.%s.html', + '/api/include/book/%d.%s.json', + '/api/include/book/%d.%s.xml', + ] + for lang in languages + ]) + + def cover_info(self, inherit=True): + """Returns a dictionary to serve as fallback for BookInfo. + + For now, the only thing inherited is the cover image. + """ + need = False + info = {} + for field in ('cover_url', 'cover_by', 'cover_source'): + val = self.extra_info.get(field) + if val: + info[field] = val + else: + need = True + if inherit and need and self.parent is not None: + parent_info = self.parent.cover_info() + parent_info.update(info) + info = parent_info + return info + + def related_themes(self): + return Tag.objects.usage_for_queryset( + Fragment.objects.filter(models.Q(book=self) | models.Q(book__ancestor=self)), + counts=True).filter(category='theme') + + def parent_cover_changed(self): + """Called when parent book's cover image is changed.""" + if not self.cover_info(inherit=False): + if 'cover' not in app_settings.DONT_BUILD: + self.cover.build_delay() + self.cover_thumb.build_delay() + for format_ in constants.EBOOK_FORMATS_WITH_COVERS: + if format_ not in app_settings.DONT_BUILD: + getattr(self, '%s_file' % format_).build_delay() + for child in self.children.all(): + child.parent_cover_changed() + + def other_versions(self): + """Find other versions (i.e. in other languages) of the book.""" + return type(self).objects.filter(common_slug=self.common_slug).exclude(pk=self.pk) + + def parents(self): + books = [] + parent = self.parent + while parent is not None: + books.insert(0, parent) + parent = parent.parent + return books + + def pretty_title(self, html_links=False): + names = [(tag.name, tag.get_absolute_url()) + for tag in self.tags.filter(category='author')] + books = self.parents() + [self] + names.extend([(b.title, b.get_absolute_url()) for b in books]) + + if html_links: + names = ['<a href="%s">%s</a>' % (tag[1], tag[0]) for tag in names] + else: + names = [tag[0] for tag in names] + return ', '.join(names) + + @classmethod + def tagged_top_level(cls, tags): + """ Returns top-level books tagged with `tags`. + + It only returns those books which don't have ancestors which are + also tagged with those tags. + + """ + objects = cls.tagged.with_all(tags) + return objects.exclude(ancestor__in=objects) + + @classmethod + def book_list(cls, filter=None): + """Generates a hierarchical listing of all books. + + Books are optionally filtered with a test function. + + """ + + books_by_parent = {} + books = cls.objects.all().order_by('parent_number', 'sort_key').only( + 'title', 'parent', 'slug') + if filter: + books = books.filter(filter).distinct() + + book_ids = set(b['pk'] for b in books.values("pk").iterator()) + for book in books.iterator(): + parent = book.parent_id + if parent not in book_ids: + parent = None + books_by_parent.setdefault(parent, []).append(book) + else: + for book in books.iterator(): + books_by_parent.setdefault(book.parent_id, []).append(book) + + orphans = [] + books_by_author = OrderedDict() + for tag in Tag.objects.filter(category='author').iterator(): + books_by_author[tag] = [] + + for book in books_by_parent.get(None, ()): + authors = list(book.tags.filter(category='author')) + if authors: + for author in authors: + books_by_author[author].append(book) + else: + orphans.append(book) + + return books_by_author, orphans, books_by_parent + + _audiences_pl = { + "SP": (1, u"szkoÅa podstawowa"), + "SP1": (1, u"szkoÅa podstawowa"), + "SP2": (1, u"szkoÅa podstawowa"), + "P": (1, u"szkoÅa podstawowa"), + "G": (2, u"gimnazjum"), + "L": (3, u"liceum"), + "LP": (3, u"liceum"), + } + def audiences_pl(self): + audiences = self.extra_info.get('audiences', []) + audiences = sorted(set([self._audiences_pl.get(a, (99, a)) for a in audiences])) + return [a[1] for a in audiences] + + def stage_note(self): + stage = self.extra_info.get('stage') + if stage and stage < '0.4': + return (_('This work needs modernisation'), + reverse('infopage', args=['wymagajace-uwspolczesnienia'])) + else: + return None, None + + def choose_fragment(self): + fragments = self.fragments.order_by() + fragments_count = fragments.count() + if not fragments_count and self.children.exists(): + fragments = Fragment.objects.filter(book__ancestor=self).order_by() + fragments_count = fragments.count() + if fragments_count: + return fragments[randint(0, fragments_count - 1)] + elif self.parent: + return self.parent.choose_fragment() + else: + return None + + +# add the file fields +for format_ in Book.formats: + field_name = "%s_file" % format_ + # This weird globals() assignment makes Django migrations comfortable. + _upload_to = _ebook_upload_to('book/%s/%%s.%s' % (format_, format_)) + _upload_to.__name__ = '_%s_upload_to' % format_ + globals()[_upload_to.__name__] = _upload_to + + EbookField(format_, _("%s file" % format_.upper()), + upload_to=_upload_to, + storage=bofh_storage, + max_length=255, + blank=True, + default='' + ).contribute_to_class(Book, field_name) diff --git a/src/catalogue/models/bookmedia.py b/src/catalogue/models/bookmedia.py new file mode 100644 index 000000000..1ef3fd7b9 --- /dev/null +++ b/src/catalogue/models/bookmedia.py @@ -0,0 +1,134 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from collections import OrderedDict +import json +from collections import namedtuple +from django.db import models +from django.utils.translation import ugettext_lazy as _ +import jsonfield +from fnpdjango.utils.text.slughifi import slughifi +from catalogue.fields import OverwritingFileField + + +def _file_upload_to(i, _n): + return 'book/%(ext)s/%(name)s.%(ext)s' % { + 'ext': i.ext(), 'name': slughifi(i.name)} + +class BookMedia(models.Model): + """Represents media attached to a book.""" + FileFormat = namedtuple("FileFormat", "name ext") + formats = OrderedDict([ + ('mp3', FileFormat(name='MP3', ext='mp3')), + ('ogg', FileFormat(name='Ogg Vorbis', ext='ogg')), + ('daisy', FileFormat(name='DAISY', ext='daisy.zip')), + ]) + format_choices = [(k, _('%s file' % t.name)) + for k, t in formats.items()] + + type = models.CharField(_('type'), db_index=True, choices=format_choices, max_length=20) + name = models.CharField(_('name'), max_length=512) + file = OverwritingFileField(_('file'), max_length=600, + upload_to=_file_upload_to) + uploaded_at = models.DateTimeField(_('creation date'), auto_now_add=True, editable=False, db_index=True) + extra_info = jsonfield.JSONField(_('extra information'), default={}, editable=False) + book = models.ForeignKey('Book', related_name='media') + source_sha1 = models.CharField(null=True, blank=True, max_length=40, editable=False) + + def __unicode__(self): + return "%s (%s)" % (self.name, self.file.name.split("/")[-1]) + + class Meta: + ordering = ('type', 'name') + verbose_name = _('book media') + verbose_name_plural = _('book media') + app_label = 'catalogue' + + def save(self, *args, **kwargs): + from catalogue.utils import ExistingFile, remove_zip + + try: + old = BookMedia.objects.get(pk=self.pk) + except BookMedia.DoesNotExist: + old = None + else: + # if name changed, change the file name, too + if slughifi(self.name) != slughifi(old.name): + self.file.save(None, ExistingFile(self.file.path), save=False, leave=True) + + super(BookMedia, self).save(*args, **kwargs) + + # remove the zip package for book with modified media + if old: + remove_zip("%s_%s" % (old.book.slug, old.type)) + remove_zip("%s_%s" % (self.book.slug, self.type)) + + extra_info = self.extra_info + if isinstance(extra_info, basestring): + # Walkaround for weird jsonfield 'no-decode' optimization. + extra_info = json.loads(extra_info) + extra_info.update(self.read_meta()) + self.extra_info = extra_info + self.source_sha1 = self.read_source_sha1(self.file.path, self.type) + return super(BookMedia, self).save(*args, **kwargs) + + def read_meta(self): + """ + Reads some metadata from the audiobook. + """ + import mutagen + from mutagen import id3 + + artist_name = director_name = project = funded_by = '' + if self.type == 'mp3': + try: + audio = id3.ID3(self.file.path) + artist_name = ', '.join(', '.join(tag.text) for tag in audio.getall('TPE1')) + director_name = ', '.join(', '.join(tag.text) for tag in audio.getall('TPE3')) + project = ", ".join([t.data for t in audio.getall('PRIV') + if t.owner == 'wolnelektury.pl?project']) + funded_by = ", ".join([t.data for t in audio.getall('PRIV') + if t.owner == 'wolnelektury.pl?funded_by']) + except: + pass + elif self.type == 'ogg': + try: + audio = mutagen.File(self.file.path) + artist_name = ', '.join(audio.get('artist', [])) + director_name = ', '.join(audio.get('conductor', [])) + project = ", ".join(audio.get('project', [])) + funded_by = ", ".join(audio.get('funded_by', [])) + except: + pass + else: + return {} + return {'artist_name': artist_name, 'director_name': director_name, + 'project': project, 'funded_by': funded_by} + + def ext(self): + return self.formats[self.type].ext + + @staticmethod + def read_source_sha1(filepath, filetype): + """ + Reads source file SHA1 from audiobok metadata. + """ + import mutagen + from mutagen import id3 + + if filetype == 'mp3': + try: + audio = id3.ID3(filepath) + return [t.data for t in audio.getall('PRIV') + if t.owner == 'wolnelektury.pl?flac_sha1'][0] + except: + return None + elif filetype == 'ogg': + try: + audio = mutagen.File(filepath) + return audio.get('flac_sha1', [None])[0] + except: + return None + else: + return None diff --git a/src/catalogue/models/collection.py b/src/catalogue/models/collection.py new file mode 100644 index 000000000..098501eba --- /dev/null +++ b/src/catalogue/models/collection.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from ssify import flush_ssi_includes + + +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')) + + kind = models.CharField(_('kind'), max_length=10, blank=False, default='book', db_index=True, choices=((('book'), _('book')), (('picture'), ('picture')))) + + class Meta: + ordering = ('title',) + verbose_name = _('collection') + verbose_name_plural = _('collections') + app_label = 'catalogue' + + def __unicode__(self): + return self.title + + @models.permalink + def get_absolute_url(self): + return ("collection", [self.slug]) + + def get_query(self): + slugs = self.book_slugs.split() + # allow URIs + slugs = [slug.rstrip('/').rsplit('/', 1)[-1] if '/' in slug else slug + for slug in slugs] + return models.Q(slug__in=slugs) + + def flush_includes(self, languages=True): + if not languages: + return + if languages is True: + languages = [lc for (lc, _ln) in settings.LANGUAGES] + + flush_ssi_includes([ + '/katalog/%s.json' % lang for lang in languages]) diff --git a/src/catalogue/models/fragment.py b/src/catalogue/models/fragment.py new file mode 100644 index 000000000..a3dbdea54 --- /dev/null +++ b/src/catalogue/models/fragment.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from django.contrib.contenttypes.fields import GenericRelation +from django.core.urlresolvers import reverse +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from newtagging import managers +from catalogue.models import Tag +from ssify import flush_ssi_includes + + +class Fragment(models.Model): + """Represents a themed fragment of a book.""" + text = models.TextField() + short_text = models.TextField(editable=False) + anchor = models.CharField(max_length=120) + book = models.ForeignKey('Book', related_name='fragments') + + objects = models.Manager() + tagged = managers.ModelTaggedItemManager(Tag) + tags = managers.TagDescriptor(Tag) + tag_relations = GenericRelation(Tag.intermediary_table_model) + + short_html_url_name = 'catalogue_fragment_short' + + class Meta: + ordering = ('book', 'anchor',) + verbose_name = _('fragment') + verbose_name_plural = _('fragments') + app_label = 'catalogue' + + def get_absolute_url(self): + return '%s#m%s' % (reverse('book_text', args=[self.book.slug]), self.anchor) + + def get_short_text(self): + """Returns short version of the fragment.""" + return self.short_text if self.short_text else self.text + + def flush_includes(self, languages=True): + if not languages: + return + if languages is True: + languages = [lc for (lc, _ln) in settings.LANGUAGES] + flush_ssi_includes([ + template % (self.pk, lang) + for template in [ + '/katalog/f/%d/short.%s.html', + '/api/include/fragment/%d.%s.json', + '/api/include/fragment/%d.%s.xml', + ] + for lang in languages + ]) diff --git a/src/catalogue/models/source.py b/src/catalogue/models/source.py new file mode 100644 index 000000000..9aff4efec --- /dev/null +++ b/src/catalogue/models/source.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.db import models +from django.utils.translation import ugettext_lazy as _ + + +class Source(models.Model): + """A collection of books, which might be defined before publishing them.""" + netloc = models.CharField(_('network location'), max_length=120, primary_key=True) + name = models.CharField(_('name'), max_length=120, blank=True) + + class Meta: + ordering = ('netloc',) + verbose_name = _('source') + verbose_name_plural = _('sources') + app_label = 'catalogue' + + def __unicode__(self): + return self.netloc + + def save(self, *args, **kwargs): + from catalogue.models import Book + try: + str(self.pk) + old_self = type(self).objects.get(pk=self) + except type(self).DoesNotExist: + old_name = u'' + old_netloc = self.netloc + else: + old_name = old_self.name + old_netloc = old_self.netloc + + ret = super(Source, self).save(*args, **kwargs) + + # If something really changed here, find relevant books + # and invalidate their cached includes. + if old_name != self.name or old_netloc != self.netloc: + for book in Book.objects.all(): + source = book.extra_info.get('source_url', '') + if self.netloc in source or (old_netloc != self.netloc + and old_netloc in source): + book.flush_includes() + return ret diff --git a/src/catalogue/models/tag.py b/src/catalogue/models/tag.py new file mode 100644 index 000000000..02bf6c07d --- /dev/null +++ b/src/catalogue/models/tag.py @@ -0,0 +1,233 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from django.core.cache import caches +from django.contrib.auth.models import User +from django.db import models +from django.db.models import permalink +from django.dispatch import Signal +from django.utils.translation import ugettext_lazy as _ +from newtagging.models import TagBase +from ssify import flush_ssi_includes + + +# Those are hard-coded here so that makemessages sees them. +TAG_CATEGORIES = ( + ('author', _('author')), + ('epoch', _('epoch')), + ('kind', _('kind')), + ('genre', _('genre')), + ('theme', _('theme')), + ('set', _('set')), + ('thing', _('thing')), # things shown on pictures +) + + +class Tag(TagBase): + """A tag attachable to books and fragments (and possibly anything). + + Used to represent searchable metadata (authors, epochs, genres, kinds), + fragment themes (motifs) and some book hierarchy related kludges.""" + name = models.CharField(_('name'), max_length=120, db_index=True) + slug = models.SlugField(_('slug'), max_length=120, db_index=True) + sort_key = models.CharField(_('sort key'), max_length=120, db_index=True) + category = models.CharField(_('category'), max_length=50, blank=False, null=False, + db_index=True, choices=TAG_CATEGORIES) + description = models.TextField(_('description'), blank=True) + + user = models.ForeignKey(User, blank=True, null=True) + gazeta_link = models.CharField(blank=True, max_length=240) + culturepl_link = models.CharField(blank=True, max_length=240) + wiki_link = models.CharField(blank=True, max_length=240) + + created_at = models.DateTimeField(_('creation date'), auto_now_add=True, db_index=True) + changed_at = models.DateTimeField(_('creation date'), auto_now=True, db_index=True) + + after_change = Signal(providing_args=['instance', 'languages']) + + class UrlDeprecationWarning(DeprecationWarning): + pass + + categories_rev = { + 'autor': 'author', + 'epoka': 'epoch', + 'rodzaj': 'kind', + 'gatunek': 'genre', + 'motyw': 'theme', + 'polka': 'set', + 'obiekt': 'thing', + } + categories_dict = dict((item[::-1] for item in categories_rev.iteritems())) + + class Meta: + ordering = ('sort_key',) + verbose_name = _('tag') + verbose_name_plural = _('tags') + unique_together = (("slug", "category"),) + app_label = 'catalogue' + + def save(self, *args, **kwargs): + flush_cache = flush_all_includes = False + if self.pk and self.category != 'set': + # Flush the whole views cache. + # Seem a little harsh, but changed tag names, descriptions + # and links come up at any number of places. + flush_cache = True + + # Find in which languages we need to flush related includes. + old_self = type(self).objects.get(pk=self.pk) + # Category shouldn't normally be changed, but just in case. + if self.category != old_self.category: + flush_all_includes = True + languages_changed = self.languages_changed(old_self) + + ret = super(Tag, self).save(*args, **kwargs) + + if flush_cache: + caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() + if flush_all_includes: + flush_ssi_includes() + else: + self.flush_includes() + self.after_change.send(sender=type(self), instance=self, languages=languages_changed) + + return ret + + def languages_changed(self, old): + all_langs = [lc for (lc, _ln) in settings.LANGUAGES] + if (old.category, old.slug) != (self.category, self.slug): + return all_langs + languages = set() + for lang in all_langs: + name_field = 'name_%s' % lang + if getattr(old, name_field) != getattr(self, name_field): + languages.add(lang) + return languages + + def flush_includes(self, languages=True): + if not languages: + return + if languages is True: + languages = [lc for (lc, _ln) in settings.LANGUAGES] + flush_ssi_includes([ + template % (self.pk, lang) + for template in [ + '/api/include/tag/%d.%s.json', + '/api/include/tag/%d.%s.xml', + ] + for lang in languages + ]) + flush_ssi_includes([ + '/katalog/%s.json' % lang for lang in languages]) + + def __unicode__(self): + return self.name + + def __repr__(self): + return "Tag(slug=%r)" % self.slug + + @permalink + def get_absolute_url(self): + return ('catalogue.views.tagged_object_list', [self.url_chunk]) + + @classmethod + @permalink + def create_url(cls, category, slug): + return ('catalogue.views.tagged_object_list', [ + '/'.join((cls.categories_dict[category], slug)) + ]) + + def has_description(self): + return len(self.description) > 0 + has_description.short_description = _('description') + has_description.boolean = True + + @staticmethod + def get_tag_list(tags): + if isinstance(tags, basestring): + real_tags = [] + ambiguous_slugs = [] + category = None + deprecated = False + tags_splitted = tags.split('/') + for name in tags_splitted: + if category: + real_tags.append(Tag.objects.get(slug=name, category=category)) + category = None + elif name in Tag.categories_rev: + category = Tag.categories_rev[name] + else: + try: + real_tags.append(Tag.objects.get(slug=name)) + deprecated = True + except Tag.MultipleObjectsReturned, e: + ambiguous_slugs.append(name) + + if category: + # something strange left off + raise Tag.DoesNotExist() + if ambiguous_slugs: + # some tags should be qualified + e = Tag.MultipleObjectsReturned() + e.tags = real_tags + e.ambiguous_slugs = ambiguous_slugs + raise e + if deprecated: + e = Tag.UrlDeprecationWarning() + e.tags = real_tags + raise e + return real_tags + else: + return TagBase.get_tag_list(tags) + + @property + def url_chunk(self): + return '/'.join((Tag.categories_dict[self.category], self.slug)) + + @staticmethod + def tags_from_info(info): + from fnpdjango.utils.text.slughifi import slughifi + from sortify import sortify + meta_tags = [] + categories = (('kinds', 'kind'), ('genres', 'genre'), ('authors', 'author'), ('epochs', 'epoch')) + for field_name, category in categories: + try: + tag_names = getattr(info, field_name) + except: + try: + tag_names = [getattr(info, category)] + except: + # For instance, Pictures do not have 'genre' field. + continue + for tag_name in tag_names: + lang = getattr(tag_name, 'lang', settings.LANGUAGE_CODE) + tag_sort_key = tag_name + if category == 'author': + tag_sort_key = tag_name.last_name + tag_name = tag_name.readable() + if lang == settings.LANGUAGE_CODE: + # Allow creating new tag, if it's in default language. + tag, created = Tag.objects.get_or_create(slug=slughifi(tag_name), category=category) + if created: + tag_name = unicode(tag_name) + tag.name = tag_name + setattr(tag, "name_%s" % lang, tag_name) + tag.sort_key = sortify(tag_sort_key.lower()) + tag.save() + + meta_tags.append(tag) + else: + # Ignore unknown tags in non-default languages. + try: + tag = Tag.objects.get(category=category, **{"name_%s" % lang: tag_name}) + except Tag.DoesNotExist: + pass + else: + meta_tags.append(tag) + return meta_tags + + +# Pickle complains about not having this. +TagRelation = Tag.intermediary_table_model diff --git a/src/catalogue/signals.py b/src/catalogue/signals.py new file mode 100644 index 000000000..660d26493 --- /dev/null +++ b/src/catalogue/signals.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from django.core.cache import caches +from django.db.models.signals import post_save, post_delete +from django.dispatch import receiver +from ssify import flush_ssi_includes +from newtagging.models import tags_updated +from picture.models import Picture, PictureArea +from .models import BookMedia, Book, Collection, Fragment, Tag + + +#### +# BookMedia +#### + + +@receiver([post_save, post_delete], sender=BookMedia) +def bookmedia_save(sender, instance, **kwargs): + instance.book.save() + + +#### +# Collection +#### + + +@receiver(post_save, sender=Collection) +def collection_save(sender, instance, **kwargs): + caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() + flush_ssi_includes([ + '/katalog/%s.json' % lang + for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) + + +@receiver(post_delete, sender=Collection) +def collection_delete(sender, instance, **kwargs): + flush_ssi_includes([ + '/katalog/%s.json' % lang + for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) + +#### +# Book +#### + + +@receiver(post_save, sender=Book) +def book_save(sender, instance, **kwargs): + # Books come out anywhere. + caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() + instance.flush_includes() + + +@receiver(post_delete, sender=Book) +def book_delete(sender, instance, **kwargs): + caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() + flush_ssi_includes([ + '/katalog/%s.json' % lang + for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) + + if not settings.NO_SEARCH_INDEX: + # remove the book from search index, when it is deleted. + from search.index import Index + idx = Index() + idx.remove_book(instance) + idx.index_tags() + + +#### +# Tag +#### + + +@receiver(Tag.after_change) +def tag_after_change(sender, instance, languages, **kwargs): + caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() + flush_ssi_includes([ + '/katalog/%s.json' % lang + for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) + + for model in Book, Picture: + for model_instance in model.tagged.with_all([instance]).only('pk'): + model_instance.flush_includes() + + if instance.category == 'author': + for model in Fragment, PictureArea: + for model_instance in model.tagged.with_all([instance]).only('pk'): + model_instance.flush_includes() + + +@receiver(tags_updated) +def receive_tags_updated(sender, instance, affected_tags, **kwargs): + categories = set(tag.category for tag in affected_tags + if tag.category not in ('set', 'book')) + if not categories: + return + + caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() + instance.flush_includes() + flush_ssi_includes([ + '/katalog/%s.json' % lang + for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) diff --git a/src/catalogue/static/jplayer/Jplayer.swf b/src/catalogue/static/jplayer/Jplayer.swf new file mode 100644 index 000000000..85c0ba38e Binary files /dev/null and b/src/catalogue/static/jplayer/Jplayer.swf differ diff --git a/src/catalogue/static/jplayer/jplayer.blue.monday.css b/src/catalogue/static/jplayer/jplayer.blue.monday.css new file mode 100644 index 000000000..f8b314b6e --- /dev/null +++ b/src/catalogue/static/jplayer/jplayer.blue.monday.css @@ -0,0 +1,627 @@ +/* + * Skin for jPlayer Plugin (jQuery JavaScript Library) + * http://www.happyworm.com/jquery/jplayer + * + * Skin Name: Blue Monday + * + * Copyright (c) 2010-2011 Happyworm Ltd + * Dual licensed under the MIT and GPL licenses. + * - http://www.opensource.org/licenses/mit-license.php + * - http://www.gnu.org/copyleft/gpl.html + * + * Author: Silvia Benvenuti + * Skin Version: 4.0 (jPlayer 2.1.0) + * Date: 1st September 2011 + */ + +div.jp-audio, +div.jp-video { + + /* Edit the font-size to counteract inherited font sizing. + * Eg. 1.25em = 1 / 0.8em + */ + + font-size:1.25em; /* 1.25em for testing in site pages */ /* No parent CSS that can effect the size in the demos ZIP */ + + font-family:Verdana, Arial, sans-serif; + line-height:1.6; + color: #565656; + border:1px solid #009be3; + background-color:#eee; + position:relative; +} +div.jp-audio { + width:420px; +} +div.jp-video-270p { + width:480px; +} +div.jp-video-360p { + width:640px; +} +div.jp-video-full { + /* Rules for IE6 (full-screen) */ + width:480px; + height:270px; + /* Rules for IE7 (full-screen) - Otherwise the relative container causes other page items that are not position:static (default) to appear over the video/gui. */ + position:static !important; position:relative +} + +div.jp-video-full div.jp-jplayer { + top: 0; + left: 0; + position: fixed !important; position: relative; /* Rules for IE6 (full-screen) */ + overflow: hidden; + z-index:1000; +} + +div.jp-video-full div.jp-gui { + position: fixed !important; position: static; /* Rules for IE6 (full-screen) */ + top: 0; + left: 0; + width:100%; + height:100%; + z-index:1000; +} + +div.jp-video-full div.jp-interface { + position: absolute !important; position: relative; /* Rules for IE6 (full-screen) */ + bottom: 0; + left: 0; + z-index:1000; +} + +div.jp-interface { + position: relative; + background-color:#eee; + width:100%; +} + +div.jp-interface a { + color: #0c767d; +} + +div.jp-audio div.jp-type-single div.jp-interface { + height:80px; +} +div.jp-audio div.jp-type-playlist div.jp-interface { + height:80px; +} + +div.jp-video div.jp-interface { + border-top:1px solid #009be3; +} + +/* @group CONTROLS */ + +div.jp-controls-holder { + clear: both; + width:440px; + margin:0 auto; + position: relative; + overflow:hidden; + top:-8px; /* This negative value depends on the size of the text in jp-currentTime and jp-duration */ +} + +div.jp-interface ul.jp-controls { + list-style-type:none; + margin:0; + padding: 0; + overflow:hidden; +} + +div.jp-audio ul.jp-controls { + width: 380px; + padding:20px 20px 0 20px; +} + +div.jp-video div.jp-type-single ul.jp-controls { + width: 78px; + margin-left: 200px; +} + +div.jp-video div.jp-type-playlist ul.jp-controls { + width: 134px; + margin-left: 172px; +} +div.jp-video ul.jp-controls, +div.jp-interface ul.jp-controls li { + display:inline; + float: left; +} + +div.jp-interface ul.jp-controls a { + display:block; + overflow:hidden; + text-indent:-9999px; +} +a.jp-play, +a.jp-pause { + width:40px; + height:40px; +} + +a.jp-play { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 0 no-repeat; +} +a.jp-play:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -41px 0 no-repeat; +} +a.jp-pause { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -42px no-repeat; + display: none; +} +a.jp-pause:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -41px -42px no-repeat; +} + +a.jp-stop, a.jp-previous, a.jp-next { + width:28px; + height:28px; + margin-top:6px; +} + +a.jp-stop { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -83px no-repeat; + margin-left:10px; +} + +a.jp-stop:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -29px -83px no-repeat; +} + +a.jp-previous { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -112px no-repeat; +} +a.jp-previous:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -29px -112px no-repeat; +} + +a.jp-next { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -141px no-repeat; +} +a.jp-next:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -29px -141px no-repeat; +} + +/* @end */ + +/* @group progress bar */ + +div.jp-progress { + overflow:hidden; + background-color: #ddd; +} +div.jp-audio div.jp-progress { + position: absolute; + top:32px; + height:15px; +} +div.jp-audio div.jp-type-single div.jp-progress { + left:110px; + width:186px; +} +div.jp-audio div.jp-type-playlist div.jp-progress { + left:166px; + width:130px; +} +div.jp-video div.jp-progress { + top:0px; + left:0px; + width:100%; + height:10px; +} +div.jp-seek-bar { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -202px repeat-x; + width:0px; + height:100%; + cursor: pointer; +} +div.jp-play-bar { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -218px repeat-x ; + width:0px; + height:100%; +} + +/* The seeking class is added/removed inside jPlayer */ +div.jp-seeking-bg { + background: url("/static/jplayer/jplayer.blue.monday.seeking.gif"); +} + +/* @end */ + +/* @group volume controls */ + + +a.jp-mute, +a.jp-unmute, +a.jp-volume-max { + width:18px; + height:15px; + margin-top:12px; +} + +div.jp-audio div.jp-type-single a.jp-mute, +div.jp-audio div.jp-type-single a.jp-unmute { + margin-left: 210px; +} + +div.jp-audio div.jp-type-playlist a.jp-mute, +div.jp-audio div.jp-type-playlist a.jp-unmute { + margin-left: 154px; +} + +div.jp-audio a.jp-volume-max { + margin-left: 56px; +} + +div.jp-video a.jp-mute, +div.jp-video a.jp-unmute, +div.jp-video a.jp-volume-max { + position: absolute; + top:12px; + margin-top:0; +} + +div.jp-video a.jp-mute, +div.jp-video a.jp-unmute { + left: 50px; +} + +div.jp-video a.jp-volume-max { + left: 134px; +} + +a.jp-mute { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -170px no-repeat; +} +a.jp-mute:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -19px -170px no-repeat; +} +a.jp-unmute { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -60px -170px no-repeat; + display: none; +} +a.jp-unmute:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -79px -170px no-repeat; +} + a.jp-volume-max { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -186px no-repeat; +} +a.jp-volume-max:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -19px -186px no-repeat; +} + +div.jp-volume-bar { + position: absolute; + overflow:hidden; + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -250px repeat-x; + width:46px; + height:5px; + cursor: pointer; +} +div.jp-audio div.jp-volume-bar { + top:37px; + left:330px; +} +div.jp-video div.jp-volume-bar { + top:17px; + left:72px; +} +div.jp-volume-bar-value { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -256px repeat-x; + width:0px; + height:5px; +} + +/* @end */ + +/* @group current time and duration */ + +div.jp-audio div.jp-time-holder { + position:absolute; + top:50px; +} +div.jp-audio div.jp-type-single div.jp-time-holder { + left:110px; + width:186px; +} +div.jp-audio div.jp-type-playlist div.jp-time-holder { + left:166px; + width:130px; +} + +div.jp-current-time, +div.jp-duration { + width:60px; + font-size:.64em; + font-style:oblique; +} +div.jp-current-time { + float: left; + display:inline; +} +div.jp-duration { + float: right; + display:inline; + text-align: right; +} + +div.jp-video div.jp-current-time { + margin-left:20px; +} +div.jp-video div.jp-duration { + margin-right:20px; +} + +/* @end */ + +/* @group playlist */ + +div.jp-title { + font-weight:bold; + text-align:center; +} + +div.jp-title, +div.jp-playlist { + width:100%; + background-color:#ccc; + border-top:1px solid #009be3; +} +div.jp-type-single div.jp-title, +div.jp-type-playlist div.jp-title, +div.jp-type-single div.jp-playlist { + border-top:none; +} +div.jp-title ul, +div.jp-playlist ul { + list-style-type:none; + margin:0; + padding:0 20px; + font-size:.8em; +} + +div.jp-title li { + padding:5px 0; + font-weight:bold; +} +div.jp-playlist li { + padding:5px 0 4px 20px; + border-bottom:1px solid #eee; +} + +div.jp-playlist li div { + display:inline; +} + +/* Note that the first-child (IE6) and last-child (IE6/7/8) selectors do not work on IE */ + +div.jp-type-playlist div.jp-playlist li:last-child { + padding:5px 0 5px 20px; + border-bottom:none; +} +div.jp-type-playlist div.jp-playlist li.jp-playlist-current { + list-style-type:square; + list-style-position:inside; + padding-left:7px; +} +div.jp-type-playlist div.jp-playlist a { + color: #333; + text-decoration: none; +} +div.jp-type-playlist div.jp-playlist a:hover { + color:#0D7E85; +} +div.jp-type-playlist div.jp-playlist a.jp-playlist-current { + color:#0D7E85; +} + +div.jp-type-playlist div.jp-playlist a.jp-playlist-item-remove { + float:right; + display:inline; + text-align:right; + margin-right:10px; + font-weight:bold; + color:#666; +} +div.jp-type-playlist div.jp-playlist a.jp-playlist-item-remove:hover { + color:#0D7E85; +} +div.jp-type-playlist div.jp-playlist span.jp-free-media { + float:right; + display:inline; + text-align:right; + margin-right:10px; +} +div.jp-type-playlist div.jp-playlist span.jp-free-media a{ + color:#565656; +} +div.jp-type-playlist div.jp-playlist span.jp-free-media a:hover{ + color:#0D7E85; +} +span.jp-artist { + font-size:.8em; + color:#565656; +} + +/* @end */ + +div.jp-video-play { + position:absolute; + top:0; + left:0; + width:100%; + cursor:pointer; + background-color:rgba(0,0,0,0); /* Makes IE9 work with the active area over the whole video area. IE6/7/8 only have the button as active area. */ +} +div.jp-video-270p div.jp-video-play { + height:270px; +} +div.jp-video-360p div.jp-video-play { + height:360px; +} +div.jp-video-full div.jp-video-play { + height:100%; + z-index:1000; +} +a.jp-video-play-icon { + position:relative; + display:block; + width: 112px; + height: 100px; + + margin-left:-56px; + margin-top:-50px; + left:50%; + top:50%; + + background: url("/static/jplayer/jplayer.blue.monday.video.play.png") 0 0 no-repeat; + text-indent:-9999px; +} +div.jp-video-play:hover a.jp-video-play-icon { + background: url("/static/jplayer/jplayer.blue.monday.video.play.png") 0 -100px no-repeat; +} + + + + + +div.jp-jplayer audio, +div.jp-jplayer { + width:0px; + height:0px; +} + +div.jp-jplayer { + background-color: #000000; +} + + + + + +/* @group TOGGLES */ + +/* The audio toggles are nested inside jp-time-holder */ + +ul.jp-toggles { + list-style-type:none; + padding:0; + margin:0 auto; + overflow:hidden; +} + +div.jp-audio .jp-type-single ul.jp-toggles { + width:25px; +} +div.jp-audio .jp-type-playlist ul.jp-toggles { + width:55px; + margin: 0; + position: absolute; + left: 325px; + top: 50px; +} + +div.jp-video ul.jp-toggles { + margin-top:10px; + width:100px; +} + +ul.jp-toggles li { + display:block; + float:right; +} + +ul.jp-toggles li a { + display:block; + width:25px; + height:18px; + text-indent:-9999px; + line-height:100%; /* need this for IE6 */ +} + +a.jp-full-screen { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -310px no-repeat; + margin-left: 20px; +} + +a.jp-full-screen:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -30px -310px no-repeat; +} + +a.jp-restore-screen { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -60px -310px no-repeat; + margin-left: 20px; +} + +a.jp-restore-screen:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -90px -310px no-repeat; +} + +a.jp-repeat { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -290px no-repeat; +} + +a.jp-repeat:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -30px -290px no-repeat; +} + +a.jp-repeat-off { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -60px -290px no-repeat; +} + +a.jp-repeat-off:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -90px -290px no-repeat; +} + +a.jp-shuffle { + background: url("/static/jplayer/jplayer.blue.monday.jpg") 0 -270px no-repeat; + margin-left: 5px; +} + +a.jp-shuffle:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -30px -270px no-repeat; +} + +a.jp-shuffle-off { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -60px -270px no-repeat; + margin-left: 5px; +} + +a.jp-shuffle-off:hover { + background: url("/static/jplayer/jplayer.blue.monday.jpg") -90px -270px no-repeat; +} + + +/* @end */ + +/* @group NO SOLUTION error feedback */ + +.jp-no-solution { + position:absolute; + width:390px; + margin-left:-202px; + left:50%; + top: 10px; + + padding:5px; + font-size:.8em; + background-color:#eee; + border:2px solid #009be3; + color:#000; + display:none; +} + +.jp-no-solution a { + color:#000; +} + +.jp-no-solution span { + font-size:1em; + display:block; + text-align:center; + font-weight:bold; +} + +/* @end */ diff --git a/src/catalogue/static/jplayer/jplayer.blue.monday.jpg b/src/catalogue/static/jplayer/jplayer.blue.monday.jpg new file mode 100644 index 000000000..adab53ff7 Binary files /dev/null and b/src/catalogue/static/jplayer/jplayer.blue.monday.jpg differ diff --git a/src/catalogue/static/jplayer/jplayer.blue.monday.seeking.gif b/src/catalogue/static/jplayer/jplayer.blue.monday.seeking.gif new file mode 100644 index 000000000..dbd2105ab Binary files /dev/null and b/src/catalogue/static/jplayer/jplayer.blue.monday.seeking.gif differ diff --git a/src/catalogue/static/jplayer/jplayer.blue.monday.video.play.png b/src/catalogue/static/jplayer/jplayer.blue.monday.video.play.png new file mode 100644 index 000000000..8e97df011 Binary files /dev/null and b/src/catalogue/static/jplayer/jplayer.blue.monday.video.play.png differ diff --git a/src/catalogue/static/jplayer/jplayer.playlist.min.js b/src/catalogue/static/jplayer/jplayer.playlist.min.js new file mode 100644 index 000000000..138ccfa5e --- /dev/null +++ b/src/catalogue/static/jplayer/jplayer.playlist.min.js @@ -0,0 +1,34 @@ +/* + * Playlist Object for the jPlayer Plugin + * http://www.jplayer.org + * + * Copyright (c) 2009 - 2013 Happyworm Ltd + * Dual licensed under the MIT and GPL licenses. + * - http://www.opensource.org/licenses/mit-license.php + * - http://www.gnu.org/copyleft/gpl.html + * + * Author: Mark J Panaghiston + * Version: 2.3.0 + * Date: 20th April 2013 + * + * Requires: + * - jQuery 1.7.0+ + * - jPlayer 2.3.0+ + */ +(function(b,f){jPlayerPlaylist=function(a,c,d){var e=this;this.current=0;this.removing=this.shuffled=this.loop=!1;this.cssSelector=b.extend({},this._cssSelector,a);this.options=b.extend(!0,{keyBindings:{next:{key:39,fn:function(){e.next()}},previous:{key:37,fn:function(){e.previous()}}}},this._options,d);this.playlist=[];this.original=[];this._initPlaylist(c);this.cssSelector.title=this.cssSelector.cssSelectorAncestor+" .jp-title";this.cssSelector.playlist=this.cssSelector.cssSelectorAncestor+" .jp-playlist"; +this.cssSelector.next=this.cssSelector.cssSelectorAncestor+" .jp-next";this.cssSelector.previous=this.cssSelector.cssSelectorAncestor+" .jp-previous";this.cssSelector.shuffle=this.cssSelector.cssSelectorAncestor+" .jp-shuffle";this.cssSelector.shuffleOff=this.cssSelector.cssSelectorAncestor+" .jp-shuffle-off";this.options.cssSelectorAncestor=this.cssSelector.cssSelectorAncestor;this.options.repeat=function(a){e.loop=a.jPlayer.options.loop};b(this.cssSelector.jPlayer).bind(b.jPlayer.event.ready,function(){e._init()}); +b(this.cssSelector.jPlayer).bind(b.jPlayer.event.ended,function(){e.next()});b(this.cssSelector.jPlayer).bind(b.jPlayer.event.play,function(){b(this).jPlayer("pauseOthers")});b(this.cssSelector.jPlayer).bind(b.jPlayer.event.resize,function(a){a.jPlayer.options.fullScreen?b(e.cssSelector.title).show():b(e.cssSelector.title).hide()});b(this.cssSelector.previous).click(function(){e.previous();b(this).blur();return!1});b(this.cssSelector.next).click(function(){e.next();b(this).blur();return!1});b(this.cssSelector.shuffle).click(function(){e.shuffle(!0); +return!1});b(this.cssSelector.shuffleOff).click(function(){e.shuffle(!1);return!1}).hide();this.options.fullScreen||b(this.cssSelector.title).hide();b(this.cssSelector.playlist+" ul").empty();this._createItemHandlers();b(this.cssSelector.jPlayer).jPlayer(this.options)};jPlayerPlaylist.prototype={_cssSelector:{jPlayer:"#jquery_jplayer_1",cssSelectorAncestor:"#jp_container_1"},_options:{playlistOptions:{autoPlay:!1,loopOnPrevious:!1,shuffleOnLoop:!0,enableRemoveControls:!1,displayTime:"slow",addTime:"fast", +removeTime:"fast",shuffleTime:"slow",itemClass:"jp-playlist-item",freeGroupClass:"jp-free-media",freeItemClass:"jp-playlist-item-free",removeItemClass:"jp-playlist-item-remove"}},option:function(a,b){if(b===f)return this.options.playlistOptions[a];this.options.playlistOptions[a]=b;switch(a){case "enableRemoveControls":this._updateControls();break;case "itemClass":case "freeGroupClass":case "freeItemClass":case "removeItemClass":this._refresh(!0),this._createItemHandlers()}return this},_init:function(){var a= +this;this._refresh(function(){a.options.playlistOptions.autoPlay?a.play(a.current):a.select(a.current)})},_initPlaylist:function(a){this.current=0;this.removing=this.shuffled=!1;this.original=b.extend(!0,[],a);this._originalPlaylist()},_originalPlaylist:function(){var a=this;this.playlist=[];b.each(this.original,function(b){a.playlist[b]=a.original[b]})},_refresh:function(a){var c=this;if(a&&!b.isFunction(a))b(this.cssSelector.playlist+" ul").empty(),b.each(this.playlist,function(a){b(c.cssSelector.playlist+ +" ul").append(c._createListItem(c.playlist[a]))}),this._updateControls();else{var d=b(this.cssSelector.playlist+" ul").children().length?this.options.playlistOptions.displayTime:0;b(this.cssSelector.playlist+" ul").slideUp(d,function(){var d=b(this);b(this).empty();b.each(c.playlist,function(a){d.append(c._createListItem(c.playlist[a]))});c._updateControls();b.isFunction(a)&&a();c.playlist.length?b(this).slideDown(c.options.playlistOptions.displayTime):b(this).show()})}},_createListItem:function(a){var c= +this,d="<li><div>",d=d+("<a href='javascript:;' class='"+this.options.playlistOptions.removeItemClass+"'>×</a>");if(a.free){var e=!0,d=d+("<span class='"+this.options.playlistOptions.freeGroupClass+"'>(");b.each(a,function(a,f){b.jPlayer.prototype.format[a]&&(e?e=!1:d+=" | ",d+="<a class='"+c.options.playlistOptions.freeItemClass+"' href='"+f+"' tabindex='1'>"+a+"</a>")});d+=")</span>"}d+="<a href='javascript:;' class='"+this.options.playlistOptions.itemClass+"' tabindex='1'>"+a.title+(a.artist? +" <span class='jp-artist'>by "+a.artist+"</span>":"")+"</a>";return d+="</div></li>"},_createItemHandlers:function(){var a=this;b(this.cssSelector.playlist).off("click","a."+this.options.playlistOptions.itemClass).on("click","a."+this.options.playlistOptions.itemClass,function(){var c=b(this).parent().parent().index();a.current!==c?a.play(c):b(a.cssSelector.jPlayer).jPlayer("play");b(this).blur();return!1});b(this.cssSelector.playlist).off("click","a."+this.options.playlistOptions.freeItemClass).on("click", +"a."+this.options.playlistOptions.freeItemClass,function(){b(this).parent().parent().find("."+a.options.playlistOptions.itemClass).click();b(this).blur();return!1});b(this.cssSelector.playlist).off("click","a."+this.options.playlistOptions.removeItemClass).on("click","a."+this.options.playlistOptions.removeItemClass,function(){var c=b(this).parent().parent().index();a.remove(c);b(this).blur();return!1})},_updateControls:function(){this.options.playlistOptions.enableRemoveControls?b(this.cssSelector.playlist+ +" ."+this.options.playlistOptions.removeItemClass).show():b(this.cssSelector.playlist+" ."+this.options.playlistOptions.removeItemClass).hide();this.shuffled?(b(this.cssSelector.shuffleOff).show(),b(this.cssSelector.shuffle).hide()):(b(this.cssSelector.shuffleOff).hide(),b(this.cssSelector.shuffle).show())},_highlight:function(a){this.playlist.length&&a!==f&&(b(this.cssSelector.playlist+" .jp-playlist-current").removeClass("jp-playlist-current"),b(this.cssSelector.playlist+" li:nth-child("+(a+1)+ +")").addClass("jp-playlist-current").find(".jp-playlist-item").addClass("jp-playlist-current"),b(this.cssSelector.title+" li").html(this.playlist[a].title+(this.playlist[a].artist?" <span class='jp-artist'>by "+this.playlist[a].artist+"</span>":"")))},setPlaylist:function(a){this._initPlaylist(a);this._init()},add:function(a,c){b(this.cssSelector.playlist+" ul").append(this._createListItem(a)).find("li:last-child").hide().slideDown(this.options.playlistOptions.addTime);this._updateControls();this.original.push(a); +this.playlist.push(a);c?this.play(this.playlist.length-1):1===this.original.length&&this.select(0)},remove:function(a){var c=this;if(a===f)return this._initPlaylist([]),this._refresh(function(){b(c.cssSelector.jPlayer).jPlayer("clearMedia")}),!0;if(this.removing)return!1;a=0>a?c.original.length+a:a;0<=a&&a<this.playlist.length&&(this.removing=!0,b(this.cssSelector.playlist+" li:nth-child("+(a+1)+")").slideUp(this.options.playlistOptions.removeTime,function(){b(this).remove();if(c.shuffled){var d= +c.playlist[a];b.each(c.original,function(a){if(c.original[a]===d)return c.original.splice(a,1),!1})}else c.original.splice(a,1);c.playlist.splice(a,1);c.original.length?a===c.current?(c.current=a<c.original.length?c.current:c.original.length-1,c.select(c.current)):a<c.current&&c.current--:(b(c.cssSelector.jPlayer).jPlayer("clearMedia"),c.current=0,c.shuffled=!1,c._updateControls());c.removing=!1}));return!0},select:function(a){a=0>a?this.original.length+a:a;0<=a&&a<this.playlist.length?(this.current= +a,this._highlight(a),b(this.cssSelector.jPlayer).jPlayer("setMedia",this.playlist[this.current])):this.current=0},play:function(a){a=0>a?this.original.length+a:a;0<=a&&a<this.playlist.length?this.playlist.length&&(this.select(a),b(this.cssSelector.jPlayer).jPlayer("play")):a===f&&b(this.cssSelector.jPlayer).jPlayer("play")},pause:function(){b(this.cssSelector.jPlayer).jPlayer("pause")},next:function(){var a=this.current+1<this.playlist.length?this.current+1:0;this.loop?0===a&&this.shuffled&&this.options.playlistOptions.shuffleOnLoop&& +1<this.playlist.length?this.shuffle(!0,!0):this.play(a):0<a&&this.play(a)},previous:function(){var a=0<=this.current-1?this.current-1:this.playlist.length-1;(this.loop&&this.options.playlistOptions.loopOnPrevious||a<this.playlist.length-1)&&this.play(a)},shuffle:function(a,c){var d=this;a===f&&(a=!this.shuffled);(a||a!==this.shuffled)&&b(this.cssSelector.playlist+" ul").slideUp(this.options.playlistOptions.shuffleTime,function(){(d.shuffled=a)?d.playlist.sort(function(){return 0.5-Math.random()}): +d._originalPlaylist();d._refresh(!0);c||!b(d.cssSelector.jPlayer).data("jPlayer").status.paused?d.play(0):d.select(0);b(this).slideDown(d.options.playlistOptions.shuffleTime)})}}})(jQuery); \ No newline at end of file diff --git a/src/catalogue/static/jplayer/jquery.jplayer.min.js b/src/catalogue/static/jplayer/jquery.jplayer.min.js new file mode 100644 index 000000000..ecd3ab514 --- /dev/null +++ b/src/catalogue/static/jplayer/jquery.jplayer.min.js @@ -0,0 +1,107 @@ +/* + * jPlayer Plugin for jQuery JavaScript Library + * http://www.jplayer.org + * + * Copyright (c) 2009 - 2013 Happyworm Ltd + * Licensed under the MIT license. + * http://opensource.org/licenses/MIT + * + * Author: Mark J Panaghiston + * Version: 2.4.0 + * Date: 5th June 2013 + */ + +(function(b,f){"function"===typeof define&&define.amd?define(["jquery"],f):b.jQuery?f(b.jQuery):f(b.Zepto)})(this,function(b,f){b.fn.jPlayer=function(a){var c="string"===typeof a,d=Array.prototype.slice.call(arguments,1),e=this;a=!c&&d.length?b.extend.apply(null,[!0,a].concat(d)):a;if(c&&"_"===a.charAt(0))return e;c?this.each(function(){var c=b(this).data("jPlayer"),h=c&&b.isFunction(c[a])?c[a].apply(c,d):c;if(h!==c&&h!==f)return e=h,!1}):this.each(function(){var c=b(this).data("jPlayer");c?c.option(a|| +{}):b(this).data("jPlayer",new b.jPlayer(a,this))});return e};b.jPlayer=function(a,c){if(arguments.length){this.element=b(c);this.options=b.extend(!0,{},this.options,a);var d=this;this.element.bind("remove.jPlayer",function(){d.destroy()});this._init()}};"function"!==typeof b.fn.stop&&(b.fn.stop=function(){});b.jPlayer.emulateMethods="load play pause";b.jPlayer.emulateStatus="src readyState networkState currentTime duration paused ended playbackRate";b.jPlayer.emulateOptions="muted volume";b.jPlayer.reservedEvent= +"ready flashreset resize repeat error warning";b.jPlayer.event={};b.each("ready flashreset resize repeat click error warning loadstart progress suspend abort emptied stalled play pause loadedmetadata loadeddata waiting playing canplay canplaythrough seeking seeked timeupdate ended ratechange durationchange volumechange".split(" "),function(){b.jPlayer.event[this]="jPlayer_"+this});b.jPlayer.htmlEvent="loadstart abort emptied stalled loadedmetadata loadeddata canplay canplaythrough ratechange".split(" "); +b.jPlayer.pause=function(){b.each(b.jPlayer.prototype.instances,function(a,c){c.data("jPlayer").status.srcSet&&c.jPlayer("pause")})};b.jPlayer.timeFormat={showHour:!1,showMin:!0,showSec:!0,padHour:!1,padMin:!0,padSec:!0,sepHour:":",sepMin:":",sepSec:""};var l=function(){this.init()};l.prototype={init:function(){this.options={timeFormat:b.jPlayer.timeFormat}},time:function(a){var c=new Date(1E3*(a&&"number"===typeof a?a:0)),b=c.getUTCHours();a=this.options.timeFormat.showHour?c.getUTCMinutes():c.getUTCMinutes()+ +60*b;c=this.options.timeFormat.showMin?c.getUTCSeconds():c.getUTCSeconds()+60*a;b=this.options.timeFormat.padHour&&10>b?"0"+b:b;a=this.options.timeFormat.padMin&&10>a?"0"+a:a;c=this.options.timeFormat.padSec&&10>c?"0"+c:c;b=""+(this.options.timeFormat.showHour?b+this.options.timeFormat.sepHour:"");b+=this.options.timeFormat.showMin?a+this.options.timeFormat.sepMin:"";return b+=this.options.timeFormat.showSec?c+this.options.timeFormat.sepSec:""}};var m=new l;b.jPlayer.convertTime=function(a){return m.time(a)}; +b.jPlayer.uaBrowser=function(a){a=a.toLowerCase();var b=/(opera)(?:.*version)?[ \/]([\w.]+)/,d=/(msie) ([\w.]+)/,e=/(mozilla)(?:.*? rv:([\w.]+))?/;a=/(webkit)[ \/]([\w.]+)/.exec(a)||b.exec(a)||d.exec(a)||0>a.indexOf("compatible")&&e.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}};b.jPlayer.uaPlatform=function(a){var b=a.toLowerCase(),d=/(android)/,e=/(mobile)/;a=/(ipad|iphone|ipod|android|blackberry|playbook|windows ce|webos)/.exec(b)||[];b=/(ipad|playbook)/.exec(b)||!e.exec(b)&&d.exec(b)|| +[];a[1]&&(a[1]=a[1].replace(/\s/g,"_"));return{platform:a[1]||"",tablet:b[1]||""}};b.jPlayer.browser={};b.jPlayer.platform={};var j=b.jPlayer.uaBrowser(navigator.userAgent);j.browser&&(b.jPlayer.browser[j.browser]=!0,b.jPlayer.browser.version=j.version);j=b.jPlayer.uaPlatform(navigator.userAgent);j.platform&&(b.jPlayer.platform[j.platform]=!0,b.jPlayer.platform.mobile=!j.tablet,b.jPlayer.platform.tablet=!!j.tablet);b.jPlayer.getDocMode=function(){var a;b.jPlayer.browser.msie&&(document.documentMode? +a=document.documentMode:(a=5,document.compatMode&&"CSS1Compat"===document.compatMode&&(a=7)));return a};b.jPlayer.browser.documentMode=b.jPlayer.getDocMode();b.jPlayer.nativeFeatures={init:function(){var a=document,b=a.createElement("video"),d={w3c:"fullscreenEnabled fullscreenElement requestFullscreen exitFullscreen fullscreenchange fullscreenerror".split(" "),moz:"mozFullScreenEnabled mozFullScreenElement mozRequestFullScreen mozCancelFullScreen mozfullscreenchange mozfullscreenerror".split(" "), +webkit:" webkitCurrentFullScreenElement webkitRequestFullScreen webkitCancelFullScreen webkitfullscreenchange ".split(" "),webkitVideo:"webkitSupportsFullscreen webkitDisplayingFullscreen webkitEnterFullscreen webkitExitFullscreen ".split(" ")},e=["w3c","moz","webkit","webkitVideo"],g,h;this.fullscreen=b={support:{w3c:!!a[d.w3c[0]],moz:!!a[d.moz[0]],webkit:"function"===typeof a[d.webkit[3]],webkitVideo:"function"===typeof b[d.webkitVideo[2]]},used:{}};g=0;for(h=e.length;g<h;g++){var f=e[g];if(b.support[f]){b.spec= +f;b.used[f]=!0;break}}if(b.spec){var k=d[b.spec];b.api={fullscreenEnabled:!0,fullscreenElement:function(b){b=b?b:a;return b[k[1]]},requestFullscreen:function(a){return a[k[2]]()},exitFullscreen:function(b){b=b?b:a;return b[k[3]]()}};b.event={fullscreenchange:k[4],fullscreenerror:k[5]}}else b.api={fullscreenEnabled:!1,fullscreenElement:function(){return null},requestFullscreen:function(){},exitFullscreen:function(){}},b.event={}}};b.jPlayer.nativeFeatures.init();b.jPlayer.focus=null;b.jPlayer.keyIgnoreElementNames= +"INPUT TEXTAREA";var n=function(a){var c=b.jPlayer.focus,d;c&&(b.each(b.jPlayer.keyIgnoreElementNames.split(/\s+/g),function(b,c){if(a.target.nodeName.toUpperCase()===c.toUpperCase())return d=!0,!1}),d||b.each(c.options.keyBindings,function(d,g){if(g&&a.which===g.key&&b.isFunction(g.fn))return a.preventDefault(),g.fn(c),!1}))};b.jPlayer.keys=function(a){b(document.documentElement).unbind("keydown.jPlayer");a&&b(document.documentElement).bind("keydown.jPlayer",n)};b.jPlayer.keys(!0);b.jPlayer.prototype= +{count:0,version:{script:"2.4.0",needFlash:"2.4.0",flash:"unknown"},options:{swfPath:"js",solution:"html, flash",supplied:"mp3",preload:"metadata",volume:0.8,muted:!1,wmode:"opaque",backgroundColor:"#000000",cssSelectorAncestor:"#jp_container_1",cssSelector:{videoPlay:".jp-video-play",play:".jp-play",pause:".jp-pause",stop:".jp-stop",seekBar:".jp-seek-bar",playBar:".jp-play-bar",mute:".jp-mute",unmute:".jp-unmute",volumeBar:".jp-volume-bar",volumeBarValue:".jp-volume-bar-value",volumeMax:".jp-volume-max", +currentTime:".jp-current-time",duration:".jp-duration",fullScreen:".jp-full-screen",restoreScreen:".jp-restore-screen",repeat:".jp-repeat",repeatOff:".jp-repeat-off",gui:".jp-gui",noSolution:".jp-no-solution"},smoothPlayBar:!1,fullScreen:!1,fullWindow:!1,autohide:{restored:!1,full:!0,fadeIn:200,fadeOut:600,hold:1E3},loop:!1,repeat:function(a){a.jPlayer.options.loop?b(this).unbind(".jPlayerRepeat").bind(b.jPlayer.event.ended+".jPlayer.jPlayerRepeat",function(){b(this).jPlayer("play")}):b(this).unbind(".jPlayerRepeat")}, +nativeVideoControls:{},noFullWindow:{msie:/msie [0-6]\./,ipad:/ipad.*?os [0-4]\./,iphone:/iphone/,ipod:/ipod/,android_pad:/android [0-3]\.(?!.*?mobile)/,android_phone:/android.*?mobile/,blackberry:/blackberry/,windows_ce:/windows ce/,iemobile:/iemobile/,webos:/webos/},noVolume:{ipad:/ipad/,iphone:/iphone/,ipod:/ipod/,android_pad:/android(?!.*?mobile)/,android_phone:/android.*?mobile/,blackberry:/blackberry/,windows_ce:/windows ce/,iemobile:/iemobile/,webos:/webos/,playbook:/playbook/},timeFormat:{}, +keyEnabled:!1,audioFullScreen:!1,keyBindings:{play:{key:32,fn:function(a){a.status.paused?a.play():a.pause()}},fullScreen:{key:13,fn:function(a){(a.status.video||a.options.audioFullScreen)&&a._setOption("fullScreen",!a.options.fullScreen)}},muted:{key:8,fn:function(a){a._muted(!a.options.muted)}},volumeUp:{key:38,fn:function(a){a.volume(a.options.volume+0.1)}},volumeDown:{key:40,fn:function(a){a.volume(a.options.volume-0.1)}}},verticalVolume:!1,idPrefix:"jp",noConflict:"jQuery",emulateHtml:!1,errorAlerts:!1, +warningAlerts:!1},optionsAudio:{size:{width:"0px",height:"0px",cssClass:""},sizeFull:{width:"0px",height:"0px",cssClass:""}},optionsVideo:{size:{width:"480px",height:"270px",cssClass:"jp-video-270p"},sizeFull:{width:"100%",height:"100%",cssClass:"jp-video-full"}},instances:{},status:{src:"",media:{},paused:!0,format:{},formatType:"",waitForPlay:!0,waitForLoad:!0,srcSet:!1,video:!1,seekPercent:0,currentPercentRelative:0,currentPercentAbsolute:0,currentTime:0,duration:0,videoWidth:0,videoHeight:0,readyState:0, +networkState:0,playbackRate:1,ended:0},internal:{ready:!1},solution:{html:!0,flash:!0},format:{mp3:{codec:'audio/mpeg; codecs="mp3"',flashCanPlay:!0,media:"audio"},m4a:{codec:'audio/mp4; codecs="mp4a.40.2"',flashCanPlay:!0,media:"audio"},oga:{codec:'audio/ogg; codecs="vorbis"',flashCanPlay:!1,media:"audio"},wav:{codec:'audio/wav; codecs="1"',flashCanPlay:!1,media:"audio"},webma:{codec:'audio/webm; codecs="vorbis"',flashCanPlay:!1,media:"audio"},fla:{codec:"audio/x-flv",flashCanPlay:!0,media:"audio"}, +rtmpa:{codec:'audio/rtmp; codecs="rtmp"',flashCanPlay:!0,media:"audio"},m4v:{codec:'video/mp4; codecs="avc1.42E01E, mp4a.40.2"',flashCanPlay:!0,media:"video"},ogv:{codec:'video/ogg; codecs="theora, vorbis"',flashCanPlay:!1,media:"video"},webmv:{codec:'video/webm; codecs="vorbis, vp8"',flashCanPlay:!1,media:"video"},flv:{codec:"video/x-flv",flashCanPlay:!0,media:"video"},rtmpv:{codec:'video/rtmp; codecs="rtmp"',flashCanPlay:!0,media:"video"}},_init:function(){var a=this;this.element.empty();this.status= +b.extend({},this.status);this.internal=b.extend({},this.internal);this.options.timeFormat=b.extend({},b.jPlayer.timeFormat,this.options.timeFormat);this.internal.cmdsIgnored=b.jPlayer.platform.ipad||b.jPlayer.platform.iphone||b.jPlayer.platform.ipod;this.internal.domNode=this.element.get(0);this.options.keyEnabled&&!b.jPlayer.focus&&(b.jPlayer.focus=this);this.formats=[];this.solutions=[];this.require={};this.htmlElement={};this.html={};this.html.audio={};this.html.video={};this.flash={};this.css= +{};this.css.cs={};this.css.jq={};this.ancestorJq=[];this.options.volume=this._limitValue(this.options.volume,0,1);b.each(this.options.supplied.toLowerCase().split(","),function(c,d){var e=d.replace(/^\s+|\s+$/g,"");if(a.format[e]){var f=!1;b.each(a.formats,function(a,b){if(e===b)return f=!0,!1});f||a.formats.push(e)}});b.each(this.options.solution.toLowerCase().split(","),function(c,d){var e=d.replace(/^\s+|\s+$/g,"");if(a.solution[e]){var f=!1;b.each(a.solutions,function(a,b){if(e===b)return f=!0, +!1});f||a.solutions.push(e)}});this.internal.instance="jp_"+this.count;this.instances[this.internal.instance]=this.element;this.element.attr("id")||this.element.attr("id",this.options.idPrefix+"_jplayer_"+this.count);this.internal.self=b.extend({},{id:this.element.attr("id"),jq:this.element});this.internal.audio=b.extend({},{id:this.options.idPrefix+"_audio_"+this.count,jq:f});this.internal.video=b.extend({},{id:this.options.idPrefix+"_video_"+this.count,jq:f});this.internal.flash=b.extend({},{id:this.options.idPrefix+ +"_flash_"+this.count,jq:f,swf:this.options.swfPath+(".swf"!==this.options.swfPath.toLowerCase().slice(-4)?(this.options.swfPath&&"/"!==this.options.swfPath.slice(-1)?"/":"")+"Jplayer.swf":"")});this.internal.poster=b.extend({},{id:this.options.idPrefix+"_poster_"+this.count,jq:f});b.each(b.jPlayer.event,function(b,c){a.options[b]!==f&&(a.element.bind(c+".jPlayer",a.options[b]),a.options[b]=f)});this.require.audio=!1;this.require.video=!1;b.each(this.formats,function(b,c){a.require[a.format[c].media]= +!0});this.options=this.require.video?b.extend(!0,{},this.optionsVideo,this.options):b.extend(!0,{},this.optionsAudio,this.options);this._setSize();this.status.nativeVideoControls=this._uaBlocklist(this.options.nativeVideoControls);this.status.noFullWindow=this._uaBlocklist(this.options.noFullWindow);this.status.noVolume=this._uaBlocklist(this.options.noVolume);b.jPlayer.nativeFeatures.fullscreen.api.fullscreenEnabled&&this._fullscreenAddEventListeners();this._restrictNativeVideoControls();this.htmlElement.poster= +document.createElement("img");this.htmlElement.poster.id=this.internal.poster.id;this.htmlElement.poster.onload=function(){(!a.status.video||a.status.waitForPlay)&&a.internal.poster.jq.show()};this.element.append(this.htmlElement.poster);this.internal.poster.jq=b("#"+this.internal.poster.id);this.internal.poster.jq.css({width:this.status.width,height:this.status.height});this.internal.poster.jq.hide();this.internal.poster.jq.bind("click.jPlayer",function(){a._trigger(b.jPlayer.event.click)});this.html.audio.available= +!1;this.require.audio&&(this.htmlElement.audio=document.createElement("audio"),this.htmlElement.audio.id=this.internal.audio.id,this.html.audio.available=!!this.htmlElement.audio.canPlayType&&this._testCanPlayType(this.htmlElement.audio));this.html.video.available=!1;this.require.video&&(this.htmlElement.video=document.createElement("video"),this.htmlElement.video.id=this.internal.video.id,this.html.video.available=!!this.htmlElement.video.canPlayType&&this._testCanPlayType(this.htmlElement.video)); +this.flash.available=this._checkForFlash(10.1);this.html.canPlay={};this.flash.canPlay={};b.each(this.formats,function(b,c){a.html.canPlay[c]=a.html[a.format[c].media].available&&""!==a.htmlElement[a.format[c].media].canPlayType(a.format[c].codec);a.flash.canPlay[c]=a.format[c].flashCanPlay&&a.flash.available});this.html.desired=!1;this.flash.desired=!1;b.each(this.solutions,function(c,d){if(0===c)a[d].desired=!0;else{var e=!1,f=!1;b.each(a.formats,function(b,c){a[a.solutions[0]].canPlay[c]&&("video"=== +a.format[c].media?f=!0:e=!0)});a[d].desired=a.require.audio&&!e||a.require.video&&!f}});this.html.support={};this.flash.support={};b.each(this.formats,function(b,c){a.html.support[c]=a.html.canPlay[c]&&a.html.desired;a.flash.support[c]=a.flash.canPlay[c]&&a.flash.desired});this.html.used=!1;this.flash.used=!1;b.each(this.solutions,function(c,d){b.each(a.formats,function(b,c){if(a[d].support[c])return a[d].used=!0,!1})});this._resetActive();this._resetGate();this._cssSelectorAncestor(this.options.cssSelectorAncestor); +!this.html.used&&!this.flash.used?(this._error({type:b.jPlayer.error.NO_SOLUTION,context:"{solution:'"+this.options.solution+"', supplied:'"+this.options.supplied+"'}",message:b.jPlayer.errorMsg.NO_SOLUTION,hint:b.jPlayer.errorHint.NO_SOLUTION}),this.css.jq.noSolution.length&&this.css.jq.noSolution.show()):this.css.jq.noSolution.length&&this.css.jq.noSolution.hide();if(this.flash.used){var c,d="jQuery="+encodeURI(this.options.noConflict)+"&id="+encodeURI(this.internal.self.id)+"&vol="+this.options.volume+ +"&muted="+this.options.muted;if(b.jPlayer.browser.msie&&(9>Number(b.jPlayer.browser.version)||9>b.jPlayer.browser.documentMode)){d=['<param name="movie" value="'+this.internal.flash.swf+'" />','<param name="FlashVars" value="'+d+'" />','<param name="allowScriptAccess" value="always" />','<param name="bgcolor" value="'+this.options.backgroundColor+'" />','<param name="wmode" value="'+this.options.wmode+'" />'];c=document.createElement('<object id="'+this.internal.flash.id+'" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="0" height="0" tabindex="-1"></object>'); +for(var e=0;e<d.length;e++)c.appendChild(document.createElement(d[e]))}else e=function(a,b,c){var d=document.createElement("param");d.setAttribute("name",b);d.setAttribute("value",c);a.appendChild(d)},c=document.createElement("object"),c.setAttribute("id",this.internal.flash.id),c.setAttribute("name",this.internal.flash.id),c.setAttribute("data",this.internal.flash.swf),c.setAttribute("type","application/x-shockwave-flash"),c.setAttribute("width","1"),c.setAttribute("height","1"),c.setAttribute("tabindex", +"-1"),e(c,"flashvars",d),e(c,"allowscriptaccess","always"),e(c,"bgcolor",this.options.backgroundColor),e(c,"wmode",this.options.wmode);this.element.append(c);this.internal.flash.jq=b(c)}this.html.used&&(this.html.audio.available&&(this._addHtmlEventListeners(this.htmlElement.audio,this.html.audio),this.element.append(this.htmlElement.audio),this.internal.audio.jq=b("#"+this.internal.audio.id)),this.html.video.available&&(this._addHtmlEventListeners(this.htmlElement.video,this.html.video),this.element.append(this.htmlElement.video), +this.internal.video.jq=b("#"+this.internal.video.id),this.status.nativeVideoControls?this.internal.video.jq.css({width:this.status.width,height:this.status.height}):this.internal.video.jq.css({width:"0px",height:"0px"}),this.internal.video.jq.bind("click.jPlayer",function(){a._trigger(b.jPlayer.event.click)})));this.options.emulateHtml&&this._emulateHtmlBridge();this.html.used&&!this.flash.used&&setTimeout(function(){a.internal.ready=!0;a.version.flash="n/a";a._trigger(b.jPlayer.event.repeat);a._trigger(b.jPlayer.event.ready)}, +100);this._updateNativeVideoControls();this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide();b.jPlayer.prototype.count++},destroy:function(){this.clearMedia();this._removeUiClass();this.css.jq.currentTime.length&&this.css.jq.currentTime.text("");this.css.jq.duration.length&&this.css.jq.duration.text("");b.each(this.css.jq,function(a,b){b.length&&b.unbind(".jPlayer")});this.internal.poster.jq.unbind(".jPlayer");this.internal.video.jq&&this.internal.video.jq.unbind(".jPlayer");this._fullscreenRemoveEventListeners(); +this===b.jPlayer.focus&&(b.jPlayer.focus=null);this.options.emulateHtml&&this._destroyHtmlBridge();this.element.removeData("jPlayer");this.element.unbind(".jPlayer");this.element.empty();delete this.instances[this.internal.instance]},enable:function(){},disable:function(){},_testCanPlayType:function(a){try{return a.canPlayType(this.format.mp3.codec),!0}catch(b){return!1}},_uaBlocklist:function(a){var c=navigator.userAgent.toLowerCase(),d=!1;b.each(a,function(a,b){if(b&&b.test(c))return d=!0,!1}); +return d},_restrictNativeVideoControls:function(){this.require.audio&&this.status.nativeVideoControls&&(this.status.nativeVideoControls=!1,this.status.noFullWindow=!0)},_updateNativeVideoControls:function(){this.html.video.available&&this.html.used&&(this.htmlElement.video.controls=this.status.nativeVideoControls,this._updateAutohide(),this.status.nativeVideoControls&&this.require.video?(this.internal.poster.jq.hide(),this.internal.video.jq.css({width:this.status.width,height:this.status.height})): +this.status.waitForPlay&&this.status.video&&(this.internal.poster.jq.show(),this.internal.video.jq.css({width:"0px",height:"0px"})))},_addHtmlEventListeners:function(a,c){var d=this;a.preload=this.options.preload;a.muted=this.options.muted;a.volume=this.options.volume;a.addEventListener("progress",function(){c.gate&&(d.internal.cmdsIgnored&&0<this.readyState&&(d.internal.cmdsIgnored=!1),d._getHtmlStatus(a),d._updateInterface(),d._trigger(b.jPlayer.event.progress))},!1);a.addEventListener("timeupdate", +function(){c.gate&&(d._getHtmlStatus(a),d._updateInterface(),d._trigger(b.jPlayer.event.timeupdate))},!1);a.addEventListener("durationchange",function(){c.gate&&(d._getHtmlStatus(a),d._updateInterface(),d._trigger(b.jPlayer.event.durationchange))},!1);a.addEventListener("play",function(){c.gate&&(d._updateButtons(!0),d._html_checkWaitForPlay(),d._trigger(b.jPlayer.event.play))},!1);a.addEventListener("playing",function(){c.gate&&(d._updateButtons(!0),d._seeked(),d._trigger(b.jPlayer.event.playing))}, +!1);a.addEventListener("pause",function(){c.gate&&(d._updateButtons(!1),d._trigger(b.jPlayer.event.pause))},!1);a.addEventListener("waiting",function(){c.gate&&(d._seeking(),d._trigger(b.jPlayer.event.waiting))},!1);a.addEventListener("seeking",function(){c.gate&&(d._seeking(),d._trigger(b.jPlayer.event.seeking))},!1);a.addEventListener("seeked",function(){c.gate&&(d._seeked(),d._trigger(b.jPlayer.event.seeked))},!1);a.addEventListener("volumechange",function(){c.gate&&(d.options.volume=a.volume, +d.options.muted=a.muted,d._updateMute(),d._updateVolume(),d._trigger(b.jPlayer.event.volumechange))},!1);a.addEventListener("suspend",function(){c.gate&&(d._seeked(),d._trigger(b.jPlayer.event.suspend))},!1);a.addEventListener("ended",function(){c.gate&&(b.jPlayer.browser.webkit||(d.htmlElement.media.currentTime=0),d.htmlElement.media.pause(),d._updateButtons(!1),d._getHtmlStatus(a,!0),d._updateInterface(),d._trigger(b.jPlayer.event.ended))},!1);a.addEventListener("error",function(){c.gate&&(d._updateButtons(!1), +d._seeked(),d.status.srcSet&&(clearTimeout(d.internal.htmlDlyCmdId),d.status.waitForLoad=!0,d.status.waitForPlay=!0,d.status.video&&!d.status.nativeVideoControls&&d.internal.video.jq.css({width:"0px",height:"0px"}),d._validString(d.status.media.poster)&&!d.status.nativeVideoControls&&d.internal.poster.jq.show(),d.css.jq.videoPlay.length&&d.css.jq.videoPlay.show(),d._error({type:b.jPlayer.error.URL,context:d.status.src,message:b.jPlayer.errorMsg.URL,hint:b.jPlayer.errorHint.URL})))},!1);b.each(b.jPlayer.htmlEvent, +function(e,g){a.addEventListener(this,function(){c.gate&&d._trigger(b.jPlayer.event[g])},!1)})},_getHtmlStatus:function(a,b){var d=0,e=0,g=0,f=0;isFinite(a.duration)&&(this.status.duration=a.duration);d=a.currentTime;e=0<this.status.duration?100*d/this.status.duration:0;"object"===typeof a.seekable&&0<a.seekable.length?(g=0<this.status.duration?100*a.seekable.end(a.seekable.length-1)/this.status.duration:100,f=0<this.status.duration?100*a.currentTime/a.seekable.end(a.seekable.length-1):0):(g=100, +f=e);b&&(e=f=d=0);this.status.seekPercent=g;this.status.currentPercentRelative=f;this.status.currentPercentAbsolute=e;this.status.currentTime=d;this.status.videoWidth=a.videoWidth;this.status.videoHeight=a.videoHeight;this.status.readyState=a.readyState;this.status.networkState=a.networkState;this.status.playbackRate=a.playbackRate;this.status.ended=a.ended},_resetStatus:function(){this.status=b.extend({},this.status,b.jPlayer.prototype.status)},_trigger:function(a,c,d){a=b.Event(a);a.jPlayer={}; +a.jPlayer.version=b.extend({},this.version);a.jPlayer.options=b.extend(!0,{},this.options);a.jPlayer.status=b.extend(!0,{},this.status);a.jPlayer.html=b.extend(!0,{},this.html);a.jPlayer.flash=b.extend(!0,{},this.flash);c&&(a.jPlayer.error=b.extend({},c));d&&(a.jPlayer.warning=b.extend({},d));this.element.trigger(a)},jPlayerFlashEvent:function(a,c){if(a===b.jPlayer.event.ready)if(this.internal.ready){if(this.flash.gate){if(this.status.srcSet){var d=this.status.currentTime,e=this.status.paused;this.setMedia(this.status.media); +0<d&&(e?this.pause(d):this.play(d))}this._trigger(b.jPlayer.event.flashreset)}}else this.internal.ready=!0,this.internal.flash.jq.css({width:"0px",height:"0px"}),this.version.flash=c.version,this.version.needFlash!==this.version.flash&&this._error({type:b.jPlayer.error.VERSION,context:this.version.flash,message:b.jPlayer.errorMsg.VERSION+this.version.flash,hint:b.jPlayer.errorHint.VERSION}),this._trigger(b.jPlayer.event.repeat),this._trigger(a);if(this.flash.gate)switch(a){case b.jPlayer.event.progress:this._getFlashStatus(c); +this._updateInterface();this._trigger(a);break;case b.jPlayer.event.timeupdate:this._getFlashStatus(c);this._updateInterface();this._trigger(a);break;case b.jPlayer.event.play:this._seeked();this._updateButtons(!0);this._trigger(a);break;case b.jPlayer.event.pause:this._updateButtons(!1);this._trigger(a);break;case b.jPlayer.event.ended:this._updateButtons(!1);this._trigger(a);break;case b.jPlayer.event.click:this._trigger(a);break;case b.jPlayer.event.error:this.status.waitForLoad=!0;this.status.waitForPlay= +!0;this.status.video&&this.internal.flash.jq.css({width:"0px",height:"0px"});this._validString(this.status.media.poster)&&this.internal.poster.jq.show();this.css.jq.videoPlay.length&&this.status.video&&this.css.jq.videoPlay.show();this.status.video?this._flash_setVideo(this.status.media):this._flash_setAudio(this.status.media);this._updateButtons(!1);this._error({type:b.jPlayer.error.URL,context:c.src,message:b.jPlayer.errorMsg.URL,hint:b.jPlayer.errorHint.URL});break;case b.jPlayer.event.seeking:this._seeking(); +this._trigger(a);break;case b.jPlayer.event.seeked:this._seeked();this._trigger(a);break;case b.jPlayer.event.ready:break;default:this._trigger(a)}return!1},_getFlashStatus:function(a){this.status.seekPercent=a.seekPercent;this.status.currentPercentRelative=a.currentPercentRelative;this.status.currentPercentAbsolute=a.currentPercentAbsolute;this.status.currentTime=a.currentTime;this.status.duration=a.duration;this.status.videoWidth=a.videoWidth;this.status.videoHeight=a.videoHeight;this.status.readyState= +4;this.status.networkState=0;this.status.playbackRate=1;this.status.ended=!1},_updateButtons:function(a){a===f?a=!this.status.paused:this.status.paused=!a;this.css.jq.play.length&&this.css.jq.pause.length&&(a?(this.css.jq.play.hide(),this.css.jq.pause.show()):(this.css.jq.play.show(),this.css.jq.pause.hide()));this.css.jq.restoreScreen.length&&this.css.jq.fullScreen.length&&(this.status.noFullWindow?(this.css.jq.fullScreen.hide(),this.css.jq.restoreScreen.hide()):this.options.fullWindow?(this.css.jq.fullScreen.hide(), +this.css.jq.restoreScreen.show()):(this.css.jq.fullScreen.show(),this.css.jq.restoreScreen.hide()));this.css.jq.repeat.length&&this.css.jq.repeatOff.length&&(this.options.loop?(this.css.jq.repeat.hide(),this.css.jq.repeatOff.show()):(this.css.jq.repeat.show(),this.css.jq.repeatOff.hide()))},_updateInterface:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.width(this.status.seekPercent+"%");this.css.jq.playBar.length&&(this.options.smoothPlayBar?this.css.jq.playBar.stop().animate({width:this.status.currentPercentAbsolute+ +"%"},250,"linear"):this.css.jq.playBar.width(this.status.currentPercentRelative+"%"));this.css.jq.currentTime.length&&this.css.jq.currentTime.text(this._convertTime(this.status.currentTime));this.css.jq.duration.length&&this.css.jq.duration.text(this._convertTime(this.status.duration))},_convertTime:l.prototype.time,_seeking:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.addClass("jp-seeking-bg")},_seeked:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.removeClass("jp-seeking-bg")}, +_resetGate:function(){this.html.audio.gate=!1;this.html.video.gate=!1;this.flash.gate=!1},_resetActive:function(){this.html.active=!1;this.flash.active=!1},setMedia:function(a){var c=this,d=!1,e=this.status.media.poster!==a.poster;this._resetMedia();this._resetGate();this._resetActive();b.each(this.formats,function(e,f){var j="video"===c.format[f].media;b.each(c.solutions,function(b,e){if(c[e].support[f]&&c._validString(a[f])){var g="html"===e;j?(g?(c.html.video.gate=!0,c._html_setVideo(a),c.html.active= +!0):(c.flash.gate=!0,c._flash_setVideo(a),c.flash.active=!0),c.css.jq.videoPlay.length&&c.css.jq.videoPlay.show(),c.status.video=!0):(g?(c.html.audio.gate=!0,c._html_setAudio(a),c.html.active=!0):(c.flash.gate=!0,c._flash_setAudio(a),c.flash.active=!0),c.css.jq.videoPlay.length&&c.css.jq.videoPlay.hide(),c.status.video=!1);d=!0;return!1}});if(d)return!1});if(d){if((!this.status.nativeVideoControls||!this.html.video.gate)&&this._validString(a.poster))e?this.htmlElement.poster.src=a.poster:this.internal.poster.jq.show(); +this.status.srcSet=!0;this.status.media=b.extend({},a);this._updateButtons(!1);this._updateInterface()}else this._error({type:b.jPlayer.error.NO_SUPPORT,context:"{supplied:'"+this.options.supplied+"'}",message:b.jPlayer.errorMsg.NO_SUPPORT,hint:b.jPlayer.errorHint.NO_SUPPORT})},_resetMedia:function(){this._resetStatus();this._updateButtons(!1);this._updateInterface();this._seeked();this.internal.poster.jq.hide();clearTimeout(this.internal.htmlDlyCmdId);this.html.active?this._html_resetMedia():this.flash.active&& +this._flash_resetMedia()},clearMedia:function(){this._resetMedia();this.html.active?this._html_clearMedia():this.flash.active&&this._flash_clearMedia();this._resetGate();this._resetActive()},load:function(){this.status.srcSet?this.html.active?this._html_load():this.flash.active&&this._flash_load():this._urlNotSetError("load")},focus:function(){this.options.keyEnabled&&(b.jPlayer.focus=this)},play:function(a){a="number"===typeof a?a:NaN;this.status.srcSet?(this.focus(),this.html.active?this._html_play(a): +this.flash.active&&this._flash_play(a)):this._urlNotSetError("play")},videoPlay:function(){this.play()},pause:function(a){a="number"===typeof a?a:NaN;this.status.srcSet?this.html.active?this._html_pause(a):this.flash.active&&this._flash_pause(a):this._urlNotSetError("pause")},pauseOthers:function(){var a=this;b.each(this.instances,function(b,d){a.element!==d&&d.data("jPlayer").status.srcSet&&d.jPlayer("pause")})},stop:function(){this.status.srcSet?this.html.active?this._html_pause(0):this.flash.active&& +this._flash_pause(0):this._urlNotSetError("stop")},playHead:function(a){a=this._limitValue(a,0,100);this.status.srcSet?this.html.active?this._html_playHead(a):this.flash.active&&this._flash_playHead(a):this._urlNotSetError("playHead")},_muted:function(a){this.options.muted=a;this.html.used&&this._html_mute(a);this.flash.used&&this._flash_mute(a);!this.html.video.gate&&!this.html.audio.gate&&(this._updateMute(a),this._updateVolume(this.options.volume),this._trigger(b.jPlayer.event.volumechange))}, +mute:function(a){a=a===f?!0:!!a;this._muted(a)},unmute:function(a){a=a===f?!0:!!a;this._muted(!a)},_updateMute:function(a){a===f&&(a=this.options.muted);this.css.jq.mute.length&&this.css.jq.unmute.length&&(this.status.noVolume?(this.css.jq.mute.hide(),this.css.jq.unmute.hide()):a?(this.css.jq.mute.hide(),this.css.jq.unmute.show()):(this.css.jq.mute.show(),this.css.jq.unmute.hide()))},volume:function(a){a=this._limitValue(a,0,1);this.options.volume=a;this.html.used&&this._html_volume(a);this.flash.used&& +this._flash_volume(a);!this.html.video.gate&&!this.html.audio.gate&&(this._updateVolume(a),this._trigger(b.jPlayer.event.volumechange))},volumeBar:function(a){if(this.css.jq.volumeBar.length){var c=b(a.currentTarget),d=c.offset(),e=a.pageX-d.left,g=c.width();a=c.height()-a.pageY+d.top;c=c.height();this.options.verticalVolume?this.volume(a/c):this.volume(e/g)}this.options.muted&&this._muted(!1)},volumeBarValue:function(){},_updateVolume:function(a){a===f&&(a=this.options.volume);a=this.options.muted? +0:a;this.status.noVolume?(this.css.jq.volumeBar.length&&this.css.jq.volumeBar.hide(),this.css.jq.volumeBarValue.length&&this.css.jq.volumeBarValue.hide(),this.css.jq.volumeMax.length&&this.css.jq.volumeMax.hide()):(this.css.jq.volumeBar.length&&this.css.jq.volumeBar.show(),this.css.jq.volumeBarValue.length&&(this.css.jq.volumeBarValue.show(),this.css.jq.volumeBarValue[this.options.verticalVolume?"height":"width"](100*a+"%")),this.css.jq.volumeMax.length&&this.css.jq.volumeMax.show())},volumeMax:function(){this.volume(1); +this.options.muted&&this._muted(!1)},_cssSelectorAncestor:function(a){var c=this;this.options.cssSelectorAncestor=a;this._removeUiClass();this.ancestorJq=a?b(a):[];a&&1!==this.ancestorJq.length&&this._warning({type:b.jPlayer.warning.CSS_SELECTOR_COUNT,context:a,message:b.jPlayer.warningMsg.CSS_SELECTOR_COUNT+this.ancestorJq.length+" found for cssSelectorAncestor.",hint:b.jPlayer.warningHint.CSS_SELECTOR_COUNT});this._addUiClass();b.each(this.options.cssSelector,function(a,b){c._cssSelector(a,b)}); +this._updateInterface();this._updateButtons();this._updateAutohide();this._updateVolume();this._updateMute()},_cssSelector:function(a,c){var d=this;"string"===typeof c?b.jPlayer.prototype.options.cssSelector[a]?(this.css.jq[a]&&this.css.jq[a].length&&this.css.jq[a].unbind(".jPlayer"),this.options.cssSelector[a]=c,this.css.cs[a]=this.options.cssSelectorAncestor+" "+c,this.css.jq[a]=c?b(this.css.cs[a]):[],this.css.jq[a].length&&this.css.jq[a].bind("click.jPlayer",function(c){c.preventDefault();d[a](c); +b(this).blur()}),c&&1!==this.css.jq[a].length&&this._warning({type:b.jPlayer.warning.CSS_SELECTOR_COUNT,context:this.css.cs[a],message:b.jPlayer.warningMsg.CSS_SELECTOR_COUNT+this.css.jq[a].length+" found for "+a+" method.",hint:b.jPlayer.warningHint.CSS_SELECTOR_COUNT})):this._warning({type:b.jPlayer.warning.CSS_SELECTOR_METHOD,context:a,message:b.jPlayer.warningMsg.CSS_SELECTOR_METHOD,hint:b.jPlayer.warningHint.CSS_SELECTOR_METHOD}):this._warning({type:b.jPlayer.warning.CSS_SELECTOR_STRING,context:c, +message:b.jPlayer.warningMsg.CSS_SELECTOR_STRING,hint:b.jPlayer.warningHint.CSS_SELECTOR_STRING})},seekBar:function(a){if(this.css.jq.seekBar.length){var c=b(a.currentTarget),d=c.offset();a=a.pageX-d.left;c=c.width();this.playHead(100*a/c)}},playBar:function(){},repeat:function(){this._loop(!0)},repeatOff:function(){this._loop(!1)},_loop:function(a){this.options.loop!==a&&(this.options.loop=a,this._updateButtons(),this._trigger(b.jPlayer.event.repeat))},currentTime:function(){},duration:function(){}, +gui:function(){},noSolution:function(){},option:function(a,c){var d=a;if(0===arguments.length)return b.extend(!0,{},this.options);if("string"===typeof a){var e=a.split(".");if(c===f){for(var d=b.extend(!0,{},this.options),g=0;g<e.length;g++)if(d[e[g]]!==f)d=d[e[g]];else return this._warning({type:b.jPlayer.warning.OPTION_KEY,context:a,message:b.jPlayer.warningMsg.OPTION_KEY,hint:b.jPlayer.warningHint.OPTION_KEY}),f;return d}for(var g=d={},h=0;h<e.length;h++)h<e.length-1?(g[e[h]]={},g=g[e[h]]):g[e[h]]= +c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,c){var d=this;switch(a){case "volume":this.volume(c);break;case "muted":this._muted(c);break;case "cssSelectorAncestor":this._cssSelectorAncestor(c);break;case "cssSelector":b.each(c,function(a,b){d._cssSelector(a,b)});break;case "fullScreen":if(this.options[a]!==c){var e=b.jPlayer.nativeFeatures.fullscreen.used.webkitVideo;if(!e||e&&!this.status.waitForPlay)e|| +(this.options[a]=c),c?this._requestFullscreen():this._exitFullscreen(),e||this._setOption("fullWindow",c)}break;case "fullWindow":this.options[a]!==c&&(this._removeUiClass(),this.options[a]=c,this._refreshSize());break;case "size":!this.options.fullWindow&&this.options[a].cssClass!==c.cssClass&&this._removeUiClass();this.options[a]=b.extend({},this.options[a],c);this._refreshSize();break;case "sizeFull":this.options.fullWindow&&this.options[a].cssClass!==c.cssClass&&this._removeUiClass();this.options[a]= +b.extend({},this.options[a],c);this._refreshSize();break;case "autohide":this.options[a]=b.extend({},this.options[a],c);this._updateAutohide();break;case "loop":this._loop(c);break;case "nativeVideoControls":this.options[a]=b.extend({},this.options[a],c);this.status.nativeVideoControls=this._uaBlocklist(this.options.nativeVideoControls);this._restrictNativeVideoControls();this._updateNativeVideoControls();break;case "noFullWindow":this.options[a]=b.extend({},this.options[a],c);this.status.nativeVideoControls= +this._uaBlocklist(this.options.nativeVideoControls);this.status.noFullWindow=this._uaBlocklist(this.options.noFullWindow);this._restrictNativeVideoControls();this._updateButtons();break;case "noVolume":this.options[a]=b.extend({},this.options[a],c);this.status.noVolume=this._uaBlocklist(this.options.noVolume);this._updateVolume();this._updateMute();break;case "emulateHtml":this.options[a]!==c&&((this.options[a]=c)?this._emulateHtmlBridge():this._destroyHtmlBridge());break;case "timeFormat":this.options[a]= +b.extend({},this.options[a],c);break;case "keyEnabled":this.options[a]=c;!c&&this===b.jPlayer.focus&&(b.jPlayer.focus=null);break;case "keyBindings":this.options[a]=b.extend(!0,{},this.options[a],c);break;case "audioFullScreen":this.options[a]=c}return this},_refreshSize:function(){this._setSize();this._addUiClass();this._updateSize();this._updateButtons();this._updateAutohide();this._trigger(b.jPlayer.event.resize)},_setSize:function(){this.options.fullWindow?(this.status.width=this.options.sizeFull.width, +this.status.height=this.options.sizeFull.height,this.status.cssClass=this.options.sizeFull.cssClass):(this.status.width=this.options.size.width,this.status.height=this.options.size.height,this.status.cssClass=this.options.size.cssClass);this.element.css({width:this.status.width,height:this.status.height})},_addUiClass:function(){this.ancestorJq.length&&this.ancestorJq.addClass(this.status.cssClass)},_removeUiClass:function(){this.ancestorJq.length&&this.ancestorJq.removeClass(this.status.cssClass)}, +_updateSize:function(){this.internal.poster.jq.css({width:this.status.width,height:this.status.height});!this.status.waitForPlay&&this.html.active&&this.status.video||this.html.video.available&&this.html.used&&this.status.nativeVideoControls?this.internal.video.jq.css({width:this.status.width,height:this.status.height}):!this.status.waitForPlay&&(this.flash.active&&this.status.video)&&this.internal.flash.jq.css({width:this.status.width,height:this.status.height})},_updateAutohide:function(){var a= +this,b=function(){a.css.jq.gui.fadeIn(a.options.autohide.fadeIn,function(){clearTimeout(a.internal.autohideId);a.internal.autohideId=setTimeout(function(){a.css.jq.gui.fadeOut(a.options.autohide.fadeOut)},a.options.autohide.hold)})};this.css.jq.gui.length&&(this.css.jq.gui.stop(!0,!0),clearTimeout(this.internal.autohideId),this.element.unbind(".jPlayerAutohide"),this.css.jq.gui.unbind(".jPlayerAutohide"),this.status.nativeVideoControls?this.css.jq.gui.hide():this.options.fullWindow&&this.options.autohide.full|| +!this.options.fullWindow&&this.options.autohide.restored?(this.element.bind("mousemove.jPlayer.jPlayerAutohide",b),this.css.jq.gui.bind("mousemove.jPlayer.jPlayerAutohide",b),this.css.jq.gui.hide()):this.css.jq.gui.show())},fullScreen:function(){this._setOption("fullScreen",!0)},restoreScreen:function(){this._setOption("fullScreen",!1)},_fullscreenAddEventListeners:function(){var a=this,c=b.jPlayer.nativeFeatures.fullscreen;c.api.fullscreenEnabled&&c.event.fullscreenchange&&("function"!==typeof this.internal.fullscreenchangeHandler&& +(this.internal.fullscreenchangeHandler=function(){a._fullscreenchange()}),document.addEventListener(c.event.fullscreenchange,this.internal.fullscreenchangeHandler,!1))},_fullscreenRemoveEventListeners:function(){var a=b.jPlayer.nativeFeatures.fullscreen;this.internal.fullscreenchangeHandler&&document.addEventListener(a.event.fullscreenchange,this.internal.fullscreenchangeHandler,!1)},_fullscreenchange:function(){this.options.fullScreen&&!b.jPlayer.nativeFeatures.fullscreen.api.fullscreenElement()&& +this._setOption("fullScreen",!1)},_requestFullscreen:function(){var a=this.ancestorJq.length?this.ancestorJq[0]:this.element[0],c=b.jPlayer.nativeFeatures.fullscreen;c.used.webkitVideo&&(a=this.htmlElement.video);c.api.fullscreenEnabled&&c.api.requestFullscreen(a)},_exitFullscreen:function(){var a=b.jPlayer.nativeFeatures.fullscreen,c;a.used.webkitVideo&&(c=this.htmlElement.video);a.api.fullscreenEnabled&&a.api.exitFullscreen(c)},_html_initMedia:function(a){var c=b(this.htmlElement.media).empty(); +b.each(a.track||[],function(a,b){var g=document.createElement("track");g.setAttribute("kind",b.kind?b.kind:"");g.setAttribute("src",b.src?b.src:"");g.setAttribute("srclang",b.srclang?b.srclang:"");g.setAttribute("label",b.label?b.label:"");b.def&&g.setAttribute("default",b.def);c.append(g)});this.htmlElement.media.src=this.status.src;"none"!==this.options.preload&&this._html_load();this._trigger(b.jPlayer.event.timeupdate)},_html_setFormat:function(a){var c=this;b.each(this.formats,function(b,e){if(c.html.support[e]&& +a[e])return c.status.src=a[e],c.status.format[e]=!0,c.status.formatType=e,!1})},_html_setAudio:function(a){this._html_setFormat(a);this.htmlElement.media=this.htmlElement.audio;this._html_initMedia(a)},_html_setVideo:function(a){this._html_setFormat(a);this.status.nativeVideoControls&&(this.htmlElement.video.poster=this._validString(a.poster)?a.poster:"");this.htmlElement.media=this.htmlElement.video;this._html_initMedia(a)},_html_resetMedia:function(){this.htmlElement.media&&(this.htmlElement.media.id=== +this.internal.video.id&&!this.status.nativeVideoControls&&this.internal.video.jq.css({width:"0px",height:"0px"}),this.htmlElement.media.pause())},_html_clearMedia:function(){this.htmlElement.media&&(this.htmlElement.media.src="about:blank",this.htmlElement.media.load())},_html_load:function(){this.status.waitForLoad&&(this.status.waitForLoad=!1,this.htmlElement.media.load());clearTimeout(this.internal.htmlDlyCmdId)},_html_play:function(a){var b=this,d=this.htmlElement.media;this._html_load();if(isNaN(a))d.play(); +else{this.internal.cmdsIgnored&&d.play();try{if(!d.seekable||"object"===typeof d.seekable&&0<d.seekable.length)d.currentTime=a,d.play();else throw 1;}catch(e){this.internal.htmlDlyCmdId=setTimeout(function(){b.play(a)},250);return}}this._html_checkWaitForPlay()},_html_pause:function(a){var b=this,d=this.htmlElement.media;0<a?this._html_load():clearTimeout(this.internal.htmlDlyCmdId);d.pause();if(!isNaN(a))try{if(!d.seekable||"object"===typeof d.seekable&&0<d.seekable.length)d.currentTime=a;else throw 1; +}catch(e){this.internal.htmlDlyCmdId=setTimeout(function(){b.pause(a)},250);return}0<a&&this._html_checkWaitForPlay()},_html_playHead:function(a){var b=this,d=this.htmlElement.media;this._html_load();try{if("object"===typeof d.seekable&&0<d.seekable.length)d.currentTime=a*d.seekable.end(d.seekable.length-1)/100;else if(0<d.duration&&!isNaN(d.duration))d.currentTime=a*d.duration/100;else throw"e";}catch(e){this.internal.htmlDlyCmdId=setTimeout(function(){b.playHead(a)},250);return}this.status.waitForLoad|| +this._html_checkWaitForPlay()},_html_checkWaitForPlay:function(){this.status.waitForPlay&&(this.status.waitForPlay=!1,this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide(),this.status.video&&(this.internal.poster.jq.hide(),this.internal.video.jq.css({width:this.status.width,height:this.status.height})))},_html_volume:function(a){this.html.audio.available&&(this.htmlElement.audio.volume=a);this.html.video.available&&(this.htmlElement.video.volume=a)},_html_mute:function(a){this.html.audio.available&& +(this.htmlElement.audio.muted=a);this.html.video.available&&(this.htmlElement.video.muted=a)},_flash_setAudio:function(a){var c=this;try{b.each(this.formats,function(b,d){if(c.flash.support[d]&&a[d]){switch(d){case "m4a":case "fla":c._getMovie().fl_setAudio_m4a(a[d]);break;case "mp3":c._getMovie().fl_setAudio_mp3(a[d]);break;case "rtmpa":c._getMovie().fl_setAudio_rtmp(a[d])}c.status.src=a[d];c.status.format[d]=!0;c.status.formatType=d;return!1}}),"auto"===this.options.preload&&(this._flash_load(), +this.status.waitForLoad=!1)}catch(d){this._flashError(d)}},_flash_setVideo:function(a){var c=this;try{b.each(this.formats,function(b,d){if(c.flash.support[d]&&a[d]){switch(d){case "m4v":case "flv":c._getMovie().fl_setVideo_m4v(a[d]);break;case "rtmpv":c._getMovie().fl_setVideo_rtmp(a[d])}c.status.src=a[d];c.status.format[d]=!0;c.status.formatType=d;return!1}}),"auto"===this.options.preload&&(this._flash_load(),this.status.waitForLoad=!1)}catch(d){this._flashError(d)}},_flash_resetMedia:function(){this.internal.flash.jq.css({width:"0px", +height:"0px"});this._flash_pause(NaN)},_flash_clearMedia:function(){try{this._getMovie().fl_clearMedia()}catch(a){this._flashError(a)}},_flash_load:function(){try{this._getMovie().fl_load()}catch(a){this._flashError(a)}this.status.waitForLoad=!1},_flash_play:function(a){try{this._getMovie().fl_play(a)}catch(b){this._flashError(b)}this.status.waitForLoad=!1;this._flash_checkWaitForPlay()},_flash_pause:function(a){try{this._getMovie().fl_pause(a)}catch(b){this._flashError(b)}0<a&&(this.status.waitForLoad= +!1,this._flash_checkWaitForPlay())},_flash_playHead:function(a){try{this._getMovie().fl_play_head(a)}catch(b){this._flashError(b)}this.status.waitForLoad||this._flash_checkWaitForPlay()},_flash_checkWaitForPlay:function(){this.status.waitForPlay&&(this.status.waitForPlay=!1,this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide(),this.status.video&&(this.internal.poster.jq.hide(),this.internal.flash.jq.css({width:this.status.width,height:this.status.height})))},_flash_volume:function(a){try{this._getMovie().fl_volume(a)}catch(b){this._flashError(b)}}, +_flash_mute:function(a){try{this._getMovie().fl_mute(a)}catch(b){this._flashError(b)}},_getMovie:function(){return document[this.internal.flash.id]},_getFlashPluginVersion:function(){var a=0,b;if(window.ActiveXObject)try{if(b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash")){var d=b.GetVariable("$version");d&&(d=d.split(" ")[1].split(","),a=parseInt(d[0],10)+"."+parseInt(d[1],10))}}catch(e){}else navigator.plugins&&0<navigator.mimeTypes.length&&(b=navigator.plugins["Shockwave Flash"])&&(a=navigator.plugins["Shockwave Flash"].description.replace(/.*\s(\d+\.\d+).*/, +"$1"));return 1*a},_checkForFlash:function(a){var b=!1;this._getFlashPluginVersion()>=a&&(b=!0);return b},_validString:function(a){return a&&"string"===typeof a},_limitValue:function(a,b,d){return a<b?b:a>d?d:a},_urlNotSetError:function(a){this._error({type:b.jPlayer.error.URL_NOT_SET,context:a,message:b.jPlayer.errorMsg.URL_NOT_SET,hint:b.jPlayer.errorHint.URL_NOT_SET})},_flashError:function(a){var c;c=this.internal.ready?"FLASH_DISABLED":"FLASH";this._error({type:b.jPlayer.error[c],context:this.internal.flash.swf, +message:b.jPlayer.errorMsg[c]+a.message,hint:b.jPlayer.errorHint[c]});this.internal.flash.jq.css({width:"1px",height:"1px"})},_error:function(a){this._trigger(b.jPlayer.event.error,a);this.options.errorAlerts&&this._alert("Error!"+(a.message?"\n\n"+a.message:"")+(a.hint?"\n\n"+a.hint:"")+"\n\nContext: "+a.context)},_warning:function(a){this._trigger(b.jPlayer.event.warning,f,a);this.options.warningAlerts&&this._alert("Warning!"+(a.message?"\n\n"+a.message:"")+(a.hint?"\n\n"+a.hint:"")+"\n\nContext: "+ +a.context)},_alert:function(a){alert("jPlayer "+this.version.script+" : id='"+this.internal.self.id+"' : "+a)},_emulateHtmlBridge:function(){var a=this;b.each(b.jPlayer.emulateMethods.split(/\s+/g),function(b,d){a.internal.domNode[d]=function(b){a[d](b)}});b.each(b.jPlayer.event,function(c,d){var e=!0;b.each(b.jPlayer.reservedEvent.split(/\s+/g),function(a,b){if(b===c)return e=!1});e&&a.element.bind(d+".jPlayer.jPlayerHtml",function(){a._emulateHtmlUpdate();var b=document.createEvent("Event");b.initEvent(c, +!1,!0);a.internal.domNode.dispatchEvent(b)})})},_emulateHtmlUpdate:function(){var a=this;b.each(b.jPlayer.emulateStatus.split(/\s+/g),function(b,d){a.internal.domNode[d]=a.status[d]});b.each(b.jPlayer.emulateOptions.split(/\s+/g),function(b,d){a.internal.domNode[d]=a.options[d]})},_destroyHtmlBridge:function(){var a=this;this.element.unbind(".jPlayerHtml");b.each((b.jPlayer.emulateMethods+" "+b.jPlayer.emulateStatus+" "+b.jPlayer.emulateOptions).split(/\s+/g),function(b,d){delete a.internal.domNode[d]})}}; +b.jPlayer.error={FLASH:"e_flash",FLASH_DISABLED:"e_flash_disabled",NO_SOLUTION:"e_no_solution",NO_SUPPORT:"e_no_support",URL:"e_url",URL_NOT_SET:"e_url_not_set",VERSION:"e_version"};b.jPlayer.errorMsg={FLASH:"jPlayer's Flash fallback is not configured correctly, or a command was issued before the jPlayer Ready event. Details: ",FLASH_DISABLED:"jPlayer's Flash fallback has been disabled by the browser due to the CSS rules you have used. Details: ",NO_SOLUTION:"No solution can be found by jPlayer in this browser. Neither HTML nor Flash can be used.", +NO_SUPPORT:"It is not possible to play any media format provided in setMedia() on this browser using your current options.",URL:"Media URL could not be loaded.",URL_NOT_SET:"Attempt to issue media playback commands, while no media url is set.",VERSION:"jPlayer "+b.jPlayer.prototype.version.script+" needs Jplayer.swf version "+b.jPlayer.prototype.version.needFlash+" but found "};b.jPlayer.errorHint={FLASH:"Check your swfPath option and that Jplayer.swf is there.",FLASH_DISABLED:"Check that you have not display:none; the jPlayer entity or any ancestor.", +NO_SOLUTION:"Review the jPlayer options: support and supplied.",NO_SUPPORT:"Video or audio formats defined in the supplied option are missing.",URL:"Check media URL is valid.",URL_NOT_SET:"Use setMedia() to set the media URL.",VERSION:"Update jPlayer files."};b.jPlayer.warning={CSS_SELECTOR_COUNT:"e_css_selector_count",CSS_SELECTOR_METHOD:"e_css_selector_method",CSS_SELECTOR_STRING:"e_css_selector_string",OPTION_KEY:"e_option_key"};b.jPlayer.warningMsg={CSS_SELECTOR_COUNT:"The number of css selectors found did not equal one: ", +CSS_SELECTOR_METHOD:"The methodName given in jPlayer('cssSelector') is not a valid jPlayer method.",CSS_SELECTOR_STRING:"The methodCssSelector given in jPlayer('cssSelector') is not a String or is empty.",OPTION_KEY:"The option requested in jPlayer('option') is undefined."};b.jPlayer.warningHint={CSS_SELECTOR_COUNT:"Check your css selector and the ancestor.",CSS_SELECTOR_METHOD:"Check your method name.",CSS_SELECTOR_STRING:"Check your css selector is a string.",OPTION_KEY:"Check your option name."}}); \ No newline at end of file diff --git a/src/catalogue/static/player/openplayer.js b/src/catalogue/static/player/openplayer.js new file mode 100644 index 000000000..4fe27bd31 --- /dev/null +++ b/src/catalogue/static/player/openplayer.js @@ -0,0 +1,18 @@ +(function($) { + $(function() { + + + +$('.open-player').click(function(event) { + event.preventDefault(); + window.open($(this).attr('href'), + 'player', + 'width=422, height=500, scrollbars=1' + ); +}); + + + + }); +})(jQuery); + diff --git a/src/catalogue/static/player/player.css b/src/catalogue/static/player/player.css new file mode 100644 index 000000000..829a9a1c0 --- /dev/null +++ b/src/catalogue/static/player/player.css @@ -0,0 +1,21 @@ +#player h1 { + font-size: 2em; + margin: .5em; +} + +.player-info { + margin: 1em; +} + + +.play { + cursor: pointer; +} + +.play:hover { + color: #0D7E85; +} + +.daisy-list { + list-style: none; +} diff --git a/src/catalogue/static/player/player.js b/src/catalogue/static/player/player.js new file mode 100755 index 000000000..69dceed55 --- /dev/null +++ b/src/catalogue/static/player/player.js @@ -0,0 +1,34 @@ +(function($) { + $(function() { + + $("#jplayer").each(function() { + var $self = $(this); + $self.jPlayer({ + swfPath: "/static/jplayer/", + solution: "html,flash", + supplied: $self.attr('data-supplied'), + + ready: function() { + var player = $(this); + var setMedia = function(elem) { + var li = $(elem).parent(); + $('.jp-playlist-current').removeClass('jp-playlist-current'); + $(li).addClass('jp-playlist-current'); + var media = {} + + $('.mp3', li).each(function() {media['mp3'] = $(this).attr('href')}); + $('.ogg', li).each(function() {media['oga'] = $(this).attr('href')}); + + return player.jPlayer("setMedia", media); + }; + setMedia($('.play').first()).jPlayer("play"); + + $('.play').click(function() { + setMedia(this).jPlayer("play"); + }); + } + }); + }); + + }); +})(jQuery) \ No newline at end of file diff --git a/src/catalogue/tasks.py b/src/catalogue/tasks.py new file mode 100644 index 000000000..a2b8be088 --- /dev/null +++ b/src/catalogue/tasks.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from datetime import datetime +from traceback import print_exc +from celery.task import task +from celery.utils.log import get_task_logger +from django.conf import settings +from wolnelektury.utils import localtime_to_utc +from waiter.models import WaitedFile + +task_logger = get_task_logger(__name__) + + +# TODO: move to model? +def touch_tag(tag): + update_dict = { + 'changed_at': localtime_to_utc(datetime.now()), + } + + type(tag).objects.filter(pk=tag.pk).update(**update_dict) + + +@task +def index_book(book_id, book_info=None, **kwargs): + from catalogue.models import Book + try: + return Book.objects.get(id=book_id).search_index(book_info, **kwargs) + except Exception, e: + print "Exception during index: %s" % e + print_exc() + raise e + + +@task(ignore_result=True, rate_limit=settings.CATALOGUE_CUSTOMPDF_RATE_LIMIT) +def build_custom_pdf(book_id, customizations, file_name, waiter_id=None): + """Builds a custom PDF file.""" + try: + from django.core.files import File + from django.core.files.storage import DefaultStorage + from catalogue.models import Book + + task_logger.info(DefaultStorage().path(file_name)) + if not DefaultStorage().exists(file_name): + kwargs = { + 'cover': True, + } + if 'no-cover' in customizations: + kwargs['cover'] = False + customizations.remove('no-cover') + pdf = Book.objects.get(pk=book_id).wldocument().as_pdf( + customizations=customizations, + morefloats=settings.LIBRARIAN_PDF_MOREFLOATS, + **kwargs) + DefaultStorage().save(file_name, File(open(pdf.get_filename()))) + finally: + if waiter_id is not None: + WaitedFile.objects.filter(pk=waiter_id).delete() diff --git a/src/catalogue/templates/catalogue/audiobook_list.html b/src/catalogue/templates/catalogue/audiobook_list.html new file mode 100644 index 000000000..75576f4ad --- /dev/null +++ b/src/catalogue/templates/catalogue/audiobook_list.html @@ -0,0 +1,21 @@ +{% extends "catalogue/book_list.html" %} +{% load i18n %} +{% load catalogue_tags %} +{% load ssi_include from ssify %} + +{% block bodyid %}book-a-list{% endblock %} + +{% block titleextra %}{% trans "Listing of all audiobooks" %}{% endblock %} + +{% block metadescription %}Darmowe audiobooki na wolnej licencji. Lektury czytane przez znanych aktorów.{% endblock %} + +{% block extrahead %} + <link rel="alternate" type="application/atom+xml" title="{% trans "Latest MP3 audiobooks" %}" href="{% url 'audiobook_feed' 'mp3' %}" /> + <link rel="alternate" type="application/atom+xml" title="{% trans "Latest Ogg Vorbis audiobooks" %}" href="{% url 'audiobook_feed' 'ogg' %}" /> +{% endblock %} + +{% block book_list_header %}{% trans "Listing of all audiobooks" %}{% endblock %} + +{% block book_list_info %} +{% ssi_include 'chunk' key='audiobook-list' %} +{% endblock %} diff --git a/src/catalogue/templates/catalogue/book_detail.html b/src/catalogue/templates/catalogue/book_detail.html new file mode 100644 index 000000000..7e8128fa7 --- /dev/null +++ b/src/catalogue/templates/catalogue/book_detail.html @@ -0,0 +1,36 @@ +{% extends "base.html" %} +{% load i18n %} +{% load common_tags catalogue_tags %} +{% load ssify %} +{% load build_absolute_uri from fnp_common %} + +{% block titleextra %}{{ book.pretty_title }}{% endblock %} +{% block ogimage %}{% if book.cover %}{{ book.cover.url|build_absolute_uri:request }}{% endif %}{% endblock %} + +{% block metadescription %}{% book_title book %}. {{ block.super }}{% endblock %} + +{% block bodyid %}book-detail{% endblock %} + +{% block body %} + +{% ssi_include 'catalogue_book_wide' pk=book.pk %} + +{% work_list book_children %} + +{% spaceless %} +{% if book.other_versions %} +<section class="see-also" style="display: inline-block;"> +<h1>{% trans "Other versions" %}:</h1> +{% for rel in book.other_versions %} + {% ssi_include 'catalogue_book_mini' pk=rel.pk %} +{% endfor %} +</section> +{% endif %} + +<section class="see-also" style="display: inline-block;"> +<h1>{% trans "See also" %}:</h1> +{% related_books book taken=book.other_versions|length %} +</section> +{% endspaceless %} + +{% endblock %} diff --git a/src/catalogue/templates/catalogue/book_fragments.html b/src/catalogue/templates/catalogue/book_fragments.html new file mode 100644 index 000000000..d46f869d8 --- /dev/null +++ b/src/catalogue/templates/catalogue/book_fragments.html @@ -0,0 +1,20 @@ +{% extends "base.html" %} +{% load i18n %} +{% load work_list from catalogue_tags %} + +{% block titleextra %}{% trans "Theme" %} {{ theme }} {% trans "in work " %} {{ book }}{% endblock %} + +{% block bodyid %}tagged-object-list{% endblock %} + +{% block body %} + <div class="left-column"> + <h1>{% trans "Theme" %} + <a href="{{ theme.get_absolute_url }}">{{ theme }}</a> + <br/>{% trans "in work " %} + <a href="{{ book.get_absolute_url }}">{{ book }}</a></h1> + </div> + + <div class="right-column"> + {% work_list fragments %} + </div> +{% endblock %} diff --git a/src/catalogue/templates/catalogue/book_info.html b/src/catalogue/templates/catalogue/book_info.html new file mode 100755 index 000000000..e245335ee --- /dev/null +++ b/src/catalogue/templates/catalogue/book_info.html @@ -0,0 +1,46 @@ +{% load i18n %} +{% load catalogue_tags %} + +<p> + {% if book.extra_info.license %} + {% trans "This work is licensed under:" %} + <a href="{{ book.extra_info.license }}">{{ book.extra_info.license_description }}</a> + {% else %} + {% blocktrans %}This work isn't covered by copyright and is part of the + public domain, which means it can be freely used, published and + distributed. If there are any additional copyrighted materials + provided with this work (such as annotations, motifs etc.), those + materials are licensed under the + <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0</a> + license.{% endblocktrans %} + {% endif %} +</p> + +{% if book.extra_info.source_name %} + <p>{% trans "Resource prepared based on:" %} {{ book.extra_info.source_name }}</p> +{% endif %} + +{% if book.extra_info.description %} + <p>{{ book.extra_info.description }}</p> +{% endif %} + +{% if book.extra_info.editor or book.extra_info.technical_editor %} + <p>{% if is_picture %} + {% trans "Edited by:" %} + {% else %} + {% trans "Edited and annotated by:" %} + {% endif %} + {% all_editors book.extra_info %}.</p> +{% endif %} + +{% if book.extra_info.funders %} + <p>{% trans "Publication funded by:" %} + {% for funder in book.extra_info.funders %}{{ funder }}{% if not forloop.last %}, {% else %}.{% endif %}{% endfor %} + </p> +{% endif %} + +{% if book.extra_info.cover_by %} + <p>{% trans "Cover image by:" %} + <a href="{{ book.extra_info.cover_source }}"> + {{ book.extra_info.cover_by }}</a>.</p> +{% endif %} diff --git a/src/catalogue/templates/catalogue/book_list.html b/src/catalogue/templates/catalogue/book_list.html new file mode 100644 index 000000000..e29cd50ec --- /dev/null +++ b/src/catalogue/templates/catalogue/book_list.html @@ -0,0 +1,39 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} +{% load ssi_include from ssify %} + +{% block bodyid %}book-a-list{% endblock %} + +{% block titleextra %}{% trans "Listing of all works" %}{% endblock %} + +{% block body %} +{% spaceless %} + + <h1>{% block book_list_header %}{% trans "Listing of all works" %}{% endblock %}</h1> + + <div class="left-column"><div class="normal-text" style="margin-bottom: 2em"> + {% block book_list_info %} + {% ssi_include 'chunk' key='book-list' %} + {% endblock %} + </div></div> + + <div style='clear:both;'></div> + + <a name="top"></a> + + <div id="book-list-nav"> + <h2>{% trans "Table of Content" %}</h2> + <div id="book-list-nav-index"> + {{ rendered_nav }} + </div> + </div> + <div id="book-list"> + {% block book_list %} + {{ rendered_book_list }} + {% endblock %} + </div> + <a id="book-list-up" href="#top">{% trans "â top â" %}</a> + +{% endspaceless %} +{% endblock %} diff --git a/src/catalogue/templates/catalogue/book_mini_box.html b/src/catalogue/templates/catalogue/book_mini_box.html new file mode 100755 index 000000000..88ec16dfd --- /dev/null +++ b/src/catalogue/templates/catalogue/book_mini_box.html @@ -0,0 +1,22 @@ +{% spaceless %} +<div class="book-mini-box"> + <div class="book-mini-box-inner"> + {% if with_link %} + <a href="{{ book.get_absolute_url }}"> + {% endif %} + {% if book.cover_thumb %} + <img src="{{ book.cover_thumb.url }}" alt="{{ author_str }} â {{ book.title }}" class="cover" /> + {% endif %} + {% if show_lang %} + <span class="language" title="{{ book.language_name }}">{{ book.language_code }}</span> + {% endif %} + <div class="desc"> + <span class="mono author">{{ author_str }}</span> + <span class="title">{{ book.title }}</span> + </div> + {% if with_link %} + </a> + {% endif %} + </div> +</div> +{% endspaceless %} \ No newline at end of file diff --git a/src/catalogue/templates/catalogue/book_searched.html b/src/catalogue/templates/catalogue/book_searched.html new file mode 100644 index 000000000..357491ce6 --- /dev/null +++ b/src/catalogue/templates/catalogue/book_searched.html @@ -0,0 +1,38 @@ +{% spaceless %} + +{% load i18n %} +{% load inline_tag_list from catalogue_tags %} +{% load ssi_include from ssify %} + +<div class="search-result"> + +{% ssi_include 'catalogue_book_short' pk=book.pk %} + +<div class="snippets"> + {% for hit in hits %} + {% if hit.snippet %} + <div class="snippet-text"><a href="{% url 'book_text' book.slug %}#sec{{hit.section_number}}">{{hit.snippet|safe}}</a></div> + {% else %} + {% if hit.fragment %} + <div class="snippet-text"> + {% if hit.themes_hit %} + {% inline_tag_list hit.themes_hit %} + {% endif %} + <a href="{{hit.fragment.get_absolute_url}}"> + {% if hit.snippet %} + {{hit.snippet|safe}} + {% else %} + {{hit.fragment.text|truncatewords_html:15|safe}} + {% endif %} + </a> + </div> + {% endif %} + {% endif %} + {% endfor %} +</div> + +<div style="clear: right"></div> + +</div> + +{% endspaceless %} \ No newline at end of file diff --git a/src/catalogue/templates/catalogue/book_short.html b/src/catalogue/templates/catalogue/book_short.html new file mode 100644 index 000000000..b069cb585 --- /dev/null +++ b/src/catalogue/templates/catalogue/book_short.html @@ -0,0 +1,135 @@ +{% spaceless %} +{% load i18n %} +{% load catalogue_tags ssify %} +{% load likes_book book_shelf_tags from social_tags %} +<div class="{% block box-class %}book-box{% endblock %}"> +<div class="book-box-inner"> +<div class="book-left-column"> + + + + +<div class="book-box-body"> + + +{% likes_book book.pk as likes %} +<div class="star {{ likes.if }}{{ likes.else }}un{{ likes.endif }}like"> + <div class="if-like" > + <a id="social-book-sets-{{ book.slug }}" data-callback='social-book-sets' class='ajaxable' href='{% url "social_book_sets" book.slug %}'>â </a> + </div> + <div class="if-unlike"> + <form id="social-like-book-{{ book.slug }}" data-callback='social-like-book' method='post' class='ajax-form' action='{% url "social_like_book" book.slug %}'> + {% ssi_csrf_token %} + <button type='submit'>â</button> + </form> + </div> +</div> + + + <div class="book-box-head"> + <div class="author"> + {% for tag in tags.author %} + <a href="{{ tag.get_absolute_url }}">{{ tag.name }}</a>{% if not forloop.last %}, + {% endif %}{% endfor %}{% for parent in parents %}, + <a href="{{ parent.get_absolute_url }}">{{ parent.title }}</a>{% endfor %} + </div> + <div class="title"> + {% if main_link %}<a href="{{ main_link }}">{% endif %}{{ book.title }}{% if main_link %}</a>{% endif %} + </div> + </div> + +<div class="cover-area"> + {% if book.cover_thumb %} + {% if main_link %}<a href="{{ main_link }}">{% endif %} + <img src="{{ book.cover_thumb.url }}" alt="Cover" class="cover" /> + {% if main_link %}</a>{% endif %} + {% endif %} + {% block cover-area-extra %}{% endblock %} +</div> + <div class="tags"> + {% spaceless %} + + <span class="category"> + <span class="mono"> {% trans "Epoch" %}:</span> <span class="book-box-tag"> + {% for tag in tags.epoch %} + <a href="{{ tag.get_absolute_url }}">{{ tag.name }}</a> + {% if not forloop.last %}<span>, </span>{% endif %} + {% endfor %} + </span></span> + + <span class="category"> + <span class="mono"> {% trans "Kind" %}:</span> <span class="book-box-tag"> + {% for tag in tags.kind %} + <a href="{{ tag.get_absolute_url }}">{{ tag.name }}</a> + {% if not forloop.last %}<span>, </span>{% endif %} + {% endfor %} + </span></span> + + <span class="category"> + <span class="mono"> {% trans "Genre" %}:</span> <span class="book-box-tag"> + {% for tag in tags.genre %} + <a href="{{ tag.get_absolute_url }}">{{ tag.name }}</a> + {% if not forloop.last %}<span>, </span>{% endif %} + {% endfor %} + </span></span> + + {% if show_lang %} + <span class="category"> + <span class="mono"> {% trans "Language" %}:</span> <span class="book-box-tag"> + <a>{{ book.language_name }}</a> + </span></span> + {% endif %} + + {% if stage_note %} + <br><span class="category"> + <a{% if stage_note_url %} href="{{ stage_note_url }}"{% endif %}>{{ stage_note }}</a> + </span> + {% endif %} + + {% endspaceless %} + </div> + </div> + {% book_shelf_tags book.pk %} + + <ul class="book-box-tools"> + <li class="book-box-read"> + {% if book.html_file %} + <a href="{% url 'book_text' book.slug %}" class="downarrow">{% trans "Read online" %}</a> + {% endif %} + </li> + <li class="book-box-download hoverget"> + <a class="downarrow hoverclick">{% trans "Download" %}</a> + <div class="book-box-formats"> + {% if book.pdf_file %} + <span><a href="{{ book.pdf_file.url}}">PDF</a> {% trans "to print" %}</span> + {% endif %} + {% if book.epub_file %} + <span><a href="{{ book.epub_file.url}}">EPUB</a> {% trans "for an e-book reader" %}</span> + {% endif %} + {% if book.mobi_file %} + <span><a href="{{ book.mobi_file.url}}">MOBI</a> {% trans "for Kindle" %}</span> + {% endif %} + {% if book.fb2_file %} + <span><a href="{{ book.fb2_file.url}}">FB2</a> {% trans "FictionBook" %}</span> + {% endif %} + {% if book.txt_file %} + <span><a href="{{ book.txt_file.url}}">TXT</a> {% trans "for advanced usage" %}</span> + {% endif %} + </div> + </li> + <li class="book-box-audiobook"> + {% if has_audio %} + <a href="{% url 'book_player' book.slug %}" class="open-player downarrow">{% trans "Listen" %}</a> + {% endif %} + </li> + </ul> + {% block book-box-extra-info %}{% endblock %} + {% block box-append %} + {% endblock %} + </div> + {% block right-column %} + {% endblock %} + <div class="clearboth"></div> +</div> +</div> +{% endspaceless %} \ No newline at end of file diff --git a/src/catalogue/templates/catalogue/book_text.html b/src/catalogue/templates/catalogue/book_text.html new file mode 100644 index 000000000..339cfc7b2 --- /dev/null +++ b/src/catalogue/templates/catalogue/book_text.html @@ -0,0 +1,100 @@ +{% extends "catalogue/viewer_base.html" %} +{% load i18n %} +{% load catalogue_tags ssify %} +{% load thumbnail %} + + +{% block title %}{{ book.pretty_title }}{% endblock %} + + +{% block menu %} +<li><a href="{{ book.get_absolute_url }}" id="menu-book" data-box="book-short"> + <img src="{% if book.cover_thumb %}{% thumbnail book.cover_thumb '80x111' as thumb %}{{ thumb.url }}{% empty %}{{ book.cover_thumb.url }}{% endthumbnail %}{% endif %}" + width="80" height="111" + alt="{{ book.pretty_title }}" + title="{{ book.pretty_title }}"> +</a></li> + +{% if book.other_versions.exists %} + <li id="menu-other"><a href="#" data-box="other"> + <span class="label">{% trans "Other versions" %}</span> + </a> + </li> +{% endif %} + +<li id="menu-toc"><a href="#" data-box="toc"> + <span class="label">{% trans "Table of contents" %}</span> +</a></li> + +<li id="menu-themes"><a href="#" data-box="themes"> + <span class="label">{% trans "Themes" %}</span> +</a></li> + +<li id="menu-settings"><a href="#" data-box="settings"> + <span class="label">{% trans "Settings" %}</span> +</a></li> + +<li id="menu-nota_red"><a href="#" data-box="nota_red"> + <span class="label">{% trans "Edit. note" %}</span> +</a></li> + +<li id="menu-info"><a href="#info" data-box="info"> + <span class="label">{% trans "Infobox" %}</span> +</a></li> +{% endblock menu %} + + + +{% block big-pane %} +<div id="big-pane" style=""> + +<article id="main-text"> +<!--#include file='{{ book.html_file.url }}'--> +</article> + +<article id="other-text"> + <a class="other-text-close" href="#">{% trans "Close" %}</a> + <div id="other-text-waiter">{% trans "Please wait..." %}</div> + <div id="other-text-body" style="display: none;"></div> +</article> +{% endblock big-pane %} + + + + + +{% block footer %} +<div id="info" class="box"> + {% book_info book %} +</div> + +{% if book.other_versions.exists %} +<div class="box" id="other"> + <h2>{% trans "Other versions of the book" %}</h2> + <a class="other-text-close" href="#">{% trans "Close the other version" %}</a> + <ul> + {% spaceless %} + {% for other_version in book.other_versions %} + <li><a class="display-other" + data-other="{{ other_version.html_file.url }}" + href="{% url 'book_text' other_version.slug %}"> + {% ssi_include 'catalogue_book_mini_nolink' pk=other_version.pk %} + </a> + </li> + {% endfor %} + {% endspaceless %} + </ul> +</div> +{% endif %} + +<div class="box" id="settings"> + <h2>{% trans "Settings" %}</h2> + <a href="#" class="settings-switch" id="settings-line-numbers" data-setting="always-hide-line-numbers">{% trans "Display line numbers" %}</a><br/> + <a href="#" class="settings-switch" id="settings-themes" data-setting="always-hide-themes">{% trans "Display themes" %}</a><br/> + <a href="#" class="settings-switch" id="settings-annotations" data-setting="no-annotations">{% trans "Display footnotes" %}</a><br/> +</div> + +<div class="box" id="book-short"> + {% ssi_include 'catalogue_book_short' pk=book.pk %} +</div> +{% endblock footer %} diff --git a/src/catalogue/templates/catalogue/book_wide.html b/src/catalogue/templates/catalogue/book_wide.html new file mode 100644 index 000000000..b84acdb53 --- /dev/null +++ b/src/catalogue/templates/catalogue/book_wide.html @@ -0,0 +1,84 @@ +{% extends "catalogue/book_short.html" %} +{% load i18n %} +{% load choose_fragment download_audio tag_list custom_pdf_link_li license_icon source_name from catalogue_tags %} +{% load choose_cite from social_tags %} +{% load ssi_include from ssify %} + + +{% block box-class %}book-wide-box{% endblock %} + + +{% block cover-area-extra %} +{% if extra_info.license %} + {% license_icon extra_info.license %} +{% endif %} +{% endblock %} + + + +{% block book-box-extra-info %} +{% if themes %} + <div class="hidden-box-wrapper" id="theme-list-wrapper"> + <p><a class="mono hidden-box-trigger theme-list-link" + href="#">{% trans "Motifs and themes" %}</a></p> + <div class="hidden-box"> + <ul> + {% for theme in themes %} + <li><a href="{% url 'book_fragments' book.slug theme.slug %}">{{ theme }} ({{ theme.count }})</a></li> + {% endfor %} + </ul> + </div> + </div> +{% else %} + <p> </p> +{% endif %} +{% endblock %} + + +{% block right-column %} +<div class="right-column"> + <div class="quote"> + {% choose_cite book.pk as cite_promo %} + {% choose_fragment book.pk unless=cite_promo as fragment_promo %} + {{ cite_promo.if }} + {% ssi_include 'social_cite' pk=cite_promo %} + {{ cite_promo.endif }} + {{ fragment_promo.if }} + {% ssi_include 'catalogue_fragment_promo' pk=fragment_promo %} + {{ fragment_promo.endif }} + </div> + + <div class="other-tools"> + <h2 class="mono">{% trans "See" %}</h2> + <ul class="plain"> + {% if extra_info.source_url %} + <li><a href="{{ extra_info.source_url }}">{% trans "Source" %}</a> {% trans "of the book" %} + {% trans "in" %} {% source_name extra_info.source_url %}</li> + {% endif %} + <li><a href="{{ book.xml_file.url }}">{% trans "Source XML file" %}</a></li> + {% if extra_info.about and not hide_about %} + <li>{% trans "Book on" %} <a href="{{ extra_info.about }}">{% trans "Editor's Platform" %}</a></li> + {% endif %} + {% if book.gazeta_link %} + <li><a href="{{ book.gazeta_link }}">{% trans "Book description on Lektury.Gazeta.pl" %}</a></li> + {% endif %} + {% if book.wiki_link %} + <li><a href="{{ book.wiki_link }}">{% trans "Book description on Wikipedia" %}</a></li> + {% endif %} + <li><a href="{% url 'poem_from_book' book.slug %}">{% trans "Mix this book" %}</a></li> + </ul> + </div> + <div class="other-download"> + <h2 class="mono">{% trans "Download" %}</h2> + <ul class="plain"> + <li> + {% if related.media.mp3 or related.media.ogg or related.media.daisy %} + {% trans "Download all audiobooks for this book" %}: + {% download_audio book %}. + {% endif %} + </li> + {% custom_pdf_link_li book %} + </ul> + </div> +</div> +{% endblock %} diff --git a/src/catalogue/templates/catalogue/catalogue.html b/src/catalogue/templates/catalogue/catalogue.html new file mode 100644 index 000000000..c7cee4096 --- /dev/null +++ b/src/catalogue/templates/catalogue/catalogue.html @@ -0,0 +1,38 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} + + +{% block titleextra %}{% trans "Catalogue" %}{% endblock %} + +{% block bodyid %}catalogue-catalogue{% endblock %} + +{% block body %} + <h1>{% trans "Catalogue" %}</h1> + + <div class="normal-text catalogue-catalogue"> + + <p><a href="{% url 'reporting_catalogue_pdf' %}"> + {% trans "Download the catalogue in PDF format." %} + </a></p> + + <h2 class="white-box">{% trans "Authors" %}<a name="autorzy"></a></h2> + <div class="white-box">{{ output.author }}</div> + + <h2 class="white-box">{% trans "Kinds" %}<a name="rodzaje"></a></h2> + <div class="white-box" lang="pl">{{ output.kind }}</div> + + <h2 class="white-box">{% trans "Genres" %}<a name="gatunki"></a></h2> + <div class="white-box" lang="pl">{{ output.genre }}</div> + + <h2 class="white-box">{% trans "Epochs" %}<a name="epoki"></a></h2> + <div class="white-box" lang="pl">{{ output.epoch }}</div> + + <h2 class="white-box">{% trans "Themes and topics" %}<a name="motywy"></a></h2> + <div class="white-box" lang="pl">{{ output.theme }}</div> + + <h2 class="white-box">{% trans "Collections" %}<a name="kolekcje"></a></h2> + <div class="white-box" lang="pl">{{ output.collections }}</div> + + </div> +{% endblock %} diff --git a/src/catalogue/templates/catalogue/collection.html b/src/catalogue/templates/catalogue/collection.html new file mode 100755 index 000000000..4bb12c938 --- /dev/null +++ b/src/catalogue/templates/catalogue/collection.html @@ -0,0 +1,10 @@ +{% extends "catalogue/book_list.html" %} +{% load i18n %} + +{% block titleextra %}{{ context.collection.title }}{% endblock %} + +{% block book_list_header %}{{ context.collection.title }}{% endblock %} + +{% block book_list_info %} +{{ context.collection.description|safe }} +{% endblock %} diff --git a/src/catalogue/templates/catalogue/collection_list.html b/src/catalogue/templates/catalogue/collection_list.html new file mode 100755 index 000000000..38466f157 --- /dev/null +++ b/src/catalogue/templates/catalogue/collection_list.html @@ -0,0 +1,5 @@ +<ul> +{% for collection in collections %} + <li><a href="{{ collection.get_absolute_url }}">{{ collection }}</a></li> +{% endfor %} +</ul> diff --git a/src/catalogue/templates/catalogue/daisy_list.html b/src/catalogue/templates/catalogue/daisy_list.html new file mode 100644 index 000000000..65d9d6bcd --- /dev/null +++ b/src/catalogue/templates/catalogue/daisy_list.html @@ -0,0 +1,17 @@ +{% extends "catalogue/book_list.html" %} +{% load i18n %} +{% load ssi_include from ssify %} + +{% block bodyid %}book-a-list{% endblock %} + +{% block titleextra %}{% trans "Listing of all DAISY files" %}{% endblock %} + +{% block extrahead %} + <link rel="alternate" type="application/atom+xml" title="{% trans "Latest DAISY audiobooks" %}" href="{% url 'audiobook_feed' 'daisy' %}" /> +{% endblock %} + +{% block book_list_header %}{% trans "Listing of all DAISY files" %}{% endblock %} + +{% block book_list_info %} +{% ssi_include 'chunk' key='daisy-list' %} +{% endblock %} diff --git a/src/catalogue/templates/catalogue/differentiate_tags.html b/src/catalogue/templates/catalogue/differentiate_tags.html new file mode 100644 index 000000000..b8ef906ef --- /dev/null +++ b/src/catalogue/templates/catalogue/differentiate_tags.html @@ -0,0 +1,20 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} + +{% block titleextra %}{% title_from_tags tags %}{% endblock %} + +{% block bodyid %}differentiate_tags{% endblock %} + +{% block body %} + <h1>{% title_from_tags tags %}</h1> + + <p>{% trans "The criteria are ambiguous. Please select one of the following options:" %}</p> + <div id="books-list"> + {% for option in options %} + <div class="book-description" + <p><a href="{% url 'tagged_object_list' option.url_args %}">{% if tags %}{% title_from_tags tags %}, {% endif %}<em>{%title_from_tags option.tags %}</em>{% if unparsed %}, {{unparsed|join:', '}}{% endif %}</a></p> + </div> + {% endfor %} + </div> +{% endblock %} diff --git a/src/catalogue/templates/catalogue/fragment_promo.html b/src/catalogue/templates/catalogue/fragment_promo.html new file mode 100755 index 000000000..cf817ae7c --- /dev/null +++ b/src/catalogue/templates/catalogue/fragment_promo.html @@ -0,0 +1,8 @@ +{% if fragment %} +<a href="{{ fragment.get_absolute_url }}" class="cite"> + <blockquote class="cite-body"> + {{ fragment.get_short_text|safe }} + </blockquote> + <p class="mono source">{{ fragment.book.pretty_title }}</p> +</a> +{% endif %} diff --git a/src/catalogue/templates/catalogue/fragment_short.html b/src/catalogue/templates/catalogue/fragment_short.html new file mode 100644 index 000000000..b5921f215 --- /dev/null +++ b/src/catalogue/templates/catalogue/fragment_short.html @@ -0,0 +1,26 @@ +{% load i18n %} +{% load book_title_html from catalogue_tags %} + +<div class="cite {% if fragment.short_text %}fragment-with-short{% endif %}"> + {% if fragment.short_text %} + <div class="fragment-short-text"> + <blockquote class="cite-body"> + <a href="{{ fragment.get_absolute_url }}" class="fragment"> + {{ fragment.short_text|safe }} + </a> + </blockquote> + <a href="#" class="toggle mono">â {% trans "Expand fragment" %} â</a> + </div> + {% endif %} + <div class="fragment-long-text" {% if fragment.short_text %}style="display:none;"{% endif %}> + <blockquote class="cite-body fragment-text"> + <a href="{{ fragment.get_absolute_url }}" class="fragment"> + {{ fragment.text|safe }} + </a> + </blockquote> + {% if fragment.short_text %} + <a href="#" class="toggle mono">â {% trans "Hide fragment" %} â</a> + {% endif %} + </div> +<p class="mono source">{% book_title_html fragment.book %}</p> +</div> diff --git a/src/catalogue/templates/catalogue/inline_tag_list.html b/src/catalogue/templates/catalogue/inline_tag_list.html new file mode 100755 index 000000000..59b1acce9 --- /dev/null +++ b/src/catalogue/templates/catalogue/inline_tag_list.html @@ -0,0 +1,17 @@ +{% load i18n %} +{% load catalogue_tags %} +{% if one_tag %} + {% trans "See full category" %} <a href="{% catalogue_url one_tag %}">{{ one_tag }}</a> +{% else %} + <ul> + {% if choices %} + {% for tag in tags %} + <li><a href="{% catalogue_url choices tag %}">{{ tag }}{% if tag.count %} ({{ tag.count }}){% endif %}</a></li> + {% endfor %} + {% else %} + {% for tag in tags %} + <li><a href="{{ tag.get_absolute_url }}">{% if tag.count %} ({{ tag.count }}){% endif %}</a></li> + {% endfor %} + {% endif %} + </ul> +{% endif %} diff --git a/src/catalogue/templates/catalogue/menu.html b/src/catalogue/templates/catalogue/menu.html new file mode 100644 index 000000000..5ddbd3b23 --- /dev/null +++ b/src/catalogue/templates/catalogue/menu.html @@ -0,0 +1,41 @@ +{% spaceless %} +{% load i18n static %} + +<a id="show-menu" href="{% url 'catalogue' %}"> + <span class="long">{% trans "Catalogue of the library" %}</span> + <span class="short">{% trans "Catalogue" %}</span> +</a> +<ul id="menu"> + {% for category, name, hash in categories %} + <li class="hidden-box-wrapper menu"> + <a href="{% url 'catalogue' %}#{{ hash }}" class="hidden-box-trigger menu load-menu">{{ name }}</a> + <div class="hidden-box" id="menu-{{ category }}"> + <img src="{% static "img/indicator.gif" %}" alt="{% trans "Please waitâ¦" %}" /> + </div> + </li> + {% endfor %} + + <li class="hidden-box-wrapper menu"> + <a href="{% url 'catalogue' %}#kolekcje" class="hidden-box-trigger menu load-menu">{% trans "Collections" %}</a> + <div class="hidden-box" id="menu-collections"> + <img src="{% static "img/indicator.gif" %}" alt="{% trans "Please waitâ¦" %}" /> + </div> + </li> + + <li class="menu"> + <a href="{% url 'book_list' %}" class="menu">{% trans "All books" %}</a> + </li> + <li class="menu"> + <a href="{% url 'audiobook_list' %}" class="menu">{% trans "Audiobooks" %}</a> + </li> + <li class="menu"> + <a href="{% url 'daisy_list' %}" class="menu">{% trans "DAISY" %}</a> + </li> + <li class="menu"> + <a href="{% url 'picture_list_thumb' %}" class="menu"> + <span class='mono'>{% trans "Gallery" %}</span></a> + </li> + +</ul> + +{% endspaceless %} \ No newline at end of file diff --git a/src/catalogue/templates/catalogue/picture_detail.html b/src/catalogue/templates/catalogue/picture_detail.html new file mode 100644 index 000000000..b8b70c6be --- /dev/null +++ b/src/catalogue/templates/catalogue/picture_detail.html @@ -0,0 +1,94 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags pagination_tags %} +{% load thumbnail %} + + +{% block titleextra %}{{ picture.title }}{% endblock %} + +{% block bodyid %}picture-detail{% endblock %} + +{% block body %} + <h1>{{picture.title}}</h1> + + <div id="books-list"> + <div id='breadcrumbs'> + {% if categories.author %} + {% for tag in categories.author %} + <a href="{{ tag.get_absolute_url }}">{{ tag }}</a>{% if not forloop.last %}, {% endif %} + {% endfor %} + » + {% endif %} + </div> + + {% thumbnail picture.image_file "400x500" upscale="false" as im %} + <img style="margin:{{ im|margin:"500x500" }}" src="{{ im.url }}" width="{{ im.x }}" height="{{ im.y }}" /> + {% endthumbnail %} + + {% if picture.info.license %} + <p>{% trans "Work is licensed under " %} <a href="{{ picture.info.license }}">{{ picture.info.license_description }}</a>.</p> + {% endif %} + <p>{% trans "Based on" %}: {{ picture.info.source_name }}</p> + {% if picture.info.description %} + <div id="description"> + <div id='description-long'>{{ picture.info.description|safe }}</div> +{%comment%} <div id='description-short'>{{ picture.info.description|safe|truncatewords_html:30 }}</div>{%endcomment%} + </div> + <div id="toggle-description"><p></p></div> + {% endif %} + + </div> + + <div id="tags-list"> + <div id="book-info"> + <h2>{% trans "Details" %}</h2> + <ul> + <li> + {% trans "Author" %}: + {% for tag in categories.author %} + <a href="{{ tag.get_absolute_url }}">{{ tag }}</a>{% if not forloop.last %}, {% endif %} + {% endfor %} + </li> + <li> + {% trans "Epoch" %}: + {% for tag in categories.epoch %} + <a href="{{ tag.get_absolute_url }}">{{ tag }}</a>{% if not forloop.last %}, {% endif %} + {% endfor %} + </li> + <li> + {% trans "Kind" %}: + {% for tag in categories.kind %} + <a href="{{ tag.get_absolute_url }}">{{ tag }}</a>{% if not forloop.last %}, {% endif %} + {% endfor %} + </li> + </ul> + <h2>{% trans "Other resources" %}</h2> + <ul> + {% if picture.info.source_url %} + <li><a href="{{ picture.info.source_url }}">{% trans "Source of the image" %}</a></li> + {% endif %} + {% if picture.info.about and not hide_about %} + <li><a href="{{ picture.info.about }}">{% trans "Image on the Editor's Platform" %}</a></li> + {% endif %} +{% comment %} + {% if book.gazeta_link %} + <li><a href="{{ book.gazeta_link }}">{% trans "Picture description on Lektury.Gazeta.pl" %}</a></li> + {% endif %} + {% if book.wiki_link %} + <li><a href="{{ book.wiki_link }}">{% trans "Book description on Wikipedia" %}</a></li> + {% endif %} +{% endcomment %} + </ul> + <p><a href="{{ picture.xml_file.url }}">{% trans "View XML source" %}</a></p> + </div> + <div id="themes-list"> + <h2>{% trans "Work's themes " %}</h2> + <ul> + {% for theme in picture_themes %} + <li><a href="{{ theme.get_absolute_url }}">{{ theme }} ({{ theme.count }})</a></li> + {% endfor %} + </ul> + </div> + <div class="clearboth"></div> + </div> +{% endblock %} diff --git a/src/catalogue/templates/catalogue/picture_list.html b/src/catalogue/templates/catalogue/picture_list.html new file mode 100644 index 000000000..ce61ec48b --- /dev/null +++ b/src/catalogue/templates/catalogue/picture_list.html @@ -0,0 +1,32 @@ +{% extends "catalogue/book_list.html" %} +{% load i18n %} +{% load catalogue_tags chunks %} +{% load thumbnail %} + +{% block bodyid %}picture-list{% endblock %} + +{% block titleextra %}{% trans "Listing of all works" %}{% endblock %} + +{% block picture_list_header %}{% trans "Listing of all works" %}{% endblock %} + + +{% block book_list %} +{% for author, group in pictures_by_author.items %} +<a name="{{ author.slug }}"/> +<div class="group"> + <h2><a href="{{ author.get_absolute_url }}">{{ author }}</a></h2> + {% for picture in group %} + <div class="picture"> + {% thumbnail picture.image_file "300x300" as im %} + <img style="float: left; margin:{{ im|margin:"300x300" }}" src="{{ im.url }}" width="{{ im.x }}" height="{{ im.y }}" /> + {% endthumbnail %} + <span class="title"><a href="{{picture.get_absolute_url}}">{{picture.title}}</a></span> + <br class="clearboth"/> + </div> + {% endfor %} +</div> + +{% endfor %} + +{% endblock %} + diff --git a/src/catalogue/templates/catalogue/player.html b/src/catalogue/templates/catalogue/player.html new file mode 100755 index 000000000..701fbe850 --- /dev/null +++ b/src/catalogue/templates/catalogue/player.html @@ -0,0 +1,140 @@ +<!DOCTYPE html> +<html> + {% load static from staticfiles %} + {% load i18n pipeline %} + {% load catalogue_tags %} + {% load thumbnail %} + <head> + <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> + <meta name="description" + content="{{ book.title }} - darmowy audiobook na wolnej licencji" /> + <title>{% trans "Wolne Lektury" %} :: + {{ book.title }} - {{ audiobook }}</title> + <link rel="icon" href="{% static "img/favicon.png" %}" type="image/png" /> + {% stylesheet "all" %} + {% stylesheet "player" %} + + </head> + <body id="{% block bodyid %}player{% endblock %}"> + + {% if book.cover_thumb %} + <img src=" + {% thumbnail book.cover_thumb "101x140" as thumb %} + {{ thumb.url }} + {% empty %} + {{ book.cover_thumb.url }} + {% endthumbnail %} + " alt="Cover" style="float: left; margin: .5em 1em 1em 1em;" /> + {% endif %} + + +<h1>{% book_title book %}</h1> + +<div class="player-info normal-text"> + <p><a target="_blank" href="{{ book.get_absolute_url }}">{% trans "Book's page" %}</a>.</p> + <p>{% trans "Download as" %} {% download_audio book False %}.</p> + + {% if book.has_daisy_file %} + <p>DAISY:</p> + <ul class="daisy-list"> + {% for media in book.get_daisy %} + <li><a href="{{ media.file.url }}">{{ media.name }}</a></li> + {% endfor %} + </ul> + {% endif %} +</div> + +<div style="clear: both"></div> + +<div class="jp-type-playlist"> + <div id="jplayer" class="jp-jplayer" + data-supplied="{% if have_oggs %}oga,{% endif %}mp3"></div> + <div id="jp_container_1" class="jp-audio"> + <div class="jp-type-single"> + <div class="jp-gui jp-interface"> + <ul class="jp-controls"> + <li><a href="javascript:;" class="jp-play" tabindex="1">play</a></li> + <li><a href="javascript:;" class="jp-pause" tabindex="1">pause</a></li> + <li><a href="javascript:;" class="jp-stop" tabindex="1">stop</a></li> + <li><a href="javascript:;" class="jp-mute" tabindex="1" title="mute">mute</a></li> + <li><a href="javascript:;" class="jp-unmute" tabindex="1" title="unmute">unmute</a></li> + <li><a href="javascript:;" class="jp-volume-max" tabindex="1" title="max volume">max volume</a></li> + </ul> + <div class="jp-progress"> + <div class="jp-seek-bar"> + <div class="jp-play-bar"></div> + </div> + </div> + <div class="jp-volume-bar"> + <div class="jp-volume-bar-value"></div> + </div> + <div class="jp-time-holder"> + <div class="jp-current-time"></div> + <div class="jp-duration"></div> + </div> + </div> + + <div class="jp-playlist"> + <ul> + + {% for i in audiobooks %} + <li> + <span class='jp-free-media'> + (<a class='mp3' href='{{ i.mp3.file.url }}'>mp3</a>{% if i.ogg %} + | <a class='ogg' href='{{ i.ogg.file.url }}'>ogg</a>{% endif %}) + </span> + <div class='play'>{{ i.mp3.name }} + <div class='extra-info'> + {% trans "Artist" %}: <span class='artist'>{{ i.mp3.extra_info.artist_name }}</span>, + {% trans "Director" %}: <span class='director'>{{ i.mp3.extra_info.director_name }}</span> + </div> + </div> + </li> + {% endfor %} + + </ul> + </div> + + <div class="jp-no-solution"> + <span>Update Required</span> + To play the media you will need to either update your browser to a recent version or update your <a href="http://get.adobe.com/flashplayer/" target="_blank">Flash plugin</a>. + </div> + </div> + </div> +</div> + + + {% if projects|length > 1 %} + <p>{% trans "Audiobooks were prepared as a part of the projects:" %}</p> + <ul> + {% for cs, fb in projects %} + <li> + {% if fb %} + {% blocktrans %}{{ cs }}, funded by {{ fb }}{% endblocktrans %} + {% else %} + {{ cs }} + {% endif %} + </li> + {% endfor %} + </ul> + {% else %} + <p> + {% with projects.0.0 as cs %} + {% with projects.0.1 as fb %} + {% if fb %} + {% blocktrans %}Audiobooks were prepared as a part of the {{ cs }} project funded by {{ fb }}.{% endblocktrans %} + {% else %} + {% blocktrans %}Audiobooks were prepared as a part of the {{ cs }} project.{% endblocktrans %} + {% endif %} + {% endwith %} + {% endwith %} + </p> + {% endif %} + + + <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> + {% javascript "player" %} + + {{ piwik_tag|safe }} + </body> +</html> diff --git a/src/catalogue/templates/catalogue/recent_audiobooks_list.html b/src/catalogue/templates/catalogue/recent_audiobooks_list.html new file mode 100755 index 000000000..762cb80d7 --- /dev/null +++ b/src/catalogue/templates/catalogue/recent_audiobooks_list.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} + +{% block titleextra %}{% trans "Recent audiobooks" %}{% endblock %} + +{% block bodyid %}recent-list{% endblock %} + +{% block body %} + <h1>{% trans "Recent audiobooks" %}</h1> + + <div id="books-list"> + {% work_list object_list %} + </div> +{% endblock %} diff --git a/src/catalogue/templates/catalogue/recent_daisy_list.html b/src/catalogue/templates/catalogue/recent_daisy_list.html new file mode 100755 index 000000000..6675af206 --- /dev/null +++ b/src/catalogue/templates/catalogue/recent_daisy_list.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} + +{% block titleextra %}{% trans "Recent DAISY files" %}{% endblock %} + +{% block bodyid %}recent-list{% endblock %} + +{% block body %} + <h1>{% trans "Recent DAISY files" %}</h1> + + <div id="books-list"> + {% work_list object_list %} + </div> +{% endblock %} diff --git a/src/catalogue/templates/catalogue/recent_list.html b/src/catalogue/templates/catalogue/recent_list.html new file mode 100755 index 000000000..28a96b831 --- /dev/null +++ b/src/catalogue/templates/catalogue/recent_list.html @@ -0,0 +1,22 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} + +{% block titleextra %}{% trans "Recent publications" %}{% endblock %} + +{% block bodyid %}recent-list{% endblock %} + +{% block body %} + <h1>{% trans "Recent publications" %}</h1> + + {% url 'recent_audiobooks_list' as a %} + {% url 'recent_daisy_list' as d %} + <p class='normal-text'> + {% blocktrans %}You can also see <a href="{{a}}">recent audiobooks</a> + and <a href="{{d}}">recent DAISY files</a>.{% endblocktrans %} + </p> + + <div id="books-list"> + {% work_list object_list %} + </div> +{% endblock %} diff --git a/src/catalogue/templates/catalogue/related_books.html b/src/catalogue/templates/catalogue/related_books.html new file mode 100755 index 000000000..6407d5a04 --- /dev/null +++ b/src/catalogue/templates/catalogue/related_books.html @@ -0,0 +1,25 @@ +{% spaceless %} +{% load catalogue_random_book from catalogue_tags %} +{% load picture_random_picture from picture_tags %} +{% load ssi_include from ssify %} + +{% for pic in pics %} + {% ssi_include 'picture_mini' pk=pic.pk %} +{% endfor %} + +{% for book in books %} + {% ssi_include 'catalogue_book_mini' pk=book.pk %} +{% endfor %} + +{% if random %} + {% catalogue_random_book random_excluded_books as random_book_pk %} + {% picture_random_picture random_excluded_pics unless=random_book_pk as random_pic_pk %} + {{ random_book_pk.if }} + {% ssi_include 'catalogue_book_mini' pk=random_book_pk %} + {{ random_book_pk.endif }} + {{ random_pic_pk.if }} + {% ssi_include 'picture_mini' pk=random_pic_pk %} + {{ random_pic_pk.endif }} +{% endif %} + +{% endspaceless %} \ No newline at end of file diff --git a/src/catalogue/templates/catalogue/search_multiple_hits.html b/src/catalogue/templates/catalogue/search_multiple_hits.html new file mode 100644 index 000000000..d1e1dedf7 --- /dev/null +++ b/src/catalogue/templates/catalogue/search_multiple_hits.html @@ -0,0 +1,129 @@ +{% extends "base.html" %} +{% load i18n %} +{% load pagination_tags %} +{% load inline_tag_list from catalogue_tags %} +{% load book_searched from search_tags %} +{% load ssi_include from ssify %} + +{% block titleextra %}{% trans "Search" %}{% endblock %} + +{% block bodyid %}tagged-object-list{% endblock %} + +{% block body %} + {% if did_you_mean %} + <span class="did_you_mean">{% trans "Did you mean" %} <a href="{% url 'search' %}?q={{did_you_mean|urlencode}}">{{did_you_mean|lower}}</a>?</span> + {% endif %} + <!-- tu pójdÄ trafienia w tagi: Autorzy - z description oraz motywy i rodzaje --> + <div class="inline-tag-lists top-tag-list"> + {% if tags.author %} + <div> + <div class="mono inline-header">{% trans "Authors" %}:</div> + <div class="inline-body"> + {% inline_tag_list tags.author %} + </div> + </div> + {% endif %} + {% if tags.kind %} + <div> + <div class="mono inline-header">{% trans "Kinds" %}:</div> + <div class="inline-body"> + {% inline_tag_list tags.kind %} + </div> + </div> + {% endif %} + {% if tags.genre %} + <div> + <div class="mono inline-header">{% trans "Genres" %}:</div> + <div class="inline-body"> + {% inline_tag_list tags.genre %} + </div> + </div> + {% endif %} + {% if tags.epoch %} + <div class="inline-tag-list"> + <div class="mono inline-header">{% trans "Epochs" %}:</div> + <div class="inline-body"> + {% inline_tag_list tags.epoch %} + </div> + </div> + {% endif %} + </div> + + {% if results.title %} + <div class="book-list-header"> + <div class="book-box-inner"> + <p>{% trans "Results by title" %}</p> + </div> + </div> + <div> + <ol class="work-list"> + {% for result in results.title %}<li class="Book-item"> + {% ssi_include 'catalogue_book_short' pk=result.book.pk %} + </li>{% endfor %} + </ol> + </div> + {% endif %} + + {% if results.author %} + <div class="book-list-header"> + <div class="book-box-inner"> + <p>{% trans "Results by authors" %}</p> + </div> + </div> + <div> + <ol class="work-list"> + {% for author in results.author %}<li class="Book-item">{% ssi_include 'catalogue_book_short' pk=author.book.pk %}</li>{% endfor %} + </ol> + </div> + {% endif %} + + {% if results.translator %} + <div class="book-list-header"> + <div class="book-box-inner"> + <p>{% trans "Results by translators" %}</p> + </div> + </div> + <div> + <ol class="work-list"> + {% for translator in results.translator %}<li class="Book-item">{% ssi_include 'catalogue_book_short' pk=translator.book.pk %}</li>{% endfor %} + </ol> + </div> + {% endif %} + + {% if results.content %} + <div class="book-list-header"> + <div class="book-box-inner"> + <p>{% trans "Results in text" %}</p> + </div> + </div> + <div> + <ol class="work-list"> + {% for result in results.content %} + <li class="Book-item"> + {% book_searched result %} + </li> + {% endfor %} + </ol> + </div> + {% endif %} + + {% if results.other %} + <div class="book-list-header"> + <div class="book-box-inner"> + <p>{% trans "Other results" %}</p> + </div> + </div> + <div> + <ol class="work-list"> + {% for result in results.other %} + <li class="Book-item"> + {% book_searched result %} + </li> + {% endfor %} + </ol> + </div> + {% endif %} + + + +{% endblock %} diff --git a/src/catalogue/templates/catalogue/search_no_hits.html b/src/catalogue/templates/catalogue/search_no_hits.html new file mode 100644 index 000000000..a2c9a63a7 --- /dev/null +++ b/src/catalogue/templates/catalogue/search_no_hits.html @@ -0,0 +1,30 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags pagination_tags %} + +{% block titleextra %}{% trans "Search" %}{% endblock %} + +{% block bodyid %}tagged-object-list{% endblock %} + +{% block body %} + <h1>{% trans "Search" %}</h1> + + <div class="left-column"> + <div class="normal-text"> + <p> + {% if did_you_mean %} + <span class="did_you_mean">{% trans "Did you mean" %} <a href="{% url 'search' %}?q={{did_you_mean|urlencode}}">{{did_you_mean|lower}}</a>?</span> + {% endif %} + </p> + <p>{% trans "Sorry! Search cirteria did not match any resources." %}</p> + + <p>{% blocktrans %}Search engine supports following criteria: title, author, theme/topic, epoch, kind and genre. + As for now we do not support full text search.{% endblocktrans %}</p> + {% include "info/join_us.html" %} + </div> + </div> + + <div class="right-column"> + {% include "publishing_suggest.html" %} + </div> +{% endblock %} diff --git a/src/catalogue/templates/catalogue/search_too_short.html b/src/catalogue/templates/catalogue/search_too_short.html new file mode 100644 index 000000000..62d0ad022 --- /dev/null +++ b/src/catalogue/templates/catalogue/search_too_short.html @@ -0,0 +1,17 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags pagination_tags %} + +{% block titleextra %}{% trans "Search" %}{% endblock %} + +{% block bodyid %}tagged-object-list{% endblock %} + +{% block body %} + <h1>{% trans "Search" %}</h1> + + <div id="books-list"> + <p>{% trans "Sorry! Search query must have at least two characters." %}</p> + {% include "info/join_us.html" %} + </div> + +{% endblock %} \ No newline at end of file diff --git a/src/catalogue/templates/catalogue/snippets/audiobook_list.html b/src/catalogue/templates/catalogue/snippets/audiobook_list.html new file mode 100755 index 000000000..d7f599274 --- /dev/null +++ b/src/catalogue/templates/catalogue/snippets/audiobook_list.html @@ -0,0 +1,12 @@ +{% load catalogue_tags %} + +{% audiobook_tree orphans books_by_parent %} +{% for author, group in books_by_author.items %} + {% if group %} + <a name="{{ author.slug }}"></a> + <div class="group"> + <h2><a href="{{ author.get_absolute_url }}">{{ author }}</a></h2> + {% audiobook_tree group books_by_parent %} + </div> + {% endif %} +{% endfor %} diff --git a/src/catalogue/templates/catalogue/snippets/book_list.html b/src/catalogue/templates/catalogue/snippets/book_list.html new file mode 100755 index 000000000..526dcbbcc --- /dev/null +++ b/src/catalogue/templates/catalogue/snippets/book_list.html @@ -0,0 +1,12 @@ +{% load catalogue_tags %} + +{% book_tree orphans books_by_parent %} +{% for author, group in books_by_author.items %} + {% if group %} + <a name="{{ author.slug }}"></a> + <div class="group"> + <h2><a href="{{ author.get_absolute_url }}">{{ author }}</a></h2> + {% book_tree group books_by_parent %} + </div> + {% endif %} +{% endfor %} diff --git a/src/catalogue/templates/catalogue/snippets/book_list_nav.html b/src/catalogue/templates/catalogue/snippets/book_list_nav.html new file mode 100755 index 000000000..258824df3 --- /dev/null +++ b/src/catalogue/templates/catalogue/snippets/book_list_nav.html @@ -0,0 +1,10 @@ +{% for index, authors in books_nav.items %} + <ul> + <li><a class="book-list-index" href="#">{{ index|upper }}</a></li> + <ul class="book-list-show-index"> + {% for author in authors %} + <li><a href="#{{ author.slug }}">{{ author }}</a></li> + {% endfor %} + </ul> + </ul> +{% endfor %} diff --git a/src/catalogue/templates/catalogue/snippets/custom_pdf_link_li.html b/src/catalogue/templates/catalogue/snippets/custom_pdf_link_li.html new file mode 100644 index 000000000..353ad8bdf --- /dev/null +++ b/src/catalogue/templates/catalogue/snippets/custom_pdf_link_li.html @@ -0,0 +1,7 @@ +{% load i18n %} +{% if not NO_CUSTOM_PDF %} +<li> + <a href="{% url 'custom_pdf_form' book.slug %}" id="custom-pdf" + class="ajaxable">{% trans "Download a custom PDF" %}</a> +</li> +{% endif %} diff --git a/src/catalogue/templates/catalogue/snippets/license_icon.html b/src/catalogue/templates/catalogue/snippets/license_icon.html new file mode 100755 index 000000000..732e3bf92 --- /dev/null +++ b/src/catalogue/templates/catalogue/snippets/license_icon.html @@ -0,0 +1,10 @@ +{% load i18n %} +{% load static from staticfiles %} + +{% if license_url %} +<a class="license-icon" href="{{ license_url }}" + title="{% trans "Free license" %}: {{ license_description }}"> + <img src="{% static icon %}" + alt="{% trans "Free license" %}: {{ license_description }}" /> +</a> +{% endif %} diff --git a/src/catalogue/templates/catalogue/tag_list.html b/src/catalogue/templates/catalogue/tag_list.html new file mode 100644 index 000000000..e0fecc020 --- /dev/null +++ b/src/catalogue/templates/catalogue/tag_list.html @@ -0,0 +1,21 @@ +{% spaceless %} + +{% load i18n %} +{% load catalogue_tags %} +{% if one_tag %} + <p>{% trans "See full category" %} <a href="{% catalogue_url one_tag %}">{{ one_tag }}</a></p> +{% else %} + <ul> + {% if choices %} + {% for tag in tags %} + <li><a href="{% catalogue_url choices tag %}">{{ tag }}{% if tag.count %} ({{ tag.count }}){% endif %}</a></li> + {% endfor %} + {% else %} + {% for tag in tags %} + <li><a href="{{ tag.get_absolute_url }}">{{ tag }}{% if tag.count %} ({{ tag.count }}){% endif %}</a></li> + {% endfor %} + {% endif %} + </ul> +{% endif %} + +{% endspaceless %} \ No newline at end of file diff --git a/src/catalogue/templates/catalogue/tag_list_split.html b/src/catalogue/templates/catalogue/tag_list_split.html new file mode 100644 index 000000000..cb7ab26ec --- /dev/null +++ b/src/catalogue/templates/catalogue/tag_list_split.html @@ -0,0 +1,10 @@ +{% load i18n %} +{% if books %} +<p>{% trans "Literature" %}:</p> +<div>{{books|safe}}</div> +{% endif %} + +{% if pictures %} +<p>{% trans "Gallery" %}:</p> +<div>{{pictures|safe}}</div> +{% endif %} diff --git a/src/catalogue/templates/catalogue/tagged_object_list.html b/src/catalogue/templates/catalogue/tagged_object_list.html new file mode 100644 index 000000000..3df560a6f --- /dev/null +++ b/src/catalogue/templates/catalogue/tagged_object_list.html @@ -0,0 +1,167 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags switch_tag social_tags %} +{% load ssi_include from ssify %} + +{% block titleextra %}{% title_from_tags tags %}{% endblock %} + +{% block bodyid %}tagged-object-list{% endblock %} + +{% block body %} +<div class="left-column"> + <div class="page-desc"> + <h1>{% html_title_from_tags tags %}</h1> + + {% with tags|last as last_tag %} + {% if last_tag.has_description %} + <div id="description" class="normal-text"> + <div id='description-long' style="display:none">{{ last_tag.description|safe }}</div> + <div id='description-short'>{{ last_tag.description|safe|truncatewords_html:40 }}</div> + </div> + {% endif %} + + <div class="clearboth"></div> + <div class="inline-tag-lists"> + {% if categories.author %} + <div> + <div class="mono inline-header">{% trans "Authors" %}:</div> + <div class="inline-body"> + {% inline_tag_list categories.author tags %} + </div> + </div> + {% endif %} + {% if categories.kind %} + <div> + <div class="mono inline-header">{% trans "Kinds" %}:</div> + <div class="inline-body"> + {% inline_tag_list categories.kind tags %} + </div> + </div> + {% endif %} + {% if categories.genre %} + <div> + <div class="mono inline-header">{% trans "Genres" %}:</div> + <div class="inline-body"> + {% inline_tag_list categories.genre tags %} + </div> + </div> + {% endif %} + {% if categories.epoch %} + <div class="inline-tag-list"> + <div class="mono inline-header">{% trans "Epochs" %}:</div> + <div class="inline-body"> + {% inline_tag_list categories.epoch tags %} + </div> + </div> + {% endif %} + + {% if categories.theme %} + <div class="hidden-box-wrapper"> + <p><a href="#" class="hidden-box-trigger theme-list-link mono"> + {% trans "Motifs and themes" %}</a></p> + <div class="hidden-box"> + {% tag_list categories.theme tags %} + </div> + </div> + {% endif %} + </div> + + <div class="clearboth"></div> + + + {% if theme_is_set %} + <div class="see-also"> + {% if last_tag.gazeta_link or last_tag.wiki_link %} + <h2 class='mono'>{% trans "See also" %}:</h2> + <ul> + {% if last_tag.culturepl_link %} + <li><a href="{{ last_tag.gazeta_link }}"> + {% trans "in Culture.pl" %} + </a></li> + {% endif %} + {% if last_tag.gazeta_link %} + <li><a href="{{ last_tag.gazeta_link }}"> + {% trans "in Lektury.Gazeta.pl" %} + </a></li> + {% endif %} + {% if last_tag.wiki_link %} + <li><a href="{{ last_tag.wiki_link }}"> + {% trans "in Wikipedia" %} + </a></li> + {% endif %} + </ul> + {% endif %} + </div> + {% endif %} + + + </div> + </div> + + + <div class="right-column"> + {% if theme_is_set %} + {% work_list object_list %} + {% else %} + + {% choose_cite tag_ids=tag_ids as cite_promo_pk %} + {% choose_fragment tag_ids=tag_ids unless=cite_promo_pk as fragment_promo_pk %} + {{ cite_promo_pk.if }} + {% ssi_include 'social_cite' pk=cite_promo_pk %} + {{ cite_promo_pk.endif }} + {{ fragment_promo_pk.if }} + {% ssi_include 'catalogue_fragment_promo' pk=fragment_promo_pk %} + {{ fragment_promo_pk.endif }} + + <div class="see-also"> + {% if last_tag.gazeta_link or last_tag.wiki_link %} + <h2 class='mono'>{% trans "See also" %}:</h2> + <ul> + {% if last_tag.gazeta_link %} + <li><a href="{{ last_tag.gazeta_link }}"> + {% trans "in Lektury.Gazeta.pl" %} + </a></li> + {% endif %} + {% if last_tag.wiki_link %} + <li><a href="{{ last_tag.wiki_link }}"> + {% trans "in Wikipedia" %} + </a></li> + {% endif %} + {% if last_tag.culturepl_link %} + <li><a href="{{ last_tag.culturepl_link }}"> + {% trans "in Culture.pl" %} + </a></li> + {% endif %} + </ul> + {% endif %} + </div> + + <div class="download"> + {% comment %} + <h2 class='mono'>{% trans "Download" %}:</h2> + <ul> + <li><a href="">wszystko</a></li> + <li><a href="">czÄÅÄ</a></li> + </ul> + {% endcomment %} + </div> + {% endif %} + + </div> + + <div class="clearboth"></div> + + + + {% if not theme_is_set %} + <div id="books-list"> + {% if object_list %} + {% work_list object_list %} + {% else %} + {% trans "Sorry! Search cirteria did not match any resources." %} + {% include "info/join_us.html" %} + {% endif %} + </div> + {% endif %} + {% endwith %} +{% endblock %} diff --git a/src/catalogue/templates/catalogue/viewer_base.html b/src/catalogue/templates/catalogue/viewer_base.html new file mode 100644 index 000000000..416b9defe --- /dev/null +++ b/src/catalogue/templates/catalogue/viewer_base.html @@ -0,0 +1,74 @@ +<!DOCTYPE html> +{% load i18n %} +{% load static from staticfiles %} +{% load pipeline %} +<html class="no-js"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <title>{% block title %}{% endblock %} :: {% trans "Wolne Lektury" %}</title> + <link rel="icon" href="{% static "img/favicon.png" %}" type="image/x-icon" /> + {% stylesheet "book_text" %} + {% block extrahead %}{% endblock %} + + </head> + <body id="{% block body-id %}reader{% endblock %}"> + <nav id="no-menu"><ul> + <li><a href="#" id="menu-toggle-on"></a></li> + {% block no-menu-extra %}{% endblock %} + </ul></nav> + + <nav id="menu"><ul> + <li><a href="#" id="menu-toggle-off"></a></li> + + <li><a href="/"> + <img src="{% static 'img/logo-neon.png' %}" width="80" + alt="Wolne Lektury" + title="Wolne Lektury"> + </a></li> + + {% block menu %} + {% endblock menu %} + + </ul></nav> + + {% block big-pane %} + <div id="big-pane"> + + {% block main %} + <article id="main-text"> + {% block main-text %}{% endblock %} + </article> + {% endblock main %} + {% endblock big-pane %} + + + <footer> + {% block footer %}{% endblock %} + + <div id="box-underlay"></div> + + {# template #} + <div id="ajaxable-window" class='dialog-window'> + <div class="header"><a href="#" class="jqmClose">{% trans "Close" %}</a></div> + <div class="target"> + <p><img src="{% static "img/indicator.gif" %}" alt="*"/> {% trans "Loading" %}</p> + </div> + </div> + </footer> + + </div> + + <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> + {% block js-dependencies %}{% endblock %} + <script type="text/javascript"> + var LANGUAGE_CODE = "{{ LANGUAGE_CODE }}"; + var STATIC_URL = "{{ STATIC_URL }}"; + </script> + {% javascript "book_text" %} + + {{ piwik_tag|safe }} + {% block extrabody %}{% endblock %} + <script src="{% static "js/contrib/modernizr.custom.19652.js" %}"></script> + </body> +</html> diff --git a/src/catalogue/templates/catalogue/work-list.html b/src/catalogue/templates/catalogue/work-list.html new file mode 100755 index 000000000..30265255a --- /dev/null +++ b/src/catalogue/templates/catalogue/work-list.html @@ -0,0 +1,19 @@ +{% spaceless %} + +{% load pagination_tags %} +{% load class_name from catalogue_tags %} +{% load ssi_include from ssify %} + +{% autopaginate object_list 10 %} + +<ol class='work-list'> +{% for item in object_list %} + <li class='{{ item|class_name }}-item'> + {% ssi_include item.short_html_url_name pk=item.pk %} + </li> +{% endfor %} +</ol> + +{% paginate %} + +{% endspaceless %} diff --git a/src/catalogue/templatetags/__init__.py b/src/catalogue/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/catalogue/templatetags/catalogue_tags.py b/src/catalogue/templatetags/catalogue_tags.py new file mode 100644 index 000000000..6e81caec2 --- /dev/null +++ b/src/catalogue/templatetags/catalogue_tags.py @@ -0,0 +1,445 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from random import randint, random +from urlparse import urlparse + +from django.conf import settings +from django import template +from django.template import Node, Variable, Template, Context +from django.core.urlresolvers import reverse +from django.contrib.auth.forms import UserCreationForm, AuthenticationForm +from django.utils.cache import add_never_cache_headers +from django.utils.translation import ugettext as _ + +from ssify import ssi_variable +from catalogue.models import Book, BookMedia, Fragment, Tag, Source +from catalogue.constants import LICENSES +from picture.models import Picture + +register = template.Library() + + +class RegistrationForm(UserCreationForm): + def as_ul(self): + "Returns this form rendered as HTML <li>s -- excluding the <ul></ul>." + return self._html_output(u'<li>%(errors)s%(label)s %(field)s<span class="help-text">%(help_text)s</span></li>', u'<li>%s</li>', '</li>', u' %s', False) + + +class LoginForm(AuthenticationForm): + def as_ul(self): + "Returns this form rendered as HTML <li>s -- excluding the <ul></ul>." + return self._html_output(u'<li>%(errors)s%(label)s %(field)s<span class="help-text">%(help_text)s</span></li>', u'<li>%s</li>', '</li>', u' %s', False) + + +def iterable(obj): + try: + iter(obj) + return True + except TypeError: + return False + + +def capfirst(text): + try: + return '%s%s' % (text[0].upper(), text[1:]) + except IndexError: + return '' + + +@register.simple_tag +def html_title_from_tags(tags): + if len(tags) < 2: + return title_from_tags(tags) + template = Template("{{ category }}: <a href='{{ tag.get_absolute_url }}'>{{ tag.name }}</a>") + return capfirst(",<br/>".join( + template.render(Context({'tag': tag, 'category': _(tag.category)})) for tag in tags)) + + +def simple_title(tags): + title = [] + for tag in tags: + title.append("%s: %s" % (_(tag.category), tag.name)) + return capfirst(', '.join(title)) + + +@register.simple_tag +def book_title(book, html_links=False): + return book.pretty_title(html_links) + + +@register.simple_tag +def book_title_html(book): + return book_title(book, html_links=True) + + +@register.simple_tag +def title_from_tags(tags): + def split_tags(tags): + result = {} + for tag in tags: + result[tag.category] = tag + return result + + # TODO: Remove this after adding flection mechanism + return simple_title(tags) + + class Flection(object): + def get_case(self, name, flection): + return name + flection = Flection() + + self = split_tags(tags) + + title = u'' + + # Specjalny przypadek oglÄ dania wszystkich lektur na danej póÅce + if len(self) == 1 and 'set' in self: + return u'PóÅka %s' % self['set'] + + # Specjalny przypadek "TwórczoÅÄ w pozytywizmie", wtedy gdy tylko epoka + # jest wybrana przez użytkownika + if 'epoch' in self and len(self) == 1: + text = u'TwórczoÅÄ w %s' % flection.get_case(unicode(self['epoch']), u'miejscownik') + return capfirst(text) + + # Specjalny przypadek "Dramat w twórczoÅci Sofoklesa", wtedy gdy podane + # sÄ tylko rodzaj literacki i autor + if 'kind' in self and 'author' in self and len(self) == 2: + text = u'%s w twórczoÅci %s' % (unicode(self['kind']), + flection.get_case(unicode(self['author']), u'dopeÅniacz')) + return capfirst(text) + + # Przypadki ogólniejsze + if 'theme' in self: + title += u'Motyw %s' % unicode(self['theme']) + + if 'genre' in self: + if 'theme' in self: + title += u' w %s' % flection.get_case(unicode(self['genre']), u'miejscownik') + else: + title += unicode(self['genre']) + + if 'kind' in self or 'author' in self or 'epoch' in self: + if 'genre' in self or 'theme' in self: + if 'kind' in self: + title += u' w %s ' % flection.get_case(unicode(self['kind']), u'miejscownik') + else: + title += u' w twórczoÅci ' + else: + title += u'%s ' % unicode(self.get('kind', u'twórczoÅÄ')) + + if 'author' in self: + title += flection.get_case(unicode(self['author']), u'dopeÅniacz') + elif 'epoch' in self: + title += flection.get_case(unicode(self['epoch']), u'dopeÅniacz') + + return capfirst(title) + + +@register.simple_tag +def book_tree(book_list, books_by_parent): + text = "".join("<li><a href='%s'>%s</a>%s</li>" % ( + book.get_absolute_url(), book.title, book_tree(books_by_parent.get(book, ()), books_by_parent) + ) for book in book_list) + + if text: + return "<ol>%s</ol>" % text + else: + return '' + +@register.simple_tag +def audiobook_tree(book_list, books_by_parent): + text = "".join("<li><a class='open-player' href='%s'>%s</a>%s</li>" % ( + reverse("book_player", args=[book.slug]), book.title, audiobook_tree(books_by_parent.get(book, ()), books_by_parent) + ) for book in book_list) + + if text: + return "<ol>%s</ol>" % text + else: + return '' + +@register.simple_tag +def book_tree_texml(book_list, books_by_parent, depth=1): + return "".join(""" + <cmd name='hspace'><parm>%(depth)dem</parm></cmd>%(title)s + <spec cat='align' /><cmd name="note"><parm>%(audiences)s</parm></cmd> + <spec cat='align' /><cmd name="note"><parm>%(audiobook)s</parm></cmd> + <ctrl ch='\\' /> + %(children)s + """ % { + "depth": depth, + "title": book.title, + "audiences": ", ".join(book.audiences_pl()), + "audiobook": "audiobook" if book.has_media('mp3') else "", + "children": book_tree_texml(books_by_parent.get(book.id, ()), books_by_parent, depth + 1) + } for book in book_list) + + +@register.simple_tag +def book_tree_csv(author, book_list, books_by_parent, depth=1, max_depth=3, delimeter="\t"): + def quote_if_necessary(s): + try: + s.index(delimeter) + s.replace('"', '\\"') + return '"%s"' % s + except ValueError: + return s + + return "".join("""%(author)s%(d)s%(preindent)s%(title)s%(d)s%(postindent)s%(audiences)s%(d)s%(audiobook)s +%(children)s""" % { + "d": delimeter, + "preindent": delimeter * (depth - 1), + "postindent": delimeter * (max_depth - depth), + "depth": depth, + "author": quote_if_necessary(author.name), + "title": quote_if_necessary(book.title), + "audiences": ", ".join(book.audiences_pl()), + "audiobook": "audiobook" if book.has_media('mp3') else "", + "children": book_tree_csv(author, books_by_parent.get(book.id, ()), books_by_parent, depth + 1) + } for book in book_list) + +@register.simple_tag +def all_editors(extra_info): + editors = [] + if 'editors' in extra_info: + editors += extra_info['editors'] + if 'technical_editors' in extra_info: + editors += extra_info['technical_editors'] + # support for extra_info-s from librarian<1.2 + if 'editor' in extra_info: + editors.append(extra_info['editor']) + if 'technical_editor' in extra_info: + editors.append(extra_info['technical_editor']) + return ', '.join( + ' '.join(p.strip() for p in person.rsplit(',', 1)[::-1]) + for person in sorted(set(editors))) + + +@register.simple_tag +def user_creation_form(): + return RegistrationForm(prefix='registration').as_ul() + + +@register.simple_tag +def authentication_form(): + return LoginForm(prefix='login').as_ul() + + +@register.tag +def catalogue_url(parser, token): + bits = token.split_contents() + + tags_to_add = [] + tags_to_remove = [] + for bit in bits[1:]: + if bit[0] == '-': + tags_to_remove.append(bit[1:]) + else: + tags_to_add.append(bit) + + return CatalogueURLNode(tags_to_add, tags_to_remove) + + +class CatalogueURLNode(Node): + def __init__(self, tags_to_add, tags_to_remove): + self.tags_to_add = [Variable(tag) for tag in tags_to_add] + self.tags_to_remove = [Variable(tag) for tag in tags_to_remove] + + def render(self, context): + tags_to_add = [] + tags_to_remove = [] + + for tag_variable in self.tags_to_add: + tag = tag_variable.resolve(context) + if isinstance(tag, (list, dict)): + tags_to_add += [t for t in tag] + else: + tags_to_add.append(tag) + + for tag_variable in self.tags_to_remove: + tag = tag_variable.resolve(context) + if iterable(tag): + tags_to_remove += [t for t in tag] + else: + tags_to_remove.append(tag) + + tag_slugs = [tag.url_chunk for tag in tags_to_add] + for tag in tags_to_remove: + try: + tag_slugs.remove(tag.url_chunk) + except KeyError: + pass + + if len(tag_slugs) > 0: + return reverse('tagged_object_list', kwargs={'tags': '/'.join(tag_slugs)}) + else: + return reverse('main_page') + + +@register.inclusion_tag('catalogue/tag_list.html') +def tag_list(tags, choices=None): + if choices is None: + choices = [] + if len(tags) == 1 and tags[0].category not in [t.category for t in choices]: + one_tag = tags[0] + return locals() + + +@register.inclusion_tag('catalogue/inline_tag_list.html') +def inline_tag_list(tags, choices=None): + return tag_list(tags, choices) + + +@register.inclusion_tag('catalogue/collection_list.html') +def collection_list(collections): + return locals() + + +@register.inclusion_tag('catalogue/book_info.html') +def book_info(book): + return { + 'is_picture': isinstance(book, Picture), + 'book': book, + } + + +@register.inclusion_tag('catalogue/work-list.html', takes_context=True) +def work_list(context, object_list): + request = context.get('request') + return locals() + + +# TODO: These are no longer just books. +@register.inclusion_tag('catalogue/related_books.html', takes_context=True) +def related_books(context, instance, limit=6, random=1, taken=0): + limit = limit - taken + max_books = limit - random + is_picture = isinstance(instance, Picture) + + pics_qs = Picture.objects.all() + if is_picture: + pics_qs = pics_qs.exclude(pk=instance.pk) + pics = Picture.tagged.related_to(instance, pics_qs) + if pics.exists(): + # Reserve one spot for an image. + max_books -= 1 + + books_qs = Book.objects.all() + if not is_picture: + books_qs = books_qs.exclude(common_slug=instance.common_slug).exclude(ancestor=instance) + books = Book.tagged.related_to(instance, books_qs)[:max_books] + + pics = pics[:1 + max_books - books.count()] + + random_excluded_books = [b.pk for b in books] + random_excluded_pics = [p.pk for p in pics] + (random_excluded_pics if is_picture else random_excluded_books).append(instance.pk) + + return { + 'request': context['request'], + 'books': books, + 'pics': pics, + 'random': random, + 'random_excluded_books': random_excluded_books, + 'random_excluded_pics': random_excluded_pics, + } + + +@register.inclusion_tag('catalogue/menu.html') +def catalogue_menu(): + return {'categories': [ + ('author', _('Authors'), 'autorzy'), + ('genre', _('Genres'), 'gatunki'), + ('kind', _('Kinds'), 'rodzaje'), + ('epoch', _('Epochs'), 'epoki'), + ('theme', _('Themes'), 'motywy'), + ]} + + +@register.simple_tag +def download_audio(book, daisy=True): + links = [] + if book.has_media('mp3'): + links.append("<a href='%s'>%s</a>" % + (reverse('download_zip_mp3', args=[book.slug]), + BookMedia.formats['mp3'].name)) + if book.has_media('ogg'): + links.append("<a href='%s'>%s</a>" % + (reverse('download_zip_ogg', args=[book.slug]), + BookMedia.formats['ogg'].name)) + if daisy and book.has_media('daisy'): + for dsy in book.get_media('daisy'): + links.append("<a href='%s'>%s</a>" % + (dsy.file.url, BookMedia.formats['daisy'].name)) + return ", ".join(links) + + +@register.inclusion_tag("catalogue/snippets/custom_pdf_link_li.html") +def custom_pdf_link_li(book): + return { + 'book': book, + 'NO_CUSTOM_PDF': settings.NO_CUSTOM_PDF, + } + + +@register.inclusion_tag("catalogue/snippets/license_icon.html") +def license_icon(license_url): + """Creates a license icon, if the license_url is known.""" + known = LICENSES.get(license_url) + if known is None: + return {} + return { + "license_url": license_url, + "icon": "img/licenses/%s.png" % known['icon'], + "license_description": known['description'], + } + + +@register.filter +def class_name(obj): + return obj.__class__.__name__ + + +@register.simple_tag +def source_name(url): + url = url.lstrip() + netloc = urlparse(url).netloc + if not netloc: + netloc = urlparse('http://' + url).netloc + if not netloc: + return '' + source, created = Source.objects.get_or_create(netloc=netloc) + return source.name or netloc + + +@ssi_variable(register, patch_response=[add_never_cache_headers]) +def catalogue_random_book(request, exclude_ids): + from .. import app_settings + if random() < app_settings.RELATED_RANDOM_PICTURE_CHANCE: + return None + queryset = Book.objects.exclude(pk__in=exclude_ids) + count = queryset.count() + if count: + return queryset[randint(0, count - 1)].pk + else: + return None + + +@ssi_variable(register, patch_response=[add_never_cache_headers]) +def choose_fragment(request, book_id=None, tag_ids=None, unless=False): + if unless: + return None + + if book_id is not None: + fragment = Book.objects.get(pk=book_id).choose_fragment() + else: + if tag_ids is not None: + tags = Tag.objects.filter(pk__in=tag_ids) + fragments = Fragment.tagged.with_all(tags).order_by().only('id') + else: + fragments = Fragment.objects.all().order_by().only('id') + fragment_count = fragments.count() + fragment = fragments[randint(0, fragment_count - 1)] if fragment_count else None + return fragment.pk if fragment is not None else None diff --git a/src/catalogue/test_utils.py b/src/catalogue/test_utils.py new file mode 100644 index 000000000..9d87311dd --- /dev/null +++ b/src/catalogue/test_utils.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from os.path import abspath, dirname, join +import tempfile +from traceback import extract_stack +from django.test import TestCase +from django.test.utils import override_settings +from fnpdjango.utils.text.slughifi import slughifi +from librarian import WLURI +from django.conf import settings + + +@override_settings( + MEDIA_ROOT=tempfile.mkdtemp(prefix='djangotest_'), + CATALOGUE_DONT_BUILD=set(['pdf', 'mobi', 'epub', 'txt', 'fb2', 'cover']), + NO_SEARCH_INDEX=True, + CELERY_ALWAYS_EAGER=True, + CACHES={ + 'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}, + }, + SOLR=settings.SOLR_TEST, + SSIFY_RENDER=False, +) +class WLTestCase(TestCase): + """ + Generic base class for tests. Adds settings freeze and clears MEDIA_ROOT. + """ + longMessage = True + + +class PersonStub(object): + + def __init__(self, first_names, last_name): + self.first_names = first_names + self.last_name = last_name + + def readable(self): + return " ".join(self.first_names + (self.last_name,)) + + +class BookInfoStub(object): + _empty_fields = ['cover_url', 'variant_of'] + # allow single definition for multiple-value fields + _salias = { + 'authors': 'author', + } + + def __init__(self, **kwargs): + self.__dict = kwargs + + def __setattr__(self, key, value): + if not key.startswith('_'): + self.__dict[key] = value + return object.__setattr__(self, key, value) + + def __getattr__(self, key): + try: + return self.__dict[key] + except KeyError: + if key in self._empty_fields: + return None + elif key in self._salias: + return [getattr(self, self._salias[key])] + else: + raise + + def to_dict(self): + return dict((key, unicode(value)) for key, value in self.__dict.items()) + + +def info_args(title, language=None): + """ generate some keywords for comfortable BookInfoCreation """ + slug = unicode(slughifi(title)) + if language is None: + language = u'pol' + return { + 'title': unicode(title), + 'url': WLURI.from_slug(slug), + 'about': u"http://wolnelektury.pl/example/URI/%s" % slug, + 'language': language, + } + + +def get_fixture(path, app=None): + if app is not None: + mod_path = app.__file__ + f_path = join(dirname(abspath(mod_path)), 'tests/files', path) + else: + mod_path = extract_stack(limit=2)[0][0] + f_path = join(dirname(abspath(mod_path)), 'files', path) + return f_path diff --git a/src/catalogue/tests/__init__.py b/src/catalogue/tests/__init__.py new file mode 100644 index 000000000..9c41af207 --- /dev/null +++ b/src/catalogue/tests/__init__.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from catalogue.tests.book_import import * +from catalogue.tests.bookmedia import * +from catalogue.tests.cover import * +from catalogue.tests.search import * +from catalogue.tests.tags import * +from catalogue.tests.templatetags import * +from .visit import * diff --git a/src/catalogue/tests/book_import.py b/src/catalogue/tests/book_import.py new file mode 100644 index 000000000..775fc2929 --- /dev/null +++ b/src/catalogue/tests/book_import.py @@ -0,0 +1,450 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings + +from django.core.files.base import ContentFile +from catalogue.test_utils import * +from catalogue import models +from librarian import WLURI + +from nose.tools import raises +from os import path, makedirs + +class BookImportLogicTests(WLTestCase): + + def setUp(self): + WLTestCase.setUp(self) + self.book_info = BookInfoStub( + url=WLURI.from_slug(u"default-book"), + about=u"http://wolnelektury.pl/example/URI/default_book", + title=u"Default Book", + author=PersonStub(("Jim",), "Lazy"), + kind="X-Kind", + genre="X-Genre", + epoch="X-Epoch", + language=u"pol", + ) + + self.expected_tags = [ + ('author', 'jim-lazy'), + ('genre', 'x-genre'), + ('epoch', 'x-epoch'), + ('kind', 'x-kind'), + ] + self.expected_tags.sort() + + def test_empty_book(self): + BOOK_TEXT = "<utwor />" + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + + self.assertEqual(book.title, "Default Book") + self.assertEqual(book.slug, "default-book") + self.assert_(book.parent is None) + self.assertFalse(book.has_html_file()) + + # no fragments generated + self.assertEqual(book.fragments.count(), 0) + + # TODO: this should be filled out probably... + self.assertEqual(book.wiki_link, '') + self.assertEqual(book.gazeta_link, '') + self.assertEqual(book.description, '') + + tags = [ (tag.category, tag.slug) for tag in book.tags ] + tags.sort() + + self.assertEqual(tags, self.expected_tags) + + def test_not_quite_empty_book(self): + """ Not empty, but without any real text. + + Should work like any other non-empty book. + """ + + BOOK_TEXT = """<utwor> + <liryka_l> + <nazwa_utworu>Nic</nazwa_utworu> + </liryka_l></utwor> + """ + + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + self.assertTrue(book.has_html_file()) + + def test_book_with_fragment(self): + BOOK_TEXT = """<utwor> + <opowiadanie> + <akap><begin id="m01" /><motyw id="m01">Love</motyw>Ala ma kota<end id="m01" /></akap> + </opowiadanie></utwor> + """ + + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + self.assertTrue(book.has_html_file()) + + self.assertEqual(book.fragments.count(), 1) + self.assertEqual(book.fragments.all()[0].text, u'<p class="paragraph">Ala ma kota</p>\n') + + self.assert_(('theme', 'love') in [ (tag.category, tag.slug) for tag in book.fragments.all()[0].tags ]) + + def test_book_with_empty_theme(self): + """ empty themes should be ignored """ + + BOOK_TEXT = """<utwor> + <opowiadanie> + <akap><begin id="m01" /><motyw id="m01"> , Love , , </motyw>Ala ma kota<end id="m01" /></akap> + </opowiadanie></utwor> + """ + + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + self.assert_([('theme', 'love')], + [ (tag.category, tag.slug) for tag in book.fragments.all()[0].tags.filter(category='theme') ]) + + def test_book_with_no_theme(self): + """ fragments with no themes shouldn't be created at all """ + + BOOK_TEXT = """<utwor> + <opowiadanie> + <akap><begin id="m01" /><motyw id="m01"></motyw>Ala ma kota<end id="m01" /></akap> + </opowiadanie></utwor> + """ + + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + self.assertEqual(book.fragments.count(), 0) + self.assertEqual(book.tags.filter(category='theme').count(), 0) + + @raises(ValueError) + def test_book_with_invalid_slug(self): + """ Book with invalid characters in slug shouldn't be imported """ + self.book_info.url = WLURI.from_slug(u"default_book") + BOOK_TEXT = "<utwor />" + models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + + def test_book_replace_title(self): + BOOK_TEXT = """<utwor />""" + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + self.book_info.title = u"Extraordinary" + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info, overwrite=True) + + tags = [ (tag.category, tag.slug) for tag in book.tags ] + tags.sort() + + self.assertEqual(tags, self.expected_tags) + + def test_book_replace_author(self): + BOOK_TEXT = """<utwor />""" + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + self.book_info.author = PersonStub(("Hans", "Christian"), "Andersen") + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info, overwrite=True) + + tags = [ (tag.category, tag.slug) for tag in book.tags ] + tags.sort() + + self.expected_tags.remove(('author', 'jim-lazy')) + self.expected_tags.append(('author', 'hans-christian-andersen')) + self.expected_tags.sort() + + self.assertEqual(tags, self.expected_tags) + + # the old tag shouldn't disappear + models.Tag.objects.get(slug="jim-lazy", category="author") + + def test_book_remove_fragment(self): + BOOK_TEXT = """<utwor> + <opowiadanie> + <akap> + <begin id="m01" /><motyw id="m01">Love</motyw>Ala ma kota<end id="m01" /> + <begin id="m02" /><motyw id="m02">Hatred</motyw>To kot Ali<end id="m02" /> + </akap> + </opowiadanie></utwor> + """ + BOOK_TEXT_AFTER = """<utwor> + <opowiadanie> + <akap> + <begin id="m01" /><motyw id="m01">Love</motyw>Ala ma kota<end id="m01" /> + To kot Ali + </akap> + </opowiadanie></utwor> + """ + + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + self.assertEqual(book.fragments.count(), 2) + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT_AFTER), self.book_info, overwrite=True) + self.assertEqual(book.fragments.count(), 1) + + def test_multiple_tags(self): + BOOK_TEXT = """<utwor />""" + self.book_info.authors = self.book_info.author, PersonStub(("Joe",), "Dilligent"), + self.book_info.kinds = self.book_info.kind, 'Y-Kind', + self.book_info.genres = self.book_info.genre, 'Y-Genre', + self.book_info.epochs = self.book_info.epoch, 'Y-Epoch', + + self.expected_tags.extend([ + ('author', 'joe-dilligent'), + ('genre', 'y-genre'), + ('epoch', 'y-epoch'), + ('kind', 'y-kind'), + ]) + self.expected_tags.sort() + + book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + tags = [ (tag.category, tag.slug) for tag in book.tags ] + tags.sort() + + self.assertEqual(tags, self.expected_tags) + + +class ChildImportTests(WLTestCase): + + def setUp(self): + WLTestCase.setUp(self) + self.child_info = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='X-Kind', + author=PersonStub(("Joe",), "Doe"), + **info_args("Child") + ) + + self.parent_info = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='X-Kind', + author=PersonStub(("Jim",), "Lazy"), + parts=[self.child_info.url], + **info_args("Parent") + ) + + def test_child(self): + TEXT = """<utwor />""" + child = models.Book.from_text_and_meta(ContentFile(TEXT), self.child_info) + parent = models.Book.from_text_and_meta(ContentFile(TEXT), self.parent_info) + author = parent.tags.get(category='author') + books = self.client.get(author.get_absolute_url()).context['object_list'] + self.assertEqual(len(books), 1, + "Only parent book should be visible on author's page") + + def test_child_replace(self): + PARENT_TEXT = """<utwor />""" + CHILD_TEXT = """<utwor> + <opowiadanie> + <akap><begin id="m01" /><motyw id="m01">Pies</motyw>Ala ma kota<end id="m01" /></akap> + </opowiadanie></utwor> + """ + child = models.Book.from_text_and_meta(ContentFile(CHILD_TEXT), self.child_info) + parent = models.Book.from_text_and_meta(ContentFile(PARENT_TEXT), self.parent_info) + CHILD_TEXT = """<utwor> + <opowiadanie> + <akap><begin id="m01" /><motyw id="m01">Kot</motyw>Ala ma kota<end id="m01" /></akap> + </opowiadanie></utwor> + """ + child = models.Book.from_text_and_meta(ContentFile(CHILD_TEXT), self.child_info, overwrite=True) + themes = parent.related_themes() + self.assertEqual(['Kot'], [tag.name for tag in themes], + 'wrong related theme list') + + +class TreeImportTest(WLTestCase): + def setUp(self): + WLTestCase.setUp(self) + self.child_info = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='X-Kind', + author=PersonStub(("Joe",), "Doe"), + **info_args("Child") + ) + self.CHILD_TEXT = """<utwor> + <opowiadanie> + <akap><begin id="m01" /><motyw id="m01">Pies</motyw> + Ala ma kota<end id="m01" /></akap> + </opowiadanie></utwor> + """ + self.child = models.Book.from_text_and_meta( + ContentFile(self.CHILD_TEXT), self.child_info) + + self.book_info = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='X-Kind', + author=PersonStub(("Joe",), "Doe"), + parts=[self.child_info.url], + **info_args("Book") + ) + self.BOOK_TEXT = """<utwor />""" + self.book = models.Book.from_text_and_meta( + ContentFile(self.BOOK_TEXT), self.book_info) + + self.parent_info = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='X-Kind', + author=PersonStub(("Jim",), "Lazy"), + parts=[self.book_info.url], + **info_args("Parent") + ) + self.PARENT_TEXT = """<utwor />""" + self.parent = models.Book.from_text_and_meta( + ContentFile(self.PARENT_TEXT), self.parent_info) + + def test_ok(self): + self.assertEqual( + list(self.client.get('/katalog/gatunek/x-genre/' + ).context['object_list']), + [self.parent], + u"There should be only parent on common tag page." + ) + pies = models.Tag.objects.get(slug='pies') + themes = self.parent.related_themes() + self.assertEqual(len(themes), 1, + u"There should be child theme in parent theme counter." + ) + # TODO: book_count is deprecated, update here. + #~ epoch = models.Tag.objects.get(slug='x-epoch') + #~ self.assertEqual(epoch.book_count, 1, + #~ u"There should be only parent in common tag's counter." + #~ ) + + def test_child_republish(self): + CHILD_TEXT = """<utwor> + <opowiadanie> + <akap><begin id="m01" /><motyw id="m01">Pies, Kot</motyw> + Ala ma kota<end id="m01" /></akap> + </opowiadanie></utwor> + """ + models.Book.from_text_and_meta( + ContentFile(CHILD_TEXT), self.child_info, overwrite=True) + self.assertEqual( + list(self.client.get('/katalog/gatunek/x-genre/' + ).context['object_list']), + [self.parent], + u"There should only be parent on common tag page." + ) + pies = models.Tag.objects.get(slug='pies') + kot = models.Tag.objects.get(slug='kot') + self.assertEqual(len(self.parent.related_themes()), 2, + u"There should be child themes in parent theme counter." + ) + # TODO: book_count is deprecated, update here. + #~ epoch = models.Tag.objects.get(slug='x-epoch') + #~ self.assertEqual(epoch.book_count, 1, + #~ u"There should only be parent in common tag's counter." + #~ ) + + def test_book_change_child(self): + second_child_info = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='Other-Kind', + author=PersonStub(("Joe",), "Doe"), + **info_args("Second Child") + ) + SECOND_CHILD_TEXT = """<utwor> + <opowiadanie> + <akap><begin id="m01" /><motyw id="m01">Kot</motyw> + Ala ma kota<end id="m01" /></akap> + </opowiadanie></utwor> + """ + # Import a second child. + second_child = models.Book.from_text_and_meta( + ContentFile(SECOND_CHILD_TEXT), second_child_info) + # The book has only this new child now. + self.book_info.parts = [second_child_info.url] + self.book = models.Book.from_text_and_meta( + ContentFile(self.BOOK_TEXT), self.book_info, overwrite=True) + + self.assertEqual( + set(self.client.get('/katalog/gatunek/x-genre/' + ).context['object_list']), + set([self.parent, self.child]), + u"There should be parent and old child on common tag page." + ) + kot = models.Tag.objects.get(slug='kot') + self.assertEqual(len(self.parent.related_themes()), 1, + u"There should only be new child themes in parent theme counter." + ) + epoch = models.Tag.objects.get(slug='x-epoch') + # book_count deprecated, update test. + #~ self.assertEqual(epoch.book_count, 2, + #~ u"There should be parent and old child in common tag's counter." + #~ ) + self.assertEqual( + list(self.client.get('/katalog/lektura/parent/motyw/kot/' + ).context['fragments']), + [second_child.fragments.all()[0]], + u"There should be new child's fragments on parent's theme page." + ) + self.assertEqual( + list(self.client.get('/katalog/lektura/parent/motyw/pies/' + ).context['fragments']), + [], + u"There should be no old child's fragments on parent's theme page." + ) + + +class MultilingualBookImportTest(WLTestCase): + def setUp(self): + WLTestCase.setUp(self) + common_uri = WLURI.from_slug('common-slug') + + self.pol_info = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='X-Kind', + author=PersonStub(("Joe",), "Doe"), + variant_of=common_uri, + **info_args(u"KsiÄ Å¼ka") + ) + + self.eng_info = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='X-Kind', + author=PersonStub(("Joe",), "Doe"), + variant_of=common_uri, + **info_args("A book", "eng") + ) + + def test_multilingual_import(self): + BOOK_TEXT = """<utwor><opowiadanie><akap>A</akap></opowiadanie></utwor>""" + + book1 = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.pol_info) + book2 = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.eng_info) + + self.assertEqual( + set([b.language for b in models.Book.objects.all()]), + set(['pol', 'eng']), + 'Books imported in wrong languages.' + ) + + +class BookImportGenerateTest(WLTestCase): + def setUp(self): + WLTestCase.setUp(self) + xml = path.join(path.dirname(__file__), 'files/fraszka-do-anusie.xml') + self.book = models.Book.from_xml_file(xml) + + def test_gen_pdf(self): + self.book.pdf_file.build() + book = models.Book.objects.get(pk=self.book.pk) + self.assertTrue(path.exists(book.pdf_file.path)) + + def test_gen_pdf_parent(self): + """This book contains a child.""" + xml = path.join(path.dirname(__file__), "files/fraszki.xml") + parent = models.Book.from_xml_file(xml) + parent.pdf_file.build() + parent = models.Book.objects.get(pk=parent.pk) + self.assertTrue(path.exists(parent.pdf_file.path)) + + def test_custom_pdf(self): + from catalogue.tasks import build_custom_pdf + out = 'test-custom.pdf' + absoulute_path = path.join(settings.MEDIA_ROOT, out) + + if not path.exists(path.dirname(absoulute_path)): + makedirs(path.dirname(absoulute_path)) + + build_custom_pdf(self.book.id, + customizations=['nofootnotes', '13pt', 'a4paper'], file_name=out) + self.assertTrue(path.exists(absoulute_path)) diff --git a/src/catalogue/tests/bookmedia.py b/src/catalogue/tests/bookmedia.py new file mode 100644 index 000000000..2d3cf539d --- /dev/null +++ b/src/catalogue/tests/bookmedia.py @@ -0,0 +1,119 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from os.path import basename, exists, join, dirname +from django.core.files.base import ContentFile + +from catalogue.test_utils import * +from catalogue import models, utils + +class BookMediaTests(WLTestCase): + + def setUp(self): + WLTestCase.setUp(self) + self.file = ContentFile('X') + self.file2 = ContentFile('Y') + self.book = models.Book.objects.create(slug='test-book') + + def test_diacritics(self): + bm = models.BookMedia(book=self.book, type="ogg", + name=u"ZażóÅÄ gÄÅlÄ jaźÅ") + bm.file.save(None, self.file) + self.assertEqual(basename(bm.file.name), 'zazolc-gesla-jazn.ogg') + + def test_long_name(self): + bm = models.BookMedia(book=self.book, type="ogg", + name="Some very very very very very very very very very very very very very very very very long file name") + bm.file.save(bm.name, self.file) + + # reload to see what was really saved + bm = models.BookMedia.objects.get(pk=bm.pk) + self.assertEqual(bm.file.size, 1) + + def test_overwrite(self): + """ + File gets overwritten with same filename on update. + """ + + bm = models.BookMedia(book=self.book, type='ogg', + name="Some media") + bm.file.save(None, self.file) + bm.file.save(None, self.file2) + + self.assertEqual(bm.file.read(), 'Y') + self.assertEqual(basename(bm.file.name), 'some-media.ogg') + + def test_no_clobber(self): + """ + File save doesn't clobber some other media with similar name. + """ + + bm = models.BookMedia(book=self.book, type='ogg', + name=u"Tytul") + bm.file.save(None, self.file) + bm2 = models.BookMedia(book=self.book, type='ogg', + name=u"TytuÅ") + bm2.file.save(None, self.file2) + self.assertEqual(basename(bm.file.name), 'tytul.ogg') + self.assertNotEqual(basename(bm2.file.name), 'tytul.ogg') + self.assertEqual(bm.file.read(), 'X') + self.assertEqual(bm2.file.read(), 'Y') + + def test_change_name(self): + """ + File name reflects name change. + """ + + bm = models.BookMedia(book=self.book, type='ogg', name="Title") + bm.file.save(None, self.file) + bm.name = "Other Title" + bm.save() + self.assertEqual(basename(bm.file.name), 'other-title.ogg') + self.assertEqual(bm.file.read(), 'X') + + def test_change_name_no_clobber(self): + """ + File name after change won't clobber some other file + with similar name. + """ + + bm = models.BookMedia(book=self.book, type='ogg', name="Title") + bm.file.save(None, self.file) + bm2 = models.BookMedia(book=self.book, type='ogg', name="Other title") + bm2.file.save(None, self.file2) + bm2.name = "Title" + bm2.save() + self.assertNotEqual(basename(bm2.file.name), 'title.ogg') + self.assertEqual(bm.file.read(), 'X') + self.assertEqual(bm2.file.read(), 'Y') + + def test_zip_audiobooks(self): + paths = [ + (None, join(dirname(__file__), "files/fraszka-do-anusie.xml")), + (None, join(dirname(__file__), "files/fraszki.xml")), + ] + + url = utils.create_zip(paths, 'test-zip-slug') + self.assertEqual("zip/test-zip-slug.zip", url) + self.assertTrue(exists(join(settings.MEDIA_ROOT, url))) + + utils.remove_zip('test-zip-slug') + self.assertFalse(exists(join(settings.MEDIA_ROOT, url))) + + def test_remove_zip_on_media_change(self): + bm = models.BookMedia(book=self.book, type='ogg', name="Title") + bm.file.save(None, self.file) + bm.save() + + zip_url = self.book.zip_audiobooks('ogg') + self.assertEqual('zip/'+self.book.slug+'_ogg.zip', zip_url) + self.assertTrue(exists(join(settings.MEDIA_ROOT, zip_url))) + + bm2 = models.BookMedia(book=self.book, type='ogg', name="Other title") + bm2.file.save(None, self.file2) + bm2.name = "Title" + bm2.save() + # was the audiobook zip deleted? + self.assertFalse(exists(join(settings.MEDIA_ROOT, zip_url))) diff --git a/src/catalogue/tests/cover.py b/src/catalogue/tests/cover.py new file mode 100755 index 000000000..0e08556b4 --- /dev/null +++ b/src/catalogue/tests/cover.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.core.files.base import ContentFile +from catalogue.test_utils import BookInfoStub, PersonStub, info_args, WLTestCase +from catalogue.models import Book +from mock import patch + + +class CoverTests(WLTestCase): + """Checks in parent_cover_changed is properly called.""" + def setUp(self): + WLTestCase.setUp(self) + self.TEXT = """<utwor />""" + self.child = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='X-Kind', + author=PersonStub(("Joe",), "Doe"), + **info_args("Child") + ) + + self.parent = BookInfoStub( + genre='X-Genre', + epoch='X-Epoch', + kind='X-Kind', + author=PersonStub(("Jim",), "Lazy"), + cover_url="http://example.com/cover.jpg", + parts=[self.child.url], + **info_args("Parent") + ) + + @patch.object(Book, 'parent_cover_changed', autospec=True) + def test_simple_import(self, parent_cover_changed): + child = Book.from_text_and_meta(ContentFile(self.TEXT), self.child) + parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent) + parent_cover_changed.assert_called_with(child) + + # Now reimport parent. + parent_cover_changed.reset_mock() + parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent, + overwrite=True) + self.assertEqual(parent_cover_changed.call_count, 0) + + # Now change cover in parent. + parent_cover_changed.reset_mock() + self.parent.cover_url = "http://example.com/other-cover.jpg" + parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent, + overwrite=True) + parent_cover_changed.assert_called_with(child) + + @patch.object(Book, 'parent_cover_changed', autospec=True) + def test_change_cover(self, parent_cover_changed): + child = Book.from_text_and_meta(ContentFile(self.TEXT), self.child) + parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent) + parent_cover_changed.assert_called_with(child) + + @patch.object(Book, 'parent_cover_changed', autospec=True) + def test_new_child(self, parent_cover_changed): + # Add parent without child first. + parts, self.parent.parts = self.parent.parts, [] + parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent) + + # Now import child and reimport parent. + child = Book.from_text_and_meta(ContentFile(self.TEXT), self.child) + self.parent.parts = parts + parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent, + overwrite=True) + parent_cover_changed.assert_called_with(child) + + # Now remove the child. + parent_cover_changed.reset_mock() + self.parent.parts = [] + parent = Book.from_text_and_meta(ContentFile(self.TEXT), self.parent, + overwrite=True) + parent_cover_changed.assert_called_with(child) diff --git a/src/catalogue/tests/files/fraszka-do-anusie.xml b/src/catalogue/tests/files/fraszka-do-anusie.xml new file mode 100755 index 000000000..3bbda155e --- /dev/null +++ b/src/catalogue/tests/files/fraszka-do-anusie.xml @@ -0,0 +1,49 @@ +<?xml version='1.0' encoding='utf-8'?> +<utwor> + <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> +<rdf:Description rdf:about="http://wiki.wolnepodreczniki.pl/index.php?title=Lektury:S%C4%99p-Szarzy%C5%84ski/Rytmy/Fraszka_do_Anusie"> +<dc:creator xml:lang="pl">SÄp SzarzyÅski, MikoÅaj</dc:creator> +<dc:title xml:lang="pl">Fraszka do Anusie</dc:title> +<dc:contributor.editor xml:lang="pl">SekuÅa, Aleksandra</dc:contributor.editor> +<dc:contributor.technical_editor xml:lang="pl">Sutkowska, Olga</dc:contributor.technical_editor> +<dc:publisher xml:lang="pl">Fundacja Nowoczesna Polska</dc:publisher> +<dc:subject.period xml:lang="pl">Barok</dc:subject.period> +<dc:subject.type xml:lang="pl">Liryka</dc:subject.type> +<dc:subject.genre xml:lang="pl">Fraszka</dc:subject.genre> +<dc:description xml:lang="pl">Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez BibliotekÄ NarodowÄ z egzemplarza pochodzÄ cego ze zbiorów BN.</dc:description> +<dc:identifier.url xml:lang="pl">http://wolnelektury.pl/katalog/lektura/fraszka-do-anusie</dc:identifier.url> +<dc:source.URL xml:lang="pl">http://www.polona.pl/Content/8759</dc:source.URL> +<dc:source xml:lang="pl">SzarzyÅski SÄp, MikoÅaj (ca 1550-1581), Rytmy abo Wiersze polskie w wyborze, E. Wende, Warszawa, 1914</dc:source> +<dc:rights xml:lang="pl">Domena publiczna - MikoÅaj SÄp SzarzyÅski zm. 1581</dc:rights> +<dc:date.pd xml:lang="pl">1581</dc:date.pd> +<dc:format xml:lang="pl">xml</dc:format> +<dc:type xml:lang="pl">text</dc:type> +<dc:type xml:lang="en">text</dc:type> +<dc:date xml:lang="pl">2008-12-29</dc:date> +<dc:audience xml:lang="pl">L</dc:audience> +<dc:audience xml:lang="pl">L</dc:audience> +<dc:language xml:lang="pl">pol</dc:language> +</rdf:Description> +</rdf:RDF> + <liryka_l> + +<autor_utworu>MikoÅaj SÄp SzarzyÅski</autor_utworu> + +<nazwa_utworu>Fraszka do Anusie</nazwa_utworu> + + + +<strofa><begin id="b1230084410751"/><motyw id="m1230084410751">Kochanek, Åzy, MiÅoÅÄ, Oko, Serce, Wzrok</motyw>JeÅli oczu hamowaÄ swoich nie umiaÅy/ +LeÅnych krynic boginie, aby nie pÅakaÅy,/ +Gdy baczyÅy<pe><slowo_obce>baczyÅy</slowo_obce> --- tu: zobaczyÅy, patrzyÅy na.</pe> przy studni Narcyza piÄknego,/ +A on umarÅ prze miÅoÅÄ oblicza swojego;/ +JeÅli nieÅmiertelnym stanom żaÅoÅÄ rozkazuje,/ +Gdy niebaczna fortuna co niesÅusznie psuje:</strofa> + +<strofa>Jakoż ja mam hamowaÄ, by na lice moje/ +Z oczu smutnych żaÅoÅne nie pÅynÄÅy zdroje?/ +Jako serce powÅciÄ gaÄ, aby nie wzdychaÅo/ +I od ciÄżkiej żaÅoÅci omdlewaÄ nie miaÅo?<end id="e1230084410751"/></strofa> + +</liryka_l> +</utwor> diff --git a/src/catalogue/tests/files/fraszki.xml b/src/catalogue/tests/files/fraszki.xml new file mode 100755 index 000000000..90e7c1245 --- /dev/null +++ b/src/catalogue/tests/files/fraszki.xml @@ -0,0 +1,27 @@ +<?xml version='1.0' encoding='utf-8'?> +<utwor> +<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> +<rdf:Description rdf:about=""> +<dc:creator xml:lang="pl">Kochanowski, Jan</dc:creator> +<dc:title xml:lang="pl">Fraszki</dc:title> +<dc:relation.hasPart xml:lang="pl">http://wolnelektury.pl/katalog/lektura/fraszka-do-anusie</dc:relation.hasPart> + +<dc:publisher xml:lang="pl">Fundacja Nowoczesna Polska</dc:publisher> +<dc:subject.period xml:lang="pl">Renesans</dc:subject.period> +<dc:subject.type xml:lang="pl">Liryka</dc:subject.type> +<dc:subject.genre xml:lang="pl">Fraszka</dc:subject.genre> + +<dc:description xml:lang="pl"></dc:description> +<dc:identifier.url xml:lang="pl">http://wolnelektury.pl/katalog/lektura/fraszki</dc:identifier.url> +<dc:source xml:lang="pl"></dc:source> +<dc:rights xml:lang="pl">Domena publiczna - Jan Kochanowski zm. 1584</dc:rights> +<dc:date.pd xml:lang="pl">1584</dc:date.pd> +<dc:format xml:lang="pl">xml</dc:format> +<dc:type xml:lang="pl">text</dc:type> + +<dc:type xml:lang="en">text</dc:type> +<dc:date xml:lang="pl">2008-11-12</dc:date> +<dc:language xml:lang="pl">pol</dc:language> +</rdf:Description> +</rdf:RDF> +</utwor> diff --git a/src/catalogue/tests/search.py b/src/catalogue/tests/search.py new file mode 100644 index 000000000..77afae4c3 --- /dev/null +++ b/src/catalogue/tests/search.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from catalogue import models, views +from catalogue.test_utils import * + +from nose.tools import raises + +class BasicSearchLogicTests(WLTestCase): + + def setUp(self): + WLTestCase.setUp(self) + self.author_tag = models.Tag.objects.create( + name=u'Adam Mickiewicz [SubWord]', + category=u'author', slug="one") + + self.unicode_tag = models.Tag.objects.create( + name=u'Tadeusz Å»eleÅski (Boy)', + category=u'author', slug="two") + + self.polish_tag = models.Tag.objects.create( + name=u'ÄÃÄÅÅŻŹÄÅÄÃ³Ä ÅÅżźÄÅ', + category=u'author', slug="three") + + @raises(ValueError) + def test_empty_query(self): + """ Check that empty queries raise an error. """ + views.find_best_matches(u'') + + @raises(ValueError) + def test_one_letter_query(self): + """ Check that one letter queries aren't permitted. """ + views.find_best_matches(u't') + + def test_match_by_prefix(self): + """ Tags should be matched by prefix of words within it's name. """ + self.assertEqual(views.find_best_matches(u'Ada'), (self.author_tag,)) + self.assertEqual(views.find_best_matches(u'Mic'), (self.author_tag,)) + self.assertEqual(views.find_best_matches(u'Mickiewicz'), (self.author_tag,)) + + def test_match_case_insensitive(self): + """ Tag names should match case insensitive. """ + self.assertEqual(views.find_best_matches(u'adam mickiewicz'), (self.author_tag,)) + + def test_match_case_insensitive_unicode(self): + """ Tag names should match case insensitive (unicode). """ + self.assertEqual(views.find_best_matches(u'tadeusz żeleÅski (boy)'), (self.unicode_tag,)) + + def test_word_boundary(self): + self.assertEqual(views.find_best_matches(u'SubWord'), (self.author_tag,)) + self.assertEqual(views.find_best_matches(u'[SubWord'), (self.author_tag,)) + + def test_unrelated_search(self): + self.assertEqual(views.find_best_matches(u'alamakota'), tuple()) + self.assertEqual(views.find_best_matches(u'Adama'), ()) + + def test_infix_doesnt_match(self): + """ Searching for middle of a word shouldn't match. """ + self.assertEqual(views.find_best_matches(u'deusz'), tuple()) + + def test_diactricts_removal_pl(self): + """ Tags should match both with and without national characters. """ + self.assertEqual(views.find_best_matches(u'ÄÃÄÅÅŻŹÄÅÄÃ³Ä ÅÅżźÄÅ'), (self.polish_tag,)) + self.assertEqual(views.find_best_matches(u'EOASLZZCNeoaslzzcn'), (self.polish_tag,)) + self.assertEqual(views.find_best_matches(u'eoaslzzcneoaslzzcn'), (self.polish_tag,)) + + def test_diactricts_query_removal_pl(self): + """ Tags without national characters shouldn't be matched by queries with them. """ + self.assertEqual(views.find_best_matches(u'AdÄ m'), ()) + + def test_sloppy(self): + self.assertEqual(views.find_best_matches(u'Å»elenski'), (self.unicode_tag,)) + self.assertEqual(views.find_best_matches(u'zelenski'), (self.unicode_tag,)) diff --git a/src/catalogue/tests/tags.py b/src/catalogue/tests/tags.py new file mode 100644 index 000000000..42ea6e245 --- /dev/null +++ b/src/catalogue/tests/tags.py @@ -0,0 +1,297 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.core.files.base import ContentFile +from django.test import Client +from catalogue import models +from catalogue.test_utils import * + + +class BooksByTagTests(WLTestCase): + """ tests the /katalog/category/tag page for found books """ + + def setUp(self): + WLTestCase.setUp(self) + author = PersonStub(("Common",), "Man") + + # grandchild + self.gchild_info = BookInfoStub(genre='Genre', epoch='Epoch', kind='Kind', author=author, + **info_args("GChild")) + # child + self.child_info = BookInfoStub(genre='Genre', epoch='Epoch', kind='Other Kind', author=author, + parts=[self.gchild_info.url], + **info_args("Child")) + # parent + self.parent_info = BookInfoStub(genre='Genre', epoch='Epoch', kind='Kind', author=author, + parts=[self.child_info.url], + **info_args("Parent")) + + self.book_file = ContentFile('<utwor />') + + def test_nonexistent_tag(self): + """ Looking for a non-existent tag should yield 404 """ + self.assertEqual(404, self.client.get('/katalog/autor/czeslaw-milosz/').status_code) + + def test_book_tag(self): + """ Looking for a book tag isn't permitted """ + models.Book.from_text_and_meta(self.book_file, self.gchild_info) + self.assertEqual(404, self.client.get('/katalog/gchild/').status_code) + + def test_tag_empty(self): + """ Tag with no books should return no books """ + models.Book.from_text_and_meta(self.book_file, self.gchild_info) + models.Tag.objects.create(name='Empty tag', slug='empty', category='author') + + context = self.client.get('/katalog/autor/empty/').context + self.assertEqual(0, len(context['object_list'])) + + def test_tag_eliminate(self): + """ Filtering by tag should only yield top-level qualifying books. """ + for info in self.gchild_info, self.child_info, self.parent_info: + models.Book.from_text_and_meta(self.book_file, info) + + # all three qualify + context = self.client.get('/katalog/gatunek/genre/').context + self.assertEqual([book.title for book in context['object_list']], + ['Parent']) + + # parent and gchild qualify, child doesn't + context = self.client.get('/katalog/rodzaj/kind/').context + self.assertEqual([book.title for book in context['object_list']], + ['Parent']) + + # Filtering by child's tag should yield the child + context = self.client.get('/katalog/rodzaj/other-kind/').context + self.assertEqual([book.title for book in context['object_list']], + ['Child']) + + +class TagRelatedTagsTests(WLTestCase): + """ tests the /katalog/category/tag/ page for related tags """ + + def setUp(self): + WLTestCase.setUp(self) + self.client = Client() + author = PersonStub(("Common",), "Man") + + gchild_info = BookInfoStub(author=author, genre="GchildGenre", epoch='Epoch', kind="Kind", + **info_args(u"GChild")) + child1_info = BookInfoStub(author=author, genre="ChildGenre", epoch='Epoch', kind="ChildKind", + parts=[gchild_info.url], + **info_args(u"Child1")) + child2_info = BookInfoStub(author=author, genre="ChildGenre", epoch='Epoch', kind="ChildKind", + **info_args(u"Child2")) + parent_info = BookInfoStub(author=author, genre="Genre", epoch='Epoch', kind="Kind", + parts=[child1_info.url, child2_info.url], + **info_args(u"Parent")) + + for info in gchild_info, child1_info, child2_info, parent_info: + book_text = """<utwor><opowiadanie><akap> + <begin id="m01" /> + <motyw id="m01">Theme, %sTheme</motyw> + Ala ma kota + <end id="m01" /> + </akap></opowiadanie></utwor> + """ % info.title.encode('utf-8') + book = models.Book.from_text_and_meta(ContentFile(book_text), info) + book.save() + + tag_empty = models.Tag(name='Empty tag', slug='empty', category='author') + tag_empty.save() + + def test_empty(self): + """ empty tag should have no related tags """ + + cats = self.client.get('/katalog/autor/empty/').context['categories'] + self.assertEqual({k: v for (k, v) in cats.items() if v}, {}, + 'tags related to empty tag') + + def test_has_related(self): + """ related own and descendants' tags should be generated """ + + cats = self.client.get('/katalog/rodzaj/kind/').context['categories'] + self.assertTrue('Common Man' in [tag.name for tag in cats['author']], + 'missing `author` related tag') + self.assertTrue('Epoch' in [tag.name for tag in cats['epoch']], + 'missing `epoch` related tag') + self.assertFalse(cats.get("kind", False), + "There should be no child-only related `kind` tags") + self.assertTrue("Genre" in [tag.name for tag in cats['genre']], + 'missing `genre` related tag') + self.assertFalse("ChildGenre" in [tag.name for tag in cats['genre']], + "There should be no child-only related `genre` tags") + self.assertTrue("GchildGenre" in [tag.name for tag in cats['genre']], + "missing grandchild's related tag") + self.assertTrue('Theme' in [tag.name for tag in cats['theme']], + "missing related theme") + self.assertFalse('Child1Theme' in [tag.name for tag in cats['theme']], + "There should be no child-only related `theme` tags") + self.assertTrue('GChildTheme' in [tag.name for tag in cats['theme']], + "missing grandchild's related theme") + + def test_related_differ(self): + """ related tags shouldn't include filtering tags """ + + response = self.client.get('/katalog/rodzaj/kind/') + cats = response.context['categories'] + self.assertFalse(cats.get('kind', False), + 'filtering tag wrongly included in related') + cats = self.client.get('/katalog/motyw/theme/').context['categories'] + self.assertFalse('Theme' in [tag.name for tag in cats['theme']], + 'filtering theme wrongly included in related') + + def test_parent_tag_once(self): + """ if parent and descendants have a common tag, count it only once """ + + cats = self.client.get('/katalog/rodzaj/kind/').context['categories'] + self.assertEqual([(tag.name, tag.count) for tag in cats['epoch']], + [('Epoch', 1)], + 'wrong related tag epoch tag on tag page') + + + def test_siblings_tags_count(self): + """ if children have tags and parent hasn't, count the children """ + + cats = self.client.get('/katalog/epoka/epoch/').context['categories'] + self.assertTrue(('ChildKind', 2) in [(tag.name, tag.count) for tag in cats['kind']], + 'wrong related kind tags on tag page, got: ' + + unicode([(tag.name, tag.count) for tag in cats['kind']])) + + # all occurencies of theme should be counted + self.assertTrue(('Theme', 4) in [(tag.name, tag.count) for tag in cats['theme']], + 'wrong related theme count') + + def test_query_child_tag(self): + """ + If child and parent have a common tag, but parent isn't included + in the result, child should still count. + """ + cats = self.client.get('/katalog/gatunek/childgenre/').context['categories'] + self.assertTrue(('Epoch', 2) in [(tag.name, tag.count) for tag in cats['epoch']], + 'wrong related kind tags on tag page, got: ' + + unicode([(tag.name, tag.count) for tag in cats['epoch']])) + + +class CleanTagRelationTests(WLTestCase): + """ tests for tag relations cleaning after deleting things """ + + def setUp(self): + WLTestCase.setUp(self) + author = PersonStub(("Common",), "Man") + + book_info = BookInfoStub(author=author, genre="G", epoch='E', kind="K", + **info_args(u"Book")) + book_text = """<utwor><opowiadanie><akap> + <begin id="m01" /><motyw id="m01">Theme</motyw>Ala ma kota + <end id="m01" /> + </akap></opowiadanie></utwor> + """ + self.book = models.Book.from_text_and_meta(ContentFile(book_text), book_info) + + def test_delete_objects(self): + """ there should be no related tags left after deleting some objects """ + + models.Book.objects.all().delete() + cats = self.client.get('/katalog/rodzaj/k/').context['categories'] + self.assertEqual({k: v for (k, v) in cats.items() if v}, {}) + self.assertEqual(models.Fragment.objects.all().count(), 0, + "orphaned fragments left") + self.assertEqual(models.Tag.intermediary_table_model.objects.all().count(), 0, + "orphaned TagRelation objects left") + + def test_deleted_tag(self): + """ there should be no tag relations left after deleting tags """ + + models.Tag.objects.all().delete() + self.assertEqual(len(self.book.related_themes()), 0) + self.assertEqual(models.Tag.intermediary_table_model.objects.all().count(), 0, + "orphaned TagRelation objects left") + + +class TestIdenticalTag(WLTestCase): + + def setUp(self): + WLTestCase.setUp(self) + author = PersonStub((), "Tag") + + self.book_info = BookInfoStub(author=author, + genre="tag", + epoch='tag', + kind="tag", + **info_args(u"tag")) + self.book_text = """<utwor> + <opowiadanie> + <akap> + <begin id="m01" /><motyw id="m01">tag</motyw>Ala ma kota<end id="m01" /> + </akap> + </opowiadanie> + </utwor> + """ + + + def test_book_tags(self): + """ there should be all related tags in relevant categories """ + book = models.Book.from_text_and_meta(ContentFile(self.book_text), self.book_info) + + related_themes = book.related_themes() + for category in 'author', 'kind', 'genre', 'epoch': + self.assertTrue('tag' in [tag.slug for tag in book.tags.filter(category=category)], + 'missing related tag for %s' % category) + self.assertTrue('tag' in [tag.slug for tag in related_themes]) + + def test_qualified_url(self): + models.Book.from_text_and_meta(ContentFile(self.book_text), self.book_info) + categories = {'author': 'autor', 'theme': 'motyw', 'epoch': 'epoka', 'kind':'rodzaj', 'genre':'gatunek'} + for cat, localcat in categories.iteritems(): + context = self.client.get('/katalog/%s/tag/' % localcat).context + self.assertEqual(1, len(context['object_list'])) + self.assertNotEqual({}, context['categories']) + self.assertFalse(context['categories'].get(cat, False)) + + +class BookTagsTests(WLTestCase): + """ tests the /katalog/lektura/book/ page for related tags """ + + def setUp(self): + WLTestCase.setUp(self) + author1 = PersonStub(("Common",), "Man") + author2 = PersonStub(("Jim",), "Lazy") + + child_info = BookInfoStub(authors=(author1, author2), genre="ChildGenre", epoch='Epoch', kind="ChildKind", + **info_args(u"Child")) + parent_info = BookInfoStub(author=author1, genre="Genre", epoch='Epoch', kind="Kind", + parts=[child_info.url], + **info_args(u"Parent")) + + for info in child_info, parent_info: + book_text = """<utwor><opowiadanie><akap> + <begin id="m01" /> + <motyw id="m01">Theme, %sTheme</motyw> + Ala ma kota + <end id="m01" /> + </akap></opowiadanie></utwor> + """ % info.title.encode('utf-8') + models.Book.from_text_and_meta(ContentFile(book_text), info) + + def test_book_tags(self): + """ book should have own tags and whole tree's themes """ + + book = models.Book.objects.get(slug='parent') + related_themes = book.related_themes() + + self.assertEqual([t.slug for t in book.tags.filter(category='author')], + ['common-man']) + self.assertEqual([t.slug for t in book.tags.filter(category='kind')], + ['kind']) + self.assertEqual([(tag.name, tag.count) for tag in related_themes], + [('ChildTheme', 1), ('ParentTheme', 1), ('Theme', 2)]) + + def test_catalogue_tags(self): + """ test main page tags and counts """ + context = self.client.get('/katalog/').context + self.assertEqual([(tag.name, tag.count) for tag in context['categories']['author']], + [('Jim Lazy', 1), ('Common Man', 1)]) + self.assertEqual([(tag.name, tag.count) for tag in context['categories']['theme']], + [('ChildTheme', 1), ('ParentTheme', 1), ('Theme', 2)]) + diff --git a/src/catalogue/tests/templatetags.py b/src/catalogue/tests/templatetags.py new file mode 100644 index 000000000..a66d604de --- /dev/null +++ b/src/catalogue/tests/templatetags.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from catalogue import models +from catalogue.templatetags import catalogue_tags +from catalogue.test_utils import * +from django.core.files.base import ContentFile + + +class BookDescTests(WLTestCase): + """ tests book_title template tag """ + + def setUp(self): + WLTestCase.setUp(self) + authors = PersonStub(("Common",), "Man"), PersonStub(("Jane",), "Doe") + + child_info = BookInfoStub(authors=authors, genre="Genre", epoch='Epoch', kind="Kind", + **info_args(u"Child")) + parent_info = BookInfoStub(authors=authors, genre="Genre", epoch='Epoch', kind="Kind", + parts=[child_info.url], + **info_args(u"Parent")) + + self.child = models.Book.from_text_and_meta(ContentFile('<utwor/>'), child_info) + models.Book.from_text_and_meta(ContentFile('<utwor/>'), parent_info) + self.child = models.Book.objects.get(pk=self.child.pk) + + def test_book_desc(self): + """ book description should return authors, ancestors, book """ + self.assertEqual(catalogue_tags.book_title(self.child), 'Jane Doe, Common Man, Parent, Child') diff --git a/src/catalogue/tests/visit.py b/src/catalogue/tests/visit.py new file mode 100644 index 000000000..cab3c987d --- /dev/null +++ b/src/catalogue/tests/visit.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from catalogue import models +from catalogue.test_utils import BookInfoStub, PersonStub, WLTestCase, info_args +from django.core.files.base import ContentFile + + +class VisitTest(WLTestCase): + """Simply create some objects and visit some views.""" + + def setUp(self): + WLTestCase.setUp(self) + author = PersonStub(("Jane",), "Doe") + book_info = BookInfoStub(author=author, genre="Genre", + epoch='Epoch', kind="Kind", **info_args(u"A book")) + self.book = models.Book.from_text_and_meta(ContentFile(''' + <utwor> + <opowiadanie> + <akap> + <begin id="b1" /> + <motyw id="m1">Theme</motyw> + Test + <end id="e1" /> + </akap> + </opowiadanie> + </utwor> + '''), book_info) + self.collection = models.Collection.objects.create( + title='Biblioteczka Boya', slug='boy', book_slugs='a-book') + + def test_visit_urls(self): + """ book description should return authors, ancestors, book """ + url_map = { + 200: [ + '', + 'lektury/', + 'lektury/boy/', + 'nowe/', + 'lektura/a-book/', + 'lektura/a-book.html', + 'lektura/a-book/motyw/theme/', + 'motyw/theme/', + 'autor/jane-doe/', + 'autor/jane-doe/gatunek/genre/', + 'autor/jane-doe/gatunek/genre/motyw/theme/', + 'pl.json', + 'b/%d/mini.pl.html' % self.book.pk, + 'b/%d/mini_nolink.pl.html' % self.book.pk, + 'b/%d/short.pl.html' % self.book.pk, + 'b/%d/wide.pl.html' % self.book.pk, + 'f/%d/promo.pl.html' % self.book.fragments.all()[0].pk, + 'f/%d/short.pl.html' % self.book.fragments.all()[0].pk, + ], + 404: [ + 'lektury/nonexistent/', # Nonexistent Collection. + 'lektura/nonexistent/', # Nonexistent Book. + 'lektura/nonexistent.html', # Nonexistent Book's HTML. + 'lektura/nonexistent/motyw/theme/', # Nonexistent Book's theme. + 'lektura/a-book/motyw/nonexistent/', # Nonexistent theme in a Book. + 'autor/nonexistent/', # Nonexistent author. + 'motyw/nonexistent/', # Nonexistent theme. + 'zh.json', # Nonexistent language. + 'b/%d/mini.pl.html' % (self.book.pk + 100), # Nonexistent book. + 'b/%d/mini_nolink.pl.html' % (self.book.pk + 100), # Nonexistent book. + 'b/%d/short.pl.html' % (self.book.pk + 100), # Nonexistent book. + 'b/%d/wide.pl.html' % (self.book.pk + 100), # Nonexistent book. + 'f/%d/promo.pl.html' % (self.book.fragments.all()[0].pk + 100), # Nonexistent fragment. + 'f/%d/short.pl.html' % (self.book.fragments.all()[0].pk + 100), # Nonexistent fragment. + ] + } + prefix = '/katalog/' + for expected_status, urls in url_map.items(): + for url in urls: + print(url) + status = self.client.get(prefix + url).status_code + self.assertEqual(status, expected_status, + "Wrong status code for '%s'. Expected %d, got %d." % ( + prefix + url, expected_status, status)) diff --git a/src/catalogue/translation.py b/src/catalogue/translation.py new file mode 100644 index 000000000..319736515 --- /dev/null +++ b/src/catalogue/translation.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# + +from modeltranslation.translator import translator, TranslationOptions +from catalogue.models import Collection, Tag, Source + +class TagTranslationOptions(TranslationOptions): + fields = ('name', 'description', 'wiki_link') + +class CollectionTranslationOptions(TranslationOptions): + fields = ('title', 'description') + +class SourceTranslationOptions(TranslationOptions): + fields = ('name',) + +translator.register(Tag, TagTranslationOptions) +translator.register(Collection, CollectionTranslationOptions) +translator.register(Source, SourceTranslationOptions) diff --git a/src/catalogue/urls.py b/src/catalogue/urls.py new file mode 100644 index 000000000..b7c59a055 --- /dev/null +++ b/src/catalogue/urls.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url +from django.db.models import Max +from django.views.generic import ListView, RedirectView +from catalogue.feeds import AudiobookFeed +from catalogue.views import CustomPDFFormView +from catalogue.models import Book + + +SLUG = r'[a-z0-9-]*' + +urlpatterns = patterns('picture.views', + # pictures - currently pictures are coupled with catalogue, hence the url is here + url(r'^obraz/$', 'picture_list_thumb', name='picture_list_thumb'), + url(r'^obraz/(?P<slug>%s).html$' % SLUG, 'picture_viewer', name='picture_viewer'), + url(r'^obraz/(?P<slug>%s)/$' % SLUG, 'picture_detail'), + + url(r'^p/(?P<pk>\d+)/mini\.(?P<lang>.+)\.html', 'picture_mini', name='picture_mini'), + url(r'^p/(?P<pk>\d+)/short\.(?P<lang>.+)\.html', 'picture_short', name='picture_short'), + url(r'^pa/(?P<pk>\d+)/short\.(?P<lang>.+)\.html', 'picturearea_short', name='picture_area_short'), +) + +urlpatterns += patterns('', + # old search page - redirected + url(r'^szukaj/$', RedirectView.as_view( + url='/szukaj/', query_string=True, permanent=True)), +) + +urlpatterns += patterns('catalogue.views', + url(r'^$', 'catalogue', name='catalogue'), + + url(r'^lektury/$', 'book_list', name='book_list'), + url(r'^lektury/(?P<slug>[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'^tags/$', 'tags_starting_with', name='hint'), + url(r'^jtags/?$', 'json_tags_starting_with', name='jhint'), + url(r'^nowe/$', ListView.as_view( + queryset=Book.objects.filter(parent=None).order_by('-created_at'), + template_name='catalogue/recent_list.html'), name='recent_list'), + url(r'^nowe/audiobooki/$', ListView.as_view( + queryset=Book.objects.filter(media__type='ogg').annotate(m=Max('media__uploaded_at')).order_by('-m'), + template_name='catalogue/recent_audiobooks_list.html'), name='recent_audiobooks_list'), + url(r'^nowe/daisy/$', ListView.as_view( + queryset=Book.objects.filter(media__type='daisy').annotate(m=Max('media__uploaded_at')).order_by('-m'), + template_name='catalogue/recent_daisy_list.html'), name='recent_daisy_list'), + + url(r'^custompdf/(?P<slug>%s)/$' % SLUG, CustomPDFFormView(), name='custom_pdf_form'), + + url(r'^audiobooki/(?P<type>mp3|ogg|daisy|all).xml$', AudiobookFeed(), name='audiobook_feed'), + + + # zip + url(r'^zip/pdf\.zip$', 'download_zip', {'format': 'pdf', 'slug': None}, 'download_zip_pdf'), + url(r'^zip/epub\.zip$', 'download_zip', {'format': 'epub', 'slug': None}, 'download_zip_epub'), + url(r'^zip/mobi\.zip$', 'download_zip', {'format': 'mobi', 'slug': None}, 'download_zip_mobi'), + url(r'^zip/mp3/(?P<slug>%s)\.zip' % SLUG, 'download_zip', {'format': 'mp3'}, 'download_zip_mp3'), + url(r'^zip/ogg/(?P<slug>%s)\.zip' % SLUG, 'download_zip', {'format': 'ogg'}, 'download_zip_ogg'), + + # Public interface. Do not change this URLs. + url(r'^lektura/(?P<slug>%s)\.html$' % SLUG, 'book_text', name='book_text'), + url(r'^lektura/(?P<slug>%s)/audiobook/$' % SLUG, 'player', name='book_player'), + url(r'^lektura/(?P<slug>%s)/$' % SLUG, 'book_detail', name='book_detail'), + url(r'^lektura/(?P<slug>%s)/motyw/(?P<theme_slug>[a-zA-Z0-9-]+)/$' % SLUG, + 'book_fragments', name='book_fragments'), + + # Includes. + url(r'^(?P<lang>[^/]+)\.json$', 'catalogue_json'), + url(r'^b/(?P<pk>\d+)/mini\.(?P<lang>.+)\.html', 'book_mini', name='catalogue_book_mini'), + url(r'^b/(?P<pk>\d+)/mini_nolink\.(?P<lang>.+)\.html', 'book_mini', {'with_link': False}, name='catalogue_book_mini_nolink'), + url(r'^b/(?P<pk>\d+)/short\.(?P<lang>.+)\.html', 'book_short', name='catalogue_book_short'), + url(r'^b/(?P<pk>\d+)/wide\.(?P<lang>.+)\.html', 'book_wide', name='catalogue_book_wide'), + url(r'^f/(?P<pk>\d+)/promo\.(?P<lang>.+)\.html', 'fragment_promo', name='catalogue_fragment_promo'), + url(r'^f/(?P<pk>\d+)/short\.(?P<lang>.+)\.html', 'fragment_short', name='catalogue_fragment_short'), + + # This should be the last pattern. + url(r'^(?P<tags>[a-zA-Z0-9-/]*)/$', 'tagged_object_list', name='tagged_object_list'), +) diff --git a/src/catalogue/utils.py b/src/catalogue/utils.py new file mode 100644 index 000000000..bcc5a0b33 --- /dev/null +++ b/src/catalogue/utils.py @@ -0,0 +1,358 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from collections import defaultdict +import hashlib +import random +import re +import time +from base64 import urlsafe_b64encode + +from django.http import HttpResponse +from django.core.files.uploadedfile import UploadedFile +from django.core.files.storage import DefaultStorage +from django.utils.encoding import force_unicode +from django.conf import settings +from os import mkdir, path, unlink +from errno import EEXIST, ENOENT +from fcntl import flock, LOCK_EX +from zipfile import ZipFile + +from reporting.utils import read_chunks + +# Use the system (hardware-based) random number generator if it exists. +if hasattr(random, 'SystemRandom'): + randrange = random.SystemRandom().randrange +else: + randrange = random.randrange +MAX_SESSION_KEY = 18446744073709551616L # 2 << 63 + + +def get_random_hash(seed): + sha_digest = hashlib.sha1('%s%s%s%s' % + (randrange(0, MAX_SESSION_KEY), time.time(), unicode(seed).encode('utf-8', 'replace'), + settings.SECRET_KEY)).digest() + return urlsafe_b64encode(sha_digest).replace('=', '').replace('_', '-').lower() + + +def split_tags(*tag_lists): + if len(tag_lists) == 1: + result = defaultdict(list) + for tag in tag_lists[0]: + result[tag.category].append(tag) + else: + result = defaultdict(dict) + for tag_list in tag_lists: + for tag in tag_list: + try: + result[tag.category][tag.pk].count += tag.count + except KeyError: + result[tag.category][tag.pk] = tag + for k, v in result.items(): + result[k] = sorted(v.values(), key=lambda tag: tag.sort_key) + return result + + +class ExistingFile(UploadedFile): + + def __init__(self, path, *args, **kwargs): + self.path = path + super(ExistingFile, self).__init__(*args, **kwargs) + + def temporary_file_path(self): + return self.path + + def close(self): + pass + + +class LockFile(object): + """ + A file lock monitor class; createas an ${objname}.lock + file in directory dir, and locks it exclusively. + To be used in 'with' construct. + """ + def __init__(self, dir, objname): + self.lockname = path.join(dir, objname + ".lock") + + def __enter__(self): + self.lock = open(self.lockname, 'w') + flock(self.lock, LOCK_EX) + + def __exit__(self, *err): + try: + unlink(self.lockname) + except OSError as oe: + if oe.errno != EEXIST: + raise oe + self.lock.close() + + +#@task +def create_zip(paths, zip_slug): + """ + Creates a zip in MEDIA_ROOT/zip directory containing files from path. + Resulting archive filename is ${zip_slug}.zip + Returns it's path relative to MEDIA_ROOT (no initial slash) + """ + # directory to store zip files + zip_path = path.join(settings.MEDIA_ROOT, 'zip') + + try: + mkdir(zip_path) + except OSError as oe: + if oe.errno != EEXIST: + raise oe + zip_filename = zip_slug + ".zip" + + with LockFile(zip_path, zip_slug): + if not path.exists(path.join(zip_path, zip_filename)): + zipf = ZipFile(path.join(zip_path, zip_filename), 'w') + try: + for arcname, p in paths: + if arcname is None: + arcname = path.basename(p) + zipf.write(p, arcname) + finally: + zipf.close() + + return 'zip/' + zip_filename + + +def remove_zip(zip_slug): + """ + removes the ${zip_slug}.zip file from zip store. + """ + zip_file = path.join(settings.MEDIA_ROOT, 'zip', zip_slug + '.zip') + try: + unlink(zip_file) + except OSError as oe: + if oe.errno != ENOENT: + raise oe + + +class AttachmentHttpResponse(HttpResponse): + """Response serving a file to be downloaded. + """ + def __init__(self, file_path, file_name, mimetype): + super(AttachmentHttpResponse, self).__init__(mimetype=mimetype) + self['Content-Disposition'] = 'attachment; filename=%s' % file_name + self.file_path = file_path + self.file_name = file_name + + with open(DefaultStorage().path(self.file_path)) as f: + for chunk in read_chunks(f): + self.write(chunk) + +class MultiQuerySet(object): + def __init__(self, *args, **kwargs): + self.querysets = args + self._count = None + + def count(self): + if not self._count: + self._count = sum(len(qs) for qs in self.querysets) + return self._count + + def __len__(self): + return self.count() + + def __getitem__(self, item): + try: + (offset, stop, step) = item.indices(self.count()) + except AttributeError: + # it's not a slice - make it one + return self[item : item + 1][0] + items = [] + total_len = stop - offset + for qs in self.querysets: + if len(qs) < offset: + offset -= len(qs) + else: + items += list(qs[offset:stop]) + if len(items) >= total_len: + return items + else: + offset = 0 + stop = total_len - len(items) + continue + +class SortedMultiQuerySet(MultiQuerySet): + def __init__(self, *args, **kwargs): + self.order_by = kwargs.pop('order_by', None) + self.sortfn = kwargs.pop('sortfn', None) + if self.order_by is not None: + self.sortfn = lambda a, b: cmp((getattr(a, f) for f in self.order_by), + (getattr(b, f) for f in self.order_by)) + super(SortedMultiQuerySet, self).__init__(*args, **kwargs) + + def __getitem__(self, item): + sort_heads = [0] * len(self.querysets) + try: + (offset, stop, step) = item.indices(self.count()) + except AttributeError: + # it's not a slice - make it one + return self[item : item + 1][0] + items = [] + total_len = stop - offset + skipped = 0 + i_s = range(len(sort_heads)) + + while len(items) < total_len: + candidate = None + candidate_i = None + for i in i_s: + def get_next(): + return self.querysets[i][sort_heads[i]] + try: + if candidate is None: + candidate = get_next() + candidate_i = i + else: + competitor = get_next() + if self.sortfn(candidate, competitor) > 0: + candidate = competitor + candidate_i = i + except IndexError: + continue # continue next sort_head + # we have no more elements: + if candidate is None: + break + sort_heads[candidate_i] += 1 + if skipped < offset: + skipped += 1 + continue # continue next item + items.append(candidate) + + return items + + +def truncate_html_words(s, num, end_text='...'): + """Truncates HTML to a certain number of words (not counting tags and + comments). Closes opened tags if they were correctly closed in the given + html. Takes an optional argument of what should be used to notify that the + string has been truncated, defaulting to ellipsis (...). + + Newlines in the HTML are preserved. + + This is just a version of django.utils.text.truncate_html_words with no space before the end_text. + """ + s = force_unicode(s) + length = int(num) + if length <= 0: + return u'' + html4_singlets = ('br', 'col', 'link', 'base', 'img', 'param', 'area', 'hr', 'input') + # Set up regular expressions + re_words = re.compile(r'&.*?;|<.*?>|(\w[\w-]*)', re.U) + re_tag = re.compile(r'<(/)?([^ ]+?)(?: (/)| .*?)?>') + # Count non-HTML words and keep note of open tags + pos = 0 + end_text_pos = 0 + words = 0 + open_tags = [] + while words <= length: + m = re_words.search(s, pos) + if not m: + # Checked through whole string + break + pos = m.end(0) + if m.group(1): + # It's an actual non-HTML word + words += 1 + if words == length: + end_text_pos = pos + continue + # Check for tag + tag = re_tag.match(m.group(0)) + if not tag or end_text_pos: + # Don't worry about non tags or tags after our truncate point + continue + closing_tag, tagname, self_closing = tag.groups() + tagname = tagname.lower() # Element names are always case-insensitive + if self_closing or tagname in html4_singlets: + pass + elif closing_tag: + # Check for match in open tags list + try: + i = open_tags.index(tagname) + except ValueError: + pass + else: + # SGML: An end tag closes, back to the matching start tag, all unclosed intervening start tags with omitted end tags + open_tags = open_tags[i+1:] + else: + # Add it to the start of the open tags list + open_tags.insert(0, tagname) + if words <= length: + # Don't try to close tags if we don't need to truncate + return s + out = s[:end_text_pos] + if end_text: + out += end_text + # Close any tags still open + for tag in open_tags: + out += '</%s>' % tag + # Return string + return out + + +def customizations_hash(customizations): + customizations.sort() + return hash(tuple(customizations)) + + +def get_customized_pdf_path(book, customizations): + """ + Returns a MEDIA_ROOT relative path for a customized pdf. The name will contain a hash of customization options. + """ + h = customizations_hash(customizations) + return 'book/%s/%s-custom-%s.pdf' % (book.slug, book.slug, h) + + +def clear_custom_pdf(book): + """ + Returns a list of paths to generated customized pdf of a book + """ + from waiter.utils import clear_cache + clear_cache('book/%s' % book.slug) + + +class AppSettings(object): + """Allows specyfying custom settings for an app, with default values. + + Just subclass, set some properties and instantiate with a prefix. + Getting a SETTING from an instance will check for prefix_SETTING + in project settings if set, else take the default. The value will be + then filtered through _more_SETTING method, if there is one. + + """ + def __init__(self, prefix): + self._prefix = prefix + + def __getattribute__(self, name): + if name.startswith('_'): + return object.__getattribute__(self, name) + value = getattr(settings, + "%s_%s" % (self._prefix, name), + object.__getattribute__(self, name)) + more = "_more_%s" % name + if hasattr(self, more): + value = getattr(self, more)(value) + return value + + +def trim_query_log(trim_to=25): + """ +connection.queries includes all SQL statements -- INSERTs, UPDATES, SELECTs, etc. Each time your app hits the database, the query will be recorded. +This can sometimes occupy lots of memory, so trim it here a bit. + """ + if settings.DEBUG: + from django.db import connection + connection.queries = trim_to > 0 \ + and connection.queries[-trim_to:] \ + or [] + + +def delete_from_cache_by_language(cache, key_template): + cache.delete_many([key_template % lc for lc, ln in settings.LANGUAGES]) diff --git a/src/catalogue/views.py b/src/catalogue/views.py new file mode 100644 index 000000000..a25a08ffa --- /dev/null +++ b/src/catalogue/views.py @@ -0,0 +1,691 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from collections import OrderedDict +import re + +from django.conf import settings +from django.template import RequestContext +from django.template.loader import render_to_string +from django.shortcuts import render_to_response, get_object_or_404, render +from django.http import HttpResponse, HttpResponseRedirect, Http404, HttpResponsePermanentRedirect, JsonResponse +from django.core.urlresolvers import reverse +from django.db.models import Q +from django.contrib.auth.decorators import login_required, user_passes_test +from django.utils.http import urlquote_plus +from django.utils import translation +from django.utils.translation import ugettext as _, ugettext_lazy + +from ajaxable.utils import AjaxableFormView +from pdcounter import models as pdcounter_models +from pdcounter import views as pdcounter_views +from picture.models import Picture, PictureArea +from picture.views import picture_list_thumb +from ssify import ssi_included, ssi_expect, SsiVariable as V +from suggest.forms import PublishingSuggestForm +from catalogue import forms +from catalogue.helpers import get_top_level_related_tags +from catalogue import models +from catalogue.utils import split_tags, MultiQuerySet, SortedMultiQuerySet +from catalogue.templatetags.catalogue_tags import tag_list, collection_list + +staff_required = user_passes_test(lambda user: user.is_staff) + + +def catalogue(request, as_json=False): + common_categories = ('author',) + split_categories = ('epoch', 'genre', 'kind') + + categories = split_tags( + get_top_level_related_tags(categories=common_categories), + models.Tag.objects.usage_for_model( + models.Fragment, counts=True).filter(category='theme'), + models.Tag.objects.usage_for_model( + Picture, counts=True).filter(category__in=common_categories), + models.Tag.objects.usage_for_model( + PictureArea, counts=True).filter( + category='theme') + ) + book_categories = split_tags( + get_top_level_related_tags(categories=split_categories) + ) + picture_categories = split_tags( + models.Tag.objects.usage_for_model( + Picture, counts=True).filter( + category__in=split_categories), + ) + + collections = models.Collection.objects.all() + + def render_tag_list(tags): + return render_to_string('catalogue/tag_list.html', tag_list(tags)) + + def render_split(with_books, with_pictures): + ctx = {} + if with_books: + ctx['books'] = render_tag_list(with_books) + if with_pictures: + ctx['pictures'] = render_tag_list(with_pictures) + return render_to_string('catalogue/tag_list_split.html', ctx) + + output = {} + output['theme'] = render_tag_list(categories.get('theme', [])) + for category in common_categories: + output[category] = render_tag_list(categories.get(category, [])) + for category in split_categories: + output[category] = render_split( + book_categories.get(category, []), + picture_categories.get(category, [])) + + output['collections'] = render_to_string( + 'catalogue/collection_list.html', collection_list(collections)) + if as_json: + return JsonResponse(output) + else: + return render_to_response('catalogue/catalogue.html', locals(), + context_instance=RequestContext(request)) + + +@ssi_included +def catalogue_json(request): + return catalogue(request, True) + + +def book_list(request, filter=None, get_filter=None, + template_name='catalogue/book_list.html', + nav_template_name='catalogue/snippets/book_list_nav.html', + list_template_name='catalogue/snippets/book_list.html', + context=None, + ): + """ generates a listing of all books, optionally filtered with a test function """ + if get_filter: + filter = get_filter() + books_by_author, orphans, books_by_parent = models.Book.book_list(filter) + books_nav = OrderedDict() + for tag in books_by_author: + if books_by_author[tag]: + books_nav.setdefault(tag.sort_key[0], []).append(tag) + rendered_nav = render_to_string(nav_template_name, locals()) + rendered_book_list = render_to_string(list_template_name, locals()) + return render_to_response(template_name, locals(), + context_instance=RequestContext(request)) + + +def audiobook_list(request): + return book_list(request, Q(media__type='mp3') | Q(media__type='ogg'), + template_name='catalogue/audiobook_list.html', + list_template_name='catalogue/snippets/audiobook_list.html', + ) + + +def daisy_list(request): + return book_list(request, Q(media__type='daisy'), + template_name='catalogue/daisy_list.html', + ) + + +def collection(request, slug): + coll = get_object_or_404(models.Collection, slug=slug) + if coll.kind == 'book': + view = book_list + tmpl = "catalogue/collection.html" + elif coll.kind == 'picture': + view = picture_list_thumb + tmpl = "picture/collection.html" + else: + raise ValueError('How do I show this kind of collection? %s' % coll.kind) + return view(request, get_filter=coll.get_query, + template_name=tmpl, + context={'collection': coll}) + + +def differentiate_tags(request, tags, ambiguous_slugs): + beginning = '/'.join(tag.url_chunk for tag in tags) + unparsed = '/'.join(ambiguous_slugs[1:]) + options = [] + for tag in models.Tag.objects.filter(slug=ambiguous_slugs[0]): + options.append({ + 'url_args': '/'.join((beginning, tag.url_chunk, unparsed)).strip('/'), + 'tags': [tag] + }) + return render_to_response('catalogue/differentiate_tags.html', + {'tags': tags, 'options': options, 'unparsed': ambiguous_slugs[1:]}, + context_instance=RequestContext(request)) + + +# TODO: Rewrite this hellish piece of code which tries to do everything +def tagged_object_list(request, tags=''): + # preliminary tests and conditions + try: + tags = models.Tag.get_tag_list(tags) + except models.Tag.DoesNotExist: + # Perhaps the user is asking about an author in Public Domain + # counter (they are not represented in tags) + chunks = tags.split('/') + if len(chunks) == 2 and chunks[0] == 'autor': + return pdcounter_views.author_detail(request, chunks[1]) + else: + raise Http404 + except models.Tag.MultipleObjectsReturned, e: + # Ask the user to disambiguate + return differentiate_tags(request, e.tags, e.ambiguous_slugs) + except models.Tag.UrlDeprecationWarning, e: + return HttpResponsePermanentRedirect(reverse('tagged_object_list', args=['/'.join(tag.url_chunk for tag in e.tags)])) + + try: + if len(tags) > settings.MAX_TAG_LIST: + raise Http404 + except AttributeError: + pass + + # beginning of digestion + theme_is_set = [tag for tag in tags if tag.category == 'theme'] + shelf_is_set = [tag for tag in tags if tag.category == 'set'] + only_shelf = shelf_is_set and len(tags) == 1 + only_my_shelf = only_shelf and request.user.is_authenticated() and request.user == tags[0].user + tags_pks = [tag.pk for tag in tags] + + objects = None + + if theme_is_set: + shelf_tags = [tag for tag in tags if tag.category == 'set'] + fragment_tags = [tag for tag in tags if tag.category != 'set'] + fragments = models.Fragment.tagged.with_all(fragment_tags) + areas = PictureArea.tagged.with_all(fragment_tags) + + if shelf_tags: + books = models.Book.tagged.with_all(shelf_tags).order_by() + fragments = fragments.filter(Q(book__in=books) | Q(book__ancestor__in=books)) + areas = PictureArea.objects.none() + + categories = split_tags( + models.Tag.objects.usage_for_queryset(fragments, counts=True + ).exclude(pk__in=tags_pks), + models.Tag.objects.usage_for_queryset(areas, counts=True + ).exclude(pk__in=tags_pks) + ) + + # we want the Pictures to go first + objects = MultiQuerySet(areas, fragments) + else: + all_books = models.Book.tagged.with_all(tags) + if shelf_is_set: + books = all_books.order_by('sort_key_author', 'title') + pictures = Picture.objects.none() + related_book_tags = models.Tag.objects.usage_for_queryset( + books, counts=True).exclude( + category='set').exclude(pk__in=tags_pks) + else: + books = models.Book.tagged_top_level(tags).order_by( + 'sort_key_author', 'title') + pictures = Picture.tagged.with_all(tags).order_by( + 'sort_key_author', 'title') + related_book_tags = get_top_level_related_tags(tags) + + fragments = models.Fragment.objects.filter(book__in=all_books) + areas = PictureArea.objects.filter(picture__in=pictures) + + categories = split_tags( + related_book_tags, + models.Tag.objects.usage_for_queryset( + pictures, counts=True).exclude(pk__in=tags_pks), + models.Tag.objects.usage_for_queryset( + fragments, counts=True).filter( + category='theme').exclude(pk__in=tags_pks), + models.Tag.objects.usage_for_queryset( + areas, counts=True).filter( + category__in=('theme', 'thing')).exclude( + pk__in=tags_pks), + ) + + objects = SortedMultiQuerySet(pictures, books, + order_by=('sort_key_author', 'title')) + + return render_to_response('catalogue/tagged_object_list.html', + { + 'object_list': objects, + 'categories': categories, + 'only_shelf': only_shelf, + 'only_my_shelf': only_my_shelf, + 'formats_form': forms.DownloadFormatsForm(), + 'tags': tags, + 'tag_ids': tags_pks, + 'theme_is_set': theme_is_set, + }, + context_instance=RequestContext(request)) + + +def book_fragments(request, slug, theme_slug): + book = get_object_or_404(models.Book, slug=slug) + theme = get_object_or_404(models.Tag, slug=theme_slug, category='theme') + fragments = models.Fragment.tagged.with_all([theme]).filter( + Q(book=book) | Q(book__ancestor=book)) + + return render_to_response('catalogue/book_fragments.html', locals(), + context_instance=RequestContext(request)) + + +def book_detail(request, slug): + try: + book = models.Book.objects.get(slug=slug) + except models.Book.DoesNotExist: + return pdcounter_views.book_stub_detail(request, slug) + + book_children = book.children.all().order_by('parent_number', 'sort_key') + return render_to_response('catalogue/book_detail.html', locals(), + context_instance=RequestContext(request)) + + +def player(request, slug): + book = get_object_or_404(models.Book, slug=slug) + if not book.has_media('mp3'): + raise Http404 + + ogg_files = {} + for m in book.media.filter(type='ogg').order_by().iterator(): + ogg_files[m.name] = m + + audiobooks = [] + have_oggs = True + projects = set() + for mp3 in book.media.filter(type='mp3').iterator(): + # ogg files are always from the same project + meta = mp3.extra_info + project = meta.get('project') + if not project: + # temporary fallback + project = u'CzytamySÅuchajÄ c' + + projects.add((project, meta.get('funded_by', ''))) + + media = {'mp3': mp3} + + ogg = ogg_files.get(mp3.name) + if ogg: + media['ogg'] = ogg + else: + have_oggs = False + audiobooks.append(media) + + projects = sorted(projects) + + extra_info = book.extra_info + + return render_to_response('catalogue/player.html', locals(), + context_instance=RequestContext(request)) + + +def book_text(request, slug): + book = get_object_or_404(models.Book, slug=slug) + + if not book.has_html_file(): + raise Http404 + return render_to_response('catalogue/book_text.html', locals(), + context_instance=RequestContext(request)) + + +# ========== +# = Search = +# ========== + +def _no_diacritics_regexp(query): + """ returns a regexp for searching for a query without diacritics + + should be locale-aware """ + names = { + u'a':u'aÄ Ä', u'c':u'cÄÄ', u'e':u'eÄÄ', u'l': u'lÅÅ', u'n':u'nÅÅ', u'o':u'oóÃ', u's':u'sÅÅ', u'z':u'zźżŹŻ', + u'Ä ':u'Ä Ä', u'Ä':u'ÄÄ', u'Ä':u'ÄÄ', u'Å': u'ÅÅ', u'Å':u'ÅÅ', u'ó':u'óÃ', u'Å':u'ÅÅ', u'ź':u'źŹ', u'ż':u'żŻ' + } + def repl(m): + l = m.group() + return u"(%s)" % '|'.join(names[l]) + return re.sub(u'[%s]' % (u''.join(names.keys())), repl, query) + +def unicode_re_escape(query): + """ Unicode-friendly version of re.escape """ + return re.sub(r'(?u)(\W)', r'\\\1', query) + +def _word_starts_with(name, prefix): + """returns a Q object getting models having `name` contain a word + starting with `prefix` + + We define word characters as alphanumeric and underscore, like in JS. + + Works for MySQL, PostgreSQL, Oracle. + For SQLite, _sqlite* version is substituted for this. + """ + kwargs = {} + + prefix = _no_diacritics_regexp(unicode_re_escape(prefix)) + # can't use [[:<:]] (word start), + # but we want both `xy` and `(xy` to catch `(xyz)` + kwargs['%s__iregex' % name] = u"(^|[^[:alnum:]_])%s" % prefix + + return Q(**kwargs) + + +def _word_starts_with_regexp(prefix): + prefix = _no_diacritics_regexp(unicode_re_escape(prefix)) + return ur"(^|(?<=[^\wÄ ÄÄÅÅóÅźżÄÄÄÅÅÃÅŹŻ]))%s" % prefix + + +def _sqlite_word_starts_with(name, prefix): + """ version of _word_starts_with for SQLite + + SQLite in Django uses Python re module + """ + kwargs = {} + kwargs['%s__iregex' % name] = _word_starts_with_regexp(prefix) + return Q(**kwargs) + + +if hasattr(settings, 'DATABASES'): + if settings.DATABASES['default']['ENGINE'] == 'django.db.backends.sqlite3': + _word_starts_with = _sqlite_word_starts_with +elif settings.DATABASE_ENGINE == 'sqlite3': + _word_starts_with = _sqlite_word_starts_with + + +class App(): + def __init__(self, name, view): + self.name = name + self._view = view + self.lower = name.lower() + self.category = 'application' + def view(self): + return reverse(*self._view) + +_apps = ( + App(u'LeÅmianator', (u'lesmianator', )), + ) + + +def _tags_starting_with(prefix, user=None): + prefix = prefix.lower() + # PD counter + book_stubs = pdcounter_models.BookStub.objects.filter(_word_starts_with('title', prefix)) + authors = pdcounter_models.Author.objects.filter(_word_starts_with('name', prefix)) + + books = models.Book.objects.filter(_word_starts_with('title', prefix)) + tags = models.Tag.objects.filter(_word_starts_with('name', prefix)) + if user and user.is_authenticated(): + tags = tags.filter(~Q(category='set') | Q(user=user)) + else: + tags = tags.exclude(category='set') + + prefix_regexp = re.compile(_word_starts_with_regexp(prefix)) + return list(books) + list(tags) + [app for app in _apps if prefix_regexp.search(app.lower)] + list(book_stubs) + list(authors) + + +def _get_result_link(match, tag_list): + if isinstance(match, models.Tag): + return reverse('catalogue.views.tagged_object_list', + kwargs={'tags': '/'.join(tag.url_chunk for tag in tag_list + [match])} + ) + elif isinstance(match, App): + return match.view() + else: + return match.get_absolute_url() + + +def _get_result_type(match): + if isinstance(match, models.Book) or isinstance(match, pdcounter_models.BookStub): + match_type = 'book' + else: + match_type = match.category + return match_type + + +def books_starting_with(prefix): + prefix = prefix.lower() + return models.Book.objects.filter(_word_starts_with('title', prefix)) + + +def find_best_matches(query, user=None): + """ Finds a models.Book, Tag, models.BookStub or Author best matching a query. + + Returns a with: + - zero elements when nothing is found, + - one element when a best result is found, + - more then one element on multiple exact matches + + Raises a ValueError on too short a query. + """ + + query = query.lower() + if len(query) < 2: + raise ValueError("query must have at least two characters") + + result = tuple(_tags_starting_with(query, user)) + # remove pdcounter stuff + book_titles = set(match.pretty_title().lower() for match in result + if isinstance(match, models.Book)) + authors = set(match.name.lower() for match in result + if isinstance(match, models.Tag) and match.category == 'author') + result = tuple(res for res in result if not ( + (isinstance(res, pdcounter_models.BookStub) and res.pretty_title().lower() in book_titles) + or (isinstance(res, pdcounter_models.Author) and res.name.lower() in authors) + )) + + exact_matches = tuple(res for res in result if res.name.lower() == query) + if exact_matches: + return exact_matches + else: + return tuple(result)[:1] + + +def search(request): + tags = request.GET.get('tags', '') + prefix = request.GET.get('q', '') + + try: + tag_list = models.Tag.get_tag_list(tags) + except: + tag_list = [] + + try: + result = find_best_matches(prefix, request.user) + except ValueError: + return render_to_response('catalogue/search_too_short.html', {'tags':tag_list, 'prefix':prefix}, + context_instance=RequestContext(request)) + + if len(result) == 1: + return HttpResponseRedirect(_get_result_link(result[0], tag_list)) + elif len(result) > 1: + return render_to_response('catalogue/search_multiple_hits.html', + {'tags':tag_list, 'prefix':prefix, 'results':((x, _get_result_link(x, tag_list), _get_result_type(x)) for x in result)}, + context_instance=RequestContext(request)) + else: + form = PublishingSuggestForm(initial={"books": prefix + ", "}) + return render_to_response('catalogue/search_no_hits.html', + {'tags':tag_list, 'prefix':prefix, "pubsuggest_form": form}, + context_instance=RequestContext(request)) + + +def tags_starting_with(request): + prefix = request.GET.get('q', '') + # Prefix must have at least 2 characters + if len(prefix) < 2: + return HttpResponse('') + tags_list = [] + result = "" + for tag in _tags_starting_with(prefix, request.user): + if not tag.name in tags_list: + result += "\n" + tag.name + tags_list.append(tag.name) + return HttpResponse(result) + +def json_tags_starting_with(request, callback=None): + # Callback for JSONP + prefix = request.GET.get('q', '') + callback = request.GET.get('callback', '') + # Prefix must have at least 2 characters + if len(prefix) < 2: + return HttpResponse('') + tags_list = [] + for tag in _tags_starting_with(prefix, request.user): + if not tag.name in tags_list: + tags_list.append(tag.name) + if request.GET.get('mozhint', ''): + result = [prefix, tags_list] + else: + result = {"matches": tags_list} + response = JsonResponse(result, safe=False) + if callback: + response.content = callback + "(" + response.content + ");" + return response + + +# ========= +# = Admin = +# ========= +@login_required +@staff_required +def import_book(request): + """docstring for import_book""" + book_import_form = forms.BookImportForm(request.POST, request.FILES) + if book_import_form.is_valid(): + try: + book_import_form.save() + except: + import sys + import pprint + import traceback + info = sys.exc_info() + exception = pprint.pformat(info[1]) + tb = '\n'.join(traceback.format_tb(info[2])) + return HttpResponse(_("An error occurred: %(exception)s\n\n%(tb)s") % {'exception':exception, 'tb':tb}, mimetype='text/plain') + return HttpResponse(_("Book imported successfully")) + else: + return HttpResponse(_("Error importing file: %r") % book_import_form.errors) + + +# info views for API + +def book_info(request, id, lang='pl'): + book = get_object_or_404(models.Book, id=id) + # set language by hand + translation.activate(lang) + return render_to_response('catalogue/book_info.html', locals(), + context_instance=RequestContext(request)) + + +def tag_info(request, id): + tag = get_object_or_404(models.Tag, id=id) + return HttpResponse(tag.description) + + +def download_zip(request, format, slug=None): + url = None + if format in models.Book.ebook_formats: + url = models.Book.zip_format(format) + elif format in ('mp3', 'ogg') and slug is not None: + book = get_object_or_404(models.Book, slug=slug) + url = book.zip_audiobooks(format) + else: + raise Http404('No format specified for zip package') + return HttpResponseRedirect(urlquote_plus(settings.MEDIA_URL + url, safe='/?=')) + + +class CustomPDFFormView(AjaxableFormView): + form_class = forms.CustomPDFForm + title = ugettext_lazy('Download custom PDF') + submit = ugettext_lazy('Download') + honeypot = True + + def __call__(self, *args, **kwargs): + if settings.NO_CUSTOM_PDF: + raise Http404('Custom PDF is disabled') + return super(CustomPDFFormView, self).__call__(*args, **kwargs) + + def form_args(self, request, obj): + """Override to parse view args and give additional args to the form.""" + return (obj,), {} + + def get_object(self, request, slug, *args, **kwargs): + return get_object_or_404(models.Book, slug=slug) + + def context_description(self, request, obj): + return obj.pretty_title() + + +#### +# Includes +#### + + +@ssi_included +def book_mini(request, pk, with_link=True): + book = get_object_or_404(models.Book, pk=pk) + author_str = ", ".join(tag.name + for tag in book.tags.filter(category='author')) + return render(request, 'catalogue/book_mini_box.html', { + 'book': book, + 'author_str': author_str, + 'with_link': with_link, + 'show_lang': book.language_code() != settings.LANGUAGE_CODE, + }) + + +@ssi_included(get_ssi_vars=lambda pk: (lambda ipk: ( + ('ssify.get_csrf_token',), + ('social_tags.likes_book', (ipk,)), + ('social_tags.book_shelf_tags', (ipk,)), + ))(ssi_expect(pk, int))) +def book_short(request, pk): + book = get_object_or_404(models.Book, pk=pk) + stage_note, stage_note_url = book.stage_note() + + return render(request, 'catalogue/book_short.html', { + 'book': book, + 'has_audio': book.has_media('mp3'), + 'main_link': book.get_absolute_url(), + 'parents': book.parents(), + 'tags': split_tags(book.tags.exclude(category__in=('set', 'theme'))), + 'show_lang': book.language_code() != settings.LANGUAGE_CODE, + 'stage_note': stage_note, + 'stage_note_url': stage_note_url, + }) + + +@ssi_included(get_ssi_vars=lambda pk: book_short.get_ssi_vars(pk) + + (lambda ipk: ( + ('social_tags.choose_cite', [ipk]), + ('catalogue_tags.choose_fragment', [ipk], { + 'unless': V('social_tags.choose_cite', [ipk])}), + ))(ssi_expect(pk, int))) +def book_wide(request, pk): + book = get_object_or_404(models.Book, pk=pk) + stage_note, stage_note_url = book.stage_note() + extra_info = book.extra_info + + return render(request, 'catalogue/book_wide.html', { + 'book': book, + 'has_audio': book.has_media('mp3'), + 'parents': book.parents(), + 'tags': split_tags(book.tags.exclude(category__in=('set', 'theme'))), + 'show_lang': book.language_code() != settings.LANGUAGE_CODE, + 'stage_note': stage_note, + 'stage_note_url': stage_note_url, + + 'main_link': reverse('book_text', args=[book.slug]) if book.html_file else None, + 'extra_info': extra_info, + 'hide_about': extra_info.get('about', '').startswith('http://wiki.wolnepodreczniki.pl'), + 'themes': book.related_themes(), + }) + + +@ssi_included +def fragment_short(request, pk): + fragment = get_object_or_404(models.Fragment, pk=pk) + return render(request, 'catalogue/fragment_short.html', + {'fragment': fragment}) + + +@ssi_included +def fragment_promo(request, pk): + fragment = get_object_or_404(models.Fragment, pk=pk) + return render(request, 'catalogue/fragment_promo.html', { + 'fragment': fragment + }) diff --git a/src/chunks/__init__.py b/src/chunks/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/chunks/admin.py b/src/chunks/admin.py new file mode 100644 index 000000000..61e9f8757 --- /dev/null +++ b/src/chunks/admin.py @@ -0,0 +1,17 @@ +from django.contrib import admin + +from chunks.models import Chunk, Attachment + + +class ChunkAdmin(admin.ModelAdmin): + list_display = ('key', 'description',) + search_fields = ('key', 'content',) + +admin.site.register(Chunk, ChunkAdmin) + + +class AttachmentAdmin(admin.ModelAdmin): + list_display = ('key',) + search_fields = ('key',) + +admin.site.register(Attachment, AttachmentAdmin) diff --git a/src/chunks/locale/de/LC_MESSAGES/django.mo b/src/chunks/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..b9a35c717 Binary files /dev/null and b/src/chunks/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/de/LC_MESSAGES/django.po b/src/chunks/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..8451d6319 --- /dev/null +++ b/src/chunks/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,74 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-04-11 22:56+0100\n" +"Last-Translator: Kamil <kjaklukowski@gmail.com>\n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "Schlüssel" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "Die einzigartige Bezeichnung für dieses Chunk von Inhalten" + +#: models.py:12 +msgid "description" +msgstr "Beschreibung" + +#: models.py:13 +msgid "content" +msgstr "Inhalt" + +#: models.py:17 +msgid "chunk" +msgstr "Chunk" + +#: models.py:18 +msgid "chunks" +msgstr "Chunks" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "Die einzigartige Bezeichnung für diese Beilage" + +#: models.py:38 +msgid "attachment" +msgstr "Beilage" + +#: models.py:38 +msgid "attachments" +msgstr "Beilagen" + +#~ msgid "title" +#~ msgstr "Titel" + +#~ msgid "slug" +#~ msgstr "Slug" + +#~ msgid "file" +#~ msgstr "Datei" + +#~ msgid "author" +#~ msgstr "Autor" + +#~ msgid "slideshare ID" +#~ msgstr "Dia-ID" + +#~ msgid "HTML" +#~ msgstr "HTML" + +#~ msgid "document" +#~ msgstr "Dokument" diff --git a/src/chunks/locale/en/LC_MESSAGES/django.mo b/src/chunks/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..948c8ead2 Binary files /dev/null and b/src/chunks/locale/en/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/en/LC_MESSAGES/django.po b/src/chunks/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..fa9b726c4 --- /dev/null +++ b/src/chunks/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 20:05+0100\n" +"Last-Translator: xxx <xxx>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "key" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "A unique name for this piece of content" + +#: models.py:12 +msgid "description" +msgstr "description" + +#: models.py:13 +msgid "content" +msgstr "content" + +#: models.py:17 +msgid "chunk" +msgstr "piece" + +#: models.py:18 +msgid "chunks" +msgstr "pieces" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "A unique name for this attachment" + +#: models.py:38 +msgid "attachment" +msgstr "attachment" + +#: models.py:38 +msgid "attachments" +msgstr "attachments" diff --git a/src/chunks/locale/es/LC_MESSAGES/django.mo b/src/chunks/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..f476287e0 Binary files /dev/null and b/src/chunks/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/es/LC_MESSAGES/django.po b/src/chunks/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..f5c97195c --- /dev/null +++ b/src/chunks/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-18 13:02+0100\n" +"Last-Translator: Anna Jopp <aniajopp@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "clave" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "El nombre único para este elemento del contenido" + +#: models.py:12 +msgid "description" +msgstr "descripción" + +#: models.py:13 +msgid "content" +msgstr "contenido" + +#: models.py:17 +msgid "chunk" +msgstr "elemento" + +#: models.py:18 +msgid "chunks" +msgstr "elementos" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "El nombre único para este archivo adjunto" + +#: models.py:38 +msgid "attachment" +msgstr "archivo adjunto" + +#: models.py:38 +msgid "attachments" +msgstr "archivos adjuntos" diff --git a/src/chunks/locale/fr/LC_MESSAGES/django.mo b/src/chunks/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..2ededce27 Binary files /dev/null and b/src/chunks/locale/fr/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/fr/LC_MESSAGES/django.po b/src/chunks/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..21730632e --- /dev/null +++ b/src/chunks/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-22 20:52+0100\n" +"Last-Translator: Ela Janota <amarillis5@wp.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "clé" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "Un nom unique pour ce fragment du contenu" + +#: models.py:12 +msgid "description" +msgstr "description" + +#: models.py:13 +msgid "content" +msgstr "contenu" + +#: models.py:17 +msgid "chunk" +msgstr "fragment" + +#: models.py:18 +msgid "chunks" +msgstr "fragments" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "Un nom unique pour cette pièce jointe" + +#: models.py:38 +msgid "attachment" +msgstr "pièce jointe" + +#: models.py:38 +msgid "attachments" +msgstr "pièces jointes" diff --git a/src/chunks/locale/it/LC_MESSAGES/django.mo b/src/chunks/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..1f02d2425 Binary files /dev/null and b/src/chunks/locale/it/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/it/LC_MESSAGES/django.po b/src/chunks/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..1e17a5fb3 --- /dev/null +++ b/src/chunks/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,54 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-21 16:52+0100\n" +"Last-Translator: xxx\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "Chiave" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "un nome unico per questo allegato" + +#: models.py:12 +msgid "description" +msgstr "descrizione" + +#: models.py:13 +msgid "content" +msgstr "contenuto" + +#: models.py:17 +msgid "chunk" +msgstr "blocco" + +#: models.py:18 +msgid "chunks" +msgstr "blocchi" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "Un nome unico per questo allegato" + +#: models.py:38 +msgid "attachment" +msgstr "allegato" + +#: models.py:38 +msgid "attachments" +msgstr "allegati" diff --git a/src/chunks/locale/jp/LC_MESSAGES/django.mo b/src/chunks/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c9739db34 Binary files /dev/null and b/src/chunks/locale/jp/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/jp/LC_MESSAGES/django.po b/src/chunks/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 000000000..ceae77c94 --- /dev/null +++ b/src/chunks/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,54 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "" + +#: models.py:12 +msgid "description" +msgstr "" + +#: models.py:13 +msgid "content" +msgstr "" + +#: models.py:17 +msgid "chunk" +msgstr "" + +#: models.py:18 +msgid "chunks" +msgstr "" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "" + +#: models.py:38 +msgid "attachment" +msgstr "" + +#: models.py:38 +msgid "attachments" +msgstr "" diff --git a/src/chunks/locale/lt/LC_MESSAGES/django.mo b/src/chunks/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..582f7d416 Binary files /dev/null and b/src/chunks/locale/lt/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/lt/LC_MESSAGES/django.po b/src/chunks/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..5499a2129 --- /dev/null +++ b/src/chunks/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,54 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-01 16:13+0100\n" +"Last-Translator: Aneta\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "raktas" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "Unikalus Å¡io turinio gabalo pavadnimas" + +#: models.py:12 +msgid "description" +msgstr "apraÅ¡ymas" + +#: models.py:13 +msgid "content" +msgstr "turinys" + +#: models.py:17 +msgid "chunk" +msgstr "gabalas" + +#: models.py:18 +msgid "chunks" +msgstr "gabalai" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "Unikalus Å¡io priedo pavadnimas" + +#: models.py:38 +msgid "attachment" +msgstr "priedas" + +#: models.py:38 +msgid "attachments" +msgstr "priedai" diff --git a/src/chunks/locale/pl/LC_MESSAGES/django.mo b/src/chunks/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..54db07239 Binary files /dev/null and b/src/chunks/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/pl/LC_MESSAGES/django.po b/src/chunks/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..176e57df5 --- /dev/null +++ b/src/chunks/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,54 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2010-05-19 16:19\n" +"Last-Translator: <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "klucz" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "Unikalna nazwa dla tego kawaÅka treÅci" + +#: models.py:12 +msgid "description" +msgstr "opis" + +#: models.py:13 +msgid "content" +msgstr "zawartoÅÄ" + +#: models.py:17 +msgid "chunk" +msgstr "kawaÅek" + +#: models.py:18 +msgid "chunks" +msgstr "kawaÅki" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "Unikalna nazwa dla tego zaÅÄ cznika" + +#: models.py:38 +msgid "attachment" +msgstr "zaÅÄ cznik" + +#: models.py:38 +msgid "attachments" +msgstr "zaÅÄ czniki" diff --git a/src/chunks/locale/ru/LC_MESSAGES/django.mo b/src/chunks/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..ebf2dad2b Binary files /dev/null and b/src/chunks/locale/ru/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/ru/LC_MESSAGES/django.po b/src/chunks/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..5ba98838b --- /dev/null +++ b/src/chunks/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 22:10+0100\n" +"Last-Translator: xxx <xxx>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "клÑÑ" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "УникалÑное Ð¸Ð¼Ñ Ð´Ð»Ñ ÑÑого ÑÑагменÑа ÑодеÑжаниÑ" + +#: models.py:12 +msgid "description" +msgstr "опиÑание" + +#: models.py:13 +msgid "content" +msgstr "ÑодеÑжание" + +#: models.py:17 +msgid "chunk" +msgstr "ÑÑагменÑ" + +#: models.py:18 +msgid "chunks" +msgstr "ÑÑагменÑÑ" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "УникалÑное Ð¸Ð¼Ñ Ð´Ð»Ñ ÑÑого пÑиложениÑ" + +#: models.py:38 +msgid "attachment" +msgstr "пÑиложение" + +#: models.py:38 +msgid "attachments" +msgstr "пÑиложениÑ" diff --git a/src/chunks/locale/uk/LC_MESSAGES/django.mo b/src/chunks/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..60dbea6a6 Binary files /dev/null and b/src/chunks/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/chunks/locale/uk/LC_MESSAGES/django.po b/src/chunks/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..620d87341 --- /dev/null +++ b/src/chunks/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 17:29+0100\n" +"Last-Translator: xxx <xxx>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 models.py:33 +msgid "key" +msgstr "клÑÑ" + +#: models.py:11 +msgid "A unique name for this chunk of content" +msgstr "УнÑкалÑна назва Ð´Ð»Ñ ÑÑÑÑ ÑаÑÑини змÑÑÑÑ" + +#: models.py:12 +msgid "description" +msgstr "опиÑ" + +#: models.py:13 +msgid "content" +msgstr "змÑÑÑ" + +#: models.py:17 +msgid "chunk" +msgstr "ÑаÑÑина" + +#: models.py:18 +msgid "chunks" +msgstr "ÑаÑÑини" + +#: models.py:33 +msgid "A unique name for this attachment" +msgstr "УнÑкалÑна назва Ð´Ð»Ñ ÑÑого додаÑкÑ" + +#: models.py:38 +msgid "attachment" +msgstr "додаÑок" + +#: models.py:38 +msgid "attachments" +msgstr "додаÑки" diff --git a/src/chunks/migrations/0001_initial.py b/src/chunks/migrations/0001_initial.py new file mode 100644 index 000000000..878e4fbfb --- /dev/null +++ b/src/chunks/migrations/0001_initial.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Attachment', + fields=[ + ('key', models.CharField(help_text='A unique name for this attachment', max_length=255, serialize=False, verbose_name='key', primary_key=True)), + ('attachment', models.FileField(upload_to=b'chunks/attachment')), + ], + options={ + 'ordering': ('key',), + 'verbose_name': 'attachment', + 'verbose_name_plural': 'attachments', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Chunk', + fields=[ + ('key', models.CharField(help_text='A unique name for this piece of content', max_length=255, serialize=False, verbose_name='key', primary_key=True)), + ('description', models.CharField(max_length=255, null=True, verbose_name='Description', blank=True)), + ('content', models.TextField(null=True, verbose_name='content', blank=True)), + ('content_de', models.TextField(null=True, verbose_name='content', blank=True)), + ('content_en', models.TextField(null=True, verbose_name='content', blank=True)), + ('content_es', models.TextField(null=True, verbose_name='content', blank=True)), + ('content_fr', models.TextField(null=True, verbose_name='content', blank=True)), + ('content_it', models.TextField(null=True, verbose_name='content', blank=True)), + ('content_lt', models.TextField(null=True, verbose_name='content', blank=True)), + ('content_pl', models.TextField(null=True, verbose_name='content', blank=True)), + ('content_ru', models.TextField(null=True, verbose_name='content', blank=True)), + ('content_uk', models.TextField(null=True, verbose_name='content', blank=True)), + ], + options={ + 'ordering': ('key',), + 'verbose_name': 'piece', + 'verbose_name_plural': 'pieces', + }, + bases=(models.Model,), + ), + ] diff --git a/src/chunks/migrations/0002_auto_20140911_1253.py b/src/chunks/migrations/0002_auto_20140911_1253.py new file mode 100644 index 000000000..09d541cd4 --- /dev/null +++ b/src/chunks/migrations/0002_auto_20140911_1253.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +def null_to_blank(apps, schema_editor): + Chunk = apps.get_model("chunks", "Chunk") + Chunk.objects.filter(content=None).update(content='') + Chunk.objects.filter(description=None).update(description='') + + +class Migration(migrations.Migration): + + dependencies = [ + ('chunks', '0001_initial'), + ] + + operations = [ + migrations.RunPython(null_to_blank), + migrations.AlterField( + model_name='chunk', + name='content', + field=models.TextField(verbose_name='content', blank=True), + ), + migrations.AlterField( + model_name='chunk', + name='description', + field=models.CharField(max_length=255, verbose_name='Description', blank=True), + ), + ] diff --git a/src/chunks/migrations/0003_auto_20151221_1225.py b/src/chunks/migrations/0003_auto_20151221_1225.py new file mode 100644 index 000000000..a7d7ca33b --- /dev/null +++ b/src/chunks/migrations/0003_auto_20151221_1225.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('chunks', '0002_auto_20140911_1253'), + ] + + operations = [ + migrations.AlterModelOptions( + name='chunk', + options={'ordering': ('key',), 'verbose_name': 'chunk', 'verbose_name_plural': 'chunks'}, + ), + migrations.AlterField( + model_name='chunk', + name='description', + field=models.CharField(max_length=255, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='chunk', + name='key', + field=models.CharField(help_text='A unique name for this chunk of content', max_length=255, serialize=False, verbose_name='key', primary_key=True), + ), + ] diff --git a/src/chunks/migrations/__init__.py b/src/chunks/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/chunks/models.py b/src/chunks/models.py new file mode 100644 index 000000000..7f5410b24 --- /dev/null +++ b/src/chunks/models.py @@ -0,0 +1,45 @@ +from django.conf import settings +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from ssify import flush_ssi_includes + + +class Chunk(models.Model): + """ + A Chunk is a piece of content associated with a unique key that can be inserted into + any template with the use of a special template tag. + """ + key = models.CharField(_('key'), help_text=_('A unique name for this chunk of content'), primary_key=True, max_length=255) + description = models.CharField(_('description'), blank=True, max_length=255) + content = models.TextField(_('content'), blank=True) + + class Meta: + ordering = ('key',) + verbose_name = _('chunk') + verbose_name_plural = _('chunks') + + def __unicode__(self): + return self.key + + def save(self, *args, **kwargs): + ret = super(Chunk, self).save(*args, **kwargs) + self.flush_includes() + return ret + + def flush_includes(self): + flush_ssi_includes([ + '/chunks/chunk/%s.%s.html' % (self.key, lang) + for lang in [lc for (lc, _ln) in settings.LANGUAGES]]) + + + +class Attachment(models.Model): + key = models.CharField(_('key'), help_text=_('A unique name for this attachment'), primary_key=True, max_length=255) + attachment = models.FileField(upload_to='chunks/attachment') + + class Meta: + ordering = ('key',) + verbose_name, verbose_name_plural = _('attachment'), _('attachments') + + def __unicode__(self): + return self.key diff --git a/src/chunks/translation.py b/src/chunks/translation.py new file mode 100644 index 000000000..46f1c7ac4 --- /dev/null +++ b/src/chunks/translation.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# + +from modeltranslation.translator import translator, TranslationOptions +from chunks.models import Chunk + +class ChunkTranslationOptions(TranslationOptions): + fields = ('content',) + +translator.register(Chunk, ChunkTranslationOptions) diff --git a/src/chunks/urls.py b/src/chunks/urls.py new file mode 100644 index 000000000..005cadd02 --- /dev/null +++ b/src/chunks/urls.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url + +urlpatterns = patterns('chunks.views', + url(r'^chunk/(?P<key>.+)\.(?P<lang>.+)\.html$', 'chunk', name='chunk'), +) diff --git a/src/chunks/views.py b/src/chunks/views.py new file mode 100644 index 000000000..cbcf5bf6c --- /dev/null +++ b/src/chunks/views.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.http import HttpResponse +from ssify import ssi_included +from .models import Chunk + +@ssi_included +def chunk(request, key): + chunk, created = Chunk.objects.get_or_create(key=key) + return HttpResponse(chunk.content) diff --git a/src/dictionary/__init__.py b/src/dictionary/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/dictionary/constants.py b/src/dictionary/constants.py new file mode 100644 index 000000000..e99dc3ff0 --- /dev/null +++ b/src/dictionary/constants.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from __future__ import unicode_literals + +from django.utils.translation import ugettext_lazy as _ + + +FN_TYPES = { + 'pa': _("author's footnotes"), + 'pe': _("Wolne Lektury editorial footnotes"), + 'pr': _("source editorial footnotes"), + 'pt': _("translator's footnotes"), +} diff --git a/src/dictionary/locale/pl/LC_MESSAGES/django.mo b/src/dictionary/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c95d7b4e5 Binary files /dev/null and b/src/dictionary/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/dictionary/locale/pl/LC_MESSAGES/django.po b/src/dictionary/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..1cb8844e8 --- /dev/null +++ b/src/dictionary/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,79 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: WolneLektury-dictionary\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-10-24 11:58+0200\n" +"PO-Revision-Date: 2014-10-24 11:58+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 1.5.4\n" + +#: constants.py:11 +msgid "author's footnotes" +msgstr "przypisy autorskie" + +#: constants.py:12 +msgid "Wolne Lektury editorial footnotes" +msgstr "przypisy redaktorów Wolnych Lektur" + +#: constants.py:13 +msgid "source editorial footnotes" +msgstr "przypisy redakcji źródÅa" + +#: constants.py:14 +msgid "translator's footnotes" +msgstr "przypisy tÅumacza" + +#: templates/dictionary/note_list.html:8 +#: templates/dictionary/note_list.html:12 +msgid "Footnotes" +msgstr "Przypisy" + +#: templates/dictionary/note_list.html:17 +msgid "By first letter" +msgstr "Pierwsza litera" + +#: templates/dictionary/note_list.html:19 +#: templates/dictionary/note_list.html:21 +#: templates/dictionary/note_list.html:37 +#: templates/dictionary/note_list.html:39 +#: templates/dictionary/note_list.html:56 +#: templates/dictionary/note_list.html:58 +#: templates/dictionary/note_list.html:74 +#: templates/dictionary/note_list.html:76 +msgid "all" +msgstr "wszystkie" + +#: templates/dictionary/note_list.html:35 +msgid "By type" +msgstr "WedÅug typu" + +#: templates/dictionary/note_list.html:54 +msgid "By qualifier" +msgstr "WedÅug kwalifikatora" + +#: templates/dictionary/note_list.html:72 +msgid "By language" +msgstr "WedÅug jÄzyka" + +#: templates/dictionary/note_list.html:92 +#, python-format +msgid "%(c)s footnote found" +msgid_plural "%(c)s footnotes found" +msgstr[0] "Znaleziono %(c)s przypis." +msgstr[1] "Znaleziono %(c)s przypisy." +msgstr[2] "Znaleziono %(c)s przypisów." + +#~ msgid "Footnotes on WolneLektury.pl" +#~ msgstr "Przypisy w WolneLektury.pl" diff --git a/src/dictionary/migrations/0001_initial.py b/src/dictionary/migrations/0001_initial.py new file mode 100644 index 000000000..1908a840a --- /dev/null +++ b/src/dictionary/migrations/0001_initial.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Note', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('anchor', models.CharField(max_length=64)), + ('html', models.TextField()), + ('sort_key', models.CharField(max_length=128, db_index=True)), + ('book', models.ForeignKey(to='catalogue.Book')), + ], + options={ + 'ordering': ['sort_key'], + }, + bases=(models.Model,), + ), + ] diff --git a/src/dictionary/migrations/0002_auto_20141006_1422.py b/src/dictionary/migrations/0002_auto_20141006_1422.py new file mode 100644 index 000000000..a9bad32b9 --- /dev/null +++ b/src/dictionary/migrations/0002_auto_20141006_1422.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0004_remove_booktags_count_related_info'), + ('dictionary', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='NoteSource', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('anchor', models.CharField(max_length=64)), + ('book', models.ForeignKey(to='catalogue.Book')), + ('note', models.ForeignKey(to='dictionary.Note')), + ], + options={ + 'ordering': ['book'], + }, + bases=(models.Model,), + ), + migrations.RemoveField( + model_name='note', + name='anchor', + ), + migrations.RemoveField( + model_name='note', + name='book', + ), + migrations.AddField( + model_name='note', + name='fn_type', + field=models.CharField(default='', max_length=10, db_index=True), + preserve_default=False, + ), + migrations.AddField( + model_name='note', + name='language', + field=models.CharField(default='', max_length=10, db_index=True), + preserve_default=False, + ), + migrations.AddField( + model_name='note', + name='qualifier', + field=models.CharField(default='', max_length=128, db_index=True, blank=True), + preserve_default=False, + ), + ] diff --git a/src/dictionary/migrations/0003_auto_20141023_1445.py b/src/dictionary/migrations/0003_auto_20141023_1445.py new file mode 100644 index 000000000..ee4beeebe --- /dev/null +++ b/src/dictionary/migrations/0003_auto_20141023_1445.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('dictionary', '0002_auto_20141006_1422'), + ] + + operations = [ + migrations.CreateModel( + name='Qualifier', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('qualifier', models.CharField(unique=True, max_length=128, db_index=True)), + ('name', models.CharField(max_length=255)), + ], + options={ + 'ordering': ['qualifier'], + }, + bases=(models.Model,), + ), + migrations.RemoveField( + model_name='note', + name='qualifier', + ), + migrations.AddField( + model_name='note', + name='qualifiers', + field=models.ManyToManyField(to='dictionary.Qualifier', null=True), + preserve_default=True, + ), + ] diff --git a/src/dictionary/migrations/0004_auto_20151221_1225.py b/src/dictionary/migrations/0004_auto_20151221_1225.py new file mode 100644 index 000000000..ee7252ce0 --- /dev/null +++ b/src/dictionary/migrations/0004_auto_20151221_1225.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dictionary', '0003_auto_20141023_1445'), + ] + + operations = [ + migrations.AlterField( + model_name='note', + name='qualifiers', + field=models.ManyToManyField(to='dictionary.Qualifier'), + ), + ] diff --git a/src/dictionary/migrations/__init__.py b/src/dictionary/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/dictionary/models.py b/src/dictionary/models.py new file mode 100644 index 000000000..cc2b0ac51 --- /dev/null +++ b/src/dictionary/models.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.db import models, transaction +from celery.task import task +from sortify import sortify +from celery.utils.log import get_task_logger + +task_logger = get_task_logger(__name__) + +from catalogue.models import Book + + +class Qualifier(models.Model): + qualifier = models.CharField(max_length=128, db_index=True, unique=True) + name = models.CharField(max_length=255) + + class Meta: + ordering = ['qualifier'] + + def __unicode__(self): + return self.name or self.qualifier + + +class Note(models.Model): + """Represents a single annotation from a book.""" + html = models.TextField() + sort_key = models.CharField(max_length=128, db_index=True) + fn_type = models.CharField(max_length=10, db_index=True) + qualifiers = models.ManyToManyField(Qualifier) + language = models.CharField(max_length=10, db_index=True) + + class Meta: + ordering = ['sort_key'] + + +class NoteSource(models.Model): + """Represents a single annotation from a book.""" + note = models.ForeignKey(Note) + book = models.ForeignKey(Book) + anchor = models.CharField(max_length=64) + + class Meta: + ordering = ['book'] + + +@task(ignore_result=True) +def build_notes(book): + task_logger.info(book.slug) + with transaction.atomic(): + book.notesource_set.all().delete() + if book.html_file: + from librarian import html + from librarian.fn_qualifiers import FN_QUALIFIERS + + for anchor, fn_type, qualifiers, text_str, html_str in \ + html.extract_annotations(book.html_file.path): + sort_key = sortify(text_str).strip()[:128] + + language = book.language + note = None + notes = Note.objects.filter(sort_key=sort_key, + fn_type=fn_type, + language=language, html=html_str) + if notes: + note = notes[0] + else: + note = Note.objects.create( + sort_key=sort_key, + html=html_str, + fn_type=fn_type, + language=language + ) + + qualifier_objects = [] + for qualifier in qualifiers: + obj, created = Qualifier.objects.get_or_create( + qualifier=qualifier, defaults={ + 'name': FN_QUALIFIERS.get(qualifier, '') + }) + qualifier_objects.append(obj) + note.qualifiers = qualifier_objects + note.notesource_set.create(book=book, anchor=anchor) + + Note.objects.filter(notesource=None).delete() + + +def notes_from_book(sender, instance, **kwargs): + build_notes.delay(instance) +Book.html_built.connect(notes_from_book) diff --git a/src/dictionary/templates/dictionary/note_list.html b/src/dictionary/templates/dictionary/note_list.html new file mode 100755 index 000000000..9428655b0 --- /dev/null +++ b/src/dictionary/templates/dictionary/note_list.html @@ -0,0 +1,116 @@ +{% extends "base.html" %} +{% load i18n pagination_tags %} +{% load set_get from set_get %} + + +{% block bodyid %}footnotes{% endblock %} + +{% block titleextra %}{% trans "Footnotes" %}{% endblock %} + + +{% block body %} + <h1>{% trans "Footnotes" %}</h1> + +<div class="normal-text"> + +<p> +{% trans "By first letter" %}: +{% if letter %} + <a href='?{% set_get "page" "ltr" %}'>{% trans "all" %}</a> +{% else %} + <strong>{% trans "all" %}</strong> +{% endif %} + +{% for let in letters %} + | + {% if let == letter %} + <strong>{{ let|upper }}</strong> + {% else %} + <a href='?{% set_get "page" ltr=let %}'>{{ let|upper }}</a> + {% endif %} +{% endfor %} +</p> + +<p> +{% trans "By type" %}: +{% if fn_type %} + <a href='?{% set_get "page" "type" %}'>{% trans "all" %}</a> +{% else %} + <strong>{% trans "all" %}</strong> +{% endif %} + +{% for fnt, fnt_name in fn_types %} + | + {% if fnt == fn_type %} + <strong>{{ fnt_name }}</strong> + {% else %} + <a href='?{% set_get "page" type=fnt %}'>{{ fnt_name }}</a> + {% endif %} +{% endfor %} +</p> + + +<p> +{% trans "By qualifier" %}: +{% if qualifier %} + <a href='?{% set_get "page" "qual" %}'>{% trans "all" %}</a> +{% else %} + <strong>{% trans "all" %}</strong> +{% endif %} + +{% for qual in qualifiers %} + | + {% if qual == qualifier %} + <strong>{{ qual }}</strong> + {% else %} + <a href='?{% set_get "page" qual=qual.qualifier %}'>{{ qual }}</a> + {% endif %} +{% endfor %} +</p> + +<p> +{% trans "By language" %}: +{% if language %} + <a href='?{% set_get "page" "lang" %}'>{% trans "all" %}</a> +{% else %} + <strong>{% trans "all" %}</strong> +{% endif %} + +{% for lang, lang_name in languages %} + | + {% if lang == language %} + <strong>{{ lang_name }}</strong> + {% else %} + <a href='?{% set_get "page" lang=lang %}'>{{ lang_name }}</a> + {% endif %} +{% endfor %} +</p> + +<hr/> + +<p> +{% blocktrans count object_list.count as c %}{{c}} footnote found{% plural %}{{c}} footnotes found{% endblocktrans %} +</p> + +{% if object_list.exists %} + +{% autopaginate object_list 100 %} +{% paginate %} +{% for obj in object_list %} + <div class='dictionary-note'> + {{ obj.html|safe }} + {% for note_source in obj.notesource_set.all %} + <div class='dictionary-note-source'> + <a href='{% url "book_text" note_source.book.slug %}#{{ note_source.anchor }}'>{{ note_source.book.pretty_title }}</a> + (<a href='{{ note_source.book.extra_info.about }}'>źródÅo na Platformie Redakcyjnej</a>) + </div> + {% endfor %} + </div> +{% endfor %} +{% paginate %} + +{% endif %} + +</div> + +{% endblock %} diff --git a/src/dictionary/templatetags/__init__.py b/src/dictionary/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/dictionary/templatetags/set_get.py b/src/dictionary/templatetags/set_get.py new file mode 100644 index 000000000..9afe3e87f --- /dev/null +++ b/src/dictionary/templatetags/set_get.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import template +from django.utils.http import urlencode + +register = template.Library() + + +@register.simple_tag(takes_context=True) +def set_get(context, *omit, **kwargs): + request = context['request'] + query = request.GET.dict() + for k in omit: + if k in query: + del query[k] + for k, v in kwargs.items(): + query[k] = v + return urlencode(query) diff --git a/src/dictionary/tests.py b/src/dictionary/tests.py new file mode 100755 index 000000000..0c83cf183 --- /dev/null +++ b/src/dictionary/tests.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.core.files.base import ContentFile +from catalogue.test_utils import * +from catalogue.models import Book + + +class DictionaryTests(WLTestCase): + + def setUp(self): + WLTestCase.setUp(self) + self.book_info = BookInfoStub( + author=PersonStub(("Jim",), "Lazy"), + kind="X-Kind", + genre="X-Genre", + epoch="X-Epoch", + **info_args(u"Default Book") + ) + + def test_book_with_footnote(self): + BOOK_TEXT = """<utwor> + <opowiadanie> + <akap><pe><slowo_obce>rose</slowo_obce> --- kind of a flower.</pe></akap> + <akap><pe><slowo_obce>rose</slowo_obce> --- kind of a flower.</pe></akap> + <akap><pe><slowo_obce>rose</slowo_obce> (techn.) --- #FF007F.</pe></akap> + </opowiadanie></utwor> + """ + + book = Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info) + + self.assertEqual( + len(self.client.get('/przypisy/').context['object_list']), + 2, + 'There should be two notes on the note list.') + + self.assertEqual( + len(self.client.get('/przypisy/?ltr=a').context['object_list']), + 0, + 'There should not be a note for the letter A.') + + self.assertEqual( + len(self.client.get('/przypisy/?ltr=r').context['object_list']), + 2, + 'Both notes start with the letter R.') + + self.assertEqual( + len(self.client.get('/przypisy/?qual=techn.').context['object_list']), + 1, + 'There should be a note qualified with \'techn.\' qualifier.') + diff --git a/src/dictionary/urls.py b/src/dictionary/urls.py new file mode 100755 index 000000000..2320f4773 --- /dev/null +++ b/src/dictionary/urls.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url +from dictionary.views import NotesView + +urlpatterns = patterns('dictionary.views', + url(r'^$', NotesView.as_view(), name='dictionary_notes'), +) + diff --git a/src/dictionary/views.py b/src/dictionary/views.py new file mode 100755 index 000000000..69c6bf65c --- /dev/null +++ b/src/dictionary/views.py @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.views.generic.list import ListView +from django.conf import settings +from django.db.models import Count, Q +from catalogue.constants import LANGUAGES_3TO2 +from .constants import FN_TYPES +from .models import Note, Qualifier + + +class NotesView(ListView): + def get_queryset(self): + objects = Note.objects.all() + filters = {} + + try: + self.qualifier = Qualifier.objects.get(qualifier=self.request.GET.get('qual')) + except Qualifier.DoesNotExist: + self.qualifier = None + else: + filters['qualifier'] = Q(qualifiers=self.qualifier) + + self.language = self.request.GET.get('lang') + if self.language: + filters['language'] = Q(language=self.language) + + self.fn_type = self.request.GET.get('type') + if self.fn_type: + filters['fn_type'] = Q(fn_type=self.fn_type) + + self.letter = self.request.GET.get('ltr') + if self.letter == "0-9": + objects = objects.filter(sort_key__regex=r"^[0-9]") + #filters['letter'] = Q(sort_key__regex=r"^[0-9]") + elif self.letter: + objects = objects.filter(sort_key__startswith=self.letter) + #filters['letter'] = Q(sort_key__startswith=self.letter) + + self.letters = ["0-9"] + [chr(a) for a in range(ord('a'), ord('z')+1)] + + nobj = objects + for key, fltr in filters.items(): + if key != 'qualifier': + nobj = nobj.filter(fltr) + self.qualifiers = Qualifier.objects.filter(note__in=nobj).distinct() + + nobj = objects + for key, fltr in filters.items(): + if key != 'language': + nobj = nobj.filter(fltr) + self.languages = nobj.order_by('language').values_list( + 'language', flat=True).distinct() + lang_names = dict(settings.LANGUAGES) + self.languages = [ + (lang, lang_names.get(LANGUAGES_3TO2.get(lang, lang), lang)) + for lang in self.languages] + + nobj = objects + for key, fltr in filters.items(): + if key != 'fn_type': + nobj = nobj.filter(fltr) + self.fn_types = nobj.order_by('fn_type').values_list( + 'fn_type', flat=True).distinct() + self.fn_types = [(fnt, FN_TYPES[fnt]) for fnt in self.fn_types] + + for f in filters.values(): + objects = objects.filter(f) + + return objects + + def get_context_data(self, **kwargs): + context = super(NotesView, self).get_context_data(**kwargs) + context['letters'] = self.letters + context['letter'] = self.letter + context['qualifiers'] = self.qualifiers + context['qualifier'] = self.qualifier + context['languages'] = self.languages + context['language'] = self.language + context['fn_types'] = self.fn_types + context['fn_type'] = self.fn_type + return context diff --git a/src/funding/__init__.py b/src/funding/__init__.py new file mode 100644 index 000000000..9e81e9ec3 --- /dev/null +++ b/src/funding/__init__.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings as settings +from catalogue.utils import AppSettings + + +class Settings(AppSettings): + """Default settings for funding app.""" + DEFAULT_LANGUAGE = u'pl' + DEFAULT_AMOUNT = 20 + MIN_AMOUNT = 1 + DAYS_NEAR = 2 + + +app_settings = Settings('FUNDING') diff --git a/src/funding/admin.py b/src/funding/admin.py new file mode 100644 index 000000000..d70aef66a --- /dev/null +++ b/src/funding/admin.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.utils.translation import ugettext_lazy as _ +from django.contrib import admin +from .models import Offer, Perk, Funding, Spent + + +class OfferAdmin(admin.ModelAdmin): + model = Offer + list_display = ['title', 'author', 'target', 'sum', 'is_win', 'start', 'end'] + search_fields = ['title', 'author'] + readonly_fields = ('cover_img_tag',) + + +class PerkAdmin(admin.ModelAdmin): + model = Perk + search_fields = ['name', 'long_name'] + list_display = ['name', 'long_name', 'price', 'end_date', 'offer'] + list_filter = ['offer'] + + + +class PayedFilter(admin.SimpleListFilter): + title = _('payment complete') + parameter_name = 'payed' + def lookups(self, request, model_admin): + return ( + ('yes', _('Yes')), + ('no', _('No')), + ) + def queryset(self, request, queryset): + if self.value() == 'yes': + return queryset.exclude(payed_at=None) + elif self.value() == 'no': + return queryset.filter(payed_at=None) + +class PerksFilter(admin.SimpleListFilter): + title = _('perks') + parameter_name = 'perks' + def lookups(self, request, model_admin): + return ( + ('yes', _('Yes')), + ('no', _('No')), + ) + def queryset(self, request, queryset): + if self.value() == 'yes': + return queryset.exclude(perks=None) + elif self.value() == 'no': + return queryset.filter(perks=None) + + +class FundingAdmin(admin.ModelAdmin): + model = Funding + list_display = ['payed_at', 'offer', 'amount', 'name', 'email', 'perk_names'] + search_fields = ['name', 'email', 'offer__title', 'offer__author'] + list_filter = [PayedFilter, 'offer', PerksFilter] + + + +class SpentAdmin(admin.ModelAdmin): + model = Spent + list_display = ['book', 'amount', 'timestamp'] + search_fields = ['book__title'] + + +admin.site.register(Offer, OfferAdmin) +admin.site.register(Perk, PerkAdmin) +admin.site.register(Funding, FundingAdmin) +admin.site.register(Spent, SpentAdmin) diff --git a/src/funding/forms.py b/src/funding/forms.py new file mode 100644 index 000000000..6ed9076dd --- /dev/null +++ b/src/funding/forms.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import forms +from django.utils import formats +from django.utils.translation import ugettext_lazy as _, ugettext, get_language +from .models import Funding +from .widgets import PerksAmountWidget +from . import app_settings + + +class FundingForm(forms.Form): + required_css_class = 'required' + + amount = forms.DecimalField(label=_("Amount"), decimal_places=2, + widget=PerksAmountWidget()) + name = forms.CharField(label=_("Name"), required=False, + help_text=_("Optional name for public list of contributors")) + email = forms.EmailField(label=_("Contact e-mail"), + help_text=_("We'll use it to contact you about the <strong>details needed for your perks</strong>,<br/>" + "and to send you updates about your payment and the fundraiser status (which you can always turn off).<br/>" + "Your e-mail won't be publicised."), required=False) + + def __init__(self, offer, *args, **kwargs): + self.offer = offer + super(FundingForm, self).__init__(*args, **kwargs) + self.fields['amount'].widget.form_instance = self + + def clean_amount(self): + if self.cleaned_data['amount'] < app_settings.MIN_AMOUNT: + min_amount = app_settings.MIN_AMOUNT + if isinstance(min_amount, float): + min_amount = formats.number_format(min_amount, 2) + raise forms.ValidationError( + ugettext("The minimum amount is %(amount)s PLN.") % { + 'amount': min_amount}) + return self.cleaned_data['amount'] + + def clean(self): + if not self.offer.is_current(): + raise forms.ValidationError(ugettext("This offer is out of date.")) + return self.cleaned_data + + def save(self): + funding = Funding.objects.create( + offer=self.offer, + name=self.cleaned_data['name'], + email=self.cleaned_data['email'], + amount=self.cleaned_data['amount'], + language_code=get_language(), + ) + funding.perks = funding.offer.get_perks(funding.amount) + return funding + diff --git a/src/funding/locale/pl/LC_MESSAGES/django.mo b/src/funding/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..e08978e46 Binary files /dev/null and b/src/funding/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/funding/locale/pl/LC_MESSAGES/django.po b/src/funding/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..b1a27359a --- /dev/null +++ b/src/funding/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,656 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-04-16 13:13+0200\n" +"PO-Revision-Date: 2015-04-16 13:13+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 1.5.4\n" + +#: admin.py:26 +msgid "payment complete" +msgstr "pÅatnoÅÄ doszÅa do skutku" + +#: admin.py:30 admin.py:44 +msgid "Yes" +msgstr "Tak" + +#: admin.py:31 admin.py:45 +msgid "No" +msgstr "Nie" + +#: admin.py:40 models.py:216 models.py:234 +msgid "perks" +msgstr "prezenty" + +#: forms.py:16 templates/funding/wlfund.html:27 +msgid "Amount" +msgstr "Kwota" + +#: forms.py:18 +msgid "Name" +msgstr "ImiÄ i nazwisko na listÄ darczyÅców" + +#: forms.py:19 +msgid "Optional name for public list of contributors" +msgstr "" +"Opcjonalnie imiÄ i nazwisko lub pseudonim do publicznej listy darczyÅców." + +#: forms.py:20 +msgid "Contact e-mail" +msgstr "E-mail kontaktowy" + +#: forms.py:21 +msgid "" +"We'll use it to contact you about the <strong>details needed for your perks</" +"strong>,<br/>and to send you updates about your payment and the fundraiser " +"status (which you can always turn off).<br/>Your e-mail won't be publicised." +msgstr "" +"Użyjemy go do kontaktu w sprawie <strong>danych potrzebnych do realizacji " +"prezentów</strong><br/>i do informowania CiÄ o zmianach statusu pÅatnoÅci i " +"zbiórki (z czego zawsze możesz zrezygnowaÄ).<br/>Twój adres e-mail nie " +"bÄdzie upubliczniony." + +#: forms.py:36 +#, python-format +msgid "The minimum amount is %(amount)s PLN." +msgstr "Minimalna kwota wpÅaty to %(amount)s zÅ." + +#: forms.py:42 +msgid "This offer is out of date." +msgstr "Ta zbiórka jest już nieaktywna." + +#: models.py:25 +msgid "author" +msgstr "autor" + +#: models.py:26 +msgid "title" +msgstr "tytuÅ" + +#: models.py:27 +msgid "slug" +msgstr "slug" + +#: models.py:28 +msgid "description" +msgstr "opis" + +#: models.py:29 +msgid "target" +msgstr "kwota docelowa" + +#: models.py:30 +msgid "start" +msgstr "poczÄ tek" + +#: models.py:31 +msgid "end" +msgstr "koniec" + +#: models.py:32 +msgid "redakcja URL" +msgstr "URL na Redakcji" + +#: models.py:34 +msgid "Published book." +msgstr "Opublikowana ksiÄ Å¼ka." + +#: models.py:35 +msgid "Cover" +msgstr "OkÅadka" + +#: models.py:36 +msgid "Poll" +msgstr "Ankieta" + +#: models.py:38 +msgid "Near-end notifications sent" +msgstr "WysÅano powiadomienia przed koÅcem" + +#: models.py:39 +msgid "End notifications sent" +msgstr "WysÅano powiadomienia o zakoÅczeniu" + +#: models.py:43 +msgid "Cover preview" +msgstr "PodglÄ d okÅadki" + +#: models.py:47 models.py:208 models.py:229 +msgid "offer" +msgstr "zbiórka" + +#: models.py:48 +msgid "offers" +msgstr "zbiórki" + +#: models.py:163 +msgid "The fundraiser has ended!" +msgstr "Zbiórka dobiegÅa koÅca!" + +#: models.py:179 +msgid "The fundraiser will end soon!" +msgstr "Zbiórka niedÅugo siÄ zakoÅczy!" + +#: models.py:193 +msgid "The book you helped fund has been published." +msgstr "KsiÄ Å¼ka, którÄ pomogÅeÅ/-aÅ ufundowaÄ, zostaÅa opublikowana." + +#: models.py:209 +msgid "price" +msgstr "cena" + +#: models.py:210 models.py:230 +msgid "name" +msgstr "nazwa" + +#: models.py:211 +msgid "long name" +msgstr "dÅuga nazwa" + +#: models.py:212 +msgid "end date" +msgstr "data koÅcowa" + +#: models.py:215 +msgid "perk" +msgstr "prezent" + +#: models.py:231 +msgid "email" +msgstr "e-mail" + +#: models.py:232 models.py:314 +msgid "amount" +msgstr "kwota" + +#: models.py:233 +msgid "payed at" +msgstr "data wpÅaty" + +#: models.py:236 +msgid "notifications" +msgstr "powiadomienia" + +#: models.py:240 +msgid "funding" +msgstr "wpÅata" + +#: models.py:241 templates/admin/funding/offer/change_form.html:22 +msgid "fundings" +msgstr "wpÅaty" + +#: models.py:315 +msgid "when" +msgstr "kiedy" + +#: models.py:318 +msgid "money spent on a book" +msgstr "pieniÄ dze wydane na ksiÄ Å¼kÄ" + +#: models.py:319 +msgid "money spent on books" +msgstr "pieniÄ dze wydane na ksiÄ Å¼ki" + +#: models.py:345 templates/funding/thanks.html:6 +#: templates/funding/thanks.html.py:15 +msgid "Thank you for your support!" +msgstr "DziÄkujemy za Twoje wsparcie!" + +#: templates/funding/disable_notifications.html:5 +#: templates/funding/no_thanks.html:5 templates/funding/no_thanks.html.py:9 +msgid "Payment failed" +msgstr "PÅatnoÅÄ nie doszÅa do skutku" + +#: templates/funding/disable_notifications.html:9 +#: templates/funding/disable_notifications.html:16 +msgid "Disable notifications" +msgstr "WyÅÄ cz powiadomienia" + +#: templates/funding/disable_notifications.html:14 +#, python-format +msgid "Are you sure you want to disable notifications for address %(e)s?" +msgstr "Czy na pewno chcesz wyÅÄ czyÄ powiadomienia dla adresu %(e)s?" + +#: templates/funding/disable_notifications.html:21 +#, python-format +msgid "Notifications for address %(e)s have been successfully disabled." +msgstr "Powiadomienia dla adresu %(e)s zostaÅy wyÅÄ czone." + +#: templates/funding/disable_notifications.html:27 +#, python-format +msgid "Return to the <a href=\"%(current)s\">current fundraiser</a>." +msgstr "WrÃ³Ä do <a href=\"%(current)s\">aktualnej zbiórki</a>." + +#: templates/funding/email/base.txt:1 +msgid "Hi" +msgstr "CzeÅÄ" + +#: templates/funding/email/base.txt:4 +msgid "" +"Cheers,\n" +"Wolne Lektury team" +msgstr "" +"Pozdrawiamy\n" +"zespóŠWolnych Lektur" + +#: templates/funding/email/base.txt:8 +msgid "If you don't want to receive any more updates, please visit this page:" +msgstr "JeÅli nie chcesz otrzymywaÄ kolejnych powiadomieÅ, odwiedź tÄ stronÄ:" + +#: templates/funding/email/end.txt:6 +msgid "" +"we succesfully collected the full amount needed\n" +"for the book you contributed to:" +msgstr "udaÅo nam siÄ zebraÄ peÅnÄ kwotÄ na ksiÄ Å¼kÄ, którÄ wsparÅeÅ/-aÅ:" + +#: templates/funding/email/end.txt:12 +msgid "" +"We will now digitize it, develop and publish it in the library,\n" +"in various formats, free for everyone." +msgstr "" +"Teraz jÄ zdigitalizujemy, opracujemy i bezpÅatnie udostÄpnimy w bibliotece w " +"wielu formatach." + +#: templates/funding/email/end.txt:15 +msgid "" +"Your name will be included on the list of contributors, irrespectively\n" +"of the amount of your contribution." +msgstr "" +"Zostaniesz umieszczony/-a na liÅcie darczyÅców, niezależnie od wysokoÅci " +"wpÅaty." + +#: templates/funding/email/end.txt:18 +msgid "" +"We will contact you again about details needed\n" +"to deliver your perks." +msgstr "Skontaktujemy siÄ z TobÄ w sprawie prezentów, które wybraÅeÅ/-aÅ." + +#: templates/funding/email/end.txt:21 +#, python-format +msgid "" +"All of the money remaining after this fundraiser (%(r)s PLN)\n" +"will be spent on liberating other books still waiting for publication." +msgstr "" +"Wszystkie dodatkowe pieniÄ dze pozostaÅe z tej zbiórki (%(r)s PLN)\n" +"zostanÄ przeznaczone na uwolnienie innych ksiÄ Å¼ek czekajÄ cych na publikacjÄ." + +#: templates/funding/email/end.txt:23 templates/funding/email/end.txt.py:34 +msgid "You can see how we're spending these funds on this page:" +msgstr "Możesz zobaczyÄ, jak wydajemy te Årodki, na tej stronie:" + +#: templates/funding/email/end.txt:26 +msgid "" +"unfortunately, we were unable to collect the full amount needed\n" +"for the book you contributed to:" +msgstr "" +"niestety, nie udaÅo nam siÄ zebraÄ peÅnej kwoty na ksiÄ Å¼kÄ, którÄ wsparÅeÅ/-" +"aÅ:" + +#: templates/funding/email/end.txt:32 +#, python-format +msgid "" +"All of the money we collected in this fundraiser (%(x)s PLN)\n" +"will be spent on liberating other books still waiting for publication." +msgstr "" +"Wszystkie pieniÄ dze z tej zbiórki (%(x)s PLN)\n" +"zostanÄ przeznaczone na uwolnienie innych ksiÄ Å¼ek czekajÄ cych na publikacjÄ." + +#: templates/funding/email/end.txt:37 templates/funding/email/published.txt:12 +msgid "" +"If you'd like to help liberate another book, or invite your friends\n" +"to do so, we're currently raising money for:" +msgstr "" +"JeÅli chcesz pomóc uwolniÄ kolejnÄ ksiÄ Å¼kÄ, albo zachÄciÄ do tego\n" +"swoich znajomych, to aktualnie zbieramy na:" + +#: templates/funding/email/near.txt:5 +#, python-format +msgid "there's only %(d)s day left until the end of the fundraiser for:\n" +msgid_plural "" +"There're only %(d)s days left until the end of the fundraiser for:\n" +msgstr[0] "zostaÅ jeden dzieÅ do koÅca zbiórki na:\n" +msgstr[1] "zostaÅy %(d)s dni do koÅca zbiórki na:\n" +msgstr[2] "zostaÅo %(d)s dni do koÅca zbiórki na:\n" + +#: templates/funding/email/near.txt:10 +#, python-format +msgid "We managed to collect %(x)s PLN so far." +msgstr "DotÄ d udaÅo nam siÄ zebraÄ %(x)s PLN." + +#: templates/funding/email/near.txt:12 +msgid "" +"The fundraiser is a success already, but the more money\n" +"we collect, the more other books we'll publish." +msgstr "" +"Zbiórka już osiÄ gnÄÅa sukces, ale im wiÄcej pieniÄdzy\n" +"zbierzemy, tym wiÄcej opublikujemy ksiÄ Å¼ek." + +#: templates/funding/email/near.txt:14 +#, python-format +msgid "We still need %(x)s PLN more." +msgstr "Nadal potrzebujemy %(x)s PLN." + +#: templates/funding/email/near.txt:16 +msgid "There's still time to let your friends know about the fundraiser!" +msgstr "Jest jeszcze czas, by poinformowaÄ o zbiórce Twoich znajomych!" + +#: templates/funding/email/published.txt:4 +msgid "we have just published the book you contributed to:" +msgstr "wÅaÅnie opublikowaliÅmy ksiÄ Å¼kÄ, którÄ wsparÅeÅ/-aÅ:" + +#: templates/funding/email/published.txt:9 +msgid "" +"Thanks to you, it is now available for free,\n" +"in various formats, to everyone." +msgstr "" +"DziÄki Tobie jest teraz dostÄpna bezpÅatnie\n" +"dla wszystkich w wielu formatach." + +#: templates/funding/email/thanks.txt:6 +msgid "" +"Thank you for your support - thanks to you we will set another book free." +msgstr "DziÄkujemy za wsparcie - dziÄki Tobie uwolnimy kolejnÄ ksiÄ Å¼kÄ." + +#: templates/funding/email/thanks.txt:8 +msgid "The book will be supplemented with your name as a donor." +msgstr "" +"Twoje imiÄ i nazwisko lub pseudonim zostanÄ dodane do listy darczyÅców przy " +"opublikowanej ksiÄ Å¼ce." + +#: templates/funding/email/thanks.txt:10 +msgid "We will contact you about details needed for your perks." +msgstr "Skontaktujemy siÄ z TobÄ w sprawie prezentów, które wybraÅeÅ/-aÅ." + +#: templates/funding/email/thanks.txt:12 +msgid "" +"We will keep you informed about status changes to this fundraiser\n" +"and the upcoming ones that we plan to launch." +msgstr "" +"BÄdziemy CiÄ informowaÄ o zmianach statusu tej zbiórki\n" +"i o kolejnych, które planujemy rozpoczÄ Ä." + +#: templates/funding/includes/funding.html:13 +msgid "Support!" +msgstr "Wesprzyj!" + +#: templates/funding/includes/funding.html:15 +#: templates/funding/offer_detail.html:40 templates/funding/thanks.html:35 +#: templates/funding/wlfund.html:17 +msgid "Learn more" +msgstr "Dowiedz siÄ wiÄcej" + +#: templates/funding/includes/funding.html:22 +#: templates/funding/includes/funding.html:48 +#: templates/funding/offer_detail.html:35 templates/funding/offer_list.html:31 +msgid "Help free the book!" +msgstr "Pomóż uwolniÄ ksiÄ Å¼kÄ!" + +#: templates/funding/includes/funding.html:30 +msgid "collected" +msgstr "zebrane" + +#: templates/funding/includes/funding.html:33 +msgid "needed" +msgstr "potrzebujemy" + +#: templates/funding/includes/funding.html:36 +msgid "until fundraiser end" +msgstr "do koÅca zbiórki" + +#: templates/funding/includes/fundings.html:15 +msgid "Anonymous" +msgstr "Anonim" + +#: templates/funding/includes/offer_status.html:6 +#, python-format +msgid "" +"The fundraiser\n" +" ends on %(end)s. The full amount has been successfully\n" +" raised, but you can still contribute and help liberate\n" +" more books." +msgstr "" +"Zbiórka koÅczy siÄ %(end)s. PeÅna kwota zostaÅa już zebrana,\n" +" ale ciÄ gle możesz doÅożyÄ siÄ i pomóc uwolniÄ wiÄcej ksiÄ Å¼ek." + +#: templates/funding/includes/offer_status.html:13 +#, python-format +#| msgid "" +#| "W need %(target)s zÅ to digitize it,\n" +#| " compile it and publish for free in multiple formats." +msgid "" +"We need %(target)s zÅ to digitize it,\n" +" compile it and publish for free in multiple formats." +msgstr "" +"Potrzebujemy %(target)s zÅ, by jÄ zdigitalizowaÄ, opracowaÄ i bezpÅatnie " +"udostÄpniÄ w serwisie w wielu formatach." + +#: templates/funding/includes/offer_status.html:17 +#, python-format +#| msgid "" +#| "If we raise enought money before %(end)s we will\n" +#| " publish it and make it available for everyone." +msgid "" +"If we raise enough money before %(end)s we will\n" +" publish it and make it available for everyone." +msgstr "" +"JeÅli do %(end)s uda siÄ zebraÄ peÅnÄ kwotÄ, opublikujemy jÄ i bÄdzie " +"dostÄpna dla wszystkich." + +#: templates/funding/includes/offer_status.html:24 +#: templates/funding/thanks.html:19 +msgid "Full amount was successfully raised!" +msgstr "UdaÅo siÄ zebraÄ peÅnÄ kwotÄ!" + +#: templates/funding/includes/offer_status.html:28 +msgid "The amount needed was not raised." +msgstr "Nie udaÅo siÄ zebraÄ peÅnej kwoty." + +#: templates/funding/includes/offer_status_more.html:8 +msgid "Fundraiser span" +msgstr "Termin zbiórki" + +#: templates/funding/includes/offer_status_more.html:12 +#, python-format +msgid "" +"The book\n" +" <a href=\"%(bu)s\">%(bt)s</a> has been already published." +msgstr "" +"KsiÄ Å¼ka\n" +" <a href=\"%(bu)s\">%(bt)s</a> zostaÅa opublikowana." + +#: templates/funding/includes/offer_status_more.html:16 +#, python-format +msgid "" +"You can follow\n" +" the work on the <a href=\"%(r)s\">Editorial Platform</a>." +msgstr "Możesz ÅledziÄ prace na <a href=\"%(r)s\">Platformie Redakcyjnej</a>." + +#: templates/funding/no_thanks.html:12 +msgid "You're support has not been processed successfully." +msgstr "Twoje wsparcie nie zostaÅo zaksiÄgowane." + +#: templates/funding/no_thanks.html:16 +#, python-format +msgid "" +"Return to the <a href=\"%(current)s\">current fundraiser</a> and try again " +"or try to use a different payment method." +msgstr "" +"WrÃ³Ä do <a href=\"%(current)s\">aktualnej zbiórki</a> i spróbuj ponownie lub " +"użyj innej metody pÅatnoÅci." + +#: templates/funding/offer_detail.html:48 +msgid "Support the publication" +msgstr "Wesprzyj publikacjÄ" + +#: templates/funding/offer_detail.html:54 +msgid "Donate!" +msgstr "WpÅaÄ!" + +#: templates/funding/offer_detail.html:62 templates/funding/thanks.html:41 +msgid "Tell your friends!" +msgstr "Powiedz swoim znajomym!" + +#: templates/funding/offer_detail.html:63 +msgid "Support Wolne Lektury!" +msgstr "Wesprzyj Wolne Lektury!" + +#: templates/funding/offer_detail.html:66 +msgid "See all fundraisers." +msgstr "Zobacz wszystkie zbiórki." + +#: templates/funding/offer_detail.html:71 +msgid "Supporters" +msgstr "WpÅaty" + +#: templates/funding/offer_list.html:7 templates/funding/offer_list.html:12 +msgid "All fundraisers" +msgstr "Wszystkie zbiórki" + +#: templates/funding/offer_list.html:17 +msgid "Current fundraiser:" +msgstr "Aktualna zbiórka:" + +#: templates/funding/offer_list.html:23 +msgid "No fundraiser is currently running." +msgstr "Obecnie nie jest aktywna żadna zbiórka." + +#: templates/funding/offer_list.html:24 templates/funding/offer_list.html:40 +msgid "Previous fundraisers:" +msgstr "Poprzednie zbiórki:" + +#: templates/funding/snippets/any_remaining.html:4 +#, python-format +msgid "" +"Any <a href=\"%(wlfund)s\">remaining funds</a> will be spent\n" +"on other books waiting to be published." +msgstr "" +"Wszelkie <a href=\"%(wlfund)s\">pozostaÅe Årodki</a> przeznaczymy na inne " +"ksiÄ Å¼ki czekajÄ ce na publikacjÄ." + +#: templates/funding/snippets/any_remaining.html:7 +msgid "" +"We will supplement every book with your name as a donor, no matter how\n" +"big your support will be." +msgstr "" +"Zostaniesz umieszczony/-a na liÅcie darczyÅców, niezależnie od wysokoÅci " +"wpÅaty." + +#: templates/funding/thanks.html:10 +msgid "Thank you!" +msgstr "DziÄkujemy!" + +#: templates/funding/thanks.html:16 +msgid "We will contact you if you qualify for perks." +msgstr "Skontaktujemy siÄ z TobÄ w sprawie prezentów, które wybraÅeÅ/-aÅ." + +#: templates/funding/thanks.html:21 +#, python-format +msgid "" +"Your donation will be spent on digitizing, compiling and\n" +" publishing the book %(b)s in multiple formats." +msgstr "" +"WpÅacone przez Ciebie pieniÄ dze przeznaczymy na digitalizacjÄ, opracowanie i " +"udostÄpnienie ksiÄ Å¼ki %(b)s w bibliotece w wielu formatach." + +#: templates/funding/thanks.html:26 +#, python-format +msgid "" +"If the full amount needed is raised,\n" +" your donation will be spent on digitizing, compiling and\n" +" publishing the book %(b)s in multiple formats." +msgstr "" +"JeÅli uda siÄ zebraÄ peÅnÄ kwotÄ, wpÅacone przez Ciebie pieniÄ dze " +"przeznaczymy na digitalizacjÄ, opracowanie i udostÄpnienie ksiÄ Å¼ki %(b)s w " +"bibliotece w wielu formatach." + +#: templates/funding/thanks.html:38 +msgid "Go back to the current fundraiser." +msgstr "WrÃ³Ä do aktualnej zbiórki." + +#: templates/funding/thanks.html:42 +msgid "I support Wolne Lektury." +msgstr "Wspieram Wolne Lektury" + +#: templates/funding/thanks.html:45 +msgid "Vote for a book for the next fundraiser" +msgstr "Pomóż wybraÄ nastÄpnÄ ksiÄ Å¼kÄ, na którÄ bÄdziemy zbieraÄ pieniÄ dze" + +#: templates/funding/widgets/amount.html:13 +msgid "Other amount" +msgstr "Inna kwota" + +#: templates/funding/wlfund.html:4 templates/funding/wlfund.html.py:8 +msgid "Remaining funds" +msgstr "PozostaÅe Årodki" + +#: templates/funding/wlfund.html:11 +#, python-format +msgid "" +"If\n" +"the full amount needed for publishing a book is not raised in time,\n" +"the funds are spent on <a href=\"%(r)s\">other books waiting for\n" +"publication</a>. The same thing happens with any money remaining\n" +"from successful fundraisers." +msgstr "" +"JeÅli nie udaÅo siÄ zebraÄ peÅnej kwoty potrzebnej do opublikowania ksiÄ Å¼ki, " +"Årodki przekazujemy na redakcjÄ <a href=\"%(r)s\">innych utworów " +"oczekujÄ cych na publikacjÄ w serwisie</a>. Na ten cel przekazujemy również " +"nadmiarowe Årodki ze zbiórek ukoÅczonych sukcesem." + +#: templates/funding/wlfund.html:19 +msgid "Spending these remaining funds is recorded in this table." +msgstr "W poniższej tabeli rejestrujemy wydatkowanie tych Årodków." + +#: templates/funding/wlfund.html:25 +msgid "Date" +msgstr "Data" + +#: templates/funding/wlfund.html:26 +msgid "Operation" +msgstr "Rozdysponowanie Årodków" + +#: templates/funding/wlfund.html:28 +msgid "Balance" +msgstr "Bilans" + +#: templates/funding/wlfund.html:35 +msgid "Money spent on publishing the book" +msgstr "PieniÄ dze przeznaczone na opublikowanie ksiÄ Å¼ki" + +#: templates/funding/wlfund.html:44 +msgid "Money remaining from the fundraiser for" +msgstr "PieniÄ dze pozostaÅe ze zbiórki na" + +#: templates/funding/wlfund.html:53 +msgid "There are no previous fundraisers to show yet." +msgstr "Nie ma jeszcze żadnych zakoÅczonych zbiórek." + +#~ msgid "due" +#~ msgstr "data publikacji" + +#~ msgid "When will it be published if the money is raised." +#~ msgstr "" +#~ "Kiedy ksiÄ Å¼ka zostanie opublikowana, jeÅli uda siÄ zebraÄ pieniÄ dze." + +#~ msgid "" +#~ "The fundraiser\n" +#~ " ends on %(end)s. The book will be published by %(due)s." +#~ msgstr "" +#~ "Zbiórka koÅczy siÄ %(end)s. KsiÄ Å¼ka zostanie opublikowana do %(due)s." + +#~ msgid "" +#~ "The book\n" +#~ " will be published by %(due)s." +#~ msgstr "KsiÄ Å¼ka zostanie opublikowana do %(due)s." diff --git a/src/funding/management/__init__.py b/src/funding/management/__init__.py new file mode 100755 index 000000000..e69de29bb diff --git a/src/funding/management/commands/__init__.py b/src/funding/management/commands/__init__.py new file mode 100755 index 000000000..e69de29bb diff --git a/src/funding/management/commands/funding_notify.py b/src/funding/management/commands/funding_notify.py new file mode 100755 index 000000000..1a30ffc90 --- /dev/null +++ b/src/funding/management/commands/funding_notify.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from optparse import make_option +from django.core.management.base import BaseCommand + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, + help='Suppress output'), + ) + help = 'Sends relevant funding notifications.' + + def handle(self, **options): + + from datetime import date, timedelta + from funding.models import Offer + from funding import app_settings + from django.core.cache import caches + from django.conf import settings + + verbose = options['verbose'] + + for offer in Offer.past().filter(notified_end=None): + if verbose: + print 'Notify end:', offer + # The 'WL fund' list needs to be updated. + caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() + offer.flush_includes() + offer.notify_end() + + current = Offer.current() + if (current is not None and + current.end <= date.today() + timedelta(app_settings.DAYS_NEAR - 1) and + not current.notified_near): + if verbose: + print 'Notify near:', current + current.notify_near() diff --git a/src/funding/migrations/0001_initial.py b/src/funding/migrations/0001_initial.py new file mode 100644 index 000000000..cebe8d287 --- /dev/null +++ b/src/funding/migrations/0001_initial.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('polls', '0001_initial'), + ('catalogue', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Funding', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=127, verbose_name='name', blank=True)), + ('email', models.EmailField(db_index=True, max_length=75, verbose_name='email', blank=True)), + ('amount', models.DecimalField(verbose_name='amount', max_digits=10, decimal_places=2)), + ('payed_at', models.DateTimeField(db_index=True, null=True, verbose_name='payed at', blank=True)), + ('language_code', models.CharField(max_length=2, null=True, blank=True)), + ('notifications', models.BooleanField(default=True, db_index=True, verbose_name='notifications')), + ('notify_key', models.CharField(max_length=32)), + ], + options={ + 'ordering': ['-payed_at'], + 'verbose_name': 'funding', + 'verbose_name_plural': 'fundings', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Offer', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('author', models.CharField(max_length=255, verbose_name='author')), + ('title', models.CharField(max_length=255, verbose_name='Title')), + ('slug', models.SlugField(verbose_name='Slug')), + ('description', models.TextField(verbose_name='Description', blank=True)), + ('target', models.DecimalField(verbose_name='target', max_digits=10, decimal_places=2)), + ('start', models.DateField(verbose_name='start', db_index=True)), + ('end', models.DateField(verbose_name='end', db_index=True)), + ('redakcja_url', models.URLField(verbose_name='redakcja URL', blank=True)), + ('cover', models.ImageField(upload_to=b'funding/covers', verbose_name='Cover')), + ('notified_near', models.DateTimeField(null=True, verbose_name='Near-end notifications sent', blank=True)), + ('notified_end', models.DateTimeField(null=True, verbose_name='End notifications sent', blank=True)), + ('book', models.ForeignKey(blank=True, to='catalogue.Book', help_text='Published book.', null=True)), + ('poll', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='polls.Poll', help_text='Poll', null=True)), + ], + options={ + 'ordering': ['-end'], + 'verbose_name': 'offer', + 'verbose_name_plural': 'offers', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Perk', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('price', models.DecimalField(verbose_name='price', max_digits=10, decimal_places=2)), + ('name', models.CharField(max_length=255, verbose_name='name')), + ('long_name', models.CharField(max_length=255, verbose_name='long name')), + ('end_date', models.DateField(null=True, verbose_name='end date', blank=True)), + ('offer', models.ForeignKey(verbose_name='offer', blank=True, to='funding.Offer', null=True)), + ], + options={ + 'ordering': ['-price'], + 'verbose_name': 'perk', + 'verbose_name_plural': 'perks', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Spent', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('amount', models.DecimalField(verbose_name='amount', max_digits=10, decimal_places=2)), + ('timestamp', models.DateField(verbose_name='when')), + ('book', models.ForeignKey(to='catalogue.Book')), + ], + options={ + 'ordering': ['-timestamp'], + 'verbose_name': 'money spent on a book', + 'verbose_name_plural': 'money spent on books', + }, + bases=(models.Model,), + ), + migrations.AddField( + model_name='funding', + name='offer', + field=models.ForeignKey(verbose_name='offer', to='funding.Offer'), + preserve_default=True, + ), + migrations.AddField( + model_name='funding', + name='perks', + field=models.ManyToManyField(to='funding.Perk', verbose_name='perks', blank=True), + preserve_default=True, + ), + ] diff --git a/src/funding/migrations/0002_auto_20151221_1225.py b/src/funding/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..3224eb006 --- /dev/null +++ b/src/funding/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('funding', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='funding', + name='email', + field=models.EmailField(db_index=True, max_length=254, verbose_name='email', blank=True), + ), + migrations.AlterField( + model_name='offer', + name='description', + field=models.TextField(verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='offer', + name='slug', + field=models.SlugField(verbose_name='slug'), + ), + migrations.AlterField( + model_name='offer', + name='title', + field=models.CharField(max_length=255, verbose_name='title'), + ), + ] diff --git a/src/funding/migrations/__init__.py b/src/funding/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/funding/models.py b/src/funding/models.py new file mode 100644 index 000000000..e36b73255 --- /dev/null +++ b/src/funding/models.py @@ -0,0 +1,348 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from datetime import date, datetime +from urllib import urlencode +from django.conf import settings +from django.contrib.sites.models import Site +from django.core.urlresolvers import reverse +from django.core.mail import send_mail +from django.db import models +from django.template.loader import render_to_string +from django.utils.timezone import utc +from django.utils.translation import ugettext_lazy as _, override +import getpaid +from ssify import flush_ssi_includes +from catalogue.models import Book +from catalogue.utils import get_random_hash +from polls.models import Poll +from . import app_settings + + +class Offer(models.Model): + """ A fundraiser for a particular book. """ + author = models.CharField(_('author'), max_length=255) + title = models.CharField(_('title'), max_length=255) + slug = models.SlugField(_('slug')) + description = models.TextField(_('description'), blank=True) + target = models.DecimalField(_('target'), decimal_places=2, max_digits=10) + start = models.DateField(_('start'), db_index=True) + end = models.DateField(_('end'), db_index=True) + redakcja_url = models.URLField(_('redakcja URL'), blank=True) + book = models.ForeignKey(Book, null=True, blank=True, + help_text=_('Published book.')) + cover = models.ImageField(_('Cover'), upload_to='funding/covers') + poll = models.ForeignKey(Poll, help_text=_('Poll'), null=True, blank=True, on_delete=models.SET_NULL) + + notified_near = models.DateTimeField(_('Near-end notifications sent'), blank=True, null=True) + notified_end = models.DateTimeField(_('End notifications sent'), blank=True, null=True) + + def cover_img_tag(self): + return u'<img src="%s" />' % self.cover.url + cover_img_tag.short_description = _('Cover preview') + cover_img_tag.allow_tags = True + + class Meta: + verbose_name = _('offer') + verbose_name_plural = _('offers') + ordering = ['-end'] + + def __unicode__(self): + return u"%s - %s" % (self.author, self.title) + + def get_absolute_url(self): + return reverse('funding_offer', args=[self.slug]) + + def save(self, *args, **kw): + published_now = (self.book_id is not None and + self.pk is not None and + type(self).objects.values('book').get(pk=self.pk)['book'] != self.book_id) + retval = super(Offer, self).save(*args, **kw) + self.flush_includes() + if published_now: + self.notify_published() + return retval + + def flush_includes(self): + flush_ssi_includes([ + template % (self.pk, lang) + for template in [ + '/wesprzyj/o/%d/top-bar.%s.html', + '/wesprzyj/o/%d/detail-bar.%s.html', + '/wesprzyj/o/%d/list-bar.%s.html', + '/wesprzyj/o/%d/status.%s.html', + '/wesprzyj/o/%d/status-more.%s.html', + ] + [ + '/wesprzyj/o/%%d/fundings/%d.%%s.html' % page + for page in range(1, len(self.funding_payed()) // 10 + 2) + ] + for lang in [lc for (lc, _ln) in settings.LANGUAGES] + ]) + + def is_current(self): + return self.start <= date.today() <= self.end and self == self.current() + + def is_win(self): + return self.sum() >= self.target + + def remaining(self): + if self.is_current(): + return None + if self.is_win(): + return self.sum() - self.target + else: + return self.sum() + + @classmethod + def current(cls): + """ Returns current fundraiser or None. + + Current fundraiser is the one that: + - has already started, + - hasn't yet ended, + - if there's more than one of those, it's the one that ends last. + + """ + today = date.today() + objects = cls.objects.filter(start__lte=today, end__gte=today).order_by('-end') + try: + return objects[0] + except IndexError: + return None + + @classmethod + def past(cls): + """ QuerySet for all past fundraisers. """ + objects = cls.public() + current = cls.current() + if current is not None: + objects = objects.exclude(pk=current.pk) + return objects + + @classmethod + def public(cls): + """ QuerySet for all current and past fundraisers. """ + today = date.today() + return cls.objects.filter(start__lte=today) + + def get_perks(self, amount=None): + """ Finds all the perks for the offer. + + If amount is provided, returns the perks you get for it. + + """ + perks = Perk.objects.filter( + models.Q(offer=self) | models.Q(offer=None) + ).exclude(end_date__lt=date.today()) + if amount is not None: + perks = perks.filter(price__lte=amount) + return perks + + def funding_payed(self): + """ QuerySet for all completed payments for the offer. """ + return Funding.payed().filter(offer=self) + + def funders(self): + return self.funding_payed().order_by('-amount', 'payed_at') + + def sum(self): + """ The money gathered. """ + return self.funding_payed().aggregate(s=models.Sum('amount'))['s'] or 0 + + def notify_all(self, subject, template_name, extra_context=None): + Funding.notify_funders( + subject, template_name, extra_context, + query_filter=models.Q(offer=self) + ) + + def notify_end(self, force=False): + if not force and self.notified_end: return + assert not self.is_current() + self.notify_all( + _('The fundraiser has ended!'), + 'funding/email/end.txt', { + 'offer': self, + 'is_win': self.is_win(), + 'remaining': self.remaining(), + 'current': self.current(), + }) + self.notified_end = datetime.utcnow().replace(tzinfo=utc) + self.save() + + def notify_near(self, force=False): + if not force and self.notified_near: return + assert self.is_current() + sum_ = self.sum() + need = self.target - sum_ + self.notify_all( + _('The fundraiser will end soon!'), + 'funding/email/near.txt', { + 'days': (self.end - date.today()).days + 1, + 'offer': self, + 'is_win': self.is_win(), + 'sum': sum_, + 'need': need, + }) + self.notified_near = datetime.utcnow().replace(tzinfo=utc) + self.save() + + def notify_published(self): + assert self.book is not None + self.notify_all( + _('The book you helped fund has been published.'), + 'funding/email/published.txt', { + 'offer': self, + 'book': self.book, + 'author': self.book.pretty_title(), + 'current': self.current(), + }) + + +class Perk(models.Model): + """ A perk offer. + + If no attached to a particular Offer, applies to all. + + """ + offer = models.ForeignKey(Offer, verbose_name=_('offer'), null=True, blank=True) + price = models.DecimalField(_('price'), decimal_places=2, max_digits=10) + name = models.CharField(_('name'), max_length=255) + long_name = models.CharField(_('long name'), max_length=255) + end_date = models.DateField(_('end date'), null=True, blank=True) + + class Meta: + verbose_name = _('perk') + verbose_name_plural = _('perks') + ordering = ['-price'] + + def __unicode__(self): + return "%s (%s%s)" % (self.name, self.price, u" for %s" % self.offer if self.offer else "") + + +class Funding(models.Model): + """ A person paying in a fundraiser. + + The payment was completed if and only if payed_at is set. + + """ + offer = models.ForeignKey(Offer, verbose_name=_('offer')) + name = models.CharField(_('name'), max_length=127, blank=True) + email = models.EmailField(_('email'), blank=True, db_index=True) + amount = models.DecimalField(_('amount'), decimal_places=2, max_digits=10) + payed_at = models.DateTimeField(_('payed at'), null=True, blank=True, db_index=True) + perks = models.ManyToManyField(Perk, verbose_name=_('perks'), blank=True) + language_code = models.CharField(max_length=2, null=True, blank=True) + notifications = models.BooleanField(_('notifications'), default=True, db_index=True) + notify_key = models.CharField(max_length=32) + + class Meta: + verbose_name = _('funding') + verbose_name_plural = _('fundings') + ordering = ['-payed_at'] + + @classmethod + def payed(cls): + """ QuerySet for all completed payments. """ + return cls.objects.exclude(payed_at=None) + + def __unicode__(self): + return unicode(self.offer) + + def get_absolute_url(self): + return reverse('funding_funding', args=[self.pk]) + + def perk_names(self): + return ", ".join(perk.name for perk in self.perks.all()) + + def get_disable_notifications_url(self): + return "%s?%s" % (reverse("funding_disable_notifications"), + urlencode({ + 'email': self.email, + 'key': self.notify_key, + })) + + def save(self, *args, **kwargs): + if self.email and not self.notify_key: + self.notify_key = get_random_hash(self.email) + ret = super(Funding, self).save(*args, **kwargs) + self.offer.flush_includes() + return ret + + @classmethod + def notify_funders(cls, subject, template_name, extra_context=None, + query_filter=None, payed_only=True): + funders = cls.objects.exclude(email="").filter(notifications=True) + if payed_only: + funders = funders.exclude(payed_at=None) + if query_filter is not None: + funders = funders.filter(query_filter) + emails = set() + for funder in funders: + if funder.email in emails: + continue + emails.add(funder.email) + funder.notify(subject, template_name, extra_context) + + def notify(self, subject, template_name, extra_context=None): + context = { + 'funding': self, + 'site': Site.objects.get_current(), + } + if extra_context: + context.update(extra_context) + with override(self.language_code or app_settings.DEFAULT_LANGUAGE): + send_mail(subject, + render_to_string(template_name, context), + settings.CONTACT_EMAIL, + [self.email], + fail_silently=False + ) + + def disable_notifications(self): + """Disables all notifications for this e-mail address.""" + type(self).objects.filter(email=self.email).update(notifications=False) + + +# Register the Funding model with django-getpaid for payments. +getpaid.register_to_payment(Funding, unique=False, related_name='payment') + + +class Spent(models.Model): + """ Some of the remaining money spent on a book. """ + book = models.ForeignKey(Book) + amount = models.DecimalField(_('amount'), decimal_places=2, max_digits=10) + timestamp = models.DateField(_('when')) + + class Meta: + verbose_name = _('money spent on a book') + verbose_name_plural = _('money spent on books') + ordering = ['-timestamp'] + + def __unicode__(self): + return u"Spent: %s" % unicode(self.book) + + +def new_payment_query_listener(sender, order=None, payment=None, **kwargs): + """ Set payment details for getpaid. """ + payment.amount = order.amount + payment.currency = 'PLN' +getpaid.signals.new_payment_query.connect(new_payment_query_listener) + + +def user_data_query_listener(sender, order, user_data, **kwargs): + """ Set user data for payment. """ + user_data['email'] = order.email +getpaid.signals.user_data_query.connect(user_data_query_listener) + +def payment_status_changed_listener(sender, instance, old_status, new_status, **kwargs): + """ React to status changes from getpaid. """ + if old_status != 'paid' and new_status == 'paid': + instance.order.payed_at = datetime.utcnow().replace(tzinfo=utc) + instance.order.save() + if instance.order.email: + instance.order.notify( + _('Thank you for your support!'), + 'funding/email/thanks.txt' + ) +getpaid.signals.payment_status_changed.connect(payment_status_changed_listener) diff --git a/src/funding/static/funding/funding.js b/src/funding/static/funding/funding.js new file mode 100644 index 000000000..765bddcad --- /dev/null +++ b/src/funding/static/funding/funding.js @@ -0,0 +1,18 @@ +$(function() { + $('.funding .close').click(function(e) { + e.preventDefault(); + var fundNode = $(e.target).parent(); + fundNode.slideUp(function(){fundingHandle.show()}); + if(Modernizr.localstorage) + localStorage['hide-offer-id'] = fundNode.attr('data-offer-id'); + }); + + var fundingTopHeader = $('#funding-closeable'); + var fundingHandle = $('#funding-handle'); + fundingHandle.click(function(e) { + fundingTopHeader.slideDown(); + $(e.target).hide(); + if(Modernizr.localstorage) + localStorage.removeItem('hide-offer-id'); + }); +}); \ No newline at end of file diff --git a/src/funding/templates/admin/funding/offer/change_form.html b/src/funding/templates/admin/funding/offer/change_form.html new file mode 100755 index 000000000..292d0dfeb --- /dev/null +++ b/src/funding/templates/admin/funding/offer/change_form.html @@ -0,0 +1,31 @@ +{% extends "admin/change_form.html" %} +{% load i18n %} + +{% block extrahead %} +{{ block.super }} +<script type="text/javascript"> +(function($) { + $(document).ready(function($) { + $("#generated-switch").click(function() { + $('#generated').toggle() + }); + }); +})(django.jQuery); +</script> +{% endblock %} + + + +{% block pretitle %} + + +<a id="generated-switch">â {% trans "fundings" %} â</a> +<div id="generated" style="display:none; padding:1em; border: 1px solid #aaa;">{% spaceless %} + {% for funding in original.funders %} + {% if funding.name %} + <dc:contributor.funding xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">{{ funding.name }}</dc:contributor.funding><br/> + {% endif %} + {% endfor %} +{% endspaceless %}</div> +{{ block.super }} +{% endblock %} diff --git a/src/funding/templates/funding/disable_notifications.html b/src/funding/templates/funding/disable_notifications.html new file mode 100644 index 000000000..9123310d9 --- /dev/null +++ b/src/funding/templates/funding/disable_notifications.html @@ -0,0 +1,34 @@ +{% extends "base.html" %} +{% load i18n %} +{% load fnp_share %} + +{% block titleextra %}{% trans "Payment failed" %}{% endblock %} + +{% block body %} + +<h1>{% trans "Disable notifications" %}</h1> +<div class="white-box normal-text"> + +{% if view.object.notifications %} + +<p>{% blocktrans with e=view.object.email %}Are you sure you want to disable notifications for address {{e}}?{% endblocktrans %}</p> +<form method="post" action=""> + <button>{% trans "Disable notifications" %}</button> +</form> + +{% else %} + +<p>{% blocktrans with e=view.object.email %}Notifications for address {{e}} have been successfully disabled.{% endblocktrans %}</p> + +{% endif %} + +{% url 'funding_current' as current %} +<p> +{% blocktrans with current=current %}Return to the <a href="{{current}}">current fundraiser</a>.{% endblocktrans %} +</p> + + +</div> + + +{% endblock %} diff --git a/src/funding/templates/funding/email/base.txt b/src/funding/templates/funding/email/base.txt new file mode 100755 index 000000000..1129549ce --- /dev/null +++ b/src/funding/templates/funding/email/base.txt @@ -0,0 +1,10 @@ +{% autoescape off %}{% load i18n %}{% trans 'Hi' %}{% if funding.name %} {{ funding.name }}{% endif %}, +{% block body %} +{% endblock %} +{% blocktrans %}Cheers, +Wolne Lektury team{% endblocktrans %} + +-- +{% blocktrans %}If you don't want to receive any more updates, please visit this page:{% endblocktrans %} +http://{{site.domain}}{{ funding.get_disable_notifications_url }} +{% endautoescape %} diff --git a/src/funding/templates/funding/email/end.txt b/src/funding/templates/funding/email/end.txt new file mode 100755 index 000000000..023d34427 --- /dev/null +++ b/src/funding/templates/funding/email/end.txt @@ -0,0 +1,42 @@ +{% extends "funding/email/base.txt" %} +{% load i18n %} + + +{% block body %}{% if is_win %} +{% blocktrans %}we succesfully collected the full amount needed +for the book you contributed to:{% endblocktrans %} + + {{ offer.author }} â {{ offer.title }} + http://{{ site.domain }}{{ offer.get_absolute_url }} + +{% blocktrans %}We will now digitize it, develop and publish it in the library, +in various formats, free for everyone.{% endblocktrans %} +{% if funding.name %} +{% blocktrans %}Your name will be included on the list of contributors, irrespectively +of the amount of your contribution.{% endblocktrans %} +{% endif %}{# funding.name #}{% if funding.perks.exists %} +{% blocktrans %}We will contact you again about details needed +to deliver your perks.{% endblocktrans %} +{% endif %}{# funding.perks.exists #}{% if remaining %} +{% blocktrans with r=remaining %}All of the money remaining after this fundraiser ({{ r }} PLN) +will be spent on liberating other books still waiting for publication.{% endblocktrans %} +{% blocktrans %}You can see how we're spending these funds on this page:{% endblocktrans %} +http://{{ site.domain }}{% url 'funding_wlfund' %} +{% endif %}{# remaining #}{% else %}{# !is_win #} +{% blocktrans %}unfortunately, we were unable to collect the full amount needed +for the book you contributed to:{% endblocktrans %} + + {{ offer.author }} â {{ offer.title }} + http://{{ site.domain }}{{ offer.get_absolute_url }} +{% if remaining %} +{% blocktrans with x=remaining %}All of the money we collected in this fundraiser ({{ x }} PLN) +will be spent on liberating other books still waiting for publication.{% endblocktrans %} +{% blocktrans %}You can see how we're spending these funds on this page:{% endblocktrans %} +http://{{ site.domain }}{% url 'funding_wlfund' %} +{% endif %}{# remaining #}{% endif %}{# is_win #}{% if current %} +{% blocktrans %}If you'd like to help liberate another book, or invite your friends +to do so, we're currently raising money for:{% endblocktrans %} + + {{ current.author }} â {{ current.title }} + http://{{ site.domain }}{% url 'funding_current' %} +{% endif %}{% endblock %} diff --git a/src/funding/templates/funding/email/near.txt b/src/funding/templates/funding/email/near.txt new file mode 100755 index 000000000..47537c129 --- /dev/null +++ b/src/funding/templates/funding/email/near.txt @@ -0,0 +1,18 @@ +{% extends "funding/email/base.txt" %} +{% load i18n %} + +{% block body %} +{% blocktrans count days as d %}there's only {{ d }} day left until the end of the fundraiser for: +{% plural %}There're only {{ d }} days left until the end of the fundraiser for: +{% endblocktrans %} + {{ offer.author }} â {{ offer.title }} + +{% blocktrans with x=sum %}We managed to collect {{x}} PLN so far.{% endblocktrans %} +{% if is_win %} +{% blocktrans %}The fundraiser is a success already, but the more money +we collect, the more other books we'll publish.{% endblocktrans %} +{% else %}{% blocktrans with x=need %}We still need {{ x }} PLN more.{% endblocktrans %} +{% endif %} +{% trans "There's still time to let your friends know about the fundraiser!" %} +http://{{ site.domain }}{% url 'funding_current' %} +{% endblock %} diff --git a/src/funding/templates/funding/email/published.txt b/src/funding/templates/funding/email/published.txt new file mode 100755 index 000000000..672efa2ae --- /dev/null +++ b/src/funding/templates/funding/email/published.txt @@ -0,0 +1,17 @@ +{% extends "funding/email/base.txt" %} +{% load i18n %} +{% block body %} +{% blocktrans %}we have just published the book you contributed to:{% endblocktrans %} + + {{ author }} â {{ offer.book.title }} + http://{{ site.domain }}{{ offer.book.get_absolute_url }} + +{% blocktrans %}Thanks to you, it is now available for free, +in various formats, to everyone.{% endblocktrans %} +{% if current %} +{% blocktrans %}If you'd like to help liberate another book, or invite your friends +to do so, we're currently raising money for:{% endblocktrans %} + + {{ current.author }} â {{ current.title }} + http://{{ site.domain }}{% url 'funding_current' %} +{% endif %}{% endblock %} diff --git a/src/funding/templates/funding/email/thanks.txt b/src/funding/templates/funding/email/thanks.txt new file mode 100644 index 000000000..2ded0bd9d --- /dev/null +++ b/src/funding/templates/funding/email/thanks.txt @@ -0,0 +1,14 @@ +{% extends "funding/email/base.txt" %} +{% load i18n %} + + +{% block body %} +{% trans 'Thank you for your support - thanks to you we will set another book free.' %}{% if funding.name %} + +{% trans 'The book will be supplemented with your name as a donor.' %}{% endif %} +{% if funding.perks.exists %} +{% blocktrans %}We will contact you about details needed for your perks.{% endblocktrans %} +{% endif %}{# funding.perks.exists #} +{% blocktrans %}We will keep you informed about status changes to this fundraiser +and the upcoming ones that we plan to launch.{% endblocktrans %} +{% endblock %} diff --git a/src/funding/templates/funding/includes/funding.html b/src/funding/templates/funding/includes/funding.html new file mode 100644 index 000000000..c8f62d275 --- /dev/null +++ b/src/funding/templates/funding/includes/funding.html @@ -0,0 +1,72 @@ +{% spaceless %} + +{% load i18n %} +{% load time_tags %} + +{% if offer %} + +<div {% if closeable %}id="funding-closeable" {% endif %}class="funding {{ add_class }}" data-offer-id="{{offer.id}}" style=""> + {% if closeable %}<a href="#" class="close">X</a>{% endif %} + {% if link and is_current %} + <div class="call-area"> + <a class="call honking" href="{% url 'funding_current' offer.slug %}"> + {% trans "Support!" %}</a> + <div class="learn-more"> + <a href="{% url 'infopage' 'wesprzyj' %}">{% trans "Learn more" %}</a> + </div> + </div> + {% endif %} + <div class="description {% if link and is_current %}with-button{% endif %}"> + {% if link %}<a href="{% if is_current %}{% url 'funding_current' offer.slug %}{% else %}{{ offer.get_absolute_url }}{% endif %}">{% endif %} + {% if show_title %} + {% if is_current and show_title_calling %}<strong style="margin-right: .6em;">{% trans "Help free the book!" %}</strong>{% endif %} + <span class="funding-title{% if not is_current %}-strong{% endif %}">{{ offer }}</span> + {% endif %} + + <div class="progress" + style="text-align: center; background-size: {{ percentage|stringformat:'.2f' }}% 1px;" + > + {% if sum %} + <span class="piece progress-collected">{% trans "collected" %}: {{ sum }} zÅ</span> + {% endif %} + {% if not is_win %} + <span class="piece progress-target"><span class="{% if sum %}progress-extralabel{% endif %}">{% trans "needed" %}: </span>{{ offer.target }} zÅ</span> + {% endif %} + {% if is_current %} + <span class="piece progress-until"><span class="progress-extralabel">{% trans "until fundraiser end" %}:</span> + <span class="countdown inline" data-until='{{ offer.end|date_to_utc:True|utc_for_js }}'></span> + </span> + {% else %} + <div style="clear: both"></div> + {% endif %} + </div> + {% if link %}</a>{% endif %} + </div> + <div style="clear: both"></div> +</div> +{% if closeable %} + <div id="funding-handle">{% trans "Help free the book!" %}</div> + +<script type="text/javascript">(function() { +var storage = true; +try { + localStorage.setItem('test', 'test'); + localStorage.removeItem('test'); +} catch (exception) { + storage = false; +} +if (storage) { + var closeable = document.getElementById('funding-closeable'); + if (localStorage['hide-offer-id'] !== closeable.getAttribute('data-offer-id')) { + closeable.style.display = 'block'; + document.getElementById('funding-handle').style.display = 'none'; + } +} +})();</script> + +{% endif %} + + +{% endif %} + +{% endspaceless %} diff --git a/src/funding/templates/funding/includes/fundings.html b/src/funding/templates/funding/includes/fundings.html new file mode 100644 index 000000000..e13e1ec18 --- /dev/null +++ b/src/funding/templates/funding/includes/fundings.html @@ -0,0 +1,28 @@ +{% spaceless %} + +{% load i18n %} +{% load pagination_tags %} + +<table class="wlfund"> + +{% for funding in fundings %} + <tr class="funding-plus"> + <td class="oneline">{{ funding.payed_at.date }}</td> + <td> + {% if funding.name %} + {{ funding.name }} + {% else %} + <em>{% trans "Anonymous" %}</em> + {% endif %} + </td> + <td>{{ funding.amount }} zÅ</td> + <td> + {% for perk in funding.perks.all %} + {{ perk.name }}{% if not forloop.last %},{% endif %} + {% endfor %} + </td> +{% endfor %} +</table> + +{% endspaceless %}{% paginate %} + diff --git a/src/funding/templates/funding/includes/offer_status.html b/src/funding/templates/funding/includes/offer_status.html new file mode 100644 index 000000000..4d5ae05ea --- /dev/null +++ b/src/funding/templates/funding/includes/offer_status.html @@ -0,0 +1,31 @@ +{% load i18n %} + +{% if offer.is_current %} + {% if offer.is_win %} + <p> + {% blocktrans with end=offer.end %}The fundraiser + ends on {{ end }}. The full amount has been successfully + raised, but you can still contribute and help liberate + more books.{% endblocktrans %} + </p> + {% else %} + <p> + <strong>{% blocktrans with target=offer.target|floatformat:-2 %}We need {{target}} zÅ to digitize it, + compile it and publish for free in multiple formats.{% endblocktrans %}</strong> + </p> + <p> + {% blocktrans with end=offer.end %}If we raise enough money before {{end}} we will + publish it and make it available for everyone.{% endblocktrans %} + </p> + {% endif %} +{% else %} + {% if offer.is_win %} + <p> + {% trans "Full amount was successfully raised!" %} + </p> + {% else %} + <p> + {% trans "The amount needed was not raised." %} + </p> + {% endif %} +{% endif %} diff --git a/src/funding/templates/funding/includes/offer_status_more.html b/src/funding/templates/funding/includes/offer_status_more.html new file mode 100644 index 000000000..c94c9a801 --- /dev/null +++ b/src/funding/templates/funding/includes/offer_status_more.html @@ -0,0 +1,26 @@ +{% load i18n %} + +{% if offer.is_current %} + <p> + {% include "funding/snippets/any_remaining.html" %} + </p> +{% else %} + <p class="date">{% trans "Fundraiser span" %}: {{ offer.start }} â {{ offer.end }}</p> + {% if offer.is_win %} + <p> + {% if offer.book %} + {% blocktrans with bu=offer.book.get_absolute_url bt=offer.book %}The book + <a href="{{ bu }}">{{ bt }}</a> has been already published.{% endblocktrans %} + {% else %} + {% if offer.redakcja_url %} + {% blocktrans with r=offer.redakcja_url %}You can follow + the work on the <a href="{{ r }}">Editorial Platform</a>.{% endblocktrans %} + {% endif %} + {% endif %} + </p> + {% endif %} + + {% if offer.remaining %} + <p>{% include "funding/snippets/any_remaining.html" %}</p> + {% endif %} +{% endif %} diff --git a/src/funding/templates/funding/no_thanks.html b/src/funding/templates/funding/no_thanks.html new file mode 100644 index 000000000..3c8db166e --- /dev/null +++ b/src/funding/templates/funding/no_thanks.html @@ -0,0 +1,23 @@ +{% extends "base.html" %} +{% load i18n %} +{% load fnp_share %} + +{% block titleextra %}{% trans "Payment failed" %}{% endblock %} + +{% block body %} + +<h1>{% trans "Payment failed" %}</h1> +<div class="white-box normal-text"> + +<p>{% trans "You're support has not been processed successfully." %}</p> + +{% url 'funding_current' as current %} +<p> +{% blocktrans with current=current %}Return to the <a href="{{current}}">current fundraiser</a> and try again or try to use a different payment method.{% endblocktrans %} +</p> + + +</div> + + +{% endblock %} diff --git a/src/funding/templates/funding/offer_detail.html b/src/funding/templates/funding/offer_detail.html new file mode 100644 index 000000000..70930c400 --- /dev/null +++ b/src/funding/templates/funding/offer_detail.html @@ -0,0 +1,77 @@ +{% extends "base.html" %} +{% load url from future %} +{% load i18n static %} +{% load pagination_tags %} +{% load fnp_share %} +{% load thumbnail %} +{% load build_absolute_uri from fnp_common %} +{% load ssi_include from ssify %} + + +{% block titleextra %}{{ object }}{% endblock %} + +{% block ogimage %}{{ object.cover.url|build_absolute_uri:request }}{% endblock %} + +{% block metadescription %}Wesprzyj kolejnÄ publikacjÄ Wolnych Lektur!{% endblock %} + + +{% block body %} + +<h1>{{ object }}</h1> + +{% ssi_include 'funding_detail_bar' pk=object.pk %} +<div class="white-box"> + <div class="funding-details-intro"> + {% if object.cover %} + <img src=" + {% thumbnail object.cover "139x193" as thumb %} + {{ thumb.url }} + {% empty %} + {{ object.cover.url }} + {% endthumbnail %} + " alt="Cover" class="funding-cover" /> + {% endif %} + <div class="normal-text"> + <h3>{% trans "Help free the book!" %}</h3> + {{ object.description|safe }} + {% ssi_include 'funding_status' pk=object.pk %} + <a href='//nowoczesnapolska.org.pl/pomoz-nam/wesprzyj-nas/' target="_blank" style='float:right;border:1px solid #ddd;padding: 1em;margin:0 0 1em 1em;background:#eee;'><img src='//nowoczesnapolska.org.pl/wp-content/themes/koed/annoy/procent.png' alt='1%' style='float:left;margin-right: 1em;margin-top:.2em;'>Możesz też przekazaÄ<br/>1% podatku na rozwój biblioteki. →</a> + {% ssi_include 'funding_status_more' pk=object.pk %} + <p><a href="{% url 'infopage' 'wesprzyj' %}">{% trans "Learn more" %}</a>.</p> + </div> + + <div style="clear:both;"></div> + </div> + + {% if object.is_current %} + <div class="normal-text"> + <h3>{% trans "Support the publication" %}</h3> + <form action="" method="post"> + <table> + {{ form.as_table }} + <tr><td></td><td> + <button type="submit" style="border: none; background: none; cursor: pointer"> + <img alt="{% trans 'Donate!' %}" src="{% static 'img/payu.png' %}" /> + </button> + </td></tr> + </table> + </form> + </div> + + {% url 'funding_current' object.slug as current %} + <p class="normal-text">{% trans "Tell your friends!" %}</p> + <p class="share">{% share current _("Support Wolne Lektury!") "big" %}</p> + {% endif %} + + <p class="normal-text"><a href="{% url 'funding' %}">{% trans "See all fundraisers." %}</a></p> + +</div> + + +<h2>{% trans "Supporters" %}:</h2> + +<div class="white-box normal-text"> + {% ssi_include 'funding_fundings' pk=object.pk page=page %} +</div> + +{% endblock %} diff --git a/src/funding/templates/funding/offer_list.html b/src/funding/templates/funding/offer_list.html new file mode 100644 index 000000000..e8088bfa8 --- /dev/null +++ b/src/funding/templates/funding/offer_list.html @@ -0,0 +1,47 @@ +{% extends "base.html" %} +{% load url from future %} +{% load i18n %} +{% load ssi_include from ssify %} +{% load pagination_tags %} + +{% block titleextra %}{% trans "All fundraisers" %}{% endblock %} + +{% block bodyid %}funding-offer-list{% endblock %} + +{% block body %} +<h1>{% trans "All fundraisers" %}</h1> + + +{% autopaginate object_list 10 %} +{% if page_obj.number == 1 %} + <h2>{% trans "Current fundraiser:" %}</h2> +{% endif %} + +{% for offer in object_list %} +{% with is_win=offer.is_win is_current=offer.is_current %} + {% if not is_current and forloop.first and page_obj.number == 1 %} + <p class="normal-text">{% trans "No fundraiser is currently running." %}</p> + <h2>{% trans "Previous fundraisers:" %}</h2> + {% endif %} + + {% ssi_include 'funding_list_bar' pk=offer.pk %} + + <div class="white-box normal-text"> + {% if is_current %} + <h3>{% trans "Help free the book!" %}</h3> + {{ offer.description|safe }} + {% endif %} + {% ssi_include 'funding_status' pk=offer.pk %} + {% ssi_include 'funding_status_more' pk=offer.pk %} + + </div> + + {% if is_current and not forloop.last %} + <h2>{% trans "Previous fundraisers:" %}</h2> + {% endif %} + +{% endwith %} +{% endfor %} +{% paginate %} + +{% endblock %} diff --git a/src/funding/templates/funding/snippets/any_remaining.html b/src/funding/templates/funding/snippets/any_remaining.html new file mode 100644 index 000000000..d8a5bd675 --- /dev/null +++ b/src/funding/templates/funding/snippets/any_remaining.html @@ -0,0 +1,10 @@ + +{% load i18n %} +{% url 'funding_wlfund' as wlfund %} +{% blocktrans %}Any <a href="{{wlfund}}">remaining funds</a> will be spent +on other books waiting to be published.{% endblocktrans %} +<br/><br/> +{% blocktrans %}We will supplement every book with your name as a donor, no matter how +big your support will be.{% endblocktrans %} + + diff --git a/src/funding/templates/funding/thanks.html b/src/funding/templates/funding/thanks.html new file mode 100644 index 000000000..676ea487b --- /dev/null +++ b/src/funding/templates/funding/thanks.html @@ -0,0 +1,51 @@ +{% extends "base.html" %} +{% load i18n %} +{% load fnp_share %} +{% load polls_tags %} + +{% block titleextra %}{% trans "Thank you for your support!" %}{% endblock %} + +{% block body %} + +<h1>{% trans "Thank you!" %}</h1> +<div class="white-box normal-text"> + +<a href='//nowoczesnapolska.org.pl/pomoz-nam/wesprzyj-nas/' target="_blank" style='float:right;border:1px solid #ddd;padding: 1em;margin:0 0 1em 1em;background:#eee;'><img src='//nowoczesnapolska.org.pl/wp-content/themes/koed/annoy/procent.png' alt='1%' style='float:left;margin-right: 1em;margin-top:.2em;'>Możesz też przekazaÄ<br/>1% podatku na rozwój biblioteki. →</a> + +<p>{% trans "Thank you for your support!" %}</p> +<p>{% blocktrans %}We will contact you if you qualify for perks.{% endblocktrans %}</p> + +{% if offer.is_win %} + <p>{% trans "Full amount was successfully raised!" %}</p> + + <p>{% blocktrans with b=offer.title %}Your donation will be spent on digitizing, compiling and + publishing the book {{ b }} in multiple formats.{% endblocktrans %}</p> + +{% else %} + + <p>{% blocktrans with b=offer.title %}If the full amount needed is raised, + your donation will be spent on digitizing, compiling and + publishing the book {{ b }} in multiple formats.{% endblocktrans %}</p> + +{% endif %} + + +<p>{% include "funding/snippets/any_remaining.html" %} + +<a href="{% url 'infopage' 'wesprzyj' %}">{% trans "Learn more" %}</a>.</p> + +{% url 'funding_current' offer.slug as current %} +<p><a href="{{ current }}">{% trans "Go back to the current fundraiser." %}</a></p> + + +<h3>{% trans "Tell your friends!" %}</h3> +<p class="share">{% share current _("I support Wolne Lektury.") "big" %}</p> + +{% if offer.poll %} + <h3>{% trans "Vote for a book for the next fundraiser" %}</h3> + {% poll offer.poll %} +{% endif %} +</div> + + +{% endblock %} diff --git a/src/funding/templates/funding/widgets/amount.html b/src/funding/templates/funding/widgets/amount.html new file mode 100644 index 000000000..01db675a0 --- /dev/null +++ b/src/funding/templates/funding/widgets/amount.html @@ -0,0 +1,19 @@ +{% load i18n %} +<div style="line-height:2em;"> +{% if perks %} + {% for perk in perks %} + <label> + <input type="radio" name="{{ perks_input_name }}" value="{{ perk.price }}" + {% if perk.chosen %}checked="checked"{% endif %} /> + <span style="font-size: 1.5em; ">{{ perk.price }} zÅ</span> ({{ perk.long_name }}) + </label><br/> + {% endfor %} + <label> + <input type="radio" name="{{ perks_input_name }}" value="" + {% if not perk_chosen %}checked="checked"{% endif %} /> {% trans "Other amount" %}: + </label> + <input size="5" name="{{ name }}" value="{% if not perk_chosen %}{{ value|default_if_none:'' }}{% endif %}" /> zÅ +{% else %} + <input name="{{ name }}" value="{{ value|default_if_none:'' }}" {% if value != None %}{% endif %} /> +{% endif %} +</div> diff --git a/src/funding/templates/funding/wlfund.html b/src/funding/templates/funding/wlfund.html new file mode 100644 index 000000000..bb8a2bea2 --- /dev/null +++ b/src/funding/templates/funding/wlfund.html @@ -0,0 +1,59 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block titleextra %}{% trans "Remaining funds" %}{% endblock %} + +{% block body %} + +<h1>{% trans "Remaining funds" %}</h1> + +<div class="left-column normal-text"> +<p>{% blocktrans with r="http://redakcja.wolnelektury.pl/" %}If +the full amount needed for publishing a book is not raised in time, +the funds are spent on <a href="{{r}}">other books waiting for +publication</a>. The same thing happens with any money remaining +from successful fundraisers.{% endblocktrans %} + +<a href="{% url 'infopage' 'wesprzyj' %}">{% trans "Learn more" %}</a>.</p> + +<p>{% trans "Spending these remaining funds is recorded in this table." %}</p> +</div> + +<table class="normal-text wlfund"> + + <tr> + <td>{% trans "Date" %}:</td> + <td>{% trans "Operation" %}:</td> + <td>{% trans "Amount" %}:</td> + <td>{% trans "Balance" %}:</td> + </tr> + + {% for tag, entry in log %} + {% if tag == 'spent' %} + <tr class="funding-minus"> + <td class="oneline">{{ entry.timestamp }}</td> + <td>{% trans "Money spent on publishing the book" %}: + <a href="{{ entry.book.get_absolute_url }}"> + {{ entry.book }}</a></td> + <td>-{{ entry.amount }} zÅ</td> + <td>{{ entry.total }} zÅ</td> + </tr> + {% else %} + <tr class="funding-plus"> + <td class="oneline">{{ entry.end }}</td> + <td>{% trans "Money remaining from the fundraiser for" %}: + <a href="{{ entry.get_absolute_url }}"> + {{ entry }}</a></td> + <td>+{{ entry.wlfund }} zÅ</td> + <td>{{ entry.total }} zÅ</td> + </tr> + {% endif %} + {% empty %} + <tr><td colspan="4" style="text-align:center; color: #888;"> + <em>{% trans "There are no previous fundraisers to show yet." %}</em> + </td></tr> + {% endfor %} +</table> + + +{% endblock %} diff --git a/src/funding/templatetags/__init__.py b/src/funding/templatetags/__init__.py new file mode 100755 index 000000000..e69de29bb diff --git a/src/funding/templatetags/funding_tags.py b/src/funding/templatetags/funding_tags.py new file mode 100755 index 000000000..5dbeec6eb --- /dev/null +++ b/src/funding/templatetags/funding_tags.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import template +from ssify import ssi_variable +from ssify.utils import ssi_cache_control +from ..models import Offer +from ..utils import sanitize_payment_title + +register = template.Library() + + +@ssi_variable(register, patch_response=[ssi_cache_control(must_revalidate=True, max_age=0)]) +def current_offer(request): + offer = Offer.current() + return offer.pk if offer is not None else None + + +register.filter(sanitize_payment_title) diff --git a/src/funding/tests.py b/src/funding/tests.py new file mode 100644 index 000000000..6dbfbb457 --- /dev/null +++ b/src/funding/tests.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from datetime import date, timedelta +from django.test import TestCase +from .models import Offer, Perk + + +class PerksTest(TestCase): + def setUp(self): + self.today = date.today() + self.offer1 = Offer.objects.create( + author='author1', title='title1', slug='slug1', + target=100, start=self.today, end=self.today) + + def test_perks(self): + perk = Perk.objects.create(price=20, name='Perk 20') + perk1 = Perk.objects.create(offer=self.offer1, price=50, name='Perk 50') + offer2 = Offer.objects.create( + author='author2', title='title2', slug='slug2', + target=100, start=self.today-timedelta(1), end=self.today-timedelta(1)) + perk2 = Perk.objects.create(offer=offer2, price=1, name='Perk 1') + + self.assertEqual( + set(self.offer1.get_perks(10)), + set()) + self.assertEqual( + set(self.offer1.get_perks(70)), + set([perk, perk1])) + + +class FundingTest(TestCase): + def setUp(self): + self.today = date.today() + self.offer_past = Offer.objects.create( + author='an-author', title='past', slug='past', + target=100, start=self.today-timedelta(1), end=self.today-timedelta(1)) + self.offer_current = Offer.objects.create( + author='an-author', title='current', slug='current', + target=100, start=self.today, end=self.today) + self.offer_future = Offer.objects.create( + author='an-author', title='future', slug='future', + target=100, start=self.today+timedelta(1), end=self.today+timedelta(1)) + + def test_current(self): + self.assertTrue(self.offer_current.is_current()) + self.assertFalse(self.offer_past.is_current()) + self.assertEqual(Offer.current(), self.offer_current) + self.assertEqual( + set(Offer.past()), + set([self.offer_past]) + ) + self.assertEqual( + set(Offer.public()), + set([self.offer_past, self.offer_current]) + ) + + def test_interrupt(self): + # A new offer starts, ending the previously current one. + offer_interrupt = Offer.objects.create( + author='an-author', title='interrupt', slug='interrupt', + target=100, start=self.today-timedelta(1), end=self.today+timedelta(1)) + + self.assertTrue(offer_interrupt.is_current()) + self.assertFalse(self.offer_current.is_current()) + self.assertEqual(Offer.current(), offer_interrupt) + self.assertEqual( + set(Offer.past()), + set([self.offer_past, self.offer_current]) + ) + self.assertEqual( + set(Offer.public()), + set([self.offer_past, self.offer_current, offer_interrupt]) + ) + diff --git a/src/funding/urls.py b/src/funding/urls.py new file mode 100644 index 000000000..4d806e84b --- /dev/null +++ b/src/funding/urls.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url, include + +from .views import (WLFundView, OfferDetailView, OfferListView, + ThanksView, NoThanksView, CurrentView, DisableNotifications) + + +urlpatterns = patterns('funding.views', + + url(r'^$', CurrentView.as_view(), name='funding_current'), + url(r'^teraz/$', CurrentView.as_view()), + url(r'^teraz/(?P<slug>[^/]+)/$', CurrentView.as_view(), name='funding_current'), + url(r'^lektura/$', OfferListView.as_view(), name='funding'), + url(r'^lektura/(?P<slug>[^/]+)/$', OfferDetailView.as_view(), name='funding_offer'), + url(r'^pozostale/$', WLFundView.as_view(), name='funding_wlfund'), + + url(r'^dziekujemy/$', ThanksView.as_view(), name='funding_thanks'), + url(r'^niepowodzenie/$', NoThanksView.as_view(), name='funding_nothanks'), + + url(r'^wylacz_email/$', DisableNotifications.as_view(), name='funding_disable_notifications'), + + url(r'^getpaid/', include('getpaid.urls')), + + # Includes + url(r'^o/(?P<pk>\d+)/top-bar\.(?P<lang>.+)\.html$', 'top_bar', name='funding_top_bar'), + url(r'^o/(?P<pk>\d+)/detail-bar\.(?P<lang>.+)\.html$', 'detail_bar', name='funding_detail_bar'), + url(r'^o/(?P<pk>\d+)/list-bar\.(?P<lang>.+)\.html$', 'list_bar', name='funding_list_bar'), + url(r'^o/(?P<pk>\d+)/status\.(?P<lang>.+)\.html$', 'offer_status', name='funding_status'), + url(r'^o/(?P<pk>\d+)/status-more\.(?P<lang>.+)\.html$', 'offer_status_more', name='funding_status_more'), + url(r'^o/(?P<pk>\d+)/fundings/(?P<page>\d+)\.(?P<lang>.+)\.html$', 'offer_fundings', name='funding_fundings'), +) diff --git a/src/funding/utils.py b/src/funding/utils.py new file mode 100644 index 000000000..c16c9d93d --- /dev/null +++ b/src/funding/utils.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import re +import string +from fnpdjango.utils.text.slughifi import char_map + +# PayU chokes on non-Polish diacritics. +# Punctuation is handled correctly and escaped as needed, +# with the notable exception of backslash. +sane_in_payu_title = re.escape( + string.uppercase + + string.lowercase + + u'Ä ÄÄÅÅóÅźżÄÄÄÅÅÃÅŹŻ' + + string.digits + + ' ' + + "".join(set(string.punctuation) - set('\\')) +) + +def replace_char(m): + char = m.group() + return char_map.get(char, '') + +def sanitize_payment_title(value): + return re.sub('[^%s]{1}' % sane_in_payu_title, replace_char, unicode(value)) diff --git a/src/funding/views.py b/src/funding/views.py new file mode 100644 index 000000000..7c9adef46 --- /dev/null +++ b/src/funding/views.py @@ -0,0 +1,228 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.core.paginator import Paginator, InvalidPage +from django.core.urlresolvers import reverse +from django.http import Http404 +from django.shortcuts import get_object_or_404, redirect, render +from django.views.decorators.csrf import csrf_exempt +from django.views.generic import TemplateView, FormView, ListView +from getpaid.models import Payment +from ssify import ssi_included +from ssify.utils import ssi_cache_control +from . import app_settings +from .forms import FundingForm +from .models import Offer, Spent, Funding + + +def mix(*streams): + substreams = [] + for stream, read_date, tag in streams: + iterstream = iter(stream) + try: + item = next(iterstream) + except StopIteration: + pass + else: + substreams.append([read_date(item), item, iterstream, read_date, tag]) + while substreams: + i, substream = max(enumerate(substreams), key=lambda x: x[1][0]) + yield substream[4], substream[1] + try: + item = next(substream[2]) + except StopIteration: + del substreams[i] + else: + substream[0:2] = [substream[3](item), item] + + +class WLFundView(TemplateView): + template_name = "funding/wlfund.html" + + def get_context_data(self): + def add_total(total, it): + for tag, e in it: + e.total = total + if tag == 'spent': + total += e.amount + else: + total -= e.wlfund + yield tag, e + + ctx = super(WLFundView, self).get_context_data() + offers = [] + + for o in Offer.past(): + if o.is_win(): + o.wlfund = o.sum() - o.target + if o.wlfund > 0: + offers.append(o) + else: + o.wlfund = o.sum() + if o.wlfund > 0: + offers.append(o) + amount = sum(o.wlfund for o in offers) - sum(o.amount for o in Spent.objects.all()) + + ctx['amount'] = amount + ctx['log'] = add_total(amount, mix( + (offers, lambda x: x.end, 'offer'), + (Spent.objects.all().select_related(), lambda x: x.timestamp, 'spent'), + )) + return ctx + + +class OfferDetailView(FormView): + form_class = FundingForm + template_name = "funding/offer_detail.html" + backend = 'getpaid.backends.payu' + + @csrf_exempt + def dispatch(self, request, slug=None): + if getattr(self, 'object', None) is None: + if slug: + self.object = get_object_or_404(Offer.public(), slug=slug) + else: + self.object = Offer.current() + if self.object is None: + raise Http404 + return super(OfferDetailView, self).dispatch(request, slug) + + def get_form(self, form_class): + if self.request.method == 'POST': + return form_class(self.object, self.request.POST) + else: + return form_class(self.object, initial={'amount': app_settings.DEFAULT_AMOUNT}) + + def get_context_data(self, *args, **kwargs): + ctx = super(OfferDetailView, self).get_context_data(*args, **kwargs) + ctx['object'] = self.object + ctx['page'] = self.request.GET.get('page', 1) + if self.object.is_current(): + ctx['funding_no_show_current'] = True + return ctx + + def form_valid(self, form): + funding = form.save() + # Skip getpaid.forms.PaymentMethodForm, go directly to the broker. + payment = Payment.create(funding, self.backend) + gateway_url_tuple = payment.get_processor()(payment).get_gateway_url(self.request) + payment.change_status('in_progress') + return redirect(gateway_url_tuple[0]) + + +class CurrentView(OfferDetailView): + @csrf_exempt + def dispatch(self, request, slug=None): + self.object = Offer.current() + if self.object is None: + return redirect(reverse('funding')) + elif slug != self.object.slug: + return redirect(reverse('funding_current', args=[self.object.slug])) + return super(CurrentView, self).dispatch(request, slug) + + +class OfferListView(ListView): + queryset = Offer.public() + + def get_context_data(self, *args, **kwargs): + ctx = super(OfferListView, self).get_context_data(*args, **kwargs) + ctx['funding_no_show_current'] = True + return ctx + + +class ThanksView(TemplateView): + template_name = "funding/thanks.html" + + def get_context_data(self, *args, **kwargs): + ctx = super(ThanksView, self).get_context_data(*args, **kwargs) + ctx['offer'] = Offer.current() + ctx['funding_no_show_current'] = True + return ctx + + +class NoThanksView(TemplateView): + template_name = "funding/no_thanks.html" + + +class DisableNotifications(TemplateView): + template_name = "funding/disable_notifications.html" + + @csrf_exempt + def dispatch(self, request): + self.object = get_object_or_404(Funding, + email=request.GET.get('email'), notify_key=request.GET.get('key')) + return super(DisableNotifications, self).dispatch(request) + + def post(self, *args, **kwargs): + self.object.disable_notifications() + return redirect(self.request.get_full_path()) + + +def offer_bar(request, pk, link=False, closeable=False, show_title=True, show_title_calling=True, add_class=""): + offer = get_object_or_404(Offer, pk=pk) + offer_sum = offer.sum() + + return render(request, "funding/includes/funding.html", { + 'offer': offer, + 'sum': offer_sum, + 'is_current': offer.is_current(), + 'is_win': offer_sum >= offer.target, + 'missing': offer.target - offer_sum, + 'percentage': 100 * offer_sum / offer.target, + 'link': link, + 'closeable': closeable, + 'show_title': show_title, + 'show_title_calling': show_title_calling, + 'add_class': add_class, + }) + + +@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) +def top_bar(request, pk): + return offer_bar(request, pk, + link=True, closeable=True, add_class="funding-top-header") + + +@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) +def list_bar(request, pk): + return offer_bar(request, pk, + link=True, show_title_calling=False) + + +@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) +def detail_bar(request, pk): + return offer_bar(request, pk, + show_title=False) + + +@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) +def offer_status(request, pk): + offer = get_object_or_404(Offer, pk=pk) + return render(request, "funding/includes/offer_status.html", { + 'offer': offer, + }) + + +@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) +def offer_status_more(request, pk): + offer = get_object_or_404(Offer, pk=pk) + return render(request, "funding/includes/offer_status_more.html", { + 'offer': offer, + }) + + +@ssi_included(patch_response=[ssi_cache_control(must_revalidate=True)]) +def offer_fundings(request, pk, page): + offer = get_object_or_404(Offer, pk=pk) + fundings = offer.funding_payed() + paginator = Paginator(fundings, 10, 2) + try: + page_obj = paginator.page(int(page)) + except InvalidPage: + raise Http404 + return render(request, "funding/includes/fundings.html", { + "paginator": paginator, + "page_obj": page_obj, + "fundings": page_obj.object_list, + }) diff --git a/src/funding/widgets.py b/src/funding/widgets.py new file mode 100644 index 000000000..8dc9742ce --- /dev/null +++ b/src/funding/widgets.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from decimal import Decimal +from django import forms +from django.template.loader import render_to_string + + +class PerksAmountWidget(forms.Textarea): + def perks_input_name(self, name): + return "_%s_perk" % name + + def render(self, name, value, attrs=None): + try: + value = Decimal(value) + except: + pass + perks = list(self.form_instance.offer.get_perks()) + perk_chosen = False + for perk in perks: + if perk.price == value: + perk.chosen = True + perk_chosen = True + break + + return render_to_string("funding/widgets/amount.html", { + "perks": perks, + "name": name, + "perks_input_name": self.perks_input_name(name), + "perk_chosen": perk_chosen, + "value": value, + "attrs": attrs, + }) + + def value_from_datadict(self, data, files, name): + num_str = data.get(self.perks_input_name(name)) or data[name] + return num_str.replace(',', '.') diff --git a/src/infopages/__init__.py b/src/infopages/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/infopages/admin.py b/src/infopages/admin.py new file mode 100644 index 000000000..14a06afa9 --- /dev/null +++ b/src/infopages/admin.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib import admin + +from modeltranslation.admin import TranslationAdmin +from infopages.models import InfoPage + +class InfoPageAdmin(TranslationAdmin): + list_display = ('title', 'slug', 'main_page') + +admin.site.register(InfoPage, InfoPageAdmin) diff --git a/src/infopages/fixtures/infopages.json b/src/infopages/fixtures/infopages.json new file mode 100644 index 000000000..4608715b9 --- /dev/null +++ b/src/infopages/fixtures/infopages.json @@ -0,0 +1,268 @@ +[ + { + "pk": 2, + "model": "infopages.infopage", + "fields": { + "title_de": "\ufeffDu kannst uns helfen", + "left_column_uk": "<h2>\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e</h2>\r\n\r\n<p>\u041c\u0438 \u043d\u0430\u043c\u0430\u0433\u0430\u0454\u043c\u043e\u0441\u044f \u044f\u043a\u043e\u043c\u043e\u0433\u0430 \u043a\u0440\u0430\u0449\u0435 \u043f\u0456\u0434\u0433\u043e\u0442\u0443\u0432\u0430\u0442\u0438 \u0442\u0432\u043e\u0440\u0438, \u044f\u043a\u0456 \u043f\u043e\u0441\u0442\u0443\u043f\u043e\u0432\u043e \u0434\u043e\u0434\u0430\u044e\u0442\u044c\u0441\u044f \u0434\u043e \u043d\u0430\u0448\u043e\u0457 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438. \u0426\u0435 \u043c\u043e\u0436\u043b\u0438\u0432\u043e \u0442\u0456\u043b\u044c\u043a\u0438 \u0437\u0430\u0432\u0434\u044f\u043a\u0438 \u043d\u0430\u0448\u0438\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c.</p>\r\n\r\n<p>\u0417\u0430\u043f\u0440\u043e\u0448\u0443\u0454\u043c\u043e \u0443\u0441\u0456\u0445, \u0445\u0442\u043e \u0445\u043e\u0447\u0435 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0443 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0448\u043a\u0456\u043b\u044c\u043d\u043e\u0457 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438 Wolne Lektury.</p>\r\n\r\n<p>\u0412\u0441\u0456\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c \u043c\u0438 \u043f\u0440\u043e\u043f\u043e\u043d\u0443\u0454\u043c\u043e \u0442\u0440\u0435\u043d\u0456\u043d\u0433\u0438 \u0456 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u0438\u0439 \u0434\u043e\u0441\u0432\u0456\u0434 \u043e\u0431\u0440\u043e\u0431\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0443: \u0437\u043c\u0456\u0441\u0442\u043e\u0432\u043d\u0435 \u0442\u0430 \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f. \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438 \u043c\u043e\u0436\u0443\u0442\u044c \u043e\u0437\u043d\u0430\u0439\u043e\u043c\u0438\u0442\u0438\u0441\u044f \u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438 \u0442\u0430 \u043c\u043e\u0436\u043b\u0438\u0432\u043e\u0441\u0442\u044f\u043c\u0438, \u043f\u043e\u0432\u2019\u044f\u0437\u0430\u043d\u0438\u043c\u0438 \u0437 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u044f\u043c\u0438.\r\n\r\n\u0421\u043f\u0456\u043b\u044c\u043d\u043e \u0437 \u043d\u0430\u043c\u0438 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438 \u043e\u0440\u0433\u0430\u043d\u0456\u0437\u0443\u044e\u0442\u044c \u0442\u0440\u0435\u043d\u0456\u043d\u0433\u0438 \u0442\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0456\u0457, \u0434\u043e\u043f\u043e\u043c\u0430\u0433\u0430\u044e\u0442\u044c \u0432 \u043f\u0456\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u0456 \u0442\u0435\u043a\u0441\u0442\u0456\u0432 \u0434\u043b\u044f \u0441\u043b\u0443\u0445\u0430\u043d\u043d\u044f (\u0442\u0430\u043a \u0437\u0432\u0430\u043d\u0438\u0445 \u0430\u0443\u0434\u0456\u043e-\u043a\u043d\u0438\u0433). \u041c\u0438 \u043f\u0456\u0434\u043f\u0438\u0441\u0443\u0454\u043c\u043e \u0437 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c\u0438 \u0443\u0433\u043e\u0434\u0438 \u0442\u0430 \u043d\u0430\u0434\u0430\u0454\u043c\u043e \u0457\u043c \u043f\u043e\u0441\u0432\u0456\u0434\u0447\u0435\u043d\u043d\u044f \u043f\u0440\u043e \u0446\u0435 \u043a\u043e\u043b\u0438 \u0456 \u044f\u043a\u0456 \u043f\u0440\u0430\u0446\u0456 \u0432\u0438\u043a\u043e\u043d\u0443\u0432\u0430\u0432 \u0434\u043b\u044f \u043d\u0430\u0448\u043e\u0433\u043e \u0444\u043e\u043d\u0434\u0443 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440. \u0422\u0440\u0435\u043d\u0456\u043d\u0433\u0438, \u0434\u043e\u0441\u0432\u0456\u0434 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u0438, \u044f\u043a\u0456 \u0446\u0435 \u0437\u0430\u0441\u0432\u0456\u0434\u0447\u0443\u044e\u0442\u044c, \u043c\u043e\u0436\u0443\u0442\u044c \u0431\u0443\u0442\u0438 \u0446\u0456\u043d\u043d\u0438\u043c\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0456 \u043f\u0456\u0434\u0432\u0438\u0449\u0435\u043d\u043d\u044f \u043a\u0432\u0430\u043b\u0456\u0444\u0456\u043a\u0430\u0446\u0456\u0439 \u0456 \u043f\u0440\u043e\u0444\u0435\u0441\u0456\u0439\u043d\u0456\u0439 \u043a\u0430\u0440'\u0454\u0440\u0456.</p>\r\n\r\n<h2>\u0429\u043e \u043c\u043e\u0436\u043d\u0430 \u0440\u043e\u0431\u0438\u0442\u0438?</h2>\r\n\r\n<p>\u041d\u0430\u0439\u0431\u0456\u043b\u044c\u0448\u0435 \u0440\u043e\u0431\u043e\u0442\u0438 \u043f\u0440\u0438\u0441\u0432\u044f\u0447\u0443\u0454\u0442\u044c\u0441\u044f \u043f\u0456\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044e \u0442\u0435\u043a\u0441\u0442\u0443 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u0457. \u0412 \u0442\u0435\u043a\u0441\u0442\u0456, \u044f\u043a\u0438\u0439 \u043c\u0438 \u043e\u0442\u0440\u0438\u043c\u0443\u0454\u043c\u043e \u0432\u0456\u0434 \u041d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438 \u0442\u0440\u0435\u0431\u0430 \u0432\u0438\u043f\u0440\u0430\u0432\u0438\u0442\u0438 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0456\u0447\u043d\u0456 \u0442\u0430 \u0456\u043d\u0448\u0456 \u043c\u0435\u0445\u0430\u043d\u0456\u0447\u043d\u0456 \u043f\u043e\u043c\u0438\u043b\u043a\u0438, \u0430 \u043f\u043e\u0442\u0456\u043c \u0434\u043e\u0434\u0430\u0442\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u0456 \u043f\u0440\u0438\u043c\u0456\u0442\u043a\u0438, \u043f\u0430\u043c\u2019\u044f\u0442\u0430\u044e\u0447\u0438 \u043f\u0440\u043e \u0446\u0435, \u0449\u043e \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u043f\u043e\u0437\u0438\u0446\u0456\u044f \u0441\u043a\u0435\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u0435\u0440\u0448 \u0437\u0430 \u0432\u0441\u0435 \u0434\u043e \u0443\u0447\u043d\u0456\u0432, \u0434\u043b\u044f \u044f\u043a\u0438\u0445 \u0431\u0430\u0433\u0430\u0442\u043e \u0441\u043b\u0456\u0432 \u0442\u0430 \u0444\u0440\u0430\u0437 \u0437\u0432\u0443\u0447\u0430\u0442\u0438\u043c\u0435 \u0430\u043d\u0430\u0445\u0440\u043e\u043d\u0456\u0447\u043d\u043e. \u0414\u0430\u0432\u043d\u0456\u0448\u0456 \u043f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u0457 (\u0432\u0441\u0435 \u0437\u0430\u043b\u0435\u0436\u0438\u0442\u044c \u0442\u0443\u0442 \u0432\u0456\u0434 \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0430) \u043f\u0456\u0434\u0434\u0430\u044e\u0442\u044c\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u043e\u043c\u0443 \u043c\u043e\u0432\u043d\u043e\u043c\u0443 \u043e\u0441\u0443\u0447\u0430\u0441\u043d\u0435\u043d\u043d\u044e, \u043d\u0430 \u043f\u0440\u0438\u043a\u043b\u0430\u0434 \u0449\u043e\u0434\u043e \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0443 \u0447\u0438 \u0444\u043b\u0435\u043a\u0441\u0456\u0457, \u043f\u0440\u0438 \u0447\u043e\u043c\u0443 \u043c\u0438 \u0434\u0431\u0430\u0454\u043c\u043e \u043f\u0440\u043e \u0446\u0435 \u0449\u043e\u0431 \u043d\u0435 \u043f\u043e\u0440\u0443\u0448\u0443\u0432\u0430\u0442\u0438 \u0430\u0440\u0442\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0443 \u0442\u0435\u043a\u0441\u0442\u0443. \u041e\u0441\u0442\u0430\u043d\u043d\u0456\u043c \u0435\u0442\u0430\u043f\u043e\u043c \u0454 \u043f\u043e\u0448\u0443\u043a \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432 \u0442\u0430 \u0442\u0435\u043c, \u044f\u043a\u0456 \u043c\u0430\u044e\u0442\u044c \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0432 \u0433\u043b\u0438\u0431\u0438\u043d\u043d\u043e\u043c\u0443 \u043f\u0456\u0437\u043d\u0430\u043d\u043d\u0456 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0438. \u0412 \u0443\u0441\u0456\u0445 \u0446\u0438\u0445 \u043f\u0440\u0430\u0446\u044f\u0445 \u043d\u0430\u0441 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0443\u044e\u0442\u044c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438 - \u0432\u0447\u0438\u0442\u0435\u043b\u0456 \u0442\u0430 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0438 - \u044f\u043a\u0456 \u0447\u0430\u0441\u0442\u043e \u0434\u043e\u043f\u043e\u043c\u0430\u0433\u0430\u044e\u0442\u044c \u0442\u0430\u043a\u043e\u0436 \u043f\u043e\u0440\u0430\u0434\u043e\u044e \u0442\u0430 \u0437\u0430\u0443\u0432\u0430\u0436\u0435\u043d\u043d\u044f\u043c\u0438 \u043f\u0440\u0438 \u043f\u0440\u0438\u0439\u043d\u044f\u0442\u0442\u0456 \u0432\u0430\u0436\u043b\u0438\u0432\u0438\u0445 \u0440\u0456\u0448\u0435\u043d\u044c.</p>\r\n\r\n<h2>\u042f\u043a \u0434\u043e \u043d\u0430\u0441 \u0437\u0433\u043e\u043b\u043e\u0441\u0438\u0442\u0438\u0441\u044f?</h2>\r\n\r\n<p>\u0423\u0441\u0456\u0445 \u0437\u0430\u0446\u0456\u043a\u0430\u0432\u043b\u0435\u043d\u0438\u0445 \u043f\u0440\u043e\u0441\u0438\u043c\u043e \u0432\u0438\u0441\u043b\u0430\u0442\u0438 \u043b\u0438\u0441\u0442\u0430 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0443 <a href=\"mail:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</p>\r\n\r\n<p>\u0417\u0430\u043f\u0440\u043e\u0448\u0443\u0454\u043c\u043e \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 <a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\">\u0441\u0430\u0439\u0442 \u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0457 Wolne Lektury</a>, \u0434\u0435 \u043c\u043e\u0436\u043d\u0430 \u0437\u043d\u0430\u0439\u0442\u0438 \u0443\u0441\u044e \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e \u043f\u0440\u043e \u0446\u0435, \u044f\u043a \u0437\u0430\u043b\u0443\u0447\u0438\u0442\u0438\u0441\u044c \u0443 \u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0439\u043d\u0443 \u0440\u043e\u0431\u043e\u0442\u0443.</p>", + "main_page": null, + "right_column_pl": "<h2>Kogo szukamy?</h2>\r\n\r\n<h3>Redaktor\u00f3w technicznych (sk\u0142ad tekstu) </h3>\r\n <p>Sk\u0142ad jest pierwszym etapem pracy nad tekstem. Za pomoc\u0105 znacznik\u00f3w j\u0119zyka WL-XML nadajemy tekstowi po\u017c\u0105dan\u0105 form\u0119 i umo\u017cliwiamy wy\u015bwietlenie go na stronie internetowej. Redakcje techniczna dokonywana jest na <a href=\"http://redakcja.wolnelektury.pl\">Platformie Redakcyjnej</a>, kt\u00f3ra pozwala na zautomatyzowanie du\u017cej cz\u0119\u015bci pracy. </p>\r\n\r\n <p><b>Kto mo\u017ce zosta\u0107 redaktorem technicznym?</b> </p>\r\n<ul>\r\n<li>Ka\u017cdy \u2013 po kr\u00f3tkim szkoleniu.</li>\r\n</ul>\r\n\r\n <p>Wi\u0119cej informacji o redakcji technicznej znajdziecie na <a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\">stronie redakcji Wolnych Lektur</a> </p>\r\n\r\n<hr/>\r\n\r\n<h3>Redaktor\u00f3w literackich (merytorycznych) </h3>\r\n <p>Redakcja literacka obejmuje korekt\u0119, uwsp\u00f3\u0142cze\u015bnienia oraz dodawanie przypis\u00f3w i motyw\u00f3w literackich. To unikalna mo\u017cliwo\u015b\u0107 zdobycia do\u015bwiadczenia w cyfrowej edycji tekst\u00f3w. </p>\r\n\r\n <p><b>Kto mo\u017ce zosta\u0107 redaktorem literackim? </b> </p>\r\n<ul>\r\n<li>Osoby, kt\u00f3re maj\u0105 do\u015bwiadczenie w redakcji tekst\u00f3w literackich,</li>\r\n<li>Studenci i absolwenci studi\u00f3w humanistycznych, kt\u00f3rzy chc\u0105 takie do\u015bwiadczenie zdoby\u0107. </li>\r\n</ul>\r\n<p>Wi\u0119cej informacji o redakcji merytorycznej znajdziecie na <a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\">stronie redakcji Wolnych Lektur</a> </p>\r\n\r\n<hr/>\r\n\r\n<h3>T\u0142umaczy</h3>\r\n <p>Strona WolneLektury.pl jest dost\u0119pna w siedmiu j\u0119zykach obcych \u2013 angielskim, francuskim, niemieckim, hiszpa\u0144skim, litewskim, rosyjskim oraz ukrai\u0144skim. U\u017cytkownikami biblioteki jest ponad 200 tysi\u0119cy os\u00f3b z zagranicy, a ju\u017c nied\u0142ugo nasze zbiory obejm\u0105 r\u00f3wnie\u017c dzie\u0142a w j\u0119zykach obcych. Dlatego potrzebujemy na bie\u017c\u0105co t\u0142umaczy\u0107 nowe informacje pojawiaj\u0105ce si\u0119 na stronie. </p>\r\n <p><b>Kto mo\u017ce pom\u00f3c w t\u0142umaczeniach? </b> </p>\r\n<ul>\r\n<li>Ka\u017cdy, kto dobrze zna co najmniej jeden z powy\u017cszych j\u0119zyk\u00f3w. </li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h3>Programist\u00f3w</h3>\r\n <p>Poza sam\u0105 stron\u0105 Wolnych Lektur tworzymy r\u00f3wnie\u017c: </p>\r\n<ul>\r\n<li>narz\u0119dzia redakcyjne,</li>\r\n<li>konwertery do r\u00f3\u017cnych format\u00f3w e-book\u00f3w, </li>\r\n<li>aplikacje mobile u\u0142atwiaj\u0105ce dost\u0119p do naszych zasob\u00f3w.</li>\r\n</ul>\r\n\r\n <p>U\u017cywamy takich technologii jak: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nTworzone przez nas oprogramowanie udost\u0119pniamy na <a href=\"https://github.com/fnp/\">wolnej licencji</a>. </p>\r\n <p><b>Kto mo\u017ce pom\u00f3c w pracach programistycznych?</b> </p>\r\n<ul>\r\n<li>Ka\u017cdy, kto umie i chcia\u0142by zdoby\u0107 punkty do karmy za udzia\u0142 w otwartym projekcie programistycznym. ;)</li>\r\n</ul>\r\n", + "right_column_lt": "<h2>Labiausiai nusipeln\u0119 savanoriai</h2>\r\n\r\n\t<h3>Agatapaszkowska (bendradarbiauja su mumis nuo 2008 m. kovo 15 d.)</h3>\r\n\r\n <p>tarp kitko pareng\u0117 \u201eW pustyni i w puszczy\u201d Sienkiewicza ; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n\r\n\r\n\t<h3>AgnieszkaKappa (bendradarbiauja su mumis nuo 2008 m. kovo 16 d.)</h3>\r\n\r\n <p>tarp kitko pad\u0117jo paruo\u0161ti literat\u016bros tem\u0173 ir motyv\u0173 s\u0105ra\u0161\u0105; parsiuo\u0161\u0117 teksto apra\u0161ymus: Sienkiewicz (Latarnik, Janko Muzykant, Quo vadis); aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>\r\n\r\n\r\n <h3>Anerys (bendradarbiauja su mumis nuo 2007 m. liepos 5 d.)</h3>\r\n\r\n <p>tarp kitko pad\u0117jo paruo\u0161ti literat\u016bros tem\u0173 ir motyv\u0173 s\u0105ra\u0161\u0105, diskusija apie literat\u016brin\u0119s r\u016b\u0161is, parsiuo\u0161\u0117 \u0161iu tekstu apra\u0161ymus; BogurodzicA, \u201eFraszki\u201d ir \u201eTrenyTreny\u201d Kochanowskiego; eil\u0117ra\u0161\u010diai: S\u0142owacki (Gr\u00f3b Agamemnona), \u201e\u015awi\u0119toszek\u201d Molier, ar poezija\u00a0\u00a0 Kasprowicz (himnas\u00a0\u00a0 \u201eDies Irae\u201d);aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d:\r\n <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n\r\n\r\n\t<h3>EmiliaZdankiewicz (bendradarbiauja su mumis nuo 2008 m. kovo 17 d.</h3>\r\n\r\n <p>tarp kitko literat\u016brinai motyvai, diskusijos, apra\u0161ymai: S\u0142owacki, Kordian; Konopnicka, Nasza szkapa; Mickiewicz, Dziady cz. III; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz</a></p>\r\n\r\n\r\n\t<h3>Ewa_Serafin (bendradarbiauja su mumis nuo 2008 m. kovo 15 d.)</h3>\r\n\r\n <p>tarp kitko pad\u0117jo paruo\u0161ti literat\u016bros tem\u0173 ir motyv\u0173 s\u0105ra\u0161\u0105, parsiuo\u0161\u0117 \u0161iu poeti\u0161ku tekstu apra\u0161ymus: Kasprowicz (\u201eZ wichr\u00f3w i hal\u201d, \u201eNad przepa\u015bciami\u201d, \u201eW ciemno\u015bci schodzi moja dusza\u201d oraz \u201eNad Niemnem\u201d Orzeszkowej; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi</a>n</p>\r\n\r\n\r\n \t<h3>Hanna_Golab (bendradarbiauja su mumis nuo 2008 m. kovo 15 d.)</h3>\r\n\r\n <p>apra\u0161\u0117:\u201eKr\u00f3la Edypa\u201d Sofoklesa ir \u201eDusio\u0142k\u201d Le\u015bmian; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></p>\r\n\r\n\r\n\t<h3>Ingene (bendradarbiauja su mumis nuo 2008 m. liepos 16 d.)</h3>\r\n\r\n <p>tarp kitko apra\u0161\u0117: \u201eSi\u0142aczka\u201d \u017beromski, \u201eQuo vadis\u201d Sienkiewicz ir \u201eTreny\u201d Kochanowski; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene</a></p>\r\n \r\n\t<h3>Jmyszkowska (bendradarbiauja su mumis nuo 2008 m. kovo 26 d.)</h3>\r\n\r\n <p>tarp kitko apra\u0161\u0117 \u201eGiaura\u201d Byron ir \u201eQuo vadis\u201d Sienkiewicz; aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></p>\r\n\r\n\r\n <h3>Marysiabailey (bendradarbiauja su mumis nuo 2007 m. spalio 1 d.)</h3>\r\n\r\n <p>tarp kitko pad\u0117jo paruo\u0161ti literat\u016bros tem\u0173 ir motyv\u0173 s\u0105ra\u0161\u0105; apra\u0161\u0117 \u201eCh\u0142opi\u201d Reymont, \u201eLalka\u201d Prus, \u201eNie-Bosk\u0105 komedia\u201d Krasi\u0144skie, \u201eBajki\u201d ir \u201eSatyry\u201d Krasicki, \u201eAntygona\u201d Sofokles ir k\u016brinius: Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman, Kasprowicz; zob. ;aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey</a>; parose ir ved\u0117 apmokymus savanoriams 2008 m. kovo 15 d.; u\u017esiimin\u0117jo proofreading, o dabartiniu metu vadovauja darbams susijusiems su audio knyg\u0173 ruo\u0161imu.</p>\r\n\r\n\r\n <h3>Olga_Wojtczak (bendradarbiauja su mumis nuo 2008 m. spalio 21 d.)</h3>\r\n\r\n <p>tarp kitko apra\u0161e roman\u0105 Sienkiewicz (Trilogija), Reymont, \u017beromski, dramos Shakespear; ;aplankyk taip pat tinklap\u012f \u201evartotojo \u012fna\u0161\u0105\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak</a></p>\r\n\r\n\r\n <h3>Renataml (bendradarbiauja su mumis nuo 2007 m. bir\u017eelio 30 d.)</h3>\r\n\r\n <p>pad\u0117jo parsiuo\u0161ti diskusij\u0105 apie motyv\u0173 s\u0105ra\u0161\u0105, patar\u0117 mums, nes tai patyrusi mokytoja, \u201eLalk\u0119\u201d Prusa, \u201eBalladyn\u0119\u201d S\u0142owackiego, \u201eSi\u0142aczk\u0119\u201d \u017beromskiego.\r\n\r\n <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</a></p>\r\n", + "left_column_lt": "<h2>Savanori\u0161ka veikla</h2>\r\n\r\n <p>D\u0117ka savanori\u0173 k\u016brini\u0173 apra\u0161ymai, kurie yra \u012fjungiami \u012f m\u016bs\u0173 bibliotek\u0105 yra kiekvien\u0105 kart\u0105 kruop\u0161\u010diai paruo\u0161iami.</p>\r\n \r\n \r\n <p>Kvie\u010diame visus, kurie nori kartu su mumis kurti mokykline internetine bibliotek\u0105 Laisvoji Literat\u016bra.</p>\r\n \r\n <p>Visiem savanoriams teikiame apmokym\u0105 ir praktik\u0105 suri\u0161ta su teksto editavimu: techninis ir esminis teksto redagavimas. \r\n Savanoriai gali susipa\u017einti su problemom suri\u0161tomis su teksto platinimu internete, bet ir su galimybe juos i\u0161ri\u0161ti.\r\n Savanoriai padeda mums organizuoti apmokymus ir konferencijas, taip pat padeda paruo\u0161ti knyg\u0173 garso \u012fra\u0161us (taip vadinamos: audio knygos). \r\n Kiekvienam savanoriui kuris nori parvirtimo bei paliudijimo, kad dirbo (ir k\u0105 veik\u0117) m\u016bs\u0173 fonde, suteikiame tokia galimyb\u0119.\r\n Apmokymai, praktika ir paliudijimas gali prisid\u0117ti prie darbo kvalifikacij\u0173 pak\u0117limo.</p>\r\n\r\n <h2>K\u0105 dar galima padaryti?</h2>\r\n \r\n <p>Daug darbo yra ruo\u0161iant mokyklin\u0119 literat\u016br\u0105 leidimui. Perdirbti reikia tekst\u0105, kuri gauname i\u0161 Lenkijos Nacionalines\r\n Bibliotekos reikia pa\u0161alinti korekt\u016bros ir kitas klaidas, o veliau sukurti i\u0161na\u0161as, vis\u0105 laik\u0105 reikia tur\u0117ti omeny kad \r\n m\u016bs\u0173 svetain\u0119 aplanko da\u017eniausiai jaunimas ir visu pirma jiems tekstas turi b\u016bti \u012fdomus. \r\n Ankstesnieji knyg\u0173 ledinei turi pereiti kalbos modernizacij\u0105 (tai diktuoja autori\u0173 teis\u0117s) pvz.: ra\u0161ybos ar kaitybos kartu \r\n reikia stengtis kad nepa\u017eeisti menini\u0173 teksto savybi\u0173. Paskutinis etapas tai ie\u0161kojimas literat\u016brini\u0173 motyv\u0173 ir tem\u0173\r\n kurie per\u017ei\u016br\u0117s k\u016briny perd\u0117m. Visuose \u0161iuose darbuose mare mus savanoriai - mokytojai ir studentai - da\u017enai pataria atkreipia d\u0117mesy, padeda nuspr\u0119sti.</p>\r\n \r\n <h2>Kaip prie m\u016bs\u0173 prisijungti?</h2>\r\n \r\n <p>Susidom\u0117jusius kvie\u010diame ra\u0161yti: e-pa\u0161tas <a href=\"mail:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</p>\r\n\r\n <p>Kvie\u010diame tai pat aplankyti <a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\">redakcijos Laisvoji Literat\u016bra tinklap\u012f</a>, \r\n kur galim surasti visas reikalingas \u017einias apie tai kaip prisijungi \u012f redakcini darb\u0105.</p>", + "title_fr": "Vous pouvez nous aider", + "right_column_ru": "<h2>\u0421\u0430\u043c\u044b\u0435 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u0435 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b</h2>\r\n\r\n\t<h3>Agatapaszkowska (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 15 \u043c\u0430\u0440\u0442\u0430 2008)</h3>\r\n\r\n <p>\u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u201e\u0412 \u043f\u0443\u0441\u0442\u044b\u043d\u0435 \u0438 \u043f\u0443\u0449\u0435\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 ; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n\r\n\r\n\t<h3>AgnieszkaKappa (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 16 \u043c\u0430\u0440\u0442\u0430 2008)</h3>\r\n\r\n <p> \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c; \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 (\"\u041c\u0430\u044f\u0447\u043d\u0438\u043a\", \"\u042f\u043d\u043a\u043e-\u043c\u0443\u0437\u044b\u043a\u0430\u043d\u0442\", \"\u041a\u0430\u043c\u043e \u0433\u0440\u044f\u0434\u0435\u0448\u0438\"); \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>\r\n\r\n\r\n <h3>Anerys (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 5 \u0438\u044e\u043b\u044f 2007)</h3>\r\n\r\n <p> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u0436\u0430\u043d\u0440\u043e\u0432, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u0411\u043e\u0433\u043e\u0440\u043e\u0434\u0438\u0446\u0443, \u201e\u042d\u043f\u0438\u0433\u0440\u0430\u043c\u043c\u044b\u201d \u0438 \u201e\u0422\u0440\u0435\u043d\u044b\u201d \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u043a\u043e\u0433\u043e; \u0441\u0442\u0438\u0445\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u044f \u0421\u043b\u043e\u0432\u0430\u0446\u043a\u043e\u0433\u043e (Gr\u00f3b Agamemnona), \u201e\u041e\u0431\u043c\u0430\u043d\u0449\u0438\u043a\u0430\u201d \u041c\u043e\u043b\u044c\u0435\u0440\u0430, \u043f\u043e\u044d\u0437\u0438\u044e \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0438\u0447\u0430 (\u0432 \u0442.\u0447. \u0433\u0438\u043c\u043d \u201eDies Irae\u201d) \u0438 \u0434\u0440.; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n\r\n\r\n\t<h3>EmiliaZdankiewicz (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 17 \u043c\u0430\u0440\u0442\u0430 2008)</h3>\r\n\r\n <p> \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0435 \u043c\u043e\u0442\u0438\u0432\u044b: \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u044f \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435, \u0421\u043b\u043e\u0432\u0430\u0446\u043a\u0438\u0439 \"\u041a\u043e\u0440\u0434\u0438\u0430\u043d\"; \u041a\u043e\u043d\u043e\u043f\u043d\u0438\u0446\u043a\u0430\u044f \"Nasza szkapa\"; \u041c\u0438\u0446\u0435\u043a\u0432\u0438\u0447 \"\u0414\u0437\u044f\u0434\u044b \u0447. III\" \u0438 \u0434\u0440.; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz</a></p>\r\n\r\n\r\n\t<h3>Ewa_Serafin (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 15 \u043c\u0430\u0440\u0442\u0430 2008)</h3>\r\n\r\n <p> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u043f\u043e\u044d\u0437\u0438\u044e \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0438\u0447\u0430 (\u201eZ wichr\u00f3w i hal\u201d, \u201eNad przepa\u015bciami\u201d, \u201eW ciemno\u015bci schodzi moja dusza\u201d), \u0430 \u0442\u0430\u043a\u0436\u0435 \u201eNad Niemnem\u201d \u041e\u0436\u0435\u0448\u043a\u043e; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi</a>n</p>\r\n\r\n\r\n \t<h3>Hanna_Golab (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 15 \u043c\u0430\u0440\u0442\u0430 2008)</h3>\r\n\r\n <p>\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u201e\u0426\u0430\u0440\u044f \u042d\u0434\u0438\u043f\u0430\u201d \u0421\u043e\u0444\u043e\u043a\u043b\u0430, \u0432 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u201eDusio\u0142ek\u201d \u041b\u0435\u0441\u044c\u043c\u044f\u043d\u0430; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></p>\r\n\r\n\r\n\t<h3>Ingene (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 16 \u0438\u044e\u043b\u044f 2008)</h3>\r\n\r\n <p> \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u201eSi\u0142aczka\u201d \u0416\u0435\u0440\u043e\u043c\u0441\u043a\u043e\u0433\u043e, \u201e\u041a\u0430\u043c\u043e \u0433\u0440\u044f\u0434\u0435\u0448\u0438\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430, \u201e\u0422\u0440\u0435\u043d\u044b\u201d \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u0438 \u0434\u0440.; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene</a></p>\r\n \r\n\t<h3>Jmyszkowska (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 26 \u043c\u0430\u0440\u0442\u0430 2008)</h3>\r\n\r\n <p>\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u201e\u0413\u044f\u0443\u0440\u0430\u201d \u0411\u0430\u0439\u0440\u043e\u043d\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u201e\u041a\u0430\u043c\u043e \u0433\u0440\u044f\u0434\u0435\u0448\u0438\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></p>\r\n\r\n\r\n <h3>Marysiabailey (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 1 \u043e\u043a\u0442\u0430\u0431\u0440\u044f 2007)</h3>\r\n\r\n <p>\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0438\u0445 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f; \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0430 \u201e\u041c\u0443\u0436\u0438\u043a\u043e\u0432\u201d \u0420\u0435\u0439\u043c\u043e\u043d\u0442\u0430, \u201e\u041a\u0443\u043a\u043b\u0443\u201d \u041f\u0440\u0443\u0441\u0430, \u201e\u041d\u0435\u0431\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043a\u043e\u043c\u0435\u0434\u0438\u044e\u201d \u041a\u0440\u0430\u0441\u0438\u043d\u044c\u0441\u043a\u043e\u0433\u043e, \u201eBajki\u201d \u0438 \u201eSatyry\u201d \u041a\u0440\u0430\u0441\u0438\u0446\u043a\u043e\u0433\u043e, \u201e\u0410\u043d\u0442\u0438\u0433\u043e\u043d\u0443\u201d \u0421\u043e\u0444\u043e\u043a\u043b\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u043a\u043e\u0433\u043e, \u041c\u043e\u0440\u0448\u0442\u0438\u043d\u0430, \u041c\u0438\u0446\u043a\u0435\u0432\u0438\u0447\u0430, \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0438\u0447\u0430, \u0413\u0435\u0442\u0435, \u041e\u043f\u043f\u043c\u0430\u043d\u0430; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey</a>; \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0430 \u0438 \u0432\u0435\u043b\u0430 \u0443\u0447\u0435\u0431\u0443 \u0434\u043b\u044f \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u043e\u0432 15 \u043c\u0430\u0440\u0442\u0430 2008; \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0430\u0441\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0443\u0440\u043e\u0439, \u0441\u0435\u0439\u0447\u0430\u0441 \u0436\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u043d\u0430\u0434 \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433\u0430\u043c\u0438.</p>\r\n\r\n\r\n <h3>Olga_Wojtczak (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 21 \u043e\u043a\u0442\u0430\u0431\u0440\u044f 2008)</h3>\r\n\r\n <p>\u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0430 \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u043e\u043c\u0430\u043d\u044b \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 (\"\u0422\u0440\u0438\u043b\u043e\u0433\u0438\u044f\"), \u0420\u0435\u0439\u043c\u043e\u043d\u0442\u0430, \u0416\u0435\u0440\u043e\u043c\u0441\u043a\u043e\u0433\u043e, \u0434\u0440\u0430\u043c\u044b \u0428\u0435\u043a\u0441\u043f\u0438\u0440\u0430; \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435 \u201e\u0432\u043a\u043b\u0430\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u201d: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak</a></p>\r\n\r\n\r\n <h3>Renataml (\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u0442 \u0441 \u043d\u0430\u043c\u0438 \u0441 30 \u0438\u044e\u043d\u044f 2007)</h3>\r\n\r\n <p>\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438 \u043d\u0430\u0441\u0447\u0435\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 \u043c\u043e\u0442\u0438\u0432\u043e\u0432; \u043a\u0430\u043a \u043e\u043f\u044b\u0442\u043d\u044b\u0439 \u0443\u0447\u0438\u0442\u0435\u043b\u044c, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0430 \u043d\u0430\u0441 \u0441\u043e\u0432\u0435\u0442\u0430\u043c\u0438, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u201e\u041a\u0443\u043a\u043b\u0443\u201d \u041f\u0440\u0443\u0441\u0430, \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u201eBalladyn\u0430\u201d \u0421\u043b\u043e\u0432\u0430\u0446\u043a\u043e\u0433\u043e, \u201eSi\u0142aczk\u0119\u201d \u0416\u0435\u0440\u043e\u043c\u0441\u043a\u043e\u0433\u043e.\r\n\r\n <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</a></p>", + "left_column_fr": "<h2>B\u00e9n\u00e9volat</h2>\r\n\r\n <p>Nous essayons de r\u00e9diger les oeuvres ajout\u00e9es successivement \u00e0 notre biblioth\u00e8que le mieux possible. Ce n'est possible que gr\u00e2ce \u00e0 nos b\u00e9n\u00e9voles.</p>\r\n\r\n \r\n <p>Nous invitons tous ceux qui veulent contribuer \u00e0 la cr\u00e9ation de la biblioth\u00e8que en ligne Lectures libres \u00e0 coop\u00e9rer avec nous.</p>\r\n \r\n <p>Tous les b\u00e9n\u00e9voles peuvent profiter de l'apprentissage et gagner de la pratique en \u00e9dition du texte: r\u00e9daction technique et du contenu. Les b\u00e9n\u00e9voles ont la possibilit\u00e9 de d\u00e9couvrir les probl\u00e8mes, mais aussi les possibilit\u00e9s li\u00e9es avec les publications en ligne. Ils co-organisent des entra\u00eenements et des conf\u00e9rences, aident \u00e0 pr\u00e9parer des versions des textes \u00e0 \u00e9couter (livres audio). Les b\u00e9n\u00e9voles obtiennent un contrat et un certificat pr\u00e9cisant quand et en quelle qualit\u00e9 ils ont aid\u00e9 notre fondation. Des entra\u00eenements, la pratique de l'\u00e9dition et les c\u00e9rtificats qui les confirment peuvent vous aider \u00e0 d\u00e9montrer vos comp\u00e9tences et peuvent \u00eatre tr\u00e8s precieux pour votre d\u00e9veloppement professionnel.</p>\r\n\r\n \r\n <h2>Qu'est-ce qu'il y a \u00e0 faire?</h2>\r\n \r\n <p>Le plus de travail est consacr\u00e9 \u00e0 pr\u00e9parer le texte pour la publication. Dans le texte qu'on re\u00e7oit de la Biblioth\u00e8que nationale il faut corriger les fautes de frappe ou autres erreurs m\u00e9caniques, et puis ajouter des annotations tout en sachant que norte offre est cibl\u00e9e aux \u00e9l\u00e8ves, pour lesquels beaucoup des mots sembleront anachroniques. Dans les \u00e9ditions plus anciennes (tout en vue du droit d'auteur) on introduit des modernisations de la langue par exemple en ce qui concerne l'orthographe ou flexion, tout en prenant soin \u00e0 ne pas d\u00e9former la sp\u00e9cificit\u00e9 artistique du texte. Derni\u00e8re \u00e9tape c'est la recherche des motifs et th\u00e8mes litt\u00e9raires, pour aider \u00e0 conna\u00eetre la litt\u00e9rature d'une fa\u00e7on r\u00e9element profonde. Dans tous ces travaux nous sommes aid\u00e9s par les b\u00e9n\u00e9voles - professeurs et \u00e9tudiants - dont les conseils et commentaires nous aident fr\u00e9quemment \u00e0 prendre des d\u00e9cisions importantes.</p>\r\n \r\n <h2>Comment nous contacter?</h2>\r\n \r\n <p>Toutes les personnes int\u00e9ress\u00e9es sont invit\u00e9es \u00e0 envoyer un message \u00e0 l'adresse <a href=\"mail:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</p>\r\n\r\n <p>Vous pouvez aussi visiter <a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\">le site de la r\u00e9daction Lectures Libres</a>, o\u00f9 on peut trouver toutes les informations n\u00e9cessaires, expliquant comment se joindre \u00e0 nos travaux de r\u00e9daction.</p>", + "title": "You can help us", + "title_lt": "Gali mums padeti", + "right_column": "<h2>The most noteworthy volunteers</h2>\r\n\r\n\t\r\n\r\n<h3>AgataPaszkowska (contributes to the website since March 15, 2008)</h3>\r\n\r\n <p>Among the others, she worked on Henryk Sienkiewicz's \"In Desert nad Wilderness\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n\r\n\r\n\t\r\n\r\n\r\n\r\n<h3>AgnieszkaKappa (contributes to the website since March 16, 2008)</h3>\r\n\r\n <p>Among the others, she participated in creating the booklist and descritpion of the usage of the motifs and themes; worked on Henryk Sienkiewicz's works (\"The Lighthouse Keeper\", \"Janko Muzykant\", \"Quo vadis\"); cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>\r\n\r\n\r\n \r\n\r\n\r\n\r\n<h3>Anerys (contributes to the website since July 5, 2007)</h3>\r\n\r\n <p>Among the others, she took part in creating the list of literary motifs and themes, and dicussion on the literary genres, she worked on Bogurodzica, Jan Kochanowski's \"Fraszki\" and \"Laments\"; Juliusz S\u0142owacki's poems (\"Gr\u00f3b Agamemnona\"), Moliere's \"Tartuffe\" and Jan Kasprowicz's poems (together with \"Dies Irae\" hymn); cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<h3>EmiliaZdankiewicz (contributes to the website since March 17, 2008)</h3>\r\n\r\n <p>Among the others: literary motifs, discussion and descriptions; Juliusz S\u0142owacki's \"Kordian\"; Maria Konopnicka's \"Nasza Szkapa\"; Adam Mickiewicz's \"Dziady, part III); cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz</a></p>\r\n\r\n\r\n\r\n<h3>Ewa_Serafin (contributes to the website since March 15, 2008)</h3>\r\n\r\n <p>Among the others, she participated in creating list and usage description of literary motifsand themes; she worked on Jan Kasprowicz poems (\"Z wichr\u00f3w i hal\", \"Nad przepa\u015bciami\", \"W ciemno\u015bci schodzi moja dusza\") and Eliza Orzeszkowa's \"On the Niemen\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi</a>n</p>\r\n\r\n\r\n \r\n\r\n\r\n\r\n<h3>Hanna_Golab (contributes to the website since March 15, 2008)</h3>\r\n\r\n <p>She worked on Sophocles' \"Oedipus the King\" and Boles\u0142aw Le\u015bmian's \"Dusio\u0142ek\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></p>\r\n\r\n\r\n\r\n<h3>Ingene (contributes to the website since July 16, 2008) </h3>\r\n\r\n <p>Among the others, she worked on Stefan \u017beromski's \"Si\u0142aczka\", Henryk Sienkiewicz's \"Quo vadis\" and Jan Kochanowski's \"Laments\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene</a></p>\r\n \r\n\r\n\r\n\r\n<h3>Jmyszkowska (contributes to the website since March 26, 2008) <p>Among the others, she worked on Byron's \"Giaour\" and Henryk Sienkiewicz's \"Quo vadis\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></p>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<h3>Marysiabailey (contributes to the website since October 1, 2007)</h3>\r\n\r\n <p>Among the others, she took part in creating the list of literary themes and motifs and description of usage of those bra\u0142a udzia\u0142; worked on W\u0142adys\u0142aw Reymont's \"Ch\u0142opi\", Boles\u0142aw Prus' \"The Doll\", Zygmunt Krasi\u0144ski's \"Nie-boska komedia\", Ignacy Krasicki's \"Fables\" and \"Satires\", Sophocles' \"Antigone\" and poems of Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Geothe and Oppman; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey</a>; Furthermore, she prepared and carried on the training for volunteers and took care of proofreading. Currently she's managing the works on audiobooks.</p>\r\n\r\n\r\n \r\n\r\n\r\n\r\n<h3>Olga_Wojtczak (contributes to the website since October 21, 2008)</h3>\r\n\r\n <p>Among the others, she worked on Henryk Sienkiewicz's novels (The Trilogy), the works of W\u0142adys\u0142aw Reymont and Stefan \u017beromski, as well as Shakespeare's dramas;cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak</a></p>\r\n\r\n\r\n \r\n\r\n\r\n\r\n<h3>Renataml (contributes to the website since June 30, 2007)</h3>\r\n\r\n <p>She took part in the discussion on list of motifs, as a experienced teacher she supported us with pieces of advice; edited Boles\u0142aw Prus' \"The Doll\", Juliusz S\u0142owacki's \"Balladyna\", Stefan \u017beromski's \"Si\u0142aczka\". <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</a></p>", + "right_column_es": "<h2> Los voluntarios a los que merecemos mucho </h2>\r\n\r\n\r\n\r\n\t<h3>Agatapaszkowska (trabaja con nosotros desde el 15 de marzo 2008)</h3>\r\n\r\n\r\n\r\n <p> edit\u00f3, entre otros, \u201cW pustynii i w puszczy\u201d de Sienkiewicz ; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n\r\n\r\n\r\n\r\n\r\n\t<h3>AgnieszkaKappa (trabaja con nosotros desde el 16 de marzo 2008) </h3>\r\n\r\n\r\n\r\n <p>particip\u00f3 en la creaci\u00f3n de la lista y la descripci\u00f3n del uso de los motivos y temas literarios, edit\u00f3 los textos de Sienkiewicz (\u201cFarero\u201d, \u201cJanko Muzykant\u201d, \u201cQuo vadis\u201d); ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>\r\n\r\n\r\n\r\n\r\n\r\n <h3>Anerys (trabaja con nosotros desde el 5 de julio 2007)</h3>\r\n\r\n\r\n\r\n <p> particip\u00f3 en la creaci\u00f3nn de la lista de los motivos y temas literarios y la debate sobre los g\u00e9neros literarios, edit\u00f3 Bogurodzica, \u201cFraszki\u201d y \u201cTreny\u201d de Kochanowski, poemas de S\u0142owacki (\u201cLa tumba de Agamemnon\u201d), \u201cTartufo\u201d de Moliere y los poemas de Kasprowicz (el himno \u201cDies Irae\u201d); ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n\r\n\r\n\r\n\r\n\r\n\t<h3>EmiliaZdankiewicz (trabaja con nosotros desde el 17 de marzo 2008)</h3>\r\n\r\n\r\n\r\n <p>edit\u00f3 y discut\u00f3 sobre los motivos literarios, \u201cKordian\u201d de S\u0142owacki, \u201cNasza Szkapa\u201d de Konopnicka,\u201dDziady\u201d parte III de Mickiewicz; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz</a></p>\r\n\r\n\r\n\r\n\r\n\r\n\t<h3>Ewa_Serafin (trabaja con nosotros desde el 15 de marzo 2008)</h3>\r\n\r\n\r\n\r\n <p> particip\u00f3 en la creaci\u00f3n de la lista y la descripci\u00f3n del uso de los motivos y temas literarios, edit\u00f3 los poemas de Kasprowicz (\u201cZ wichr\u00f3w i hal\u201d, \u201cNad przepa\u015bciami\u201d, \u201cW ciemno\u015bci schodzi moja dusza\u201d) y \u201cNad Niemnem\u201d de Orzeszkowa; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi</a>n</p>\r\n\r\n\r\n\r\n\r\n\r\n \t<h3>Hanna_Golab (trabaja con nosotros desde el 15 de marzo 2008)</h3>\r\n\r\n\r\n\r\n <p> edit\u00f3 \u201cEdipo Rey\u201d de S\u00f3focles y \u201cDusio\u0142ek\u201d de Le\u015bmian; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></p>\r\n\r\n\r\n\r\n\r\n\r\n\t<h3>Ingene (trabaja con nosotros desde el 16 de julio 2008)</h3>\r\n\r\n\r\n\r\n <p>edit\u00f3 \u201eSi\u0142aczka\u201dde \u017beromski, \u201eQuo vadis\u201d de Sienkiewicz y \u201eTreny\u201d de Kochanowski; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene</a></p>\r\n\r\n \r\n\r\n\t<h3>Jmyszkowska (trabaja con nosotros desde el 26 de marzo 2008)</h3>\r\n\r\n\r\n\r\n <p> edit\u00f3 \u201cGiaur\u201d de Byron y \u201cQuo vadis\u201d de Sienkiewicz; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></p>\r\n\r\n\r\n\r\n\r\n\r\n <h3>Marysiabailey (trabaja con nosotros desde el 1 de octubre 2007)</h3>\r\n\r\n\r\n\r\n <p> partici\u00f3 en la creaci\u00f3n de la lista de motivos y temas literarios y la descripci\u00f3n de su uso, edit\u00f3 \u201cLos campesinos\u201d de Reymont, \u201cLa mu\u00f1eca\u201d de Prus, \u201cNie-boska komedia\u201d de Krasi\u0144ski, \u201cFabulas\u201d y \u201cS\u00e1tiras\u201d de Krasicki, \u201cAnt\u00edgona\u201d de S\u00f3focles y las obras de Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey</a>; adem\u00e1s prepar\u00f3 y condujo el curso para voluntarios el 15 de marzo 2008; se ocupaba de proofreading y actualmente coordina los trabajos sobre los audiolibros.</p>\r\n\r\n\r\n\r\n\r\n\r\n <h3>Olga_Wojtczak (trabaja con nosotros desde el 21 de octubre 2008)</h3>\r\n\r\n\r\n\r\n <p> edit\u00f3 las novelas de Sienkiewicz (\u201cLa Trilogia\u201d), Reymont, \u017beromski, las dramas de Shakespeare; ved tambi\u00e9n \u201ccontribuci\u00f3n del usuario\u201d en nuestra p\u00e1gina: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak</a></p>\r\n\r\n\r\n\r\n\r\n\r\n <h3>Renataml (trabaja con nosotros desde el 30 de junio 2007)</h3>\r\n\r\n\r\n\r\n <p>particip\u00f3 en la debate sobre la lista de motivos literarios, nos ayud\u00f3 con sus consejos de profesora con experiencia, edit\u00f3 \u201cLa mu\u00f1eca\u201d de Prus, \u201cBalladyna\u201d de S\u0142owacki, \u201cSi\u0142aczka\u201d de \u017beromski. <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</a></p>", + "right_column_en": "<h2>The most noteworthy volunteers</h2>\r\n\r\n\t\r\n\r\n<h3>AgataPaszkowska (contributes to the website since March 15, 2008)</h3>\r\n\r\n <p>Among the others, she worked on Henryk Sienkiewicz's \"In Desert nad Wilderness\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n\r\n\r\n\t\r\n\r\n\r\n\r\n<h3>AgnieszkaKappa (contributes to the website since March 16, 2008)</h3>\r\n\r\n <p>Among the others, she participated in creating the booklist and descritpion of the usage of the motifs and themes; worked on Henryk Sienkiewicz's works (\"The Lighthouse Keeper\", \"Janko Muzykant\", \"Quo vadis\"); cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>\r\n\r\n\r\n \r\n\r\n\r\n\r\n<h3>Anerys (contributes to the website since July 5, 2007)</h3>\r\n\r\n <p>Among the others, she took part in creating the list of literary motifs and themes, and dicussion on the literary genres, she worked on Bogurodzica, Jan Kochanowski's \"Fraszki\" and \"Laments\"; Juliusz S\u0142owacki's poems (\"Gr\u00f3b Agamemnona\"), Moliere's \"Tartuffe\" and Jan Kasprowicz's poems (together with \"Dies Irae\" hymn); cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<h3>EmiliaZdankiewicz (contributes to the website since March 17, 2008)</h3>\r\n\r\n <p>Among the others: literary motifs, discussion and descriptions; Juliusz S\u0142owacki's \"Kordian\"; Maria Konopnicka's \"Nasza Szkapa\"; Adam Mickiewicz's \"Dziady, part III); cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz</a></p>\r\n\r\n\r\n\r\n<h3>Ewa_Serafin (contributes to the website since March 15, 2008)</h3>\r\n\r\n <p>Among the others, she participated in creating list and usage description of literary motifsand themes; she worked on Jan Kasprowicz poems (\"Z wichr\u00f3w i hal\", \"Nad przepa\u015bciami\", \"W ciemno\u015bci schodzi moja dusza\") and Eliza Orzeszkowa's \"On the Niemen\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi</a>n</p>\r\n\r\n\r\n \r\n\r\n\r\n\r\n<h3>Hanna_Golab (contributes to the website since March 15, 2008)</h3>\r\n\r\n <p>She worked on Sophocles' \"Oedipus the King\" and Boles\u0142aw Le\u015bmian's \"Dusio\u0142ek\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></p>\r\n\r\n\r\n\r\n<h3>Ingene (contributes to the website since July 16, 2008) </h3>\r\n\r\n <p>Among the others, she worked on Stefan \u017beromski's \"Si\u0142aczka\", Henryk Sienkiewicz's \"Quo vadis\" and Jan Kochanowski's \"Laments\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene</a></p>\r\n \r\n\r\n\r\n\r\n<h3>Jmyszkowska (contributes to the website since March 26, 2008) <p>Among the others, she worked on Byron's \"Giaour\" and Henryk Sienkiewicz's \"Quo vadis\"; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></p>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<h3>Marysiabailey (contributes to the website since October 1, 2007)</h3>\r\n\r\n <p>Among the others, she took part in creating the list of literary themes and motifs and description of usage of those bra\u0142a udzia\u0142; worked on W\u0142adys\u0142aw Reymont's \"Ch\u0142opi\", Boles\u0142aw Prus' \"The Doll\", Zygmunt Krasi\u0144ski's \"Nie-boska komedia\", Ignacy Krasicki's \"Fables\" and \"Satires\", Sophocles' \"Antigone\" and poems of Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Geothe and Oppman; cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey</a>; Furthermore, she prepared and carried on the training for volunteers and took care of proofreading. Currently she's managing the works on audiobooks.</p>\r\n\r\n\r\n \r\n\r\n\r\n\r\n<h3>Olga_Wojtczak (contributes to the website since October 21, 2008)</h3>\r\n\r\n <p>Among the others, she worked on Henryk Sienkiewicz's novels (The Trilogy), the works of W\u0142adys\u0142aw Reymont and Stefan \u017beromski, as well as Shakespeare's dramas;cf. \"User's contribution\" on our website: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak</a></p>\r\n\r\n\r\n \r\n\r\n\r\n\r\n<h3>Renataml (contributes to the website since June 30, 2007)</h3>\r\n\r\n <p>She took part in the discussion on list of motifs, as a experienced teacher she supported us with pieces of advice; edited Boles\u0142aw Prus' \"The Doll\", Juliusz S\u0142owacki's \"Balladyna\", Stefan \u017beromski's \"Si\u0142aczka\". <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</a></p>", + "left_column_de": "<h2>Volontariat</h2>\r\n\r\n <p>Wir sind stets bem\u00fcht, unseren Bibliothekbestand st\u00e4ndig um neue Werke zu erweitern. Dies ist nur \r\n dank der Hilfe unserer Volont\u00e4re m\u00f6glich.</p>\r\n\r\n <p>Wir laden herzlich alle Menschen ein, die sich an der Mitgestaltung unserer Internet-Schulbibliothek beteiligen wollen.</p>\r\n \r\n \r\n \r\n <p>Allen Volont\u00e4ren bieten wir Schulungen und Praktikum im Bereich der Textverarbeitung an: \r\n technische und sachliche Redaktion. Volont\u00e4re k\u00f6nnen mehr \u00fcber Probleme und M\u00f6glichkeiten erfahren, \r\n die mit der Ver\u00f6ffentlichung von Internetpublikationen verbunden sind. Unsere Volont\u00e4re beteiligen \r\n sich zudem an der Organisation von Schulungen und Konferenzen, helfen bei der Vorbereitung \r\n von H\u00f6rtexten (sog. Audiobooks). Wir stellen Vertr\u00e4ge und Bescheinigungen unseren Volont\u00e4ren \r\n bez\u00fcglich der Art der T\u00e4tigkeit und deren Zeitrahmen aus. Schulungen, Verlagspraktikum sowie \r\n w\u00e4hrend des Volontariats erworbene Erfahrungen und Kompetenzen k\u00f6nnen ganz gewiss zum beruflichen Aufstieg verhelfen.</p> \r\n \r\n \r\n <h2>Was zu tun ist?</h2>\r\n \r\n <p>Der Gro\u00dfteil der Arbeit liegt in der Vorbereitung der Lekt\u00fcren zur Ver\u00f6ffentlichung. Die Texte, die wir \r\n von der Nationalbibliothek bekommen, m\u00fcssen auf Tipp- und andere mechanische Fehler \u00fcberpr\u00fcft werden. \r\n Die Anmerkungen m\u00fcssen in den Text eingef\u00fcgt werden. Es sei zu bedenken, dass unsere Zielgruppe Sch\u00fcler sind, \r\n so m\u00fcssen dementsprechend die W\u00f6rter und Wendungen an diese Altersgruppe angepasst werden. \u00c4ltere Ausgaben \r\n (hier gilt das strenge Uhrheberrecht) werden stets in Hinblick auf Rechtsschreibung und Flexion an die \r\n Gegenwartssprache angepasst und zwar unter gleichzeitiger Beachtung der Einheit von Form und literarischen Stilen. \r\n Das Aussuchen von literarischen Motiven und Themen, die uns helfen sollen, Literaturinhalte tiefgreifend zu verstehen, \r\n schlie\u00dfen unsere Projektarbeiten ab. Bei allen diesen Unternehmungen helfen uns Volont\u00e4re - Lehrer sowie Sch\u00fcller - \r\n die uns mit eigenen Ratschl\u00e4gen und Bemerkungen bei der Entscheidungsfindung unterst\u00fctzen.</p>\r\n \r\n \r\n <h2>Wie Sie uns erreichen?</h2>\r\n \r\n <p>Personen, die an der Zusammenarbeit interessiert sind, bitten wir um eine E-Mail an folgende Adresse zu richten: <a href=\"mail:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</p>\r\n\r\n <p>Wir laden Sie auch ein unter <a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\">Redaktonseite der Freien Lekt\u00fcren</a>, auf unserer Hompage finden Sie n\u00fctzliche Informationen rund um das Thema Redaktionsarbeit.</p>", + "title_uk": "\u041c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043c \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438", + "right_column_it": null, + "title_pl": "Mo\u017cesz nam pom\u00f3c", + "left_column": "<h2>Volunteering</h2>\r\n\r\n <p>We try our best to elaborate works appended to our library. It is possible only thanks to the support of our volunteers.</p>\r\n\r\n \r\n <p>We invite every person who wants to take part in developing the web school library Wolne Lektury.</p>\r\n <p>We offer trainings and traineeships in proofreading and copy-editing for every and each volunteer. Our volunteers can learn not only about the problems, but also the opportunities concerning web publishing. They organize the trainings and conferences together with us, as well as they help in preparing the audio versions ob books (so called audiobooks). We are also able to issue voluneering contracts and certificates regarding sort and duration of volunteer's work for our foundation. The traineeships, proofreading and copywriting practice as well as the certificates confirming those may be found vital in acquiring professional qualifications and promotion. .</p>\r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n<h2>What else is there to be done?</h2>\r\n \r\n <p>Preparing the reading for publishing demands the most effort. One has to correct the typos nad other errors of this kind in the texts we receive from the National Library. Next, one needs to provide the book with the annotations, at the same time bearing in mind that our offering is addressed to the pupils, for whom many words and collocations may sound out of date. The older editions (the rule is determined by copyrights) are subject to essential lingustic modernisations, i.e. in spelling or inflection but we pay attention to not to violate the artistic specifity of the literary works. The last stage of the preparation is searching for literary motfis and themes, so the text is examined thoroughly. In each and every phase we are supported by the volunteers - teachers and students - who often advise us point out crucial matters as we take important decisions. </p>\r\n \r\n\r\n\r\n\r\n\r\n\r\n<h2>How to contact us?</h2>\r\n \r\n <p>We ask every interested person to send us an e-mail<a href=\"mail:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</p>\r\n\r\n <p>Please, visit also the editorial website of Wolne Lektury<a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\"></a>. There you will find essential information on how to involve yourself in editorial works.</p>\r\n\r\n", + "right_column_uk": "<h2>\u041d\u0430\u0439\u0431\u0456\u043b\u044c\u0448 \u0437\u0430\u0441\u043b\u0443\u0436\u0435\u043d\u0456 \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438</h2>\r\n\r\n\t<h3>Agatapaszkowska (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 15 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)</h3>\r\n\r\n <p>\u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u00ab\u0412 \u043f\u0443\u0441\u0442\u0435\u043b\u0456 \u0456 \u0432 \u0434\u0436\u0443\u043d\u0433\u043b\u044f\u0445\u00bb \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n\r\n\r\n\t<h3>AgnieszkaKappa (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 16 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)</h3>\r\n\r\n <p>\u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0432 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u0442\u0430 \u043e\u043f\u0438\u0441\u0443 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432 \u0442\u0430 \u0442\u0435\u043c; \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0442\u0435\u043a\u0441\u0442\u0438 \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 (Latarnik, \u042f\u043d\u043a\u043e \u041c\u0443\u0437\u0438\u043a\u0430\u043d\u0442, Quo vadis); \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>\r\n\r\n\r\n <h3>Anerys (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 5 \u043b\u0438\u043f\u043d\u044f 2007)</h3>\r\n\r\n <p> \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0432 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432 \u0442\u0430 \u0442\u0435\u043c, \u0434\u0438\u0441\u043a\u0443\u0441\u0456\u0457 \u043d\u0430 \u0442\u0435\u043c\u0443 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0436\u0430\u043d\u0440\u0456\u0432, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0433\u0456\u043c\u043d \u0411\u043e\u0433\u043e\u0440\u043e\u0434\u0438\u0446\u044f, \u00ab\u0424\u0440\u0430\u0448\u043a\u0438\u00bb \u0442\u0430 \u00ab\u0422\u0440\u0435\u043d\u0438\u00bb \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u044c\u043a\u043e\u0433\u043e; \u0432\u0456\u0440\u0448\u0456 \u0421\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u043e\u0433\u043e (Gr\u00f3b Agamemnona), \u00ab\u0422\u0430\u0440\u0442\u044e\u0444\u0430\u00bb \u041c\u043e\u043b\u044c\u0454\u0440\u0430, \u0442\u0430 \u043f\u043e\u0435\u0437\u0456\u0457 \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0456\u0447\u0430 (\u0432 \u0446\u044c\u043e\u043c\u0443 \u0447\u0438\u0441\u043b\u0456 \u0433\u0456\u043c\u043d \u201eDies Irae\u201d); \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n\r\n\r\n\t<h3>EmiliaZdankiewicz (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 17 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)</h3>\r\n\r\n <p>\u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0456 \u043c\u043e\u0442\u0438\u0432\u0438 \u2014 \u0434\u0438\u0441\u043a\u0443\u0441\u0456\u044f \u0442\u0430 \u043e\u043f\u0438\u0441, \u0421\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u0438\u0439, \u041a\u043e\u0440\u0434\u0456\u0430\u043d; \u041a\u043e\u043d\u043e\u043f\u043d\u0456\u0446\u044c\u043a\u0430, Nasza szkapa; \u041c\u0456\u0446\u043a\u0435\u0432\u0438\u0447, \u0414\u0437\u044f\u0434\u0438 \u0447. III; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz</a></p>\r\n\r\n\r\n\t<h3>Ewa_Serafin (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 15 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)</h3>\r\n\r\n <p>\u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0432 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u0442\u0430 \u043e\u043f\u0438\u0441\u0443 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432 \u0442\u0430 \u0442\u0435\u043c, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u043f\u043e\u0435\u0437\u0456\u0457 \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0456\u0447\u0430 (\u201cZ wichr\u00f3w i hal\u201d, \u201cNad przepa\u015bciami\u201d, \u201cW ciemno\u015bci schodzi moja dusza\u201d), \u0430 \u0442\u0430\u043a\u043e\u0436 \u201cNad Niemnem\u201d \u0415\u043b\u0456\u0437\u0438 \u041e\u0436\u0435\u0448\u043a\u043e; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi</a>n</p>\r\n\r\n\r\n \t<h3>Hanna_Golab (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 15 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)</h3>\r\n\r\n <p>\u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u201c\u0426\u0430\u0440\u044f \u0415\u0434\u0456\u043f\u0430\u201d \u0421\u043e\u0444\u043e\u043a\u043b\u0430 \u0442\u0430 \u0432\u0456\u0440\u0448 \u201cDusio\u0142ek\u201d \u041b\u0435\u0441\u044c\u043c\u044f\u043d\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></p>\r\n\r\n\r\n\t<h3>Ingene (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 16 \u043b\u0438\u043f\u043d\u044f 2008)</h3>\r\n\r\n <p> \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u043e\u043f\u043e\u0432\u0456\u0434\u0430\u043d\u043d\u044f \u201cSi\u0142aczka\u201d \u0416\u0435\u0440\u043e\u043c\u0441\u044c\u043a\u043e\u0433\u043e, \u201cQuo vadis\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 \u0442\u0430 \u201c\u0422\u0440\u0435\u043d\u0438\u201d \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u044c\u043a\u043e\u0433\u043e; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene</a></p>\r\n \r\n\t<h3>Jmyszkowska (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 26 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008)</h3>\r\n\r\n <p>\u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u201c\u0413\u044f\u0443\u0440\u0430\u201d \u0411\u0430\u0439\u0440\u043e\u043d\u0430 \u0442\u0430 \u201cQuo vadis\u201d \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></p>\r\n\r\n\r\n <h3>Marysiabailey (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 1 \u0436\u043e\u0432\u0442\u043d\u044f 2007)</h3>\r\n\r\n <p>\u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0442\u0435\u043c \u0442\u0430 \u043e\u043f\u0438\u0441\u0456 \u0457\u0445 \u0437\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u043d\u043d\u044f; \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0442\u0432\u043e\u0440\u0438: \u201c\u0421\u0435\u043b\u044f\u043d\u0438\u201d \u0420\u0435\u0439\u043c\u043e\u043d\u0442\u0430 , \u201cLalka\u201d \u041f\u0440\u0443\u0441\u0430, \u201cNie-Boska komedia\u201d \u041a\u0440\u0430\u0441\u0456\u043d\u0441\u044c\u043a\u043e\u0433\u043e, \u201eBajki\u201d \u0442\u0430 \u201eSatyry\u201d \u041a\u0440\u0430\u0441\u0456\u0446\u044c\u043a\u043e\u0433\u043e, \u201c\u0410\u043d\u0442\u0438\u0433\u043e\u043d\u0430\u201d \u0421\u043e\u0444\u043e\u043a\u043b\u0430, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0442\u0432\u043e\u0440\u0438 \u041a\u043e\u0445\u0430\u043d\u043e\u0432\u0441\u044c\u043a\u043e\u0433\u043e, \u041c\u043e\u0440\u0448\u0442\u0438\u043d\u0430, \u041c\u0456\u0446\u043a\u0435\u0432\u0438\u0447\u0430, \u0490\u0435\u0442\u0435, \u041e\u043f\u043f\u043c\u0430\u043d\u0430, \u041a\u0430\u0441\u043f\u0440\u043e\u0432\u0456\u0447\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey</a>; \u043a\u0440\u0456\u043c \u0442\u043e\u0433\u043e, \u043f\u0456\u0434\u0433\u043e\u0442\u0443\u0432\u0430\u043b\u0430 \u0456 \u043f\u0440\u043e\u0432\u0435\u043b\u0430 \u0442\u0440\u0435\u043d\u0456\u043d\u0433 \u0434\u043b\u044f \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0456\u0432 15 \u0431\u0435\u0440\u0435\u0437\u043d\u044f 2008; \u0437\u0430\u044f\u043c\u0430\u043b\u0430\u0441\u044f \u0442\u0430\u043a\u043e\u0434 \u043a\u043e\u0440\u0435\u043a\u0442\u043e\u044e, \u0430 \u043d\u0430 \u0434\u0430\u043d\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u0430\u0446\u044e\u0454 \u043d\u0430\u0434 \u0430\u0443\u0434\u0456\u043e-\u043a\u043d\u0438\u0433\u0430\u043c\u0438.</p>\r\n\r\n\r\n <h3>Olga_Wojtczak (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 21 \u0436\u043e\u0432\u0442\u043d\u044f 2008)</h3>\r\n\r\n <p> \u043c\u0456\u0436 \u0456\u043d\u0448\u0438\u043c\u0438, \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0440\u043e\u043c\u0430\u043d\u0438 \u0421\u0435\u043d\u043a\u0435\u0432\u0438\u0447\u0430 (\u0422\u0440\u0438\u043b\u043e\u0433\u0456\u044f), \u0420\u0435\u0439\u043c\u043e\u043d\u0442\u0430, \u0416\u0435\u0440\u043e\u043c\u0441\u044c\u043a\u043e\u0433\u043e, \u0434\u0440\u0430\u043c\u0438 \u0428\u0435\u043a\u0441\u043f\u0456\u0440\u0430; \u0434\u0438\u0432\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0436 \u043d\u0430 \u043d\u0430\u0448\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0456 \u00ab\u0432\u043a\u043b\u0430\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u00bb: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak</a></p>\r\n\r\n\r\n <h3>Renataml (\u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454 \u0437 \u043d\u0430\u043c\u0438 \u0432\u0456\u0434 30 \u0447\u0435\u0440\u0432\u043d\u044f 2007)</h3>\r\n\r\n <p>\u0431\u0440\u0430\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0432 \u0434\u0438\u0441\u043a\u0443\u0441\u0456\u0457 \u043d\u0430 \u0442\u0435\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u043c\u043e\u0442\u0438\u0432\u0456\u0432; \u044f\u043a \u0434\u043e\u0441\u0432\u0456\u0434\u0447\u0435\u043d\u0430 \u0432\u0447\u0438\u0442\u0435\u043b\u044c\u043a\u0430, \u043d\u0430\u0434\u0430\u0432\u0430\u043b\u0430 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0443 \u0442\u0430 \u043f\u043e\u0440\u0430\u0434\u0438, \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043b\u0430 \u0440\u043e\u043c\u0430\u043d \u00abLalka\u00bb \u041f\u0440\u0443\u0441\u0430, \u0434\u0440\u0430\u043c\u0443 \u00ab\u0411\u0430\u043b\u043b\u0430\u0434\u0438\u043d\u0430\u00bb \u0421\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u043e\u0433\u043e, \u043e\u043f\u043e\u0432\u0456\u0434\u0430\u043d\u043d\u044f \u00abSi\u0142aczka\u00bb \u0416\u0435\u0440\u043e\u043c\u0441\u044c\u043a\u043e\u0433\u043e.\r\n\r\n <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</a></p>", + "title_en": "You can help us", + "left_column_pl": "<h2>Wolontariat w Wolnych Lekturach</h2>\r\n<ul>\r\n<li>Zosta\u0144 naszym redaktorem, programist\u0105 lub t\u0142umaczem \u2013 wolontariuszem.</li>\r\n<li>Zdob\u0105d\u017a nowe umiej\u0119tno\u015bci i do\u015bwiadczenie. </li>\r\n<li>We\u017a udzia\u0142 w otwartym projekcie i tw\u00f3rz innowacyjn\u0105 bibliotek\u0119 internetow\u0105. </li>\r\n</ul>\r\n<p>Dzi\u0119ki pracy naszych wolontariuszy opublikowali\u015bmy ju\u017c ponad <b>1500 lektur</b>, z kt\u00f3rych skorzysta\u0142y ponad <b>3 miliony</b> czytelnik\u00f3w z ca\u0142ego \u015bwiata. </p>\r\n<p>Zapraszamy wszystkie osoby, kt\u00f3re chc\u0105 wsp\u00f3\u0142tworzy\u0107 nasz projekt. Wsp\u00f3\u0142pracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi literatur\u0105, redagowaniem tekst\u00f3w i projektami informatycznymi. Oferujemy profesjonalne szkolenia i sta\u0142\u0105 pomoc merytoryczn\u0105. Wolontariusze mog\u0105 pracowa\u0107 zdalnie lub w siedzibie Fundacji.</p>\r\n<p>Organizujemy r\u00f3wnie\u017c praktyki studenckie \u2013 nawi\u0105zali\u015bmy wsp\u00f3\u0142prac\u0119 z Instytutem Informacji Naukowej i Studi\u00f3w Bibliologicznych UW, Biurem Karier UKSW oraz Wydzia\u0142em Fizyki UW. </p>\r\n\r\n<h2>Jak si\u0119 do nas zg\u0142osi\u0107?</h2>\r\n<p>Wszystkie zainteresowane osoby prosimy o przys\u0142anie maila na adres <a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n", + "left_column_it": null, + "title_es": "\ufeffPuedes ayudarnos", + "left_column_ru": "<h2>\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e</h2>\r\n\r\n <p>\u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0435 \u043d\u0430\u0448\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c. \u042d\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\r\n \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043d\u0430\u0448\u0438\u043c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c-\u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c.</p>\r\n\r\n \r\n <p>\u041c\u044b \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0432\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u0441\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0448\u043a\u043e\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Wolne Lektury \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u043c\u0438.</p>\r\n \r\n <p>\u041c\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0435\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443 \u043f\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0442\u0435\u043a\u0441\u0442\u043e\u0432: \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u0438\r\n \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443. \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438, \u0442\u0430\u043a \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438.\r\n \u041e\u043d\u0438, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u043c\u0438, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u044e\u0442 \u0443\u0447\u0435\u0431\u0443 \u0438 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u0430\u0433\u0430\u044e\u0442 \u0432 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043b\u0443\u0448\u0430\u043d\u0438\u044f (\u0442.\u043d.\r\n \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433). \u041c\u044b \u0432\u044b\u0434\u0430\u0435\u043c \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u044b \u0438 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u0430\u0441\u0447\u0435\u0442 \u0442\u043e\u0433\u043e, \u043a\u043e\u0433\u0434\u0430 \r\n \u0438 \u043a\u0430\u043a\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u043e\u043c \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \r\n \u0444\u043e\u043d\u0434\u0430. \u0423\u0447\u0435\u0431\u0430, \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0449\u0438\u0435 \u0438\u0445 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435\r\n \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0441\u043b\u0443\u0436\u0431\u0435.</p>\r\n\r\n \r\n <h2>\u0427\u0442\u043e \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c?</h2>\r\n \r\n <p>\u0421\u0430\u043c\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u0412 \u0442\u0435\u043a\u0441\u0442\u0430\u0445 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u043c\u0438 \u0438\u0437 \u041d\u0430\u0440\u043e\u0434\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \r\n \u0417\u0430\u0442\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u043e\u0441\u043a\u0438, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u043e \u043a \u0443\u0447\u0435\u043d\u0438\u043a\u0430\u043c, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432 \u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0437\u0432\u0443\u0447\u0438\u0442 \u0430\u043d\u0430\u0445\u0440\u043e\u043d\u0438\u0447\u043d\u043e.\r\n \u041f\u0440\u0435\u0436\u043d\u0438\u0435 \u0438\u0437\u0434\u0430\u043d\u0438\u044f (\u0440\u0435\u0436\u0438\u043c \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0430) \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440. \u043f\u043e \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u0438\u043b\u0438 \u0444\u043b\u0435\u043a\u0441\u0438\u0438. \u041f\u0440\u0438\u0447\u0435\u043c, \u043c\u044b \u0437\u0430\u0431\u043e\u0442\u0438\u043c\u0441\u044f \u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438\r\n \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043c\u043e\u0447\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \"\u043d\u0430\u0441\u043a\u0432\u043e\u0437\u044c\".\r\n \u0412\u043e \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0445 \u0441\u0432\u043e\u044e \u043f\u043e\u043c\u043e\u0449\u044c \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b - \u0443\u0447\u0438\u0442\u0435\u043b\u044f \u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b, \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0441\u0432\u043e\u0438 \u0441\u043e\u0432\u0435\u0442\u044b \u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f\r\n \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439.</p>\r\n \r\n <h2>\u041a\u0430\u043a \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0432 \u043d\u0430\u0448 \u0444\u043e\u043d\u0434?</h2>\r\n \r\n <p>\u0412\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0441\u0438\u043c \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0438-\u043c\u0435\u0439\u043b \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <a href=\"mail:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</p>\r\n\r\n <p>\u041c\u044b \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 <a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\">\u0441\u0430\u0439\u0442 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Wolne Lektury</a>, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u043c.</p>", + "slug": "help_us", + "right_column_de": "<h2>Wohlverdiente Volont\u00e4re</h2>\r\n\r\n\t<h3>Agatapaszkowska (Mitarbeit seit 15. M\u00e4rz 2008)</h3>\r\n\r\n <p>bearbeitete u.a. \"Durch W\u00fcste und Wildnis\" von Sienkiewicz; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n\r\n\r\n\t<h3>AgnieszkaKappa (Mitarbeit seit 16. M\u00e4rz 2008)</h3>\r\n\r\n <p>arbeitete u.a. an der Erstellung der Liste und Beschreibung der literarischen Themen und Motive;bearbeitete Texten von Sienkiewicz ( Der Leuchtturmw\u00e4rter, Janko der Musikant, Quo vadis);s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>\r\n\r\n\r\n \r\n \r\n\r\n <h3>Anerys (Mitarbeit seit 5. Juli 2007)</h3>\r\n\r\n <p>arbeitete u.a. an der Erstellung der Liste und Beschreibung der literarischen Themen und Motive;nahm an der Diskussion \u00fcber Literaturgattungen teil, bearbeitete folgende Werke: Bogurodzica, \"Spruchgedichte\" und \"Klagelieder\" von Kochanowski; Gedichte von Slowacki ( Agamemnons Grab), \"Tartuffe oder der Betr\u00fcger\" von Moliere, ob Poesien von Kasprowicz (u.a. eine Hymne \"Dies Irae\"); s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n \r\n\r\n\t<h3>EmiliaZdankiewicz (Mitarbeit seit 17. M\u00e4rz 2008)</h3>\r\n\r\n <p>nahm u.a. an der Diskussion und Beschreibung literarischer Motive teil, S\u0142owacki, Kordian; Konopnicka, Unsere M\u00e4hre; Mickiewicz, Totenfeier Teil III; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz</a></p>\r\n\r\n \r\n\t\r\n\t<h3>Ewa_Serafin (Mitarbeit seit 15. M\u00e4rz 2008)</h3>\r\n\r\n <p>arbeitete u.a. an der Erstellung der Liste und Beschreibung der literarischen Themen und Motive, bearbeitete Kasprowicz Gedichte (\u201eZ wichr\u00f3w i hal\u201d, \u201eNad przepa\u015bciami\u201d, \u201eW ciemno\u015bci schodzi moja dusza\u201d oraz \u201eNad Niemnem\u201d Orzeszkowej; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi</a>n</p>\r\n\r\n\r\n \t<h3>Hanna_Golab (Mitarbeit seit 15. M\u00e4rz 2008)</h3>\r\n\r\n <p>bearbeitete \" K\u00f6nig \u00d6dipus\" von Sophokles sowie \"Dusio\u0142ek\" von Lesmian; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></p>\r\n\r\n\r\n\t<h3>Ingene (Mitarbeit seit 16. Juli 2008)</h3>\r\n\r\n <p>bearbeitete u.a. \u201eSi\u0142aczka\u201d von \u017beromski, \u201eQuo vadis\u201d von Sienkiewicz sowie \u201eKlagelieder\u201d von Kochanowski; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene</a></p>\r\n \r\n\t<h3>Jmyszkowska (Mitarbeit seit 26. M\u00e4rz 2008)</h3>\r\n\r\n <p>bearbeitete u.a. \u201eGiaur\u201d von Byron sowie \u201eQuo vadis\u201d von Sienkiewicz; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></p>\r\n\r\n\r\n <h3>Marysiabailey (Mitarbeit seit 1. Oktober 2007)</h3>\r\n\r\n <p>arbeitete u.a. an der Erstellung der Liste und Beschreibung der literarischen Themen und Motive sowie deren Benutzung; bearbeitete folgende Werke: \"Die Bauern\" von Reymont, \"Die Puppe\" von Prus, \"Un-g\u00f6ttliche Kom\u00f6die\" von Krasinski, \"M\u00e4rchens\" und \"Satire\" von Krasickiego, \"Antigone\" von Sophokles sowie Werke von Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman, Kasprowicz; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\u201c: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey</a zus\u00e4tzlich beteiligte sie sich am 15. M\u00e4rz 2008 an der Organisation von Volont\u00e4r-Schulungen, besch\u00e4ftigte sich mit proofreading, gegenw\u00e4rtig arbeitet sie an H\u00f6rb\u00fcchern.</p>\r\n\r\n\r\n <h3>Olga_Wojtczak (Mitarbeit seit 21. Oktober 2008)</h3>\r\n\r\n <p>bearbeitete u.a. Romane von Sienkiewicz ( Die Trilogie), Reymont, \u017beromski und Dramen von Shakespeare; s. auf unserer Website die \"Benutzerbeitr\u00e4ge\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak</a></p>\r\n\r\n <h3>Renataml (Mitarbeit seit 30. Juni 2007)</h3>\r\n\r\n <p>nahm an der Diskussion \u00fcber Motivlisten teil, als erfahrene Lehrerin unterst\u00fctzte sie uns mit vielen Ratschl\u00e4gen, bearbeitete folgende Werke: \"Die Puppe\" von Prus, \"Balladyna\" von Slowacki, \"Si\u0142aczka\" \u017beromski.\r\n\r\n <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</a></p>\r\n", + "left_column_es": "<h2>Voluntariado</h2>\r\n\r\n\r\n\r\n <p> Hacemos todo lo posible para elaborar las obras de nuestra biblioteca con la mayor perfecci\u00f3n. Esto es posible s\u00f3lo gracias al apoyo de nuestros voluntarios. </p>\r\n\r\n\r\n\r\n \r\n\r\n <p> Invitamos a todos quienes quieren formar parte en el desarrollo de la biblioteca virtual de Wolne Lektury. </p>\r\n\r\n \r\n\r\n <p> A todos los voluntarios les ofrecemos cursos y pr\u00e1cticas en cuanto a la redacci\u00f3n t\u00e9cnica y pr\u00e1ctica. Los voluntarios tienen la posibilidad de conocer tanto los problemas como las oportunidades relacionadas con las publicaciones virtuales. Nos ayudan en la organizaci\u00f3n de conferencias y cursos de formaci\u00f3n, asimismo asisten en la edici\u00f3n de los textos en forma auditiva (audiolibros). Los proporcionamos contratos y certificados con los detalles del trabajo y tipo de tareas realizadas para nuestra fundaci\u00f3n. Los cursos, las pr\u00e1cticas realizadas y los certificados correspondientes podr\u00e1n resultar \u00fatiles en el proceso del desarrollo profesional y para el futuro trabajo profesional. </p>\r\n\r\n \r\n\r\n <h2> >\u00bfEn qu\u00e9 nos puedes ayudar? </h2>\r\n\r\n La Biblioteca\r\n\r\n Nacional proporciona textos, pero hay que eliminar las faltas de ortograf\u00eda y otros errores mec\u00e1nicos y, a continuaci\u00f3n, a\u00f1adir glosas.\r\n\r\n <p>La mayor\u00eda de trabajo la tenemos con la preparaci\u00f3n de los libros para la publicaci\u00f3n. La Biblioteca Nacional proporciona textos pero hay que corregir las erratas y otros errores, despu\u00e9s a\u00f1adir las anotaciones a pie de p\u00e1gina teniendo en cuenta que nuestra oferta es dirigida especialmente a estudiantes para quienes muchas palabras o expresiones pueden ser anacr\u00f3nicas. Tratamos de modernizar las ediciones antiguas (respetando el derecho de autor) respecto a la ortograf\u00eda o la inflexi\u00f3n pero cuidamos para no violar el valor art\u00edstico del texto. La \u00faltima etapa es buscar todos los motivos y temas literarios que ayudar\u00e1n en conocer la lectura totalmente. En todos los trabajos nos ayudan los voluntarios, profesores y estudiantes, a menudo ayudando tambi\u00e9n en la toma de decisiones importantes. </p>\r\n\r\n \r\n\r\n <h2> \u00bfC\u00f3mo inscribirse?</h2>\r\n\r\n \r\n\r\n <p>Todos que est\u00e9n interesados enviad un mail a <a href=\"mail:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</p>\r\n\r\n\r\n\r\n <p> Os invitamos tambi\u00e9n a visitar <a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\"> la p\u00e1gina de la redacci\u00f3n de Wolne Lektury </a> donde hay todas las informaciones necesarias para empezar el trabajo editorial. </p>\r\n\r\n", + "left_column_en": "<h2>Volunteering</h2>\r\n\r\n <p>We try our best to elaborate works appended to our library. It is possible only thanks to the support of our volunteers.</p>\r\n\r\n \r\n <p>We invite every person who wants to take part in developing the web school library Wolne Lektury.</p>\r\n <p>We offer trainings and traineeships in proofreading and copy-editing for every and each volunteer. Our volunteers can learn not only about the problems, but also the opportunities concerning web publishing. They organize the trainings and conferences together with us, as well as they help in preparing the audio versions ob books (so called audiobooks). We are also able to issue voluneering contracts and certificates regarding sort and duration of volunteer's work for our foundation. The traineeships, proofreading and copywriting practice as well as the certificates confirming those may be found vital in acquiring professional qualifications and promotion. .</p>\r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n<h2>What else is there to be done?</h2>\r\n \r\n <p>Preparing the reading for publishing demands the most effort. One has to correct the typos nad other errors of this kind in the texts we receive from the National Library. Next, one needs to provide the book with the annotations, at the same time bearing in mind that our offering is addressed to the pupils, for whom many words and collocations may sound out of date. The older editions (the rule is determined by copyrights) are subject to essential lingustic modernisations, i.e. in spelling or inflection but we pay attention to not to violate the artistic specifity of the literary works. The last stage of the preparation is searching for literary motfis and themes, so the text is examined thoroughly. In each and every phase we are supported by the volunteers - teachers and students - who often advise us point out crucial matters as we take important decisions. </p>\r\n \r\n\r\n\r\n\r\n\r\n\r\n<h2>How to contact us?</h2>\r\n \r\n <p>We ask every interested person to send us an e-mail<a href=\"mail:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</p>\r\n\r\n <p>Please, visit also the editorial website of Wolne Lektury<a href=\"http://redakcja.wolnelektury.pl/documents/catalogue/\"></a>. There you will find essential information on how to involve yourself in editorial works.</p>\r\n\r\n", + "right_column_fr": "<h2>Nos b\u00e9n\u00e9voles les plus m\u00e9ritants</h2>\r\n\r\n\t<h3>Agatapaszkowska (coop\u00e8re avec nous depuis le 15 mars 2008)</h3>\r\n\r\n <p>entre autres, elle a r\u00e9dig\u00e9 \"W pustyni i w puszczy\u201d de Henryk Sienkiewicz; voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n\r\n\r\n\t<h3>AgnieszkaKappa (coop\u00e8re avec nous depuis le 16 mars 2008)</h3>\r\n\r\n <p>entre autres, elle a particip\u00e9 \u00e0 la pr\u00e9paration de la liste des motifs et th\u00e8mes litt\u00e9raires et leurs descriptions, a r\u00e9dig\u00e9 les textes de Sienkiewicz (\"Latarnik\", \"Janko Muzykant\", \"Quo vadis\"); voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>\r\n\r\n\r\n <h3>Anerys (coop\u00e8re avec nous depuis le 5 juillet 2007)</h3>\r\n\r\n <p>entre autres, elle a particip\u00e9 \u00e0 la pr\u00e9paration de la liste des motifs et th\u00e8mes litt\u00e9raires, dans la discussion sur les genres litt\u00e9raires, elle \u00e0 r\u00e9dig\u00e9 \"Bogurodzica\", \"Fraszki\u201d et \"Treny\u201d de Kochanowski; les po\u00e8mes de S\u0142owacki (\"Gr\u00f3b Agamemnona\"), \"Tartuffe, ou l'Imposteur\" de Moli\u00e8re, les po\u00e8mes de Kasprowicz (entre autres le hymne \"Dies Irae\u201d); voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n\r\n\r\n\t<h3>EmiliaZdankiewicz (coop\u00e8re avec nous depuis le 17 mars 2008)</h3>\r\n\r\n <p>entre autres, les motifs litt\u00e9raires - discussion et description, \"Kordian\" de S\u0142owacki; \"Nasza szkapa\" de Konopnicka; \"A\u00efeux p.III\" de Mickiewicz; voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz</a></p>\r\n\r\n\r\n\t<h3>Ewa_Serafin (coop\u00e8re avec nous depuis le 15 mars 2008)</h3>\r\n\r\n <p>entre autres a particip\u00e9 \u00e0 la cr\u00e9ation de la liste et de la description de l'utilisation des motifs et th\u00e8mes litt\u00e9raires, a r\u00e9dig\u00e9 les po\u00e8mes de Kasprowicz (\"Z wichr\u00f3w i hal\u201d, \"Nad przepa\u015bciami\u201d, \"W ciemno\u015bci schodzi moja dusza\u201d ainsi que \u201eNad Niemnem\u201d d'Orzeszkowa; voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ewa_Serafi</a>n</p>\r\n\r\n\r\n \t<h3>Hanna_Golab (coop\u00e8re avec nous depuis le 15 juillet 2008)</h3>\r\n\r\n elle a r\u00e9dig\u00e9 \"Oedipe roi\u201d de Sophocle et \"Dusio\u0142ek\u201d de Le\u015bmian; voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></p>\r\n\r\n\r\n\t<h3>Ingene (coop\u00e8re avec nous depuis le 16 juillet 2008)</h3>\r\n\r\n <p>elle a r\u00e9dig\u00e9 \"Si\u0142aczka\u201d de \u017beromski, \"Quo vadis\u201d de Sienkiewicz ainsi que \"Treny\u201d de Kochanowski; voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Ingene</a></p>\r\n \r\n\t<h3>Jmyszkowska (coop\u00e8re avec nous depuis le 26 mars 2008)</h3>\r\n\r\n <p>entre autres, elle a r\u00e9dig\u00e9 \"Giaour\u201d de Byron et \"Quo vadis\u201d de Sienkiewicz; voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/S pecjalna:Wk%C5%82ad/Jmyszkowska\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></p>\r\n\r\n\r\n <h3>Marysiabailey (coop\u00e8re avec nous depuis le 1 octobre 2007)</h3>\r\n\r\n <p>elle a particip\u00e9 \u00e0 la pr\u00e9paration de la liste des motifs et th\u00e8mes litt\u00e9raires et de la description de leur utilisation; elle a r\u00e9dig\u00e9 \"Les Paysans\u201d de Reymont, \"La poup\u00e9e\u201d de Prus, \"Nie-Boska komedia\u201d de Krasi\u0144ski, \"Bajki\u201d et \"Satyry\u201d de Krasicki, \"Antigone\u201d de Sophocle et les oeuvres de Kochanowski, Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman, Kasprowicz; voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey</a>; elle a en plus pr\u00e9par\u00e9 et conduit l'entra\u00eenement pour les b\u00e9n\u00e9voles le 15 mars 2008; elle a fait la correcte des textes et est coordinatrice du travail sur les livres audio.</p>\r\n\r\n\r\n <h3>Olga_Wojtczak (coop\u00e8re avec nous depuis le 21 octobre 2008)</h3>\r\n\r\n <p>entre autres, elle a r\u00e9dig\u00e9 les romans de Sienkiewicz (la Trilogie), de Reymont, \u017beromski, les oeuvres de Shakespeare; voir aussi \"contribution de l'utilisateur\u201d sur notre site: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Olga_Wojtczak</a></p>\r\n\r\n\r\n <h3>Renataml (coop\u00e8re avec nous depuis le 30 juin 2007)</h3>\r\n\r\n <p>a particip\u00e9 \u00e0 la discussion sur la liste des motifs, en tant qu'enseignante experiment\u00e9e, elle nous a donn\u00e9 des conseils pr\u00e9cieux, a \u00e9dit\u00e9 \"La poup\u00e9e\u201d de Prus, \"Balladyna\u201d de S\u0142owacki, \"Si\u0142aczka\u201d de \u017beromski.\r\n\r\n <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</a></p>\r\n", + "title_ru": "\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0447\u044c", + "title_it": null + } + }, + { + "pk": 1, + "model": "infopages.infopage", + "fields": { + "title_de": "Volontariat f\u00fcr Wissen", + "left_column_uk": "<h2>\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e</h2>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <p>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0411\u0456\u043e\u0433\u0440\u0430\u043c\u0438 \u043f\u0438\u0441\u044c\u043c\u0435\u043d\u043d\u0438\u043a\u0456\u0432 \u0442\u0430 \u0434\u0435\u0444\u0456\u043d\u0456\u0446\u0456\u0457 \u0435\u043f\u043e\u0445 \u0442\u0430 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0436\u0430\u043d\u0440\u0456\u0432 \u0432 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0456 \u0443\u0447\u043d\u044f\u043c\u0438 \u0447\u043e\u0442\u0438\u0440\u044c\u043e\u0445 \u0448\u043a\u0456\u043b \u043f\u0456\u0434\u0447\u0430\u0441 \u043c\u0430\u0439\u0441\u0442\u0435\u0440-\u043a\u043b\u0430\u0441\u0456\u0432 \u201c\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0432 \u043e\u0441\u0432\u0456\u0442\u0456\u201d.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </p>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <p>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0423\u0447\u043d\u0456 \u0441\u043f\u0456\u043b\u044c\u043d\u043e \u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0438 \u0432\u0456\u0434 \u0434\u043e\u0433\u043b\u044f\u0434\u043e\u043c \u0432\u0447\u0438\u0442\u0435\u043b\u0456\u0432 \u0442\u0430 \u0441\u043f\u0435\u0446\u0456\u0430\u043b\u0456\u0441\u0442\u0456\u0432 \u2014 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043e\u0437\u043d\u0430\u0432\u0446\u0456\u0432 \u043d\u0430 <a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043e\u0432\u0456\u0439 \u0432\u0456\u043a\u0456-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0456</a>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0456\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u044e\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <a href=\"http://2ia.pl/\">2ia</a>. \u0420\u043e\u0431\u043e\u0442\u0430 \u043d\u0430\u0434 \u0446\u0438\u043c\u0438 \u0442\u0435\u043a\u0441\u0442\u0430\u043c\u0438 \u0431\u0443\u043b\u0430 \u0432\u043e\u0434\u043d\u043e\u0447\u0430\u0441 \u043d\u0430\u0443\u043a\u043e\u044e \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0442\u0438\u0441\u044f \u043a\u043e\u043c\u043f\u2019\u044e\u0442\u0435\u0440\u043e\u043c \u0442\u0430 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u0448\u0443\u043a\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457, \u0430 \u0442\u0430\u043a\u043e\u0436 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0438 \u0457\u0457 \u0432\u0456\u0440\u043e\u0433\u0456\u0434\u043d\u043e\u0441\u0442\u0456.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </p>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <p>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u041f\u0440\u043e\u0435\u043a\u0442 \"\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0432 \u043e\u0441\u0432\u0456\u0442\u0456\" \u0437\u0434\u0456\u0439\u0441\u043d\u0435\u043d\u043e \u0437\u0430\u0432\u0434\u044f\u043a\u0438 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0446\u0456 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <a href=\"http://www.menis.gov.pl/\">\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u043e\u0441\u0432\u0456\u0442\u0438</a>. \u041f\u0440\u0438\u0437\u0438 \u0434\u043b\u044f \u0443\u0447\u043d\u0456\u0432 \u043f\u0440\u0438\u0433\u043e\u0442\u0443\u0432\u0430\u043b\u0438\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0412\u0438\u0434\u0430\u0432\u043d\u0438\u0446\u0442\u0432\u043e Nasza Ksi\u0119garnia</a>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0442\u0430\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <a href=\"http://helion.pl/\">\u0412\u0438\u0434\u0430\u0432\u043d\u0438\u0446\u0442\u0432\u043e Helion</a>. \u0422\u0435\u043a\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043d\u043e \u0432 \u0440\u0435\u0441\u0443\u0440\u0441\u0456 <a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Plagiat.pl</a>.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </p>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <p>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <a href=\"/static/wolontariat.pdf\">\u0417\u0432\u0456\u0442 \u0437 \u0440\u0435\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u0457 \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \"\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0432 \u043e\u0441\u0432\u0456\u0442\u0456\"</a>.\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </p>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <p>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n\u00a0\u00a0\u00a0 <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />\r\n\u00a0\u00a0\u00a0 <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </p> ", + "main_page": null, + "right_column_pl": "\t<h2>Autorzy</h2>\r\n\r\n\t<ol>\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tGimnazjum nr 40 z Oddzia\u0142ami Integracyjnymi w Zespole\r\n\t\t\t\tSzk\u00f3\u0142 nr 69 im. Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; klasa druga pod opiek\u0105\r\n\t\t\t\tAnny Budziarek-Friedrich:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Burdon Filip;</li>\r\n\r\n\t\t\t\t<li>D\u0119bski Bartek;</li>\r\n\t\t\t\t<li>Jackowicz Kamil;</li>\r\n\t\t\t\t<li>Kurek Pawe\u0142;</li>\r\n\t\t\t\t<li>Makles Bartosz;</li>\r\n\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n\t\t\t\t<li>Migda\u0142 Katarzyna;</li>\r\n\r\n\t\t\t\t<li>Mioduszewski Micha\u0142;</li>\r\n\t\t\t\t<li>Pfeiffer Ida;</li>\r\n\t\t\t\t<li>P\u0142askowicka Karolina;</li>\r\n\t\t\t\t<li>Sailer Ewa.</li>\r\n\t\t\t</ul>\r\n\t\t</li>\r\n\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tXXXIII Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Miko\u0142aja Kopernika,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; klasa pierwsza o profilu\r\n\t\t\t\tbiologiczno-chemicznym pod opiek\u0105 El\u017cbiety Konkowskiej:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Chwil Bart\u0142omiej;</li>\r\n\t\t\t\t<li>Czarnecka Natalia;</li>\r\n\t\t\t\t<li>Gawro\u0144ska Iga;</li>\r\n\r\n\t\t\t\t<li>Grabarczyk Marta;</li>\r\n\t\t\t\t<li>Jastrz\u0105b Katarzyna;</li>\r\n\t\t\t\t<li>Krawczak Olga;</li>\r\n\t\t\t\t<li>Krawczyk Marianna;</li>\r\n\t\t\t\t<li>Kur Natalia;</li>\r\n\t\t\t\t<li>Kwiatek Marta;</li>\r\n\r\n\t\t\t\t<li>La\u015bkiewicz Joanna;</li>\r\n\t\t\t\t<li>Machczy\u0144ska Daria;</li>\r\n\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n\t\t\t\t<li>Moczulska Karolina;</li>\r\n\t\t\t\t<li>Mo\u015bcicka Aneta;</li>\r\n\t\t\t\t<li>Narloch Sabina;</li>\r\n\r\n\t\t\t\t<li>Przybysz Pawe\u0142;</li>\r\n\t\t\t\t<li>Puchta Marek;</li>\r\n\t\t\t\t<li>Ryska Cezary;</li>\r\n\t\t\t\t<li>Sandomierski Bart\u0142omiej;</li>\r\n\t\t\t\t<li>S\u0142awi\u0144ski Tomasz;</li>\r\n\t\t\t\t<li>S\u0142owik Olga;</li>\r\n\r\n\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n\t\t\t\t<li>Strzelczak Karolina;</li>\r\n\t\t\t\t<li>Szafran Danuta;</li>\r\n\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n\t\t\t\t<li>Szulkowska Alicja;</li>\r\n\t\t\t\t<li>\u015alusarczyk Anna;</li>\r\n\r\n\t\t\t\t<li>Tytkowska Anna.</li>\r\n\t\t\t</ul>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tAutorskie Niepubliczne Liceum Og\u00f3lnokszta\u0142c\u0105ce nr\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; klasa pierwsza\r\n\t\t\t\t\to profilu og\u00f3lnym pod opiek\u0105 Micha\u0142a Friedricha:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n\r\n\t\t\t\t\t<li>Go\u0142aszewska Ewa;</li>\r\n\t\t\t\t\t<li>Kwiatkowski Micha\u0142;</li>\r\n\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n\t\t\t\t\t<li>Przespolewski Przemys\u0142aw;</li>\r\n\t\t\t\t\t<li>Rosi\u0144ska Zuzanna;</li>\r\n\r\n\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tLXIV Liceum Og\u00f3lnokszta\u0142c\u0105ce im. St. I. Witkiewicza,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; klasa pierwsza o\r\n\t\t\t\t\tprofilu og\u00f3lnym pod opiek\u0105 Daniela Zycha:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\r\n\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n\t\t\t\t\t<li>Dr\u0105gowska Katarzyna;</li>\r\n\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n\t\t\t\t\t<li>G\u0142owacki Jan;</li>\r\n\t\t\t\t\t<li>Grad Pawe\u0142;</li>\r\n\r\n\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n\t\t\t\t\t<li>K\u0142os Aneta;</li>\r\n\t\t\t\t\t<li>Kozie\u0142 Barbara;</li>\r\n\t\t\t\t\t<li>Koz\u0142owska Anna;</li>\r\n\t\t\t\t\t<li>Krug Pamela;</li>\r\n\r\n\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n\t\t\t\t\t<li>Luba\u015b Micha\u0142;</li>\r\n\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n\t\t\t\t\t<li>Modelska Marta;</li>\r\n\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n\r\n\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n\t\t\t\t\t<li>Pielat Zofia;</li>\r\n\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n\t\t\t\t\t<li>Rosa Karolina;</li>\r\n\r\n\t\t\t\t\t<li>Smyczy\u0144ska Kamila;</li>\r\n\t\t\t\t\t<li>Stoli\u0144ska Barbara;</li>\r\n\t\t\t\t\t<li>Szyma\u0144ska Katarzyna;</li>\r\n\t\t\t\t\t<li>\u015acibior Ewa;</li>\r\n\t\t\t\t\t<li>Witczak Magda;</li>\r\n\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n\r\n\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n\t\t\t\t\t<li>Zi\u00f3\u0142kowska Adrianna.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t </li>\r\n\t </ol>\r\n", + "right_column_lt": "\t<h2>Autoriai</h2>\r\n\r\n\t<ol>\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tGimnazija nr 40 Lenkijos Armijos Kovojan\u010dios Grup\u0117s \u201eKRYBAR\u201d vardo Mokykl\u0173 Kompleksas nr 69,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; antra klas\u0117 globojama mokytojos\r\n\t\t\t\tAnny Budziarek-Friedrich:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Burdon Filip;</li>\r\n\r\n\t\t\t\t<li>D\u0119bski Bartek;</li>\r\n\t\t\t\t<li>Jackowicz Kamil;</li>\r\n\t\t\t\t<li>Kurek Pawe\u0142;</li>\r\n\t\t\t\t<li>Makles Bartosz;</li>\r\n\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n\t\t\t\t<li>Migda\u0142 Katarzyna;</li>\r\n\r\n\t\t\t\t<li>Mioduszewski Micha\u0142;</li>\r\n\t\t\t\t<li>Pfeiffer Ida;</li>\r\n\t\t\t\t<li>P\u0142askowicka Karolina;</li>\r\n\t\t\t\t<li>Sailer Ewa.</li>\r\n\t\t\t</ul>\r\n\t\t</li>\r\n\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tXXXIII Miko\u0142ojaus Koperniko Bendrojo Lavinimo Licejus\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; pirma klas\u0117 biologijos chemijos profiliuos,\r\n\t\t\t\tglobojama mokytojos El\u017cbiety Konkowskiej:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Chwil Bart\u0142omiej;</li>\r\n\t\t\t\t<li>Czarnecka Natalia;</li>\r\n\t\t\t\t<li>Gawro\u0144ska Iga;</li>\r\n\r\n\t\t\t\t<li>Grabarczyk Marta;</li>\r\n\t\t\t\t<li>Jastrz\u0105b Katarzyna;</li>\r\n\t\t\t\t<li>Krawczak Olga;</li>\r\n\t\t\t\t<li>Krawczyk Marianna;</li>\r\n\t\t\t\t<li>Kur Natalia;</li>\r\n\t\t\t\t<li>Kwiatek Marta;</li>\r\n\r\n\t\t\t\t<li>La\u015bkiewicz Joanna;</li>\r\n\t\t\t\t<li>Machczy\u0144ska Daria;</li>\r\n\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n\t\t\t\t<li>Moczulska Karolina;</li>\r\n\t\t\t\t<li>Mo\u015bcicka Aneta;</li>\r\n\t\t\t\t<li>Narloch Sabina;</li>\r\n\r\n\t\t\t\t<li>Przybysz Pawe\u0142;</li>\r\n\t\t\t\t<li>Puchta Marek;</li>\r\n\t\t\t\t<li>Ryska Cezary;</li>\r\n\t\t\t\t<li>Sandomierski Bart\u0142omiej;</li>\r\n\t\t\t\t<li>S\u0142awi\u0144ski Tomasz;</li>\r\n\t\t\t\t<li>S\u0142owik Olga;</li>\r\n\r\n\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n\t\t\t\t<li>Strzelczak Karolina;</li>\r\n\t\t\t\t<li>Szafran Danuta;</li>\r\n\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n\t\t\t\t<li>Szulkowska Alicja;</li>\r\n\t\t\t\t<li>\u015alusarczyk Anna;</li>\r\n\r\n\t\t\t\t<li>Tytkowska Anna.</li>\r\n\t\t\t</ul>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t \tPrivatus Bendrojo Lavinimo Lic\u0117jus nr\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; \r\n\t\t\t\t\tpirma klas\u0117 bendra s profilius,\r\n\t\t\t \tglobojama mokytojaus Micha\u0142 Friedrich\r\n\t\t\t\t\t\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n\r\n\t\t\t\t\t<li>Go\u0142aszewska Ewa;</li>\r\n\t\t\t\t\t<li>Kwiatkowski Micha\u0142;</li>\r\n\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n\t\t\t\t\t<li>Przespolewski Przemys\u0142aw;</li>\r\n\t\t\t\t\t<li>Rosi\u0144ska Zuzanna;</li>\r\n\r\n\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tLXIV St. I. Witkiewicz Bendrojo Lavinimo Licejus\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; pirma klas\u0117 bendras profilius,\r\n\t\t\t \tglobojama mokytojaus Daniel Zych:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\r\n\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n\t\t\t\t\t<li>Dr\u0105gowska Katarzyna;</li>\r\n\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n\t\t\t\t\t<li>G\u0142owacki Jan;</li>\r\n\t\t\t\t\t<li>Grad Pawe\u0142;</li>\r\n\r\n\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n\t\t\t\t\t<li>K\u0142os Aneta;</li>\r\n\t\t\t\t\t<li>Kozie\u0142 Barbara;</li>\r\n\t\t\t\t\t<li>Koz\u0142owska Anna;</li>\r\n\t\t\t\t\t<li>Krug Pamela;</li>\r\n\r\n\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n\t\t\t\t\t<li>Luba\u015b Micha\u0142;</li>\r\n\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n\t\t\t\t\t<li>Modelska Marta;</li>\r\n\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n\r\n\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n\t\t\t\t\t<li>Pielat Zofia;</li>\r\n\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n\t\t\t\t\t<li>Rosa Karolina;</li>\r\n\r\n\t\t\t\t\t<li>Smyczy\u0144ska Kamila;</li>\r\n\t\t\t\t\t<li>Stoli\u0144ska Barbara;</li>\r\n\t\t\t\t\t<li>Szyma\u0144ska Katarzyna;</li>\r\n\t\t\t\t\t<li>\u015acibior Ewa;</li>\r\n\t\t\t\t\t<li>Witczak Magda;</li>\r\n\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n\r\n\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n\t\t\t\t\t<li>Zi\u00f3\u0142kowska Adrianna.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t </li>\r\n\t </ol>", + "left_column_lt": "<h2>Savanoriai</h2>\r\n\t<p>\r\n\t\tAutori\u0173 biografijos ir literat\u016brinis r\u016b\u0161i\u0173 apra\u0161ymus \r\n\t\tinternetin\u0117je bibliotekoje Laisvoji Literat\u016bra paruo\u0161\u0117 mokiniai\r\n\t\ti\u0161 keturi\u0173 mokykl\u0173 seminarijos \u201eLik savanoriu kad su\u017einoti daugiau\u201d.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\tMokiniai dirbo visi kartu globojami mokytoj\u0173 ir literat\u016bros \u017einov\u0173.\r\n\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n\r\n\t\t\tinternetine platforma viki</a>\r\n\t\tparuo\u0161ta grup\u0117s\r\n\t\t<a href=\"http://2ia.pl/\">2ia</a>. Kuriant apra\u0161ymus naudojo kompiuterius, internet\u0105 tam kad\r\n\t\t surasti informacij\u0105 ir patikrinti jos tik\u0117tinum\u0105.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\tProjektas \"Lik savanoriu kad su\u017einoti daugiau\" buvo \u012fvykdytas\r\n\t\t d\u0117ka\r\n\t\t<a href=\"http://www.menis.gov.pl/\">\r\n\t\t\tMinisterstwa Edukacji Narodowej</a>. Dovanas mokiniams \u012fsteig\u0117\r\n\t\t<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n\r\n\t\t\tLeidykla M\u016bs\u016b Knygynas</a>\r\n\t\ti\r\n\t\t<a href=\"http://helion.pl/\">Wydawnictwo Helion</a>. Patikrinta servise.\r\n\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n\t\t\tPlagiat.pl</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\t<a href=\"/static/wolontariat.pdf\">Raportas suristas su \u012fgyvendinimu projekto \u201eLik savanoriu kad su\u017einoti daugiau\"</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />\r\n\t</p>", + "title_fr": "B\u00e9n\u00e9volat pour le savoir", + "right_column_ru": "\t<h2>\u0410\u0432\u0442\u043e\u0440\u044b</h2>\r\n\r\n\t<ol>\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\t\u0413\u0438\u043c\u043d\u0430\u0437\u0438\u0439 \u043d\u043e\u043c\u0435\u0440 40 \u0441 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0435\r\n\t\t\t\t\u0448\u043a\u043e\u043b \u043d\u043e\u043c\u0435\u0440 69 \u0438\u043c. \u0410\u0440\u0438\u043c\u0438\u0438 \u043a\u0440\u0430\u0439\u043e\u0432\u043e\u0439 \u0431\u043e\u0435\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; \u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c\r\n\t\t\t\tAnny Budziarek-Friedrich:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Burdon Filip;</li>\r\n\r\n\t\t\t\t<li>D\u0119bski Bartek;</li>\r\n\t\t\t\t<li>Jackowicz Kamil;</li>\r\n\t\t\t\t<li>Kurek Pawe\u0142;</li>\r\n\t\t\t\t<li>Makles Bartosz;</li>\r\n\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n\t\t\t\t<li>Migda\u0142 Katarzyna;</li>\r\n\r\n\t\t\t\t<li>Mioduszewski Micha\u0142;</li>\r\n\t\t\t\t<li>Pfeiffer Ida;</li>\r\n\t\t\t\t<li>P\u0142askowicka Karolina;</li>\r\n\t\t\t\t<li>Sailer Ewa.</li>\r\n\t\t\t</ul>\r\n\t\t</li>\r\n\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tXXXIII \u041e\u0431\u0449\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u0446\u0435\u0439 \u0438\u043c. \u041d\u0438\u043a\u043e\u043b\u0430\u044f \u041a\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0431\u0438\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e-\u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e\r\n\t\t\t\t\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c El\u017cbiety Konkowskiej:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Chwil Bart\u0142omiej;</li>\r\n\t\t\t\t<li>Czarnecka Natalia;</li>\r\n\t\t\t\t<li>Gawro\u0144ska Iga;</li>\r\n\r\n\t\t\t\t<li>Grabarczyk Marta;</li>\r\n\t\t\t\t<li>Jastrz\u0105b Katarzyna;</li>\r\n\t\t\t\t<li>Krawczak Olga;</li>\r\n\t\t\t\t<li>Krawczyk Marianna;</li>\r\n\t\t\t\t<li>Kur Natalia;</li>\r\n\t\t\t\t<li>Kwiatek Marta;</li>\r\n\r\n\t\t\t\t<li>La\u015bkiewicz Joanna;</li>\r\n\t\t\t\t<li>Machczy\u0144ska Daria;</li>\r\n\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n\t\t\t\t<li>Moczulska Karolina;</li>\r\n\t\t\t\t<li>Mo\u015bcicka Aneta;</li>\r\n\t\t\t\t<li>Narloch Sabina;</li>\r\n\r\n\t\t\t\t<li>Przybysz Pawe\u0142;</li>\r\n\t\t\t\t<li>Puchta Marek;</li>\r\n\t\t\t\t<li>Ryska Cezary;</li>\r\n\t\t\t\t<li>Sandomierski Bart\u0142omiej;</li>\r\n\t\t\t\t<li>S\u0142awi\u0144ski Tomasz;</li>\r\n\t\t\t\t<li>S\u0142owik Olga;</li>\r\n\r\n\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n\t\t\t\t<li>Strzelczak Karolina;</li>\r\n\t\t\t\t<li>Szafran Danuta;</li>\r\n\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n\t\t\t\t<li>Szulkowska Alicja;</li>\r\n\t\t\t\t<li>\u015alusarczyk Anna;</li>\r\n\r\n\t\t\t\t<li>Tytkowska Anna.</li>\r\n\t\t\t</ul>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\t\u0410\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0439 \u043d\u0435\u043f\u0443\u0431\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0431\u0449\u0435\u043e\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u0446\u0435\u0439 \u043d\u043e\u043c\u0435\u0440\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa;\u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\r\n\t\t\t\t\t\u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c Micha\u0142a Friedricha:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n\r\n\t\t\t\t\t<li>Go\u0142aszewska Ewa;</li>\r\n\t\t\t\t\t<li>Kwiatkowski Micha\u0142;</li>\r\n\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n\t\t\t\t\t<li>Przespolewski Przemys\u0142aw;</li>\r\n\t\t\t\t\t<li>Rosi\u0144ska Zuzanna;</li>\r\n\r\n\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tLXIV \u041e\u0431\u0449\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u0446\u0435\u0439 \u0438\u043c. \u0421. \u0418. \u0412\u0438\u0442\u043a\u0435\u0432\u0438\u0447\u0430,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\r\n\t\t\t\t\t\u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c Daniela Zycha:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\r\n\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n\t\t\t\t\t<li>Dr\u0105gowska Katarzyna;</li>\r\n\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n\t\t\t\t\t<li>G\u0142owacki Jan;</li>\r\n\t\t\t\t\t<li>Grad Pawe\u0142;</li>\r\n\r\n\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n\t\t\t\t\t<li>K\u0142os Aneta;</li>\r\n\t\t\t\t\t<li>Kozie\u0142 Barbara;</li>\r\n\t\t\t\t\t<li>Koz\u0142owska Anna;</li>\r\n\t\t\t\t\t<li>Krug Pamela;</li>\r\n\r\n\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n\t\t\t\t\t<li>Luba\u015b Micha\u0142;</li>\r\n\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n\t\t\t\t\t<li>Modelska Marta;</li>\r\n\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n\r\n\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n\t\t\t\t\t<li>Pielat Zofia;</li>\r\n\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n\t\t\t\t\t<li>Rosa Karolina;</li>\r\n\r\n\t\t\t\t\t<li>Smyczy\u0144ska Kamila;</li>\r\n\t\t\t\t\t<li>Stoli\u0144ska Barbara;</li>\r\n\t\t\t\t\t<li>Szyma\u0144ska Katarzyna;</li>\r\n\t\t\t\t\t<li>\u015acibior Ewa;</li>\r\n\t\t\t\t\t<li>Witczak Magda;</li>\r\n\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n\r\n\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n\t\t\t\t\t<li>Zi\u00f3\u0142kowska Adrianna.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t </li>\r\n\t </ol>", + "left_column_fr": "<h2>B\u00e9n\u00e9volat</h2>\r\n\t<p>\r\n\t\tLes histoires de vie des auteurs ainsi que les d\u00e9finitions des \u00e9poques et genres litt\u00e9raires dans la biblioth\u00e8que en ligne Lectures libres ont \u00e9t\u00e9 \u00e9crites par les \u00e9l\u00e8ves des quatre \u00e9coles pendant les ateliers \"B\u00e9n\u00e9volat pour le savoir\"\r\n\t</p>\r\n\r\n\t<p>\r\n\t\tLes \u00e9l\u00e8ves ont travaill\u00e9 ensemble sous la supervision des professeurs et sp\u00e9cialistes \u2013 hommes des lettres sur\r\n\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n\r\n\t\tune platforme en ligne wiki</a>\r\n\t\tmise en place par l'\u00e9quipe\r\n\t\t<a href=\"http://2ia.pl/\">2ia</a>. Le travail sur les fiches comprenait aussi la ma\u00eetrise de l'ordinateur et de l'internet pour chercher des informations, ainsi que pour v\u00e9rifier leur fiabilit\u00e9.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\tLe projet \"B\u00e9n\u00e9volat pour le savoir\" a \u00e9t\u00e9 r\u00e9alis\u00e9 gr\u00e2ce \u00e0 l'appui \t<a href=\"http://www.menis.gov.pl/\">\r\n\t\tdu Minist\u00e8re de l'Education nationale\t</a>. Des r\u00e9compenses pour les \u00e9l\u00e8ves ont \u00e9t\u00e9 fond\u00e9es par <a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n\r\n\t\t\tla Maison d'\u00e9dition Nasza Ksi\u0119garnia</a>\r\n\t\tet\r\n\t\t<a href=\"http://helion.pl/\">la Maison d'\u00e9dition Helion</a>. Les fiches ont \u00e9t\u00e9 v\u00e9rifi\u00e9es sur le site\r\n\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n\t\t\tPlagiat.pl</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\t<a href=\"/static/wolontariat.pdf\"> Le rapport sur la r\u00e9alisation du projet \"B\u00e9n\u00e9volat pour le savoir\"\r\n</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />\r\n\t</p>", + "title": "Volunteering for knowledge", + "title_lt": "Lik savanoriu kad su\u009einoti daugiau", + "right_column": "<h2>Authors</h2>\r\n\r\n\t<ol>\r\n\t\t<li>\r\n\t\t\tGimnazjum nr 40 z Oddzia\u0142ami Integracyjnymi w Zespole\r\n\t\t\t\tSzk\u00f3\u0142 nr 69 im. Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; second form attented by\t\t\t\tAnna Budziarek-Friedrich:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Burdon Filip;</li>\r\n\r\n\t\t\t\t<li>D\u0119bski Bartek;</li>\r\n\t\t\t\t<li>Jackowicz Kamil;</li>\r\n\t\t\t\t<li>Kurek Pawe\u0142;</li>\r\n\t\t\t\t<li>Makles Bartosz;</li>\r\n\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n\t\t\t\t<li>Migda\u0142 Katarzyna;</li>\r\n\r\n\t\t\t\t<li>Mioduszewski Micha\u0142;</li>\r\n\t\t\t\t<li>Pfeiffer Ida;</li>\r\n\t\t\t\t<li>P\u0142askowicka Karolina;</li>\r\n\t\t\t\t<li>Sailer Ewa.</li>\r\n\t\t\t</ul>\r\n\t\t</li>\r\n\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tXXXIII Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Miko\u0142aja Kopernika,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; first year, biologyoriented class attented by El\u017cbieta Konkowskiej:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Chwil Bart\u0142omiej;</li>\r\n\t\t\t\t<li>Czarnecka Natalia;</li>\r\n\t\t\t\t<li>Gawro\u0144ska Iga;</li>\r\n\r\n\t\t\t\t<li>Grabarczyk Marta;</li>\r\n\t\t\t\t<li>Jastrz\u0105b Katarzyna;</li>\r\n\t\t\t\t<li>Krawczak Olga;</li>\r\n\t\t\t\t<li>Krawczyk Marianna;</li>\r\n\t\t\t\t<li>Kur Natalia;</li>\r\n\t\t\t\t<li>Kwiatek Marta;</li>\r\n\r\n\t\t\t\t<li>La\u015bkiewicz Joanna;</li>\r\n\t\t\t\t<li>Machczy\u0144ska Daria;</li>\r\n\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n\t\t\t\t<li>Moczulska Karolina;</li>\r\n\t\t\t\t<li>Mo\u015bcicka Aneta;</li>\r\n\t\t\t\t<li>Narloch Sabina;</li>\r\n\r\n\t\t\t\t<li>Przybysz Pawe\u0142;</li>\r\n\t\t\t\t<li>Puchta Marek;</li>\r\n\t\t\t\t<li>Ryska Cezary;</li>\r\n\t\t\t\t<li>Sandomierski Bart\u0142omiej;</li>\r\n\t\t\t\t<li>S\u0142awi\u0144ski Tomasz;</li>\r\n\t\t\t\t<li>S\u0142owik Olga;</li>\r\n\r\n\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n\t\t\t\t<li>Strzelczak Karolina;</li>\r\n\t\t\t\t<li>Szafran Danuta;</li>\r\n\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n\t\t\t\t<li>Szulkowska Alicja;</li>\r\n\t\t\t\t<li>\u015alusarczyk Anna;</li>\r\n\r\n\t\t\t\t<li>Tytkowska Anna.</li>\r\n\t\t\t</ul>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tAutorskie Niepubliczne Liceum Og\u00f3lnokszta\u0142c\u0105ce nr\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; first year, general education class attented by Micha\u0142 Friedrich:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n\r\n\t\t\t\t\t<li>Go\u0142aszewska Ewa;</li>\r\n\t\t\t\t\t<li>Kwiatkowski Micha\u0142;</li>\r\n\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n\t\t\t\t\t<li>Przespolewski Przemys\u0142aw;</li>\r\n\t\t\t\t\t<li>Rosi\u0144ska Zuzanna;</li>\r\n\r\n\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tLXIV Liceum Og\u00f3lnokszta\u0142c\u0105ce im. St. I. Witkiewicza,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; first year, general education class attented by Daniel Zych:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\r\n\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n\t\t\t\t\t<li>Dr\u0105gowska Katarzyna;</li>\r\n\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n\t\t\t\t\t<li>G\u0142owacki Jan;</li>\r\n\t\t\t\t\t<li>Grad Pawe\u0142;</li>\r\n\r\n\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n\t\t\t\t\t<li>K\u0142os Aneta;</li>\r\n\t\t\t\t\t<li>Kozie\u0142 Barbara;</li>\r\n\t\t\t\t\t<li>Koz\u0142owska Anna;</li>\r\n\t\t\t\t\t<li>Krug Pamela;</li>\r\n\r\n\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n\t\t\t\t\t<li>Luba\u015b Micha\u0142;</li>\r\n\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n\t\t\t\t\t<li>Modelska Marta;</li>\r\n\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n\r\n\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n\t\t\t\t\t<li>Pielat Zofia;</li>\r\n\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n\t\t\t\t\t<li>Rosa Karolina;</li>\r\n\r\n\t\t\t\t\t<li>Smyczy\u0144ska Kamila;</li>\r\n\t\t\t\t\t<li>Stoli\u0144ska Barbara;</li>\r\n\t\t\t\t\t<li>Szyma\u0144ska Katarzyna;</li>\r\n\t\t\t\t\t<li>\u015acibior Ewa;</li>\r\n\t\t\t\t\t<li>Witczak Magda;</li>\r\n\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n\r\n\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n\t\t\t\t\t<li>Zi\u00f3\u0142kowska Adrianna.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t </li>\r\n\t </ol>", + "right_column_es": "\t<h2>Autores</h2>\r\n\r\n\r\n\r\n\t<ol>\r\n\r\n\t\t<li>\r\n\r\n\t\t\t<p>\r\n\r\n\t\t\t\tGimnazjum nr 40 z Oddzia\u0142ami Integracyjnymi w Zespole\r\n\r\n\t\t\t\tSzk\u00f3\u0142 nr 69 im. Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d,\r\n\r\n\t\t\t\tC/ Drewniana 8, 00-345 Varsovia; segundo curso bajo la supervisi\u00f3n de\r\n\r\n\t\t\t\tAnna Budziarek-Friedrich:\r\n\r\n\t\t\t</p>\r\n\r\n\r\n\r\n\t\t\t<ul>\r\n\r\n\t\t\t\t<li>Burdon Filip;</li>\r\n\r\n\r\n\r\n\t\t\t\t<li>D\u0119bski Bartek;</li>\r\n\r\n\t\t\t\t<li>Jackowicz Kamil;</li>\r\n\r\n\t\t\t\t<li>Kurek Pawe\u0142;</li>\r\n\r\n\t\t\t\t<li>Makles Bartosz;</li>\r\n\r\n\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n\r\n\t\t\t\t<li>Migda\u0142 Katarzyna;</li>\r\n\r\n\r\n\r\n\t\t\t\t<li>Mioduszewski Micha\u0142;</li>\r\n\r\n\t\t\t\t<li>Pfeiffer Ida;</li>\r\n\r\n\t\t\t\t<li>P\u0142askowicka Karolina;</li>\r\n\r\n\t\t\t\t<li>Sailer Ewa.</li>\r\n\r\n\t\t\t</ul>\r\n\r\n\t\t</li>\r\n\r\n\r\n\r\n\t\t<li>\r\n\r\n\t\t\t<p>\r\n\r\n\t\t\t\tXXXIII Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Miko\u0142aja Kopernika,\r\n\r\n\t\t\t\tC/ Bema 76, 01-225 Varsovia; primer curso de perfil biol\u00f3gico-qu\u00edmico bajo la supervisi\u00f3n de El\u017cbieta Konkowska:\r\n\r\n\t\t\t</p>\r\n\r\n\r\n\r\n\t\t\t<ul>\r\n\r\n\t\t\t\t<li>Chwil Bart\u0142omiej;</li>\r\n\r\n\t\t\t\t<li>Czarnecka Natalia;</li>\r\n\r\n\t\t\t\t<li>Gawro\u0144ska Iga;</li>\r\n\r\n\r\n\r\n\t\t\t\t<li>Grabarczyk Marta;</li>\r\n\r\n\t\t\t\t<li>Jastrz\u0105b Katarzyna;</li>\r\n\r\n\t\t\t\t<li>Krawczak Olga;</li>\r\n\r\n\t\t\t\t<li>Krawczyk Marianna;</li>\r\n\r\n\t\t\t\t<li>Kur Natalia;</li>\r\n\r\n\t\t\t\t<li>Kwiatek Marta;</li>\r\n\r\n\r\n\r\n\t\t\t\t<li>La\u015bkiewicz Joanna;</li>\r\n\r\n\t\t\t\t<li>Machczy\u0144ska Daria;</li>\r\n\r\n\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n\r\n\t\t\t\t<li>Moczulska Karolina;</li>\r\n\r\n\t\t\t\t<li>Mo\u015bcicka Aneta;</li>\r\n\r\n\t\t\t\t<li>Narloch Sabina;</li>\r\n\r\n\r\n\r\n\t\t\t\t<li>Przybysz Pawe\u0142;</li>\r\n\r\n\t\t\t\t<li>Puchta Marek;</li>\r\n\r\n\t\t\t\t<li>Ryska Cezary;</li>\r\n\r\n\t\t\t\t<li>Sandomierski Bart\u0142omiej;</li>\r\n\r\n\t\t\t\t<li>S\u0142awi\u0144ski Tomasz;</li>\r\n\r\n\t\t\t\t<li>S\u0142owik Olga;</li>\r\n\r\n\r\n\r\n\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n\r\n\t\t\t\t<li>Strzelczak Karolina;</li>\r\n\r\n\t\t\t\t<li>Szafran Danuta;</li>\r\n\r\n\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n\r\n\t\t\t\t<li>Szulkowska Alicja;</li>\r\n\r\n\t\t\t\t<li>\u015alusarczyk Anna;</li>\r\n\r\n\r\n\r\n\t\t\t\t<li>Tytkowska Anna.</li>\r\n\r\n\t\t\t</ul>\r\n\r\n\t\t\t<li>\r\n\r\n\t\t\t\t<p>\r\n\r\n\t\t\t\t\tAutorskie Niepubliczne Liceum Og\u00f3lnokszta\u0142c\u0105ce nr\r\n\r\n\t\t\t\t\t42, C/ Iwicka 47 B, 00-735 Varsovia; primer curso\r\n\r\n\t\t\t\t\tbajo la supervisi\u00f3n de Micha\u0142 Friedrich:\r\n\r\n\t\t\t\t</p>\r\n\r\n\r\n\r\n\t\t\t\t<ul>\r\n\r\n\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n\r\n\r\n\r\n\t\t\t\t\t<li>Go\u0142aszewska Ewa;</li>\r\n\r\n\t\t\t\t\t<li>Kwiatkowski Micha\u0142;</li>\r\n\r\n\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n\r\n\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n\r\n\t\t\t\t\t<li>Przespolewski Przemys\u0142aw;</li>\r\n\r\n\t\t\t\t\t<li>Rosi\u0144ska Zuzanna;</li>\r\n\r\n\r\n\r\n\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n\r\n\t\t\t\t</ul>\r\n\r\n\t\t\t</li>\r\n\r\n\t\t\t<li>\r\n\r\n\t\t\t\t<p>\r\n\r\n\t\t\t\t\tLXIV Liceum Og\u00f3lnokszta\u0142c\u0105ce im. St. I. Witkiewicza,\r\n\r\n\t\t\t\t\tC/ Elbl\u0105ska 51, 01-737 Varsovia; primer curso bajo la supervisi\u00f3n de Daniel Zych:\r\n\r\n\t\t\t\t</p>\r\n\r\n\r\n\r\n\t\t\t\t<ul>\r\n\r\n\r\n\r\n\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n\r\n\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n\r\n\t\t\t\t\t<li>Dr\u0105gowska Katarzyna;</li>\r\n\r\n\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n\r\n\t\t\t\t\t<li>G\u0142owacki Jan;</li>\r\n\r\n\t\t\t\t\t<li>Grad Pawe\u0142;</li>\r\n\r\n\r\n\r\n\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n\r\n\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n\r\n\t\t\t\t\t<li>K\u0142os Aneta;</li>\r\n\r\n\t\t\t\t\t<li>Kozie\u0142 Barbara;</li>\r\n\r\n\t\t\t\t\t<li>Koz\u0142owska Anna;</li>\r\n\r\n\t\t\t\t\t<li>Krug Pamela;</li>\r\n\r\n\r\n\r\n\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n\r\n\t\t\t\t\t<li>Luba\u015b Micha\u0142;</li>\r\n\r\n\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n\r\n\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n\r\n\t\t\t\t\t<li>Modelska Marta;</li>\r\n\r\n\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n\r\n\r\n\r\n\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n\r\n\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n\r\n\t\t\t\t\t<li>Pielat Zofia;</li>\r\n\r\n\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n\r\n\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n\r\n\t\t\t\t\t<li>Rosa Karolina;</li>\r\n\r\n\r\n\r\n\t\t\t\t\t<li>Smyczy\u0144ska Kamila;</li>\r\n\r\n\t\t\t\t\t<li>Stoli\u0144ska Barbara;</li>\r\n\r\n\t\t\t\t\t<li>Szyma\u0144ska Katarzyna;</li>\r\n\r\n\t\t\t\t\t<li>\u015acibior Ewa;</li>\r\n\r\n\t\t\t\t\t<li>Witczak Magda;</li>\r\n\r\n\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n\r\n\r\n\r\n\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n\r\n\t\t\t\t\t<li>Zi\u00f3\u0142kowska Adrianna.</li>\r\n\r\n\t\t\t\t</ul>\r\n\r\n\t\t\t</li>\r\n\r\n\t </li>\r\n\r\n\t </ol>", + "right_column_en": "<h2>Authors</h2>\r\n\r\n\t<ol>\r\n\t\t<li>\r\n\t\t\tGimnazjum nr 40 z Oddzia\u0142ami Integracyjnymi w Zespole\r\n\t\t\t\tSzk\u00f3\u0142 nr 69 im. Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; second form attented by\t\t\t\tAnna Budziarek-Friedrich:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Burdon Filip;</li>\r\n\r\n\t\t\t\t<li>D\u0119bski Bartek;</li>\r\n\t\t\t\t<li>Jackowicz Kamil;</li>\r\n\t\t\t\t<li>Kurek Pawe\u0142;</li>\r\n\t\t\t\t<li>Makles Bartosz;</li>\r\n\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n\t\t\t\t<li>Migda\u0142 Katarzyna;</li>\r\n\r\n\t\t\t\t<li>Mioduszewski Micha\u0142;</li>\r\n\t\t\t\t<li>Pfeiffer Ida;</li>\r\n\t\t\t\t<li>P\u0142askowicka Karolina;</li>\r\n\t\t\t\t<li>Sailer Ewa.</li>\r\n\t\t\t</ul>\r\n\t\t</li>\r\n\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tXXXIII Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Miko\u0142aja Kopernika,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; first year, biologyoriented class attented by El\u017cbieta Konkowskiej:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Chwil Bart\u0142omiej;</li>\r\n\t\t\t\t<li>Czarnecka Natalia;</li>\r\n\t\t\t\t<li>Gawro\u0144ska Iga;</li>\r\n\r\n\t\t\t\t<li>Grabarczyk Marta;</li>\r\n\t\t\t\t<li>Jastrz\u0105b Katarzyna;</li>\r\n\t\t\t\t<li>Krawczak Olga;</li>\r\n\t\t\t\t<li>Krawczyk Marianna;</li>\r\n\t\t\t\t<li>Kur Natalia;</li>\r\n\t\t\t\t<li>Kwiatek Marta;</li>\r\n\r\n\t\t\t\t<li>La\u015bkiewicz Joanna;</li>\r\n\t\t\t\t<li>Machczy\u0144ska Daria;</li>\r\n\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n\t\t\t\t<li>Moczulska Karolina;</li>\r\n\t\t\t\t<li>Mo\u015bcicka Aneta;</li>\r\n\t\t\t\t<li>Narloch Sabina;</li>\r\n\r\n\t\t\t\t<li>Przybysz Pawe\u0142;</li>\r\n\t\t\t\t<li>Puchta Marek;</li>\r\n\t\t\t\t<li>Ryska Cezary;</li>\r\n\t\t\t\t<li>Sandomierski Bart\u0142omiej;</li>\r\n\t\t\t\t<li>S\u0142awi\u0144ski Tomasz;</li>\r\n\t\t\t\t<li>S\u0142owik Olga;</li>\r\n\r\n\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n\t\t\t\t<li>Strzelczak Karolina;</li>\r\n\t\t\t\t<li>Szafran Danuta;</li>\r\n\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n\t\t\t\t<li>Szulkowska Alicja;</li>\r\n\t\t\t\t<li>\u015alusarczyk Anna;</li>\r\n\r\n\t\t\t\t<li>Tytkowska Anna.</li>\r\n\t\t\t</ul>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tAutorskie Niepubliczne Liceum Og\u00f3lnokszta\u0142c\u0105ce nr\r\n\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; first year, general education class attented by Micha\u0142 Friedrich:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n\r\n\t\t\t\t\t<li>Go\u0142aszewska Ewa;</li>\r\n\t\t\t\t\t<li>Kwiatkowski Micha\u0142;</li>\r\n\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n\t\t\t\t\t<li>Przespolewski Przemys\u0142aw;</li>\r\n\t\t\t\t\t<li>Rosi\u0144ska Zuzanna;</li>\r\n\r\n\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tLXIV Liceum Og\u00f3lnokszta\u0142c\u0105ce im. St. I. Witkiewicza,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; first year, general education class attented by Daniel Zych:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\r\n\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n\t\t\t\t\t<li>Dr\u0105gowska Katarzyna;</li>\r\n\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n\t\t\t\t\t<li>G\u0142owacki Jan;</li>\r\n\t\t\t\t\t<li>Grad Pawe\u0142;</li>\r\n\r\n\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n\t\t\t\t\t<li>K\u0142os Aneta;</li>\r\n\t\t\t\t\t<li>Kozie\u0142 Barbara;</li>\r\n\t\t\t\t\t<li>Koz\u0142owska Anna;</li>\r\n\t\t\t\t\t<li>Krug Pamela;</li>\r\n\r\n\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n\t\t\t\t\t<li>Luba\u015b Micha\u0142;</li>\r\n\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n\t\t\t\t\t<li>Modelska Marta;</li>\r\n\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n\r\n\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n\t\t\t\t\t<li>Pielat Zofia;</li>\r\n\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n\t\t\t\t\t<li>Rosa Karolina;</li>\r\n\r\n\t\t\t\t\t<li>Smyczy\u0144ska Kamila;</li>\r\n\t\t\t\t\t<li>Stoli\u0144ska Barbara;</li>\r\n\t\t\t\t\t<li>Szyma\u0144ska Katarzyna;</li>\r\n\t\t\t\t\t<li>\u015acibior Ewa;</li>\r\n\t\t\t\t\t<li>Witczak Magda;</li>\r\n\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n\r\n\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n\t\t\t\t\t<li>Zi\u00f3\u0142kowska Adrianna.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t </li>\r\n\t </ol>", + "left_column_de": "<h2>Volontariat</h2>\r\n\t<p>\r\n\t\tSchriftsteller-Biographien und Definitionen von Epochen und Literaturgattungen\r\n in der Internetbibliothek Freie Lekt\u00fcren haben unsere Sch\u00fcler aus vier\r\n Schulen w\u00e4hrend Workshops \"Volontariat f\u00fcr Wissen\" geschrieben.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\tDie Sch\u00fcler haben gemeinsam unter Aufsicht der Lehrer\r\n\t\tund Spezialisten -Literaturwissenschaftler - gearbeitet\r\n\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n\r\n\t\t\tauf \"wiki\" Internetplattform</a>\r\n\t\tvorbereitet von unserem Team\r\n\t\t<a href=\"http://2ia.pl/\">2ia</a>. Der Einsatz von Computer und Internet wurde\r\n\t\t- w\u00e4hrend der Arbeiten an Noten - f\u00fcr die Informationssuche und Informationspr\u00fcfung genutzt\r\n\t\tund gleichzeitig als notwendiges Werkzeug in den Lernprozess einbezogen.\r\n\t</p>\r\n \r\n\t<p>\r\n\t\tDas Projekt \"Volontariat f\u00fcr Wissen\" wurde dank der Unterst\u00fctzung umgesetzt, von\r\n\t\t<a href=\"http://www.menis.gov.pl/\">\r\n\t\t\tMinisterium f\u00fcr Bildung</a>. Preise f\u00fcr Sch\u00fcler spendeten\r\n\t\t<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n\r\n\t\t\tVerlag unsere Buchhandlung</a>\r\n\t\tund\r\n\t\t<a href=\"http://helion.pl/\">Wydawnictwo Helion</a>. Noten wurden im Service verifiziert\r\n\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n\t\t\tPlagiat.pl</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\t<a href=\"/static/wolontariat.pdf\">der Bericht \u00fcber das Projekt \"Volontariat f\u00fcr Wissen\"</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />\r\n\t</p>\r\n", + "title_uk": "\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0432 \u043e\u0441\u0432\u0456\u0442\u0456", + "right_column_it": null, + "title_pl": "Wolontariat dla wiedzy", + "left_column": "<h2>Volunteers</h2>\r\n\t<p>Writers' biographical entries as well as periods' and genres'\r\ndefinitions placed on web library Wolne Lektury were written by students from four schools during \"Wolontariat dla wiedzy\" (\"Volunteering for knowledge\") workshops. </p> <p>\r\n The students worked together under the factual guidance of teachers and specialists - literary scholars<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n\r\n\ton wiki platform</a>\r\n prepared by <a href=\"http://2ia.pl/\">2ia</a> team. At the same time the students learnt how to use a computer and the Internet while searching for necessary information how to verify the credibility of the source. </p>\r\n\r\n<p>\r\n\"Wolontariat dla wiedzy\" project was realised thanks to the support of <a href=\"http://www.menis.gov.pl/\">\r\nMinisterstwo Edukacji Narodowej</a>. The rewards for the student were funded by<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n\r\nWydawnictwo Nasza Ksi\u0119garnia</a>\r\nand<a href=\"http://helion.pl/\">Wydawnictwo Helion</a>. Each entry was verified on <a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\nPlagiat.pl</a> website.\r\n</p>\r\n\r\n<p>\r\n\t\t<a href=\"/static/wolontariat.pdf\">Report on completion of \"Wolontariat dla wiedzy\" project (PL)</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />\r\n\t</p>", + "right_column_uk": "<h2>\u0410\u0432\u0442\u043e\u0440\u0438</h2>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <ol>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <p>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0413\u0456\u043c\u043d\u0430\u0437\u0456\u044f \u211640 \u0437 \u0456\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0456\u0439\u043d\u0438\u043c\u0438 \u0432\u0456\u0434\u0434\u0456\u043b\u0430\u043c\u0438 \u0432 \u041a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0456 \u0448\u043a\u0456\u043b \u2116 69 \u0456\u043c\u0435\u043d\u0456 \u0410\u0440\u043c\u0456\u0457 \u041a\u0440\u0430\u0439\u043e\u0432\u043e\u0457 \u0411\u043e\u0439\u043e\u0432\u043e\u0457 \u0413\u0440\u0443\u043f\u0438 \u201c\u041a\u0420\u0418\u0411\u0410\u0420\u201d,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0432\u0443\u043b. \u0414\u0440\u0435\u0432\u043d\u044f\u043d\u0430 8, 00-345 \u0412\u0430\u0440\u0448\u0430\u0432\u0430; \u0434\u0440\u0443\u0433\u0438\u0439 \u043a\u043b\u0430\u0441 \u043f\u0456\u0434 \u043e\u043f\u0456\u043a\u043e\u044e \u0410\u043d\u043d\u0438 \u0411\u0443\u0434\u0437\u044f\u0440\u0435\u043a-\u0424\u0440\u0456\u0434\u0440\u0456\u0445:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </p>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <ul>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0411\u0443\u0440\u0434\u043e\u043d \u0424\u0456\u043b\u0456\u043f;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0414\u0435\u043c\u0431\u0441\u044c\u043a\u0456 \u0411\u0430\u0440\u0442\u0435\u043a;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u042f\u0446\u043a\u043e\u0432\u0456\u0447 \u041a\u0430\u043c\u0456\u043b;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u0443\u0440\u0435\u043a \u041f\u0430\u0432\u0435\u043b;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u0430\u043a\u043b\u0435\u0441 \u0411\u0430\u0440\u0442\u043e\u0448;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u0430\u0440\u043a\u0435\u0432\u0456\u0447 \u0404\u0440\u0435\u043c\u044f\u0448;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u0456\u0433\u0434\u0430\u043b \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u0456\u043e\u0434\u0443\u0448\u0435\u0432\u0441\u044c\u043a\u0456 \u041c\u0456\u0445\u0430\u043b;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0424\u0430\u0439\u0444\u0435\u0440 \u0406\u0434\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u043b\u0430\u0441\u043a\u043e\u0432\u0456\u0446\u044c\u043a\u0430 \u041a\u0430\u0440\u043e\u043b\u0456\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u0430\u0439\u043b\u0435\u0440 \u0415\u0432\u0430.</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </ul>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <p>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 XXXIII \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u043e\u0441\u0432\u0456\u0442\u043d\u0438\u0439 \u043b\u0456\u0446\u0435\u0439 \u0456\u043c\u0435\u043d\u0456 \u041c\u0438\u043a\u043e\u043b\u0430\u044f \u041a\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0432\u0443\u043b. \u0411\u0435\u043c\u0430 76, 01-225 \u0412\u0430\u0440\u0448\u0430\u0432\u0430; \u043f\u0435\u0440\u0448\u0438\u0439 \u043a\u043b\u0430\u0441 \u0431\u0456\u043e\u043b\u043e\u0433\u0456\u0447\u043d\u043e-\u0445\u0456\u043c\u0456\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0456\u043b\u044e \u043f\u0456\u0434 \u043e\u043f\u0456\u043a\u043e\u044e \u0415\u043b\u044c\u0436\u0431\u0454\u0442\u0438 \u041a\u043e\u043d\u043a\u043e\u0432\u0441\u044c\u043a\u043e\u0457 :\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </p>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <ul>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0425\u0432\u0456\u043b \u0411\u0430\u0440\u0442\u043b\u043e\u043c\u0454\u0439;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0427\u0430\u0440\u043d\u0435\u0446\u044c\u043a\u0430 \u041d\u0430\u0442\u0430\u043b\u0456\u044f ;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0490\u0430\u0432\u0440\u043e\u043d\u0441\u044c\u043a\u0430 \u0406\u0491\u0430 ;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0490\u0440\u0430\u0431\u0430\u0440\u0447\u0438\u043a \u041c\u0430\u0440\u0442\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u042f\u0430\u0441\u0442\u0436\u043e\u043c\u0431 \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u0440\u0430\u0432\u0447\u0430\u043a \u041e\u043b\u044c\u0433\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u0440\u0430\u0432\u0447\u0438\u043a \u041c\u0430\u0440\u0456\u0430\u043d\u043d\u0430 ;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u0443\u0440 \u041d\u0430\u0442\u0430\u043b\u0456\u044f;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u0432\u044f\u0442\u0435\u043a \u041c\u0430\u0440\u0442\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041b\u0430\u0441\u044c\u043a\u0435\u0432\u0438\u0447 \u0419\u043e\u0430\u043d\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u0430\u0445\u0447\u0438\u043d\u0441\u044c\u043a\u0430 \u0414\u0430\u0440\u0456\u044f;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u0454\u0447\u043d\u0456\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u0406\u0437\u0430\u0431\u0435\u043b\u044f;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u043e\u0447\u0443\u043b\u0441\u044c\u043a\u0430 \u041a\u0430\u0440\u043e\u043b\u0456\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u043e\u0441\u044c\u0446\u0456\u0446\u043a\u0430 \u0410\u043d\u0435\u0442\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041d\u0430\u0440\u043b\u043e\u0445 \u0421\u0430\u0431\u0456\u043d\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u0448\u0438\u0431\u0438\u0448 \u041f\u0430\u0432\u0435\u043b;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u0443\u0445\u0442\u0430 \u041c\u0430\u0440\u0435\u043a;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0420\u0438\u0441\u043a\u0430 \u0426\u0435\u0437\u0430\u0440\u0438;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u0430\u043d\u0434\u043e\u043c\u0454\u0440\u0441\u044c\u043a\u0456 \u0411\u0430\u0440\u043b\u043e\u043c\u0454\u0439;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u043b\u0430\u0432\u0456\u043d\u0441\u044c\u043a\u0456 \u0422\u043e\u043c\u0430\u0448;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u043b\u043e\u0432\u0456\u043a \u041e\u043b\u044c\u0433\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u0442\u0430\u0436\u0438\u0446\u044c\u043a\u0430 \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u0442\u0436\u0435\u043b\u0447\u0430\u043a \u041a\u0430\u0440\u043e\u043b\u0456\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0428\u0430\u0444\u0440\u0430\u043d \u0414\u0430\u043d\u0443\u0442\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0428\u043c\u0456\u0491\u0454\u043b\u044c\u0441\u044c\u043a\u0430 \u041c\u0430\u0491\u0434\u0430\u043b\u0435\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0428\u0443\u043b\u043a\u043e\u0432\u0430\u0441\u044c\u043a\u0430 \u0410\u043b\u0456\u0446\u0456\u044f;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u044c\u043b\u0443\u0441\u0430\u0440\u0447\u0438\u043a \u0410\u043d\u043d\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0422\u0438\u0442\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u00a0\u0410\u043d\u043d\u0430.</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </ul>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <p>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0410\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u0439 \u041d\u0435\u043f\u0443\u0431\u043b\u0456\u0447\u043d\u0438\u0439 \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u043e\u0441\u0432\u0456\u0442\u043d\u0456\u0439 \u041b\u0456\u0446\u0435\u0439 \u2116 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 42, \u0432\u0443\u043b. \u0406\u0432\u0456\u0446\u044c\u043a\u0430 47 B, 00-735 \u0412\u0430\u0440\u0448\u0430\u0432\u0430; \u043f\u0435\u0440\u0448\u0438\u0439 \u043a\u043b\u0430\u0441 \u0437\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0456\u043b\u044e \u043f\u0456\u0434 \u043e\u043f\u0456\u043a\u043e\u044e \u041c\u0456\u0445\u0430\u043b\u0430 \u0424\u0440\u0456\u0434\u0440\u0456\u0445\u0430:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </p>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <ul>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0411\u0430\u0440\u0430\u043d\u0454\u0446\u044c\u043a\u0430 \u041c\u0430\u0440\u0442\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0490\u043e\u043b\u0430\u0448\u0435\u0432\u0441\u044c\u043a\u0430 \u0415\u0432\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u0432\u044f\u0442\u043a\u043e\u0432\u0441\u044c\u043a\u0456 \u041c\u0456\u0445\u0430\u043b;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u0430\u0445\u043d\u0456\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u041c\u043e\u043d\u0456\u043a\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u0454\u0442\u0436\u0430\u043a \u0411\u0430\u0440\u0442\u043e\u0448;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u0448\u0435\u0441\u043f\u043e\u043b\u0435\u0432\u0441\u044c\u043a\u0456 \u041f\u0448\u0435\u043c\u0438\u0441\u043b\u0430\u0432;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0420\u043e\u0441\u0456\u043d\u0441\u044c\u043a\u0430 \u0417\u0443\u0437\u0430\u043d\u043d\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u0456\u0431\u0456\u0491\u0430 \u041c\u0430\u0491\u0434\u0430\u043b\u0435\u043d\u0430.</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </ul>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <p>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LXIV \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u043e\u0441\u0432\u0456\u0442\u043d\u0456\u0439 \u041b\u0456\u0446\u0435\u0439 \u0456\u043c\u0435\u043d\u0456 \u0421\u0442.\u0406. \u0412\u0456\u0442\u043a\u0454\u0432\u0456\u0447\u0430,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0432\u0443\u043b. \u0415\u043b\u044c\u0431\u043b\u043e\u043d\u0437\u044c\u043a\u0430 51, 01-737 \u0412\u0430\u0440\u0448\u0430\u0432\u0430; \u043f\u0435\u0440\u0448\u0438\u0439 \u043a\u043b\u0430\u0441 \u0437\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0456\u043b\u044e \u043f\u0456\u0434 \u043e\u043f\u0456\u043a\u043e\u044e \u0414\u0430\u043d\u0454\u043b\u0430 \u0417\u0438\u0445\u0430:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </p>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <ul>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0410\u043d\u0434\u0436\u0435\u0439\u0447\u0430\u043a \u041a\u0430\u043c\u0456\u043b;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0427\u0443\u0431\u0430\u0439 \u041a\u043e\u043d\u0440\u0430\u0434;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0414\u0440\u043e\u043d\u0491\u043e\u0432\u0441\u044c\u043a\u0430 \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0490\u0430\u0454\u0432\u0441\u044c\u043a\u0430 \u041c\u0430\u0491\u0434\u0430\u043b\u0435\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0490\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u0456 \u042f\u043d;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0490\u0440\u0430\u0434 \u00a0\u041f\u0430\u0432\u0435\u043b;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0413\u043d\u0430\u0442\u043e\u0432\u0441\u044c\u043a\u0456 \u0411\u0430\u0440\u0442\u0435\u043a;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u0430\u0440\u0432\u043e\u0432\u0441\u044c\u043a\u0456 \u041c\u0430\u0440\u0446\u0456\u043d;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u043b\u043e\u0441 \u0410\u043d\u0435\u0442\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u043e\u0437\u0454\u043b \u0411\u0430\u0440\u0431\u0430\u0440\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u043e\u0437\u043b\u043e\u0432\u0441\u044c\u043a\u0430 \u0410\u043d\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u0440\u0443\u0491 \u041f\u0430\u043c\u0435\u043b\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041a\u0436\u043e\u0441\u0435\u043a \u042f\u043a\u0443\u0431;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041b\u0443\u0431\u0430\u0441\u044c \u041c\u0456\u0445\u0430\u043b;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u0430\u0441\u0435\u0432\u0456\u0447 \u041d\u0430\u0442\u0430\u043b\u0456\u044f;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u0430\u0441\u0442\u0430\u043b\u0435\u0436 \u0410\u0491\u043d\u0454\u0448\u043a\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041c\u043e\u0434\u0435\u043b\u044c\u0441\u044c\u043a\u0430 \u041c\u0430\u0440\u0442\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041d\u043e\u0432\u0430\u043a \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u0430\u0431\u044f\u043d \u0410\u0491\u043d\u0454\u0448\u043a\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u0430\u0448\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u0454\u043b\u0430\u0442 \u0417\u043e\u0444\u0456\u044f;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u043e\u043d\u0454\u0446\u044c\u043a\u0430 \u0410\u0491\u043d\u0454\u0448\u043a\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u041f\u0438\u0442\u043b\u0430\u043a \u0423\u0440\u0448\u0443\u043b\u044f;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0420\u043e\u0441\u0430 \u041a\u0430\u0440\u043e\u043b\u0456\u043d\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u043c\u0447\u0438\u043d\u0441\u044c\u043a\u0430 \u041a\u0430\u043c\u0456\u043b\u044f;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u0442\u043e\u043b\u0456\u043d\u0441\u044c\u043a\u0430 \u0411\u0430\u0440\u0431\u0430\u0440\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0428\u0438\u043c\u0430\u043d\u0441\u044c\u043a\u0430 \u041a\u0430\u0442\u0430\u0436\u0438\u043d\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0421\u044c\u0446\u0456\u0431\u043e\u0440 \u0415\u0432\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0412\u0456\u0442\u0447\u0430\u043a \u041c\u0430\u0491\u0434\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0412\u0456\u0442\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u042e\u0441\u0442\u0438\u043d\u0430;</li>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0412\u0438\u0436\u0438\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u0419\u043e\u0432\u0456\u0442\u0430;</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <li>\u0417\u044e\u043b\u043a\u043e\u0432\u0441\u044c\u043a\u0430 \u0410\u0434\u0440\u0456\u0430\u043d\u043d\u0430.</li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </ul>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 </li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 </li>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 </ol>", + "title_en": "Volunteering for knowledge", + "left_column_pl": "<h2>Wolontariat</h2>\r\n\t<p>\r\n\t\tBiogramy pisarzy oraz definicje epok i gatunk\u00f3w literackich w\r\n\t\tbibliotece internetowej Wolne Lektury napisali uczniowie\r\n\t\tczterech szk\u00f3\u0142 podczas warsztat\u00f3w \u201eWolontariat dla wiedzy\u201d.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\tUczniowie pracowali wsp\u00f3lnie pod merytorycznym nadzorem\r\n\t\tnauczycieli i specjalist\u00f3w \u2013 literaturoznawc\u00f3w na\r\n\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n\r\n\t\t\tplatformie internetowej wiki</a>\r\n\t\tprzygotowanej przez zesp\u00f3\u0142\r\n\t\t<a href=\"http://2ia.pl/\">2ia</a>. Praca nad notami by\u0142a jednocze\u015bnie nauk\u0105 wykorzystywania\r\n\t\tkomputer\u00f3w i internetu do wyszukiwania informacji, a tak\u017ce\r\n\t\tweryfikowania ich wiarygodno\u015bci.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\tProjekt \"Wolontariat dla wiedzy\" zosta\u0142 zrealizowany dzi\u0119ki\r\n\t\twsparciu\r\n\t\t<a href=\"http://www.menis.gov.pl/\">\r\n\t\t\tMinisterstwa Edukacji Narodowej</a>. Nagrody dla uczni\u00f3w ufundowali\r\n\t\t<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n\r\n\t\t\tWydawnictwo Nasza Ksi\u0119garnia</a>\r\n\t\ti\r\n\t\t<a href=\"http://helion.pl/\">Wydawnictwo Helion</a>. Noty zweryfikowano w serwisie\r\n\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n\t\t\tPlagiat.pl</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t\t<a href=\"/static/wolontariat.pdf\">Raport z realizacji projektu \u201eWolontariat dla wiedzy\"</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />\r\n\t</p>\r\n", + "left_column_it": null, + "title_es": "Voluntariado para el conocimiento", + "left_column_ru": "<h2>\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e</h2>\r\n\r\n <p> \u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0435 \u043d\u0430\u0448\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u042d\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\r\n \u043b\u0438\u0448\u044c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043d\u0430\u0448\u0438\u043c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c-\u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c.</p>\r\n\r\n \r\n <p>\u041c\u044b \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0432\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0448\u043a\u043e\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Wolne Lektury \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u043c\u0438.</p>\r\n \r\n <p>\u041c\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0435\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0430\u043c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443 \u043f\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0442\u0435\u043a\u0441\u0442\u043e\u0432: \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u0438\r\n \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443. \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438, \u0442\u0430\u043a \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438.\r\n \u041e\u043d\u0438, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u043c\u0438, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u044e\u0442 \u0443\u0447\u0435\u0431\u0443 \u0438 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0432 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043b\u0443\u0448\u0430\u043d\u0438\u044f (\u0442.\u043d.\r\n \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433). \u041c\u044b \u0432\u044b\u0434\u0430\u0435\u043c \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u044b \u0438 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u0430\u0441\u0447\u0435\u0442 \u0442\u043e\u0433\u043e, \u043a\u043e\u0433\u0434\u0430 \r\n \u0438 \u043a\u0430\u043a\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u043e\u043c \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \r\n \u0444\u043e\u043d\u0434\u0430. \u0423\u0447\u0435\u0431\u0430, \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0449\u0438\u0435 \u0438\u0445 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435\r\n \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0441\u043b\u0443\u0436\u0431\u0435.</p>\r\n\r\n \r\n <h2>\u0427\u0442\u043e \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c?</h2>\r\n \r\n <p>\u0421\u0430\u043c\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u0412 \u0442\u0435\u043a\u0441\u0442\u0430\u0445, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u043c\u0438 \u0438\u0437 \u041d\u0430\u0440\u043e\u0434\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \r\n \u0417\u0430\u0442\u0435\u043c \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u043e\u0441\u043a\u0438, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u043e \u043a \u0443\u0447\u0435\u043d\u0438\u043a\u0430\u043c, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432 \u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0437\u0432\u0443\u0447\u0438\u0442 \u0430\u043d\u0430\u0445\u0440\u043e\u043d\u0438\u0447\u043d\u043e.\r\n \u041f\u0440\u0435\u0436\u043d\u0438\u0435 \u0438\u0437\u0434\u0430\u043d\u0438\u044f (\u0440\u0435\u0436\u0438\u043c \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0430) \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440. \u043f\u043e \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u0438\u043b\u0438 \u0444\u043b\u0435\u043a\u0441\u0438\u0438. \u041f\u0440\u0438\u0447\u0435\u043c, \u043c\u044b \u0437\u0430\u0431\u043e\u0442\u0438\u043c\u0441\u044f \u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438\r\n \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432 \u0438 \u0442\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043c\u043e\u0447\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \"\u043d\u0430\u0441\u043a\u0432\u043e\u0437\u044c\".\r\n \u0412\u043e \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0445 \u0441\u0432\u043e\u044e \u043f\u043e\u043c\u043e\u0449\u044c \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430\u043c \u0432\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u044b - \u0443\u0447\u0438\u0442\u0435\u043b\u044f \u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b, \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0441\u0432\u043e\u0438 \u0441\u043e\u0432\u0435\u0442\u044b \u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f\r\n \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439.</p>\r\n \r\n <h2>\u041a\u0430\u043a \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0432 \u043d\u0430\u0448 \u0444\u043e\u043d\u0434?</h2>\r\n \r\n <p>\u0412\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0441\u0438\u043c \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0438-\u043c\u0435\u0439\u043b \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <a href=\"mail:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</p>\r\n\r\n <p>\u041c\u044b \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0430 <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje\">\u0441\u0430\u0439\u0442 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Wolne Lektury</a>, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u043c.</p>\r\n", + "slug": "voluntary_services", + "right_column_de": "\t<h2>Autoren</h2>\r\n\r\n\t<ol>\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tGymnasium Nr. 40 mit Integrationsabteilungen \r\n\t\t\t\tSchulverbund Nr. 69 Schulname: Armii Krajowej Grupy Bojowej \u201eKRYBAR\u201d, \r\n\t\t\t\tStr. Drewniana 8, 00-345 Warszawa; 2. Klasse\r\n\t\t\t\tKlassenlehrerin: Anna Budziarek-Friedrich:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Burdon Filip;</li>\r\n\r\n\t\t\t\t<li>D\u0119bski Bartek;</li>\r\n\t\t\t\t<li>Jackowicz Kamil;</li>\r\n\t\t\t\t<li>Kurek Pawe\u0142;</li>\r\n\t\t\t\t<li>Makles Bartosz;</li>\r\n\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n\t\t\t\t<li>Migda\u0142 Katarzyna;</li>\r\n\r\n\t\t\t\t<li>Mioduszewski Micha\u0142;</li>\r\n\t\t\t\t<li>Pfeiffer Ida;</li>\r\n\t\t\t\t<li>P\u0142askowicka Karolina;</li>\r\n\t\t\t\t<li>Sailer Ewa.</li>\r\n\t\t\t</ul>\r\n\t\t</li>\r\n\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tXXXIII Kopernikus Oberschule,\r\n\t\t\t\tStr. Bema 76, 01-225 Warszawa; 1. Klasse; \r\n\t\t\t\tFachbereiche: Biologie-Chemie; Klassenlehrerin: El\u017cbieta Konkowska:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Chwil Bart\u0142omiej;</li>\r\n\t\t\t\t<li>Czarnecka Natalia;</li>\r\n\t\t\t\t<li>Gawro\u0144ska Iga;</li>\r\n\r\n\t\t\t\t<li>Grabarczyk Marta;</li>\r\n\t\t\t\t<li>Jastrz\u0105b Katarzyna;</li>\r\n\t\t\t\t<li>Krawczak Olga;</li>\r\n\t\t\t\t<li>Krawczyk Marianna;</li>\r\n\t\t\t\t<li>Kur Natalia;</li>\r\n\t\t\t\t<li>Kwiatek Marta;</li>\r\n\r\n\t\t\t\t<li>La\u015bkiewicz Joanna;</li>\r\n\t\t\t\t<li>Machczy\u0144ska Daria;</li>\r\n\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n\t\t\t\t<li>Moczulska Karolina;</li>\r\n\t\t\t\t<li>Mo\u015bcicka Aneta;</li>\r\n\t\t\t\t<li>Narloch Sabina;</li>\r\n\r\n\t\t\t\t<li>Przybysz Pawe\u0142;</li>\r\n\t\t\t\t<li>Puchta Marek;</li>\r\n\t\t\t\t<li>Ryska Cezary;</li>\r\n\t\t\t\t<li>Sandomierski Bart\u0142omiej;</li>\r\n\t\t\t\t<li>S\u0142awi\u0144ski Tomasz;</li>\r\n\t\t\t\t<li>S\u0142owik Olga;</li>\r\n\r\n\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n\t\t\t\t<li>Strzelczak Karolina;</li>\r\n\t\t\t\t<li>Szafran Danuta;</li>\r\n\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n\t\t\t\t<li>Szulkowska Alicja;</li>\r\n\t\t\t\t<li>\u015alusarczyk Anna;</li>\r\n\r\n\t\t\t\t<li>Tytkowska Anna.</li>\r\n\t\t\t</ul>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tPrivate Oberschule Nr 42,\r\n\t\t\t\t\tStr. Iwicka 47 B, 00-735 Warszawa; 1. Klasse\r\n\t\t\t\t\tFachbereich: Allgemeinbildung; Klassenlehrer: Micha\u0142 Friedrich:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n\r\n\t\t\t\t\t<li>Go\u0142aszewska Ewa;</li>\r\n\t\t\t\t\t<li>Kwiatkowski Micha\u0142;</li>\r\n\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n\t\t\t\t\t<li>Przespolewski Przemys\u0142aw;</li>\r\n\t\t\t\t\t<li>Rosi\u0144ska Zuzanna;</li>\r\n\r\n\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tLXIV Witkiewicz Oberschule,\r\n\t\t\t\t\tStr. Elbl\u0105ska 51, 01-737 Warszawa; 1. Klasse, \r\n\t\t\t\t\tFachbereich: Allgemeinbildung; Klassenlehrer: Daniel Zych:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\r\n\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n\t\t\t\t\t<li>Dr\u0105gowska Katarzyna;</li>\r\n\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n\t\t\t\t\t<li>G\u0142owacki Jan;</li>\r\n\t\t\t\t\t<li>Grad Pawe\u0142;</li>\r\n\r\n\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n\t\t\t\t\t<li>K\u0142os Aneta;</li>\r\n\t\t\t\t\t<li>Kozie\u0142 Barbara;</li>\r\n\t\t\t\t\t<li>Koz\u0142owska Anna;</li>\r\n\t\t\t\t\t<li>Krug Pamela;</li>\r\n\r\n\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n\t\t\t\t\t<li>Luba\u015b Micha\u0142;</li>\r\n\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n\t\t\t\t\t<li>Modelska Marta;</li>\r\n\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n\r\n\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n\t\t\t\t\t<li>Pielat Zofia;</li>\r\n\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n\t\t\t\t\t<li>Rosa Karolina;</li>\r\n\r\n\t\t\t\t\t<li>Smyczy\u0144ska Kamila;</li>\r\n\t\t\t\t\t<li>Stoli\u0144ska Barbara;</li>\r\n\t\t\t\t\t<li>Szyma\u0144ska Katarzyna;</li>\r\n\t\t\t\t\t<li>\u015acibior Ewa;</li>\r\n\t\t\t\t\t<li>Witczak Magda;</li>\r\n\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n\r\n\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n\t\t\t\t\t<li>Zi\u00f3\u0142kowska Adrianna.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t </li>\r\n\t </ol>\r\n", + "left_column_es": "<h2>Voluntariado</h2>\r\n\r\n\t<p>\r\n\r\n\t\tBiograf\u00edas de escritores y definiciones de las \u00e9pocas y g\u00e9neros literarios en la biblioteca virtual de Wolne Lektury fueron escritas por estudiantes de cuatro escuelas durante los talleres \u201cVoluntariado para el conocimiento\u201d. </p>\r\n\r\n\r\n\r\n\t<p>\r\n\r\n\t\tLos estudiantes trabajaron juntos bajo la supervisi\u00f3n de profesores y especialistas-fil\u00f3logos en\r\n\r\n\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n\r\n\r\n\r\n\t\t\tla plataforma virtual wiki </a>\r\n\r\n\t\tpreparada por el equipo\r\n\r\n\t\t<a href=\"http://2ia.pl/\">2ia</a>. Gracias a este trabajo los estudiantes aprendieron a usar los ordenadores e internet para encontrar informaciones y verificar si se les puede confiar.\t</p>\r\n\r\n\r\n\r\n\t<p>\r\n\r\n\t\tEl proyecto \"Voluntariado para el conocimiento\" se pudo realizar gracias al apoyo del\t\t<a href=\"http://www.menis.gov.pl/\">\r\n\r\n\t\t\tMinisterio de la Educaci\u00f3n Nacional</a>. Los premios para los estudiantes fueron fundados por\r\n\r\n\t\t<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n\r\n\r\n\r\n\t\t\tEditorial Nasza Ksi\u0119garnia</a>\r\n\r\n\t\ty\r\n\r\n\t\t<a href=\"http://helion.pl/\">Editorial Helion</a>. Las notas fueron verificadas en la p\u00e1gina\r\n\r\n\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n\r\n\t\t\tPlagiat.pl</a>.\r\n\r\n\t</p>\r\n\r\n\r\n\r\n\t<p>\r\n\r\n\t\t<a href=\"/static/wolontariat.pdf\"> El informe de la realizaci\u00f3n del proyecto \u201cVoluntariado para el conocimiento\u201d</a>.\r\n\r\n\t</p>\r\n\r\n\r\n\r\n\t<p>\r\n\r\n\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />\r\n\r\n\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n\r\n\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n\r\n <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />\r\n\r\n <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />\r\n\r\n\t</p>", + "left_column_en": "<h2>Volunteers</h2>\r\n\t<p>Writers' biographical entries as well as periods' and genres'\r\ndefinitions placed on web library Wolne Lektury were written by students from four schools during \"Wolontariat dla wiedzy\" (\"Volunteering for knowledge\") workshops. </p> <p>\r\n The students worked together under the factual guidance of teachers and specialists - literary scholars<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n\r\n\ton wiki platform</a>\r\n prepared by <a href=\"http://2ia.pl/\">2ia</a> team. At the same time the students learnt how to use a computer and the Internet while searching for necessary information how to verify the credibility of the source. </p>\r\n\r\n<p>\r\n\"Wolontariat dla wiedzy\" project was realised thanks to the support of <a href=\"http://www.menis.gov.pl/\">\r\nMinisterstwo Edukacji Narodowej</a>. The rewards for the student were funded by<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n\r\nWydawnictwo Nasza Ksi\u0119garnia</a>\r\nand<a href=\"http://helion.pl/\">Wydawnictwo Helion</a>. Each entry was verified on <a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\nPlagiat.pl</a> website.\r\n</p>\r\n\r\n<p>\r\n\t\t<a href=\"/static/wolontariat.pdf\">Report on completion of \"Wolontariat dla wiedzy\" project (PL)</a>.\r\n\t</p>\r\n\r\n\t<p>\r\n\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />\r\n <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />\r\n\t</p>", + "right_column_fr": "\t<h2>Auteurs</h2>\r\n\r\n\t<ol>\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tColl\u00e8ge no. 40 avec classes d'int\u00e9gration dans l'Ensemble Scolaire no. 69 de Armia Krajowa Grupa Bojowa \u201eKRYBAR\u201d,\r\n\t\t\t\tul. Drewniana 8, 00-345 Warszawa; classe seconde sous la supervision de\r\n\tAnna Budziarek-Friedrich:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Burdon Filip;</li>\r\n\r\n\t\t\t\t<li>D\u0119bski Bartek;</li>\r\n\t\t\t\t<li>Jackowicz Kamil;</li>\r\n\t\t\t\t<li>Kurek Pawe\u0142;</li>\r\n\t\t\t\t<li>Makles Bartosz;</li>\r\n\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n\t\t\t\t<li>Migda\u0142 Katarzyna;</li>\r\n\r\n\t\t\t\t<li>Mioduszewski Micha\u0142;</li>\r\n\t\t\t\t<li>Pfeiffer Ida;</li>\r\n\t\t\t\t<li>P\u0142askowicka Karolina;</li>\r\n\t\t\t\t<li>Sailer Ewa.</li>\r\n\t\t\t</ul>\r\n\t\t</li>\r\n\r\n\t\t<li>\r\n\t\t\t<p>\r\n\t\t\t\tXXXIII Lyc\u00e9e g\u00e9n\u00e9ral de Miko\u0142aj Kopernik,\r\n\t\t\t\tul. Bema 76, 01-225 Warszawa; classe premi\u00e8re, orientation biologie-chimique\r\n sous la supervision de El\u017cbieta Konkowska:\r\n\t\t\t</p>\r\n\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Chwil Bart\u0142omiej;</li>\r\n\t\t\t\t<li>Czarnecka Natalia;</li>\r\n\t\t\t\t<li>Gawro\u0144ska Iga;</li>\r\n\r\n\t\t\t\t<li>Grabarczyk Marta;</li>\r\n\t\t\t\t<li>Jastrz\u0105b Katarzyna;</li>\r\n\t\t\t\t<li>Krawczak Olga;</li>\r\n\t\t\t\t<li>Krawczyk Marianna;</li>\r\n\t\t\t\t<li>Kur Natalia;</li>\r\n\t\t\t\t<li>Kwiatek Marta;</li>\r\n\r\n\t\t\t\t<li>La\u015bkiewicz Joanna;</li>\r\n\t\t\t\t<li>Machczy\u0144ska Daria;</li>\r\n\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n\t\t\t\t<li>Moczulska Karolina;</li>\r\n\t\t\t\t<li>Mo\u015bcicka Aneta;</li>\r\n\t\t\t\t<li>Narloch Sabina;</li>\r\n\r\n\t\t\t\t<li>Przybysz Pawe\u0142;</li>\r\n\t\t\t\t<li>Puchta Marek;</li>\r\n\t\t\t\t<li>Ryska Cezary;</li>\r\n\t\t\t\t<li>Sandomierski Bart\u0142omiej;</li>\r\n\t\t\t\t<li>S\u0142awi\u0144ski Tomasz;</li>\r\n\t\t\t\t<li>S\u0142owik Olga;</li>\r\n\r\n\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n\t\t\t\t<li>Strzelczak Karolina;</li>\r\n\t\t\t\t<li>Szafran Danuta;</li>\r\n\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n\t\t\t\t<li>Szulkowska Alicja;</li>\r\n\t\t\t\t<li>\u015alusarczyk Anna;</li>\r\n\r\n\t\t\t\t<li>Tytkowska Anna.</li>\r\n\t\t\t</ul>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tLyc\u00e9e priv\u00e9 g\u00e9n\u00e9ral no. 42, ul. Iwicka 47 B, 00-735 Warszawa; classe premi\u00e8re, orientation g\u00e9n\u00e9rale, sous la supervision de Micha\u0142 Friedrich:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n\r\n\t\t\t\t\t<li>Go\u0142aszewska Ewa;</li>\r\n\t\t\t\t\t<li>Kwiatkowski Micha\u0142;</li>\r\n\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n\t\t\t\t\t<li>Przespolewski Przemys\u0142aw;</li>\r\n\t\t\t\t\t<li>Rosi\u0144ska Zuzanna;</li>\r\n\r\n\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t\t\t<li>\r\n\t\t\t\t<p>\r\n\t\t\t\t\tLXIV Lyc\u00e9e g\u00e9n\u00e9ral de St. I. Witkiewicz,\r\n\t\t\t\t\tul. Elbl\u0105ska 51, 01-737 Warszawa; classe premi\u00e8re, orientation g\u00e9n\u00e9rale, sous la supervision de Daniel Zych:\r\n\t\t\t\t</p>\r\n\r\n\t\t\t\t<ul>\r\n\r\n\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n\t\t\t\t\t<li>Dr\u0105gowska Katarzyna;</li>\r\n\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n\t\t\t\t\t<li>G\u0142owacki Jan;</li>\r\n\t\t\t\t\t<li>Grad Pawe\u0142;</li>\r\n\r\n\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n\t\t\t\t\t<li>K\u0142os Aneta;</li>\r\n\t\t\t\t\t<li>Kozie\u0142 Barbara;</li>\r\n\t\t\t\t\t<li>Koz\u0142owska Anna;</li>\r\n\t\t\t\t\t<li>Krug Pamela;</li>\r\n\r\n\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n\t\t\t\t\t<li>Luba\u015b Micha\u0142;</li>\r\n\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n\t\t\t\t\t<li>Modelska Marta;</li>\r\n\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n\r\n\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n\t\t\t\t\t<li>Pielat Zofia;</li>\r\n\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n\t\t\t\t\t<li>Rosa Karolina;</li>\r\n\r\n\t\t\t\t\t<li>Smyczy\u0144ska Kamila;</li>\r\n\t\t\t\t\t<li>Stoli\u0144ska Barbara;</li>\r\n\t\t\t\t\t<li>Szyma\u0144ska Katarzyna;</li>\r\n\t\t\t\t\t<li>\u015acibior Ewa;</li>\r\n\t\t\t\t\t<li>Witczak Magda;</li>\r\n\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n\r\n\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n\t\t\t\t\t<li>Zi\u00f3\u0142kowska Adrianna.</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</li>\r\n\t </li>\r\n\t </ol>\r\n", + "title_ru": "\u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0437\u043d\u0430\u043d\u0438\u0439", + "title_it": null + } + }, + { + "pk": 3, + "model": "infopages.infopage", + "fields": { + "title_de": "\u00dcber das Projekt", + "left_column_uk": "\ufeff{% load reporting_stats %}\r\n\r\n<p><strong>Wolne Lektury \u0446\u0435 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0430 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0430 24 \u0433\u043e\u0434\u0438\u043d\u0438 \u043d\u0430 \u0434\u043e\u0431\u0443, 365 \u0434\u043d\u0456\u0432 \u0432 \u0440\u043e\u0446\u0456 \u0456 \u043f\u043e\u0432\u043d\u0456\u0441\u0442\u044e \u0431\u0435\u0437\u043a\u043e\u0448\u0442\u043e\u0432\u043d\u0430</strong>. \u0412 \u0457\u0457 \u043a\u043e\u043b\u0435\u043a\u0446\u0456\u0457 \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f <strong>{% count_books %}</strong> \u0442\u0432\u043e\u0440\u0456\u0432, \u0432 \u0442\u043e\u043c\u0443 \u0447\u0438\u0441\u043b\u0456 \u0431\u0430\u0433\u0430\u0442\u043e \u0448\u043a\u0456\u043b\u044c\u043d\u043e\u0457 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0438, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043e\u0457 \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u043e\u043c \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u043e\u0441\u0432\u0456\u0442\u0438, \u044f\u043a\u0430 \u0443\u0432\u0456\u0439\u0448\u043b\u0430 \u0432\u0436\u0435 \u0434\u043e \u0441\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0434\u0431\u0430\u043d\u043d\u044f. \u0423\u0441\u0456 \u0442\u0432\u043e\u0440\u0438 \u0441\u0442\u0430\u0440\u0430\u043d\u043d\u043e \u043e\u043f\u0440\u0430\u0446\u044c\u043e\u0432\u0430\u043d\u0456 - \u0434\u043e \u043d\u0438\u0445 \u0434\u043e\u0434\u0430\u044e\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043c\u0456\u0442\u043a\u0438, \u043c\u043e\u0442\u0438\u0432\u0438 \u0456 \u043d\u0430\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u0432 \u0434\u0435\u043a\u0456\u043b\u044c\u043a\u043e\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 - <strong>HTML </strong>, <strong>TXT </strong>, <strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>. \u0423 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 \u043c\u043e\u0436\u043d\u0430 \u0442\u0430\u043a\u043e\u0436 \u0437\u043d\u0430\u0439\u0442\u0438 \u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u043e\u0442\u0435\u043d\u044c \u0430\u0443\u0434\u0456\u043e\u043a\u043d\u0438\u0433 \u0443 \u0432\u0438\u043a\u043e\u043d\u0430\u043d\u043d\u0456 \u0442\u0430\u043a\u0438\u0445 \u0430\u0432\u0442\u043e\u0440\u0456\u0432 \u044f\u043a: \u0414\u0430\u043d\u0443\u0442\u0430 \u0421\u0442\u0435\u043d\u043a\u0430, \u042f\u043d \u041f\u0435\u0448\u0435\u043a \u0447\u0438 \u0410\u043d\u0434\u0436\u0435\u0439 \u0425\u0438\u0440\u0430. \u041c\u043e\u0436\u043d\u0430 \u0457\u0445 \u0441\u043b\u0443\u0445\u0430\u0442\u0438 \u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 <strong>MP3</strong> i <strong>Ogg Vorbis</strong>. \u0410\u0443\u0434\u0456\u043e\u043a\u043d\u0438\u0433\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0456 \u0442\u0430\u043a\u043e\u0436 \u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0456 <strong>DAISY </strong>, \u044f\u043a\u0438\u0439 \u043f\u0440\u0438\u0441\u0442\u043e\u0441\u043e\u0432\u0430\u043d\u0438\u0439 \u0434\u043b\u044f \u0441\u043b\u0430\u0431\u043e\u0437\u043e\u0440\u0438\u0445 \u0442\u0430 \u0441\u043b\u0456\u043f\u0438\u0445 \u043e\u0441\u0456\u0431, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0434\u043b\u044f \u0442\u0438\u0445, \u0445\u0442\u043e \u043c\u0430\u0454 \u0442\u0440\u0443\u0434\u043d\u043e\u0449\u0456 \u0437 \u0447\u0438\u0442\u0430\u043d\u043d\u044f\u043c.</p>\r\n\r\n<p>\u0411\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0430 Wolne Lektury \u0442\u0430\u043a\u043e\u0436 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0438\u0445 \u0430\u043f\u043b\u0456\u043a\u0430\u0446\u0456\u0439 \u2013 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0456 <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\">Android</a>, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0456 iOS.</p>\r\n\r\n<p><strong>\u0423\u0441\u0456 \u0442\u0432\u043e\u0440\u0438 \u0440\u043e\u0437\u043c\u0456\u0449\u0435\u043d\u0456 \u0443 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 Wolne Lektury \u043c\u043e\u0436\u043d\u0430 \u043b\u0435\u0433\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0430\u0442\u0438, \u0441\u043b\u0443\u0445\u0430\u0442\u0438, \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0443\u0432\u0430\u0442\u0438 \u043d\u0430 \u0432\u043b\u0430\u0441\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u2019\u044e\u0442\u0435\u0440, \u043d\u0430\u0434\u0430\u0432\u0430\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u043d\u0438\u0445 \u0456\u043d\u0448\u0438\u043c \u0442\u0430 \u0446\u0438\u0442\u0443\u0432\u0430\u0442\u0438.</strong></p>\r\n", + "main_page": 1, + "right_column_pl": "<p>Wolne Lektury to projekt fundacji Nowoczesna Polska realizowany pro publico bono, we wsp\u00f3\u0142pracy z Bibliotek\u0105 Narodow\u0105, Bibliotek\u0105 \u015alask\u0105 oraz Bibliotek\u0105 Elbl\u0105sk\u0105 pod patronatem Ministerstwa Edukacji Narodowej, Ministerstwa Kultury i Dziedzictwa Narodowego oraz Stowarzyszenia Pisarzy Polskich. W Komitecie Honorowym Wolnych Lektur zasiadaj\u0105: prof. Maria Janion, prof. Gra\u017cyna Borkowska, prof. Przemys\u0142aw Czapli\u0144ski, prof. Mieczys\u0142aw D\u0105browski, prof. Ewa Kraskowska, prof. Ma\u0142gorzata Czermi\u0144ska, prof. Jerzy Jarz\u0119bski i prof. Piotr \u015aliwi\u0144ski.</p>\r\n\r\n<p>Wi\u0119kszo\u015b\u0107 utwor\u00f3w w bibliotece nie jest chroniona prawem autorskim i znajduje si\u0119 w domenie publicznej, co oznacza \u017ce mo\u017cna je swobodnie publikowa\u0107 i rozpowszechnia\u0107. Je\u015bli utw\u00f3r opatrzony jest dodatkowymi materia\u0142ami (przypisy, motywy literackie etc.), kt\u00f3re podlegaj\u0105 prawu autorskiemu, to te dodatkowe materia\u0142y udost\u0119pnione s\u0105 na licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>. Publikujemy r\u00f3wnie\u017c kilka utwor\u00f3w, kt\u00f3re autorzy lub spadkobiercy praw udost\u0119pnili na wolnej licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>.</p>\r\n\r\nKontakt: wolnelektury@nowoczesnapolska.org.pl", + "right_column_lt": "\ufeff\r\n<p>Wolne Lektury - tai fondo \u0160iuolaikin\u0117 Lenkija \u012fgyvendinamas pro publico bono projektas, bendradarbiaujant su Nacionaline biblioteka, Silezijos biblioteka bei Elbingo biblioteka ir remiamas Nacionalinio \u0161vietimo ministerijos, Kult\u016bros ir nacionalinio paveldo ministerijos bei Lenkijos ra\u0161ytoj\u0173 asociacijos. Wolne Lektury Garb\u0117s komiteto nariai: prof. Maria Janion, prof. Gra\u017cyna Borkowska, prof. Przemys\u0142aw Czapli\u0144ski, prof. Mieczys\u0142aw D\u0105browski, prof. Ewa Kraskowska, prof. Ma\u0142gorzata Czermi\u0144ska, prof. Jerzy Jarz\u0119bski ir prof. Piotr \u015aliwi\u0144ski.</p>\r\n\r\n<p>Dauguma \u0161ios bibliotekos k\u016brini\u0173 n\u0117ra autorini\u0173 teisi\u0173 saugomi ir yra vie\u0161ai prieinami, tai rei\u0161kia, kad gali b\u016bti laisvai naudojami bei platinami. Jei su k\u016briniu yra pateikiamos bet kokios papildomos autorini\u0173 teisi\u0173 saugomos med\u017eiagos (kaip pastabos, motyvai ir t.t.), tai \u0161ios med\u017eiagos yra prieinamos pagal licencj\u0105 <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Autoryst\u0117s pripa\u017einimas \u2013 pagal tas pa\u010dias s\u0105lygas 3.0</a>. Publikuojami taip pat keli k\u016briniai, autori\u0173 ir teisi\u0173 \u012fp\u0117dini\u0173 pateikti pagal laisv\u0105 licencij\u0105 <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Autoryst\u0117s pripa\u017einimas \u2013 pagal tas pa\u010dias s\u0105lygas 3.0</a>.</p>\r\n\r\nKontaktas: wolnelektury@nowoczesnapolska.org.pl\r\n\r\n", + "left_column_lt": "\ufeff{% load reporting_stats %}\r\n\t\r\n<p><strong>Wolne Lektury tai visi\u0161kai nemokama internetin\u0117 biblioteka dirbanti 24 valandas per par\u0105, 365 dienas per metus</strong>. Jos rinkinyje yra <strong>{% count_books %}</strong> k\u016brinys/iai/i\u0173, tarp j\u0173 daug privalomos literat\u016bros knyg\u0173 Lenkijos Nacionalinio \u0161vietimo ministerijos (MEN) rekomenduojam\u0173, kurios jau yra vie\u0161ai prieinamos. Visi k\u016briniai yra tinkamai apra\u0161yti (pateikiamos i\u0161na\u0161os, motyvai) ir prieinami keliais formatais - <strong>HTML </strong>, <strong>TXT </strong>, <strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>. Bibliotekoje yra keli \u0161imtai audio knyg\u0173, aktori\u0173, toki\u0173 kaip Danuta Stenka, Jan Peszek bei Andrzej Chyra, skaitom\u0173. Galima jas klausytis <strong>MP3</strong> ir <strong>Ogg Vorbis</strong> formatais. Audio knygos yra taip pat prieinamos <strong>DAISY </strong> formatu, silpno reg\u0117jimo \u017emon\u0117ms, akliesiems bei skaitymo problem\u0173 turintiems \u017emon\u0117ms pritaikomu.</p>\r\n\r\n<p> Biblioteka Wolne Lektury yra prieinama naudojant mobili\u0105sias programas skirtas operacinei sistemai <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\"> Android</a> bei sistemai iOS. </p>\r\n\r\n\r\n<p><strong>Visus internetin\u0117je bibliotekoje Wolne Lektury esan\u010dius k\u016brinius galima pagal teis\u0119 nemokamai per\u017ei\u016br\u0117ti, klausytis, atsisi\u0173sti bei bendrinti kitiems ir cituoti. </strong> </p>\r\n\r\n\t\r\n", + "title_fr": "Sur le projet", + "right_column_ru": "\ufeff<p>Wolne Lektury \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c pro publico bono \u0424\u043e\u043d\u0434\u0430 Nowoczesna Polska. \u041c\u044b \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u043c \u0441 \u041d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439, \u0421\u0438\u043b\u0435\u0437\u0441\u043a\u043e\u0439 \u0411\u0438\u0431\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0430 \u0442\u0430\u043a\u0436\u0435 \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0433\u043e\u0440\u043e\u0434\u0430 \u0415\u043b\u044c\u0431\u043b\u043e\u043d\u0433\u0430. \u041f\u043e\u0434 \u044d\u0433\u0438\u0434\u043e\u0439 \u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u044b \u0438 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u041e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u0439. \u0412 \u041f\u043e\u0447\u0435\u0442\u043d\u043e\u043c \u043a\u043e\u043c\u0438\u0442\u0435\u0442\u0435 \u0444\u043e\u043d\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f: \u043f\u0440\u043e\u0444. \u041c\u0430\u0440\u0438\u044f \u042f\u043d\u0435\u043d, \u043f\u0440\u043e\u0444. \u0413\u0440\u0430\u0436\u0438\u043d\u0430 \u0411\u043e\u0440\u043a\u043e\u0432\u0441\u043a\u0430, \u043f\u0440\u043e\u0444. \u041f\u0448\u0435\u043c\u044b\u0441\u043b\u0430\u0432 \u0427\u0430\u043f\u043b\u0438\u043d\u044c\u0441\u043a\u0438, \u043f\u0440\u043e\u0444. \u041c\u0435\u0447\u044b\u0441\u043b\u0430\u0432 \u0414\u043e\u043c\u0431\u0440\u043e\u0432\u0441\u043a\u0438, \u043f\u0440\u043e\u0444. \u0415\u0432\u0430 \u041a\u0440\u0430\u0441\u043a\u043e\u0432\u0441\u043a\u0430, \u043f\u0440\u043e\u0444. \u041c\u0430\u043b\u0433\u043e\u0436\u0430\u0442\u0430 \u0427\u0435\u0440\u043c\u0438\u043d\u044c\u0441\u043a\u0430, \u043f\u0440\u043e\u0444. \u0415\u0436\u0438 \u042f\u0436\u0435\u043c\u0431\u0441\u043a\u0438, \u043f\u0440\u043e\u0444. \u041f\u0435\u0442\u0440 \u0421\u043b\u0438\u0432\u0438\u043d\u044c\u0441\u043a\u0438.</p>\r\n\r\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043a\u043e\u043d\u043e\u043c \u043e\u0431 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432\u0430\u0445 \u0438 \u043e\u043d\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u043a \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u0434\u043e\u043c\u0435\u043d\u0443. \r\n\u0418\u0445 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043d\u0438\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b (\u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f, \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0435 \u043c\u043e\u0442\u0438\u0432\u044b, \u0438 \u0442.\u0434.), \r\n\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.ru\">\r\n \u041f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 - 3.0</a>. \r\n\u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043e\u0442 \u0441\u0430\u043c\u044b\u0445 \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u0438\u043b\u0438 \u0438\u0445 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043f\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0435\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439. <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.ru\">\u041f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 3.0</a>.</p>\r\n\r\n\u041a\u043e\u043d\u0442\u0430\u043a\u0442: : wolnelektury@nowoczesnapolska.org.pl\r\n", + "left_column_fr": "{% load reporting_stats %}\r\n\r\n<p><strong>Wolne Lektury (Lectures Libres) c'est une biblioth\u00e8que en ligne ouverte 24 heures sur 24, 365 jours par an et compl\u00e8tement gratuite</strong>. Dans la collection de la biblioth\u00e8que il y a <strong>{% count_books %}</strong> ouvrages, y compris beaucoup de lectures scolaires recommand\u00e9es par le Minist\u00e8re de l'\u00c9ducation nationale polonais et appartenant d\u00e9j\u00e0 au domaine public. Tous les ouvrages sont convenablement r\u00e9dig\u00e9s; ils sont accompagn\u00e9s de plusieurs annotations et motifs litt\u00e9raires et sont accessibles aux quelques formats: <strong>HTML </strong>, <strong>TXT </strong>, <strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>. Dans la biblioth\u00e8que il y a aussi quelques centaines de livres audio lus par les acteurs connus comme, par exemple: Danuta Stenka, Jan Peszek ou Andrzej Chyra. On peut les \u00e9couter aux formats: <strong>MP3</strong> et <strong>Ogg Vorbis</strong>. Les livres audio sont aussi accessibles au format <strong>DAISY </strong>appropri\u00e9 \u00e0 des non voyants et \u00e0 des malvoyants et \u00e0 des personnes qui ont des difficult\u00e9s \u00e0 lire.</p>\r\n\r\n<p>La biblioth\u00e8que Wolne Lektury est accessible par l'interm\u00e9diaire des applications mobiles sur le syst\u00e8me <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\"> Android</a> et sur le syst\u00e8me iOS. </p>\r\n\r\n<p><strong>Tous les ouvrages publi\u00e9s sur le site de la biblioth\u00e8que Wolne Lektury peuvent \u00eatre - conform\u00e9ment \u00e0 la loi polonaise - feuillet\u00e9s, \u00e9cout\u00e9s et t\u00e9l\u00e9charg\u00e9s sur votre ordinateur gratuitement. Il est aussi permis de les rendre accessibles \u00e0 d'autres personnes et de les citer.</strong> </p>\r\n", + "title": "About the project", + "title_lt": "\ufeffApie projekt\u0105", + "right_column": "<p>Wolne Lektury is a pro bono project developed by the Modern Poland Foundation in cooperation with Polish libraries \u2013 the National Library, the Library of Silesia and the Library of Elbl\u0105g, under the Ministry of Culture and National Heritage and the Assocciation of Polish Writers auspices. The honorary committee members are: Prof. Maria Janion, Prof. Gra\u017cyna Borkowska, Prof. Przemys\u0142aw Czapli\u0144ski, Prof. Mieczys\u0142aw D\u0105browski, Prof. Ewa Kraskowska, Prof. Ma\u0142gorzata Czermi\u0144ska, Prof. Jerzy Jarz\u0119bski and Prof. Piotr \u015aliwi\u0144ski.</p>\r\n\r\n<p>The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Creative Commons Attribution-ShareAlike</a>. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Creative Commons Attribution-ShareAlike</a>.</p>\r\n\r\nContact: wolnelektury@nowoczesnapolska.org.pl", + "right_column_es": "<p>Wolne Lektury es un proyecto creado por la Fundaci\u00f3n Polonia Moderna, realizado pro publico bono en colaboraci\u00f3n con la Biblioteca Nacional, la Biblioteca de Silesia y la Biblioteca de Elblag bajo los auspicios del Ministerio de Cultura y Patrimonio Nacional y la Adociaci\u00f3n de Escritores Polacos. El Comit\u00e9 de Honor de Wolne Lektury re\u00fane a los profesores: Maria Janion, Gra\u017cyna Borkowska, Przemys\u0142aw Czapli\u0144ski, Mieczys\u0142aw D\u0105browski, Ewa Kraskowska, Ma\u0142gorzata Czermi\u0144ska, Jerzy Jarz\u0119bski y Piotr \u015aliwi\u0144ski.</p>\r\n\r\n</p>La mayor\u00eda de los textos de la Biblioteca est\u00e1n libres de derechos de autor y son de dominio p\u00fablico, por lo tanto se pueden publicar y difundir libremente. Si un texto tiene materiales adicionales (notas a pie de p\u00e1gina, temas literarios, etc.), que no est\u00e9n libres de derechos de autor, dichos materiales est\u00e1n publicados bajo la licencia <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.es\">Reconocimiento-Compartir bajo la misma licencia 3.0</a>.Tambi\u00e9n publicamos algunos textos legados a el dominio p\u00fablico por los autores o heredores bajo la licencia <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.es\">Reconocimiento-Compartir bajo la misma licencia 3.0</a>.</p>\r\n\r\nContacto: wolnelektury@nowoczesnapolska.org.pl \r\n", + "right_column_en": "<p>Wolne Lektury is a pro bono project developed by the Modern Poland Foundation in cooperation with Polish libraries \u2013 the National Library, the Library of Silesia and the Library of Elbl\u0105g, under the Ministry of Culture and National Heritage and the Assocciation of Polish Writers auspices. The honorary committee members are: Prof. Maria Janion, Prof. Gra\u017cyna Borkowska, Prof. Przemys\u0142aw Czapli\u0144ski, Prof. Mieczys\u0142aw D\u0105browski, Prof. Ewa Kraskowska, Prof. Ma\u0142gorzata Czermi\u0144ska, Prof. Jerzy Jarz\u0119bski and Prof. Piotr \u015aliwi\u0144ski.</p>\r\n\r\n<p>The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Creative Commons Attribution-ShareAlike</a>. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Creative Commons Attribution-ShareAlike</a>.</p>\r\n\r\nContact: wolnelektury@nowoczesnapolska.org.pl", + "left_column_de": "{% load reporting_stats %}\r\n\r\n<p><strong>Wolne Lektury ist eine Internetbibliothek, die 24 Stunden zug\u00e4nglich ist, 365 Tage im Jahr, dazu v\u00f6llig kostenlos</strong>. Sie beinh\u00e4lt <strong>{% count_books %}</strong> Werke, darunter viele Schullekt\u00fcren, die durch das polnische Bildungsministerium empfohlen werden und die zur Gemeinfreiheit geh\u00f6ren. Alle Werke werden entsprechend bearbeitet - mit Fu\u00dfnoten und Motiven versehen sowie in verschiedenen Formaten zug\u00e4nglich - <strong>HTML </strong>, <strong>TXT</strong>, <strong>PDF</strong>, <strong>EPUB</strong>, <strong>MOBI</strong>. In der Bibliothek befinden sich auch einige hundert von H\u00f6rb\u00fcchern, die von bekannten polnischen Schauspielern wie Danuta Stenka, Jan Peszek oder Andrzej Chyra vorgelesen werden. Es ist m\u00f6glich sie in folgenden Formaten abzuspielen: <strong>MP3</strong> und <strong>Ogg Vorbis</strong>. H\u00f6rb\u00fccher sind auch im Format <strong>DAISY </strong> zug\u00e4nglich, die f\u00fcr Bed\u00fcrfnisse von Schwachsehenden, Blinden und Personen mit Lesenschwierigkeiten geeignet sind.</p>\r\n\r\n<p>Wolne Lektury-Bibliothek ist auch f\u00fcr Nutzer der mobilen Ger\u00e4te zug\u00e4nglich \u0096 f\u00fcr das System <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\"> Android</a> und f\u00fcr das System iOS. zug\u00e4nglich </p>\r\n\r\n<p><strong>Alle in der Wolne Lektury-Bibliothek ver\u00f6ffentlichten Werke kann man rechtsm\u00e4\u00dfig kostenlos durchsehen, h\u00f6ren, auf eigenen Computer herunterladen; \u00fcberdies ist ihre Weitervermittlung und Anf\u00fchrung erlaubt.</strong> </p>", + "title_uk": "\ufeff\u041f\u0440\u043e \u043f\u0440\u043e\u0435\u043a\u0442", + "right_column_it": "<p>Wolne Lektury \u00e8 un progetto della fondazione Polonia Moderna realizzato pro bono publico in collaborazione con la Biblioteca Nazionale, la Biblioteca Silesiana e la Biblioteca di Elbl\u0105g sotto gli auspici del Ministero dell\u2019Istruzione, Ministero della Cultura, del Patrimonio Nazionale e dell\u2019Associazione degli Scrittori Polacchi. Nel Comitato d\u2019Onore delle Letture Libere ci sono: prof. Maria Janion, prof. Gra\u017cyna Borkowska, prof. Przemys\u0142aw Czapli\u0144ski, prof. Mieczys\u0142aw D\u0105browski, prof. Ewa Kraskowska, prof. Ma\u0142gorzata Czermi\u0144ska, prof. Jerzy Jarz\u0119bski e prof. Piotr \u015aliwi\u0144ski.</p>\r\n\r\n<p>La maggior parte delle opere nella biblioteca non \u00e8 protetta dal diritto d\u2019autore ed \u00e8 di dominio pubblico, il che significa che si pu\u00f2 pubblicare e distribuire le opere liberamente. Se l\u2019opera viene apposta dai materiali aggiuntivi (dalle note, dai motivi letterari ecc) che sono protetti dal copyright, questi materiali sono disponibili sulla licenza di\r\n<ahref=\"http://creativecommons.org/licenses/by-sa/3.0/deed.it\">L'attribuzione si svolge nelle stesse condizioni 3.0</a>. Pubblichiamo anche le opere che sono rese accessibili dagli autori o eredi legittimi <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.it\">L'attribuzione si svolge alle stesse condizioni 3.0</a>.</p>\r\n\r\nContatti: wolnelektury@nowoczesnapolska.org.pl\r\n\r\n", + "title_pl": "O projekcie", + "left_column": "{% load reporting_stats %}\r\n\r\n<p><strong>Wolne Lektury is a free online library open 24 hours a day, 365 days a year</strong>. It archives books<strong>{% count_books %}</strong>, including set readings recommended by the Ministry of National Education which have already fallen in the public domain. All the texts are adequately edited - annotated with footnotes and motifs - and are available in several formats - <strong>HTML </strong>, <strong>TXT </strong>, <strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>. The library also contains a few hundred audiobooks read by famous actors like: Danuta Stenka, Jan Peszek or Andrzej Chyra. The audiobooks can be used in <strong>MP3</strong> and <strong>Ogg Vorbis</strong> formats. They are also available in <strong>DAISY </strong>format suiting the needs of people with poor vision, the blind, and those having reading difficulties.</p>\r\n\r\n<p>The Wolne Lektury library is available through digital applications - in <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\"> Android</a> and iOS systems. </p>\r\n\r\n<p><strong>You are allowed to browse, listen to, and download all the items in Wolne Lektury, as well as share and cite them, entirely free of charge.</strong> </p>", + "right_column_uk": "\ufeff<p>Wolne Lektury \u0446\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0424\u043e\u043d\u0434\u0443 \u0421\u0443\u0447\u0430\u0441\u043d\u0430 \u041f\u043e\u043b\u044c\u0449\u0430 (Fundacja Nowoczesna Polska), \u0440\u0435\u0430\u043b\u0456\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0437 \u043d\u0435\u043a\u043e\u043c\u0435\u0440\u0446\u0456\u0439\u043d\u043e\u044e \u043c\u0435\u0442\u043e\u044e, \u0443 \u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u0456 \u0437 \u041d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u044e \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u044e, \u0421\u0456\u043b\u0435\u0437\u044c\u043a\u043e\u044e \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u044e \u0442\u0430 \u0415\u043b\u044c\u0431\u043b\u043e\u043d\u0437\u044c\u043a\u043e\u044e \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u044e \u043f\u0456\u0434 \u043f\u0430\u0442\u0440\u043e\u043d\u0430\u0442\u043e\u043c \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u043e\u0441\u0432\u0456\u0442\u0438, \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0438 \u0442\u0430 \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u0441\u043f\u0430\u0434\u0449\u0438\u043d\u0438, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0421\u043f\u0456\u043b\u043a\u0438 \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u0438\u0445 \u043f\u0438\u0441\u044c\u043c\u0435\u043d\u043d\u0438\u043a\u0456\u0432. \u0412 \u041f\u043e\u0447\u0435\u0441\u043d\u043e\u043c\u0443 \u043a\u043e\u043c\u0456\u0442\u0435\u0442\u0456 \u043f\u0440\u043e\u0435\u043a\u0442\u0443 Wolne Lektury \u0437\u0430\u0441\u0456\u0434\u0430\u044e\u0442\u044c \u043f\u0440\u043e\u0444. \u041c\u0430\u0440\u0456\u044f \u042f\u043d\u0456\u043e\u043d, \u043f\u0440\u043e\u0444. \u0490\u0440\u0430\u0436\u0438\u043d\u0430 \u0411\u043e\u0440\u043a\u043e\u0432\u0441\u044c\u043a\u0430, \u043f\u0440\u043e\u0444. \u041f\u0448\u0435\u043c\u0438\u0441\u043b\u0430\u0432 \u0427\u0430\u043f\u043b\u0456\u043d\u0441\u044c\u043a\u0438\u0439, \u043f\u0440\u043e\u0444. \u041c\u0454\u0447\u0438\u0441\u043b\u0430\u0432 \u0414\u043e\u043c\u0431\u0440\u043e\u0432\u0441\u044c\u043a\u0438\u0439, \u043f\u0440\u043e\u0444. \u0415\u0432\u0430 \u041a\u0440\u0430\u0441\u043a\u043e\u0432\u0441\u044c\u043a\u0430, \u043f\u0440\u043e\u0444. \u041c\u0430\u043b\u0491\u043e\u0436\u0430\u0442\u0430 \u0427\u0435\u0440\u043c\u0456\u043d\u0441\u044c\u043a\u0430, \u043f\u0440\u043e\u0444. \u0404\u0436\u0438 \u042f\u0436\u0435\u043c\u0431\u0441\u044c\u043a\u0438\u0439 \u0442\u0430 \u043f\u0440\u043e\u0444. \u041f\u0456\u043e\u0442\u0440 \u0421\u043b\u0456\u0432\u0456\u043d\u0441\u044c\u043a\u0438\u0439.</p>\r\n\r\n<p>\u0411\u0456\u043b\u044c\u0448\u0456\u0441\u0442\u044c \u0442\u0432\u043e\u0440\u0456\u0432 \u0443 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 \u043d\u0435 \u043e\u0445\u043e\u0440\u043e\u043d\u044f\u044e\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c \u0456 \u044f\u0432\u043b\u044f\u044e\u0442\u044c\u0441\u044f \u0447\u0430\u0441\u0442\u0438\u043d\u043e\u044e \u0441\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0434\u0431\u0430\u043d\u043d\u044f, \u0442\u043e\u043c\u0443 \u0457\u0445 \u043c\u043e\u0436\u043d\u0430 \u0432\u0456\u043b\u044c\u043d\u043e \u043f\u0443\u0431\u043b\u0456\u043a\u0443\u0432\u0430\u0442\u0438 \u0442\u0430 \u0440\u043e\u0437\u043f\u043e\u0432\u0441\u044e\u0434\u0436\u0443\u0432\u0430\u0442\u0438. \u042f\u043a\u0449\u043e \u0442\u0435\u043a\u0441\u0442\u0438 \u0441\u0443\u043f\u0440\u043e\u0432\u043e\u0434\u0436\u0443\u044e\u0442\u044c\u0441\u044f \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u043c\u0438 \u043c\u0430\u0442\u0435\u0440\u0456\u0430\u043b\u0430\u043c\u0438 (\u043f\u0440\u0438\u043c\u0456\u0442\u043a\u0430\u043c\u0438, \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u043c\u0438 \u043c\u043e\u0442\u0438\u0432\u0430\u043c\u0438 \u0442\u043e\u0449\u043e), \u044f\u043a\u0456 \u043e\u0445\u043e\u0440\u043e\u043d\u044f\u044e\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c, \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0446\u0438\u0445 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0456\u0430\u043b\u0456\u0432 \u043d\u0430\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u043c\u043e\u0432\u0430\u0445 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457 <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">\u0406\u0437 \u0437\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0456\u043c\u0435\u043d\u0456 \u0430\u0432\u0442\u043e\u0440\u0430 \u2013 \u041d\u0430 \u0442\u0438\u0445 \u0436\u0435 \u0443\u043c\u043e\u0432\u0430\u0445 3.0</a>. \u0422\u0430\u043a\u043e\u0436 \u043c\u0438 \u043f\u0443\u0431\u043b\u0456\u043a\u0443\u0454\u043c\u043e \u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0442\u0432\u043e\u0440\u0456\u0432, \u0434\u043e \u044f\u043a\u0438\u0445 \u0430\u0432\u0442\u043e\u0440\u0438 \u0430\u0431\u043e \u0441\u043f\u0430\u0434\u043a\u043e\u0454\u043c\u0446\u0456 \u043f\u0440\u0430\u0432 \u043d\u0430\u0434\u0430\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 \u043f\u0456\u0434\u0441\u0442\u0430\u0432\u0456 \u0432\u0456\u043b\u044c\u043d\u043e\u0457 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457 <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">\u0406\u0437 \u0437\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0456\u043c\u0435\u043d\u0456 \u0430\u0432\u0442\u043e\u0440\u0430 \u2013 \u041d\u0430 \u0442\u0438\u0445 \u0436\u0435 \u0443\u043c\u043e\u0432\u0430\u0445 3.0</a>.</p>\r\n\r\n\u041a\u043e\u043d\u0442\u0430\u043a\u0442: wolnelektury@nowoczesnapolska.org.pl\r\n", + "title_en": "About the project", + "left_column_pl": "\ufeff{% load reporting_stats %}\r\n\r\n<p><strong>Wolne Lektury to biblioteka internetowa czynna 24 godziny na dob\u0119, 365 dni w roku i ca\u0142kowicie darmowa</strong>. W jej zbiorach znajduje si\u0119 <strong>{% count_books %}</strong> utwor\u00f3w, w tym wiele lektur szkolnych zalecanych do u\u017cytku przez Ministerstwo Edukacji Narodowej, kt\u00f3re trafi\u0142y ju\u017c do domeny publicznej. Wszystkie dzie\u0142a s\u0105 odpowiednio opracowane - opatrzone przypisami, motywami i udost\u0119pnione w kilku formatach - <strong>HTML</strong>, <strong>TXT</strong>, <strong>PDF</strong>, <strong>EPUB</strong>, <strong>MOBI</strong>. W bibliotece znajduje si\u0119 r\u00f3wnie\u017c kilkaset audiobook\u00f3w, czytanych przez takich aktor\u00f3w jak: Danuta Stenka, Jan Peszek czy Andrzej Chyra. Mo\u017cna ich s\u0142ucha\u0107 w formatach <strong>MP3</strong> i <strong>Ogg Vorbis</strong>. Audiobooki s\u0105 r\u00f3wnie\u017c dost\u0119pne w formacie <strong>DAISY</strong>dostosowanym do potrzeb os\u00f3b s\u0142abowidz\u0105cych, niewidomych oraz os\u00f3b maj\u0105cych trudno\u015bci z czytaniem.</p>\r\n\r\n<p>Biblioteka Wolne Lektury dost\u0119pna jest za po\u015brednictwem aplikacji mobilnych \u2013 na system <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\">Android</a> oraz na system iOS.</p>\r\n\r\n<p><strong>Wszystkie utwory zamieszczone w bibliotece Wolne Lektury mo\u017cna zgodnie z prawem bezp\u0142atnie przegl\u0105da\u0107, s\u0142ucha\u0107, \u015bci\u0105ga\u0107 na sw\u00f3j komputer, a tak\u017ce udost\u0119pnia\u0107 innym i cytowa\u0107.</strong></p>\r\n", + "left_column_it": "{% load reporting_stats %}\r\n\r\n<p><strong>Wolne Lektury (Le letture Libere) \u00e8 una biblioteca online aperta 24 ore al giorno, 365 giorni all'anno ed \u00e8 completamente gratuita</strong>. Nella sua collezione si trovano <strong>{% count_books %}</strong> opere, tra cui molte letture scolastiche raccomandate dal Ministero dell'Istruzione polacco facenti parte del dominio pubblico. Tutte le opere sono adeguatamente elaborate \u2013 con le note, i motivi e sono disponibili in diversi formati - <strong>HTML</strong>, <strong>TXT</strong>, <strong>PDF</strong>, <strong>EPUB</strong>, <strong>MOBI</strong>. La biblioteca dispone inoltre di centinaia di libri che vengono letti da diversi attori tra cui: Danuta Stenka, Jan Peszek o Andrzej Chyra. E' possibile ascoltarli nei formati <strong>MP3</strong> e <strong>Ogg Vorbis</strong>. Gli audiolibri sono disponibili anche in formato <strong>DAISY</strong> adattato alle esigenze delle persone ipovedenti, non vedenti e che hanno difficolta con la lettura.</p>\r\n\r\n<p>La biblioteca Wolne Lektury \u00e8 disponibile tramite le applicazioni mobili \u2013 per il sistema <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\">Android</a> e il sistema iOS.</p>\r\n\r\n<p><strong>Secondo la legge tutte le opere della biblioteca Wolne Lektury possono essere gratuitamente lette, ascoltate, scaricate sul pc, quotate e rese accessibili agli altri.</strong></p>\r\n\r\n", + "title_es": "Sobre el proyecto", + "left_column_ru": "{% load reporting_stats %}\r\n\r\n<p><strong>Wolne Lektury \u044d\u0442\u043e \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u043a\u0440\u0443\u0433\u043b\u044b\u0435 \u0441\u0443\u0442\u043a\u0438, 365 \u0434\u043d\u0435\u0439 \u0432 \u0433\u043e\u0434\u0443, \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e </strong>. \u0421\u043e\u0432\u043c\u0435\u0449\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e <strong>{% count_books %}</strong> \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043c\u043d\u043e\u0433\u043e\u0435 \u0438\u0437 \u0448\u043a\u043e\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \r\n\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u043e\u043c \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \r\n\u0412\u0441\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u0438 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u043c\u0438 \u043c\u043e\u0442\u0438\u0432\u0430\u043c\u0438. \r\n\r\n\u041e\u043d\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 - <strong>HTML </strong>, <strong>TXT </strong>, <strong>PDF</strong>,<strong> EPUB</strong>, \r\n<strong>MOBI</strong>. \r\n\u0412 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u043e\u0442\u043d\u0438 \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 <strong>MP3</strong> \u0438 <strong>Ogg Vorbis</strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0438\u0442\u0430\u044e\u0442 \u0430\u043a\u0442\u0435\u0440\u044b: \u0414\u0430\u043d\u0443\u0442\u0430 \u0421\u0442\u0435\u043d\u043a\u0430, \u042f\u043d \u041f\u0435\u0448\u0435\u043a, \u0410\u043d\u0434\u0436\u0435\u0439 \u0425\u044b\u0440\u0430. \r\n\r\n\u0410\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u0430\u043a\u0436\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <strong>DAISY </strong>, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u043c \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439 \u0441 \u043f\u043b\u043e\u0445\u0438\u043c \u0437\u0440\u0435\u043d\u0438\u0435\u043c, \u043f\u043b\u043e\u0445\u043e \u0432\u0438\u0434\u044f\u0449\u0438\u0445 \u0438 \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0447\u0442\u0435\u043d\u0438\u0435\u043c.</p> \r\n\r\n\r\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Wolne Lektury \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u2013 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\"> Android</a> \u0438 iOS. </p>\r\n\r\n\r\n<p><strong>\u0412\u0441\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438\u0437 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Wolne Lektury \u043f\u043e \u0437\u0430\u043a\u043e\u043d\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c, \u0441\u043b\u0443\u0448\u0430\u0442\u044c, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u0446\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445.</strong> </p> \r\n", + "slug": "o-projekcie", + "right_column_de": "<p>Wolne Lektury ist ein pro bono Projekt der Fundation Nowoczesna Polska (Modernes Polen), in Zusammenarbeit mit der Nationalbibliothek, der Schlesischen Bibliothek und der Elblinger Bibliothek unter dem Patronat des polnischen Bildungsministeriums und des Verbandes polnischer Schrifsteller (Stowarzyszenie Pisarzy Polskich). Im Ehrenkomitee von Wolne Lektury sind Prof. Maria Janion, Prof. Gra\u017cyna Borkowska, Prof. Przemys\u0142aw Czapli\u00f1ski, Prof. Mieczys\u0142aw D\u0105browski, Prof. Ewa Kraskowska, Prof. Ma\u0142gorzata Czermi\u00f1ska, Prof. Jerzy Jarz\u00eabski und Prof. Piotr \u015aliwi\u00f1ski t\u00e4tig.</p>\r\n\r\n<p>Die Mehrheit von Bibliothekwerken steht nicht unter dem Schutz des Urheberrechts und geh\u00f6rt zu dem Gemeinfreiheitsbereich, was bedeutet, dass man sie frei ver\u00f6ffentlichen und vermitteln darf. Sollte das Werk mit zus\u00e4tzlichen Angaben versehen werden (F\u00fc\u00dfnoten und literarischen Motiven), die dem Urheberrechtsschutz unterliegen, sind diese zus\u00e4tzlichen Angaben unter der Lizenz <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\"> Urheberschaftanerkennung unter gleichen Bedigungen 3.0</a> verf\u00fcgbar. Wir ver\u00f6ffentlichen auch Werke, die Verfasser oder Rechtsnachfolger unter der freien Lizenz <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Urheberschaftanerkennung unter gleichen Bedigungen 3.0</a>.</p> herausgegeben haben. \r\n\r\nKontakt: wolnelektury@nowoczesnapolska.org.pl", + "left_column_es": "\ufeff{% load reporting_stats %}\r\n\r\n<p><strong>Wolne Lektury es una biblioteca virtual de 24 horas, 365 d\u00edas al a\u00f1o y completamente gratuita</strong>. La colecci\u00f3n consta de <strong>{% count_books %}</strong> obras, incluso muchas de lectura obligatoria recomendadas por el Ministerio de Educaci\u00f3n Nacional y que ya forman parte del dominio p\u00fablico. Todos los textos est\u00e1n adecuadamente preparados \u2013 con notas a pie de p\u00e1gina, temas literarios, y est\u00e1n disponibles en varios formatos - <strong>HTML </strong>, <strong>TXT </strong>, <strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>.\r\nLa biblioteca contiene tambi\u00e9n centenares de audiolibros, leidos por autores como Danuta Stenka, Jan Peszek o Andrzej Chyra. Se los puede escuchar en los formatos <strong>MP3</strong> y <strong>Ogg Vorbis</strong>. Los audiolibros se pueden conseguir tambi\u00e9n en el formato <strong>DAISY </strong>, adaptado a las necesidades de las personas con baja visi\u00f3n, invidentes, incluso las que tienen dificultades para leer.</p>\r\n\r\n<p>La Biblioteca Wolne Lektury est\u00e1 disponible por medio de aplicaciones m\u00f3viles para los sistemas <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\"> Android</a> e iOS. </p>\r\n\r\n\r\n<p><strong>Todos los textos publicados en la Biblioteca Wolne Lektury est\u00e1n preparados para hojear, escuchar, descargar, para ponerlos a la disposici\u00f3n de otros y citar, todo esto de acuerdo con la ley.</strong> </p>\r\n", + "left_column_en": "{% load reporting_stats %}\r\n\r\n<p><strong>Wolne Lektury is a free online library open 24 hours a day, 365 days a year</strong>. It archives books<strong>{% count_books %}</strong>, including set readings recommended by the Ministry of National Education which have already fallen in the public domain. All the texts are adequately edited - annotated with footnotes and motifs - and are available in several formats - <strong>HTML </strong>, <strong>TXT </strong>, <strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>. The library also contains a few hundred audiobooks read by famous actors like: Danuta Stenka, Jan Peszek or Andrzej Chyra. The audiobooks can be used in <strong>MP3</strong> and <strong>Ogg Vorbis</strong> formats. They are also available in <strong>DAISY </strong>format suiting the needs of people with poor vision, the blind, and those having reading difficulties.</p>\r\n\r\n<p>The Wolne Lektury library is available through digital applications - in <a href=\"https://market.android.com/details?id=pl.org.nowoczesnapolska.wlmobi\"> Android</a> and iOS systems. </p>\r\n\r\n<p><strong>You are allowed to browse, listen to, and download all the items in Wolne Lektury, as well as share and cite them, entirely free of charge.</strong> </p>", + "right_column_fr": "<p>Wolne Lektury c'est un projet de la fondation Nowoczesna Polska (Pologne Moderne) r\u00e9alis\u00e9 pro publico bono avec la coop\u00e9ration de la Biblioth\u00e8que nationale polonaise, Biblioth\u00e8que de Sil\u00e9sie et Biblioth\u00e8que d'Elbl\u0105g, sous le patronage du Minist\u00e8re de l'\u00c9ducation nationale, Minist\u00e8re de la Culture et du Patrimoine national et de l'Association des \u00c9crivains polonais. Le Comit\u00e9 Honoraire de Wolne Lektury est compos\u00e9 de: prof. Maria Janion, prof. Gra\u017cyna Borkowska, prof. Przemys\u0142aw Czapli\u0144ski, prof. Mieczys\u0142aw D\u0105browski, prof. Ewa Kraskowska, prof. Ma\u0142gorzata Czermi\u0144ska, prof. Jerzy Jarz\u0119bski et prof. Piotr \u015aliwi\u0144ski.</p>\r\n\r\n<p>La plupart des ouvrages sur le site de la biblioth\u00e8que ne sont pas prot\u00e9g\u00e9s par le droit d'auteur et appartiennent au domaine public; c'est-\u00e0-dire qu'ils peuvent \u00eatre publi\u00e9s et divulgu\u00e9s librement. Si un ouvrage est accompagn\u00e9 des mat\u00e9riaux suppl\u00e9mentaires (annotations, motifs litt\u00e9raires, etc.) soumis au droit d'auteur, ces derniers sont donc distribu\u00e9s sous la licence: <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.fr\">Paternit\u00e9 - Partage \u00e0 l'Identique 3.0 non transpos\u00e9</a>. On publie aussi quelques ouvrages qui \u00e9taient distribu\u00e9s par leurs auteurs ou h\u00e9ritiers sous la licence libre: <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.fr\">Paternit\u00e9 - Partage \u00e0 l'Identique 3.0 non transpos\u00e9</a>.</p>\r\nContact: wolnelektury@nowoczesnapolska.org.pl\r\n", + "title_ru": "\ufeff\u041f\u0440\u043e\u0435\u043a\u0442", + "title_it": "Sul progetto" + } + }, + { + "pk": 7, + "model": "infopages.infopage", + "fields": { + "title_de": "Rechts", + "left_column_uk": "<p>\u0411\u0456\u043b\u044c\u0448\u0456\u0441\u0442\u044c \u0442\u0432\u043e\u0440\u0456\u0432 \u0443 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456 \u043d\u0435 \u043e\u0445\u043e\u0440\u043e\u043d\u044f\u044e\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c \u0456 \u044f\u0432\u043b\u044f\u044e\u0442\u044c\u0441\u044f \u0447\u0430\u0441\u0442\u0438\u043d\u043e\u044e \u0441\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0434\u0431\u0430\u043d\u043d\u044f, \u0442\u043e\u043c\u0443 \u0457\u0445 \u043c\u043e\u0436\u043d\u0430 \u0432\u0456\u043b\u044c\u043d\u043e \u043f\u0443\u0431\u043b\u0456\u043a\u0443\u0432\u0430\u0442\u0438 \u0442\u0430 \u0440\u043e\u0437\u043f\u043e\u0432\u0441\u044e\u0434\u0436\u0443\u0432\u0430\u0442\u0438. \u042f\u043a\u0449\u043e \u0442\u0435\u043a\u0441\u0442\u0438 \u0441\u0443\u043f\u0440\u043e\u0432\u043e\u0434\u0436\u0443\u044e\u0442\u044c\u0441\u044f \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u043c\u0438 \u043c\u0430\u0442\u0435\u0440\u0456\u0430\u043b\u0430\u043c\u0438 (\u043f\u0440\u0438\u043c\u0456\u0442\u043a\u0430\u043c\u0438, \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u043c\u0438 \u043c\u043e\u0442\u0438\u0432\u0430\u043c\u0438 \u0442\u043e\u0449\u043e), \u044f\u043a\u0456 \u043e\u0445\u043e\u0440\u043e\u043d\u044f\u044e\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c, \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0446\u0438\u0445 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0456\u0430\u043b\u0456\u0432 \u043d\u0430\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u043c\u043e\u0432\u0430\u0445 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457 <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">\u0406\u0437 \u0437\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0456\u043c\u0435\u043d\u0456 \u0430\u0432\u0442\u043e\u0440\u0430 \u2013 \u041d\u0430 \u0442\u0438\u0445 \u0436\u0435 \u0443\u043c\u043e\u0432\u0430\u0445 3.0</a>. \u0422\u0430\u043a\u043e\u0436 \u043c\u0438 \u043f\u0443\u0431\u043b\u0456\u043a\u0443\u0454\u043c\u043e \u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0442\u0432\u043e\u0440\u0456\u0432, \u0434\u043e \u044f\u043a\u0438\u0445 \u0430\u0432\u0442\u043e\u0440\u0438 \u0430\u0431\u043e \u0441\u043f\u0430\u0434\u043a\u043e\u0454\u043c\u0446\u0456 \u043f\u0440\u0430\u0432 \u043d\u0430\u0434\u0430\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 \u043f\u0456\u0434\u0441\u0442\u0430\u0432\u0456 \u0432\u0456\u043b\u044c\u043d\u043e\u0457 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457 <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">\u0406\u0437 \u0437\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0456\u043c\u0435\u043d\u0456 \u0430\u0432\u0442\u043e\u0440\u0430 \u2013 \u041d\u0430 \u0442\u0438\u0445 \u0436\u0435 \u0443\u043c\u043e\u0432\u0430\u0445 3.0</a>.</p>", + "main_page": 2, + "right_column_pl": "", + "right_column_lt": "", + "left_column_lt": "<p>Dauguma \u0161ios bibliotekos k\u016brini\u0173 n\u0117ra autorini\u0173 teisi\u0173 saugomi ir yra vie\u0161ai prieinami, tai rei\u0161kia, kad gali b\u016bti laisvai naudojami bei platinami. Jei su k\u016briniu yra pateikiamos bet kokios papildomos autorini\u0173 teisi\u0173 saugomos med\u017eiagos (kaip pastabos, motyvai ir t.t.), tai \u0161ios med\u017eiagos yra prieinamos pagal licencj\u0105 <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Autoryst\u0117s pripa\u017einimas \u2013 pagal tas pa\u010dias s\u0105lygas 3.0</a>. Publikuojami taip pat keli k\u016briniai, autori\u0173 ir teisi\u0173 \u012fp\u0117dini\u0173 pateikti pagal laisv\u0105 licencij\u0105 <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Autoryst\u0117s pripa\u017einimas \u2013 pagal tas pa\u010dias s\u0105lygas 3.0</a>.</p>", + "title_fr": "", + "right_column_ru": "", + "left_column_fr": "<p>La plupart des ouvrages sur le site de la biblioth\u00e8que ne sont pas prot\u00e9g\u00e9s par le droit d'auteur et appartiennent au domaine public; c'est-\u00e0-dire qu'ils peuvent \u00eatre publi\u00e9s et divulgu\u00e9s librement. Si un ouvrage est accompagn\u00e9 des mat\u00e9riaux suppl\u00e9mentaires (annotations, motifs litt\u00e9raires, etc.) soumis au droit d'auteur, ces derniers sont donc distribu\u00e9s sous la licence: <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.fr\">Paternit\u00e9 - Partage \u00e0 l'Identique 3.0 non transpos\u00e9</a>. On publie aussi quelques ouvrages qui \u00e9taient distribu\u00e9s par leurs auteurs ou h\u00e9ritiers sous la licence libre: <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.fr\">Paternit\u00e9 - Partage \u00e0 l'Identique 3.0 non transpos\u00e9</a>.</p>", + "title": "Rights", + "title_lt": "", + "right_column": "<p>The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Creative Commons Attribution-ShareAlike</a>. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Creative Commons Attribution-ShareAlike</a>.</p>\r\n\r\nContact: wolnelektury@nowoczesnapolska.org.pl", + "right_column_es": "", + "right_column_en": "<p>The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Creative Commons Attribution-ShareAlike</a>. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Creative Commons Attribution-ShareAlike</a>.</p>\r\n\r\nContact: wolnelektury@nowoczesnapolska.org.pl", + "left_column_de": "<p>Die Mehrheit von Bibliothekwerken steht nicht unter dem Schutz des Urheberrechts und geh\u00f6rt zu dem Gemeinfreiheitsbereich, was bedeutet, dass man sie frei ver\u00f6ffentlichen und vermitteln darf. Sollte das Werk mit zus\u00e4tzlichen Angaben versehen werden (F\u00fc\u00dfnoten und literarischen Motiven), die dem Urheberrechtsschutz unterliegen, sind diese zus\u00e4tzlichen Angaben unter der Lizenz <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\"> Urheberschaftanerkennung unter gleichen Bedigungen 3.0</a> verf\u00fcgbar. Wir ver\u00f6ffentlichen auch Werke, die Verfasser oder Rechtsnachfolger unter der freien Lizenz <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Urheberschaftanerkennung unter gleichen Bedigungen 3.0</a>.</p> herausgegeben haben. ", + "title_uk": "", + "right_column_it": null, + "title_pl": "Prawa", + "left_column": "<p>The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Attribution + Noncommercial + ShareAlike</a>. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Attribution + Noncommercial + ShareAlike</a>.</p>", + "right_column_uk": "", + "title_en": "Rights", + "left_column_pl": "<p>Wi\u0119kszo\u015b\u0107 utwor\u00f3w w bibliotece nie jest chroniona prawem autorskim i znajduje si\u0119 w domenie publicznej, co oznacza, \u017ce mo\u017cna je swobodnie publikowa\u0107 i rozpowszechnia\u0107. Je\u015bli utw\u00f3r opatrzony jest dodatkowymi materia\u0142ami (przypisy, motywy literackie etc.), kt\u00f3re podlegaj\u0105 prawu autorskiemu, to te dodatkowe materia\u0142y udost\u0119pnione s\u0105 na licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>. Publikujemy r\u00f3wnie\u017c kilka utwor\u00f3w, kt\u00f3re autorzy lub spadkobiercy praw udost\u0119pnili na wolnej licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>.</p>", + "left_column_it": null, + "title_es": "Derechos", + "left_column_ru": "<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043a\u043e\u043d\u043e\u043c \u043e\u0431 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432\u0430\u0445 \u0438 \u043e\u043d\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u043a \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u0434\u043e\u043c\u0435\u043d\u0443. \r\n\u0418\u0445 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043d\u0438\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b (\u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f, \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0435 \u043c\u043e\u0442\u0438\u0432\u044b, \u0438 \u0442.\u0434.), \r\n\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.ru\">\r\n \u041f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 - 3.0</a>. \r\n\u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043e\u0442 \u0441\u0430\u043c\u044b\u0445 \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u0438\u043b\u0438 \u0438\u0445 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043f\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0435\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439. <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.ru\">\u041f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 3.0</a>.</p>", + "slug": "prawa", + "right_column_de": "", + "left_column_es": "</p>La mayor\u00eda de los textos de la Biblioteca est\u00e1n libres de derechos de autor y son de dominio p\u00fablico, por lo tanto se pueden publicar y difundir libremente. Si un texto tiene materiales adicionales (notas a pie de p\u00e1gina, temas literarios, etc.), que no est\u00e9n libres de derechos de autor, dichos materiales est\u00e1n publicados bajo la licencia <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.es\">Reconocimiento-Compartir bajo la misma licencia 3.0</a>.Tambi\u00e9n publicamos algunos textos legados a el dominio p\u00fablico por los autores o heredores bajo la licencia <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.es\">Reconocimiento-Compartir bajo la misma licencia 3.0</a>.</p>", + "left_column_en": "<p>The majority of books in the library are free of copyright and are in the public domain, which means that they can be freely published and redistributed. If a piece of work is given additional materials (footnotes, literary motifs, etc.), which are copyrighted, these materials are made publicly available under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Attribution + Noncommercial + ShareAlike</a>. We also publish several texts dedicated to the public domain by their authors or copyright owners under the licence <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.en\">Attribution + Noncommercial + ShareAlike</a>.</p>", + "right_column_fr": "", + "title_ru": "", + "title_it": null + } + }, + { + "pk": 4, + "model": "infopages.infopage", + "fields": { + "title_de": "Unser Team", + "left_column_uk": "\ufeff<p><strong>\u041c\u0430\u0491\u0434\u0430\u043b\u0435\u043d\u0430 \u0411\u2019\u0454\u0440\u043d\u0430\u0442</strong> \u2013 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u0443, \u043a\u0435\u0440\u0443\u044e\u0447\u0438\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440 \u0424\u043e\u043d\u0434\u0443 \u0421\u0443\u0447\u0430\u0441\u043d\u0430 \u041f\u043e\u043b\u044c\u0449\u0430 (Fundacja Nowoczesna Polska). \u0421\u043e\u0446\u0456\u043e\u043b\u043e\u0433, \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u044f \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u0442\u0430 \u0411\u0440\u044e\u0441\u0441\u0435\u043b\u044c\u0441\u044c\u043a\u043e\u0433\u043e \u0432\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u0421\u043f\u0435\u0446\u0456\u0430\u043b\u0456\u0441\u0442 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043d\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0456\u0432. \u041a\u0435\u0440\u0443\u0432\u0430\u043b\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u00ab\u041a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0438 2009\u00bb \u0442\u0430 \u00ab\u042f \u043c\u0430\u044e \u043f\u0440\u0430\u0432\u043e \u0437\u043d\u0430\u0442\u0438\u00bb \u0443 \u0410\u0441\u043e\u0446\u0456\u0430\u0446\u0456\u0457 61. \u041f\u0440\u0430\u0446\u044e\u0432\u0430\u043b\u0430 \u0443 \u0431\u0430\u0433\u0430\u0442\u044c\u043e\u0445 \u0441\u043e\u0446\u0456\u0430\u043b\u044c\u043d\u0438\u0445 \u0434\u043e\u0441\u043b\u0456\u0434\u0436\u0435\u043d\u043d\u044f\u0445, \u044f\u043a\u0456 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044f \u0433\u0440\u043e\u043c\u0430\u0434\u0441\u044c\u043a\u0438\u043c\u0438 \u043e\u0440\u0433\u0430\u043d\u0456\u0437\u0430\u0446\u0456\u044f\u043c\u0438 \u0442\u0430 \u0434\u043e\u0441\u043b\u0456\u0434\u043d\u0438\u0446\u044c\u043a\u0438\u043c\u0438 \u0444\u0456\u0440\u043c\u0430\u043c\u0438. </p>\r\n\r\n<p><strong>\u0420\u0430\u0434\u043e\u0441\u043b\u0430\u0432 \u0427\u0430\u0439\u043a\u0430</strong> \u2013 \u0433\u043e\u043b\u043e\u0432\u043d\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442, \u0432\u0438\u0432\u0447\u0430\u0432 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a\u0443 \u043d\u0430 \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0456 \u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438, \u0406\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a\u0438 \u0442\u0430 \u041c\u0435\u0445\u0430\u043d\u0456\u043a\u0438 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u0412\u043e\u043b\u043e\u0434\u0456\u0454 \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u043c\u0438 \u043c\u043e\u0432\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0430 \u0442\u0435\u0433\u0456\u0432: Python, XHTML, Javascript, CSS, LaTeX, SQL. \u041c\u0430\u0454 \u0434\u043e\u0441\u0432\u0456\u0434 \u0443 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u0445 Django, Jquery, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0443 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0443\u0432\u0430\u043d\u043d\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0456\u0432 XML (XSLT), \u0443 \u0442\u0432\u043e\u0440\u0435\u043d\u043d\u0456 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0438\u0445 \u043a\u043d\u0438\u0433 \u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 PDF \u0442\u0430 EPUB \u0456 \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0438\u0445 \u0430\u043f\u043b\u0456\u043a\u0430\u0446\u0456\u0439 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0438 Android \u0442\u0430 iOS.</p>\r\n\r\n<p><strong>\u041c\u0430\u0440\u0446\u0456\u043d \u041a\u043e\u0437\u0454\u0439 </strong>\u2013 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442. \u0412\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u041f\u043e\u043b\u0456\u0442\u0435\u0445\u043d\u0456\u0447\u043d\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u0442\u0430 \u0430\u0441\u043f\u0456\u0440\u0430\u043d\u0442 \u0432 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u0424\u0456\u043b\u043e\u0441\u043e\u0444\u0456\u0457 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u0414\u0456\u044f\u0447 \u041c\u043e\u043a\u043e\u0442\u043e\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u041f\u0440\u043e\u0434\u043e\u0432\u043e\u043b\u044c\u0447\u043e\u0433\u043e \u041a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u0443. \u041c\u0430\u043d\u0434\u0440\u0456\u0432\u043d\u0438\u043a, \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0438\u0441\u0442, \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c \u0443\u0441\u0456\u043b\u044f\u043a\u0438\u0445 \u0431\u0430\u043d\u043a\u0435\u0442\u0456\u0432. Homo ludens.</p>\r\n\r\n<p><strong>\u041c\u0430\u0440\u0442\u0430 \u041d\u0454\u0434\u0437\u044f\u043b\u043a\u043e\u0432\u0441\u044c\u043a\u0430</strong> \u2013 \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u044f \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u0437\u043d\u0430\u0432\u0441\u0442\u0432\u0430 \u0442\u0430 \u043d\u0430\u0443\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u0421\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 \u043c\u0430\u0433\u0456\u0441\u0442\u0440\u0430\u0442\u0443\u0440\u0438 \u043d\u0430 \u0441\u043f\u0435\u0446\u0456\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0456 Public Policy and Administration \u0443 Collegium Civitas. </p>\r\n\r\n", + "main_page": 3, + "right_column_pl": "<p><strong>Dorota A. Kowalska</strong> \u2013 redaktorka literacka, j\u0119zykoznawca, polonistka i slawistka, doktor nauk humanistycznych, adiunkt w Pracowni Polszczyzny Kresowej IJP PAN, gdzie zajmuje si\u0119 histori\u0105 i wsp\u00f3\u0142czesno\u015bci\u0105 j\u0119zyka polskiego na Ukrainie. Hobbystycznie \u015bpiewa archaiczne pie\u015bni ukrai\u0144skie i rosyjskie, cyklistka.</p>\r\n\r\n<p><strong>Aleksandra Seku\u0142a</strong> \u2013 redaktorka literacka, historyczka literatury, doktor nauk humanistycznych, absolwentka Wydzia\u0142u Polonistyki Uniwersytetu Warszawskiego i Szko\u0142y Nauk Spo\u0142ecznych przy IFiS PAN. Zawodowo i naukowo zajmuje si\u0119 polskim romantyzmem, histori\u0105 idei i teori\u0105 kultury. </p>\r\n\r\n<p><strong>Pawe\u0142 Kozio\u0142 </strong>\u2013 redaktor literacki. Ur. 1979, doktor nauk humanistycznych specjalizuj\u0105cy si\u0119 w literaturze dawnej, absolwent Wydzia\u0142u Polonistyki Uniwersytetu Warszawskiego oraz Dulwich College w Londynie. Poeta, krytyk literacki, stypendysta Ministerstwa Kultury i Dziedzictwa Narodowego (2010). </p>\r\n\r\n<p><strong>Paulina Choroma\u0144ska</strong> \u2013 redaktorka techniczna, studentka II roku studi\u00f3w magisterskich w Instytucie Informacji Naukowej i Studi\u00f3w Bibliologicznych UW. Pracuje r\u00f3wnie\u017c w Pracowni Dokumentacji Teatru w Instytucie Teatralnym im. Z. Raszewskiego w Warszawie.</p>\r\n\r\n<p><strong>Aneta Rawska</strong> - redaktorka techniczna, studentka II roku studi\u00f3w magisterskich w Instytucie Informacji Naukowej i Studi\u00f3w Bibliologicznych UW, mi\u0142o\u015bniczka wypiek\u00f3w i dobrej kuchni. Od 2009 roku prowadzi serwis ko\u0142a PZW nr 21 w Wo\u0142ominie.</p>\r\n", + "right_column_lt": "\ufeff<p><strong>Dorota A. Kowalska</strong> \u2013 literat\u016bros redaktor\u0117, lingvist\u0117, polonist\u0117, slavist\u0117, humanitarini\u0173 moksl\u0173 daktar\u0117, Lenkijos moksl\u0173 akademijos Lenk\u0173 kalbos instituto adjunkt\u0117, kur atlieka darbus, susijusius su istorija ir dabartine lenk\u0173 kalba Ukrainoje. Laisvalaikiu dainuoja archaji\u0161kas ukrainie\u010di\u0173 ir rus\u0173 dainas, dviratinink\u0117. </p>\r\n\r\n<p><strong>Aleksandra Seku\u0142a</strong> \u2013 literat\u016bros redaktor\u0117, literat\u016bros istorik\u0117, humanitarini\u0173 moksl\u0173 daktar\u0117, Var\u0161uvos universiteto Polonistikos fakulteto bei Lenkijos moksl\u0173 akademijos Filosofijos ir sociologijos instituto Socialini\u0173 moksl\u0173 mokyklos absolvent\u0117. Profesionaliai u\u017esiima lenk\u0173 romantizmu, id\u0117jos istorija ir kult\u016bros teorija. </p> \r\n\r\n<p><strong>Pawe\u0142 Kozio\u0142 </strong>\u2013 literat\u016bros redaktorius, gim\u0119s 1979 m., humanitarini\u0173 moksl\u0173 daktaras besispecializuojantis senojoje literat\u016broje, Var\u0161uvos universiteto Polonistikos fakulteto bei Dulwich College Londone absolventas. Poetas, literat\u016bros kritikas, Kult\u016bros ir nacionalinio paveldo ministerijos stipendininkas (2010). </p>\r\n\r\n<p><strong>Paulina Choroma\u0144ska</strong> \u2013 technin\u0117 redaktor\u0117, Var\u0161uvos universiteto Bibliotekininkyst\u0117s ir informatikos instituto magistrant\u016bros studij\u0173 antro kurso student\u0117. Taip pat dirba Z. Raszewski Teatro instituto Teatro dokumentacijos skyriuje Var\u0161uvoje.\r\n\r\n<p><strong>Aneta Rawska</strong> \u2013 technin\u0117 redaktor\u0117, Var\u0161uvos universiteto Bibliotekininkyst\u0117s ir informatikos instituto magistrant\u016bros studij\u0173 antro kurso student\u0117, kepini\u0173 ir skanios virtuv\u0117s gerb\u0117ja. Nuo 2009 m. pri\u017ei\u016bri PZW (Lenk\u0173 \u017evej\u0173 s\u0105junga) nr. 21 interneto svetain\u0119 Wo\u0142omin mieste.\r\n", + "left_column_lt": "\ufeff<p><strong>Magdalena Biernat</strong> \u2013 projekto koordinator\u0117, fondo \u0160iuolaikin\u0117 Lenkija valdan\u010dioji direktor\u0117. Sociolog\u0117, Var\u0161uvos universiteto ir L\u2019Universit\u00e9 libre de Bruxelles absolvent\u0117. Internetini\u0173 projekt\u0173 specialist\u0117. Koordinavo Kandydaci 2009 ir Mam Prawo Wiedzie\u0107 Asocijacijos 61 projektus. Dirbo prie socialini\u0173 tyrim\u0173, nevyriausybini\u0173 organizacij\u0173 ir tyrim\u0173 \u012fstaig\u0173 \u012fgyvendinam\u0173. </p>\r\n\r\n<p><strong>Rados\u0142aw Czajka</strong> \u2013 pagrindinis programuotojas, studijavo Informacini\u0173 technologij\u0173 specialyb\u0119 Matematikos, informatikos ir mechanikos fakultete. Python, XHTML, Javascript, CSS, LaTeX, SQL programavimo kalb\u0173 ir \u017eymi\u0173 ekspertas. Turi patirties su frameworks\u2019ais Django, Jquery, patirtis su XML (XSLT) dokument\u0173 transformavimu, PDF ir EPUB formatu e-knyg\u0173 gamyba bei su mobili\u0173j\u0173 program\u0173 skiriam\u0173 operacinei sistemai Android ir iOS k\u016brim\u0173. </p>\r\n\r\n<p><strong>Marcin Koziej </strong>\u2013 programuotojas, Var\u0161uvos technikos universiteto absolventas ir Var\u0161uvos universiteto Filosofijos instituto doktorantas. Mokotovo maisto kooperatyvo (Mokotowska Kooperatywa Spo\u017cywcza) aktyvistas. Keliautojas, dviratininkas, puotautojas. Homo ludens. </p>\r\n\r\n\t\r\n<p><strong>Marta Niedzia\u0142kowska</strong> \u2013 technin\u0117 redaktor\u0117, Var\u0161uvos universiteto Bibliotekininkyst\u0117s ir informatikos absolvent\u0117. Universiteto Collegium Civitas Public Policy and Administration magistrant\u016bros studij\u0173 student\u0117. </p>\r\n", + "title_fr": "Notre \u00e9quipe", + "right_column_ru": "\ufeff<p><strong>\u0414\u043e\u0440\u043e\u0442\u0430 A. \u041a\u043e\u0432\u0430\u043b\u044c\u0441\u043a\u0430</strong> \u2013 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u044f\u0437\u044b\u043a\u043e\u0432\u0435\u0434, \u0444\u0438\u043b\u043e\u043b\u043e\u0433 \u0438 \u0441\u043b\u0430\u0432\u0438\u0441\u0442\u043a\u0430, \u0434\u043e\u043a\u0442\u043e\u0440 \u0433\u0443\u043c\u0430\u043d\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043d\u0430\u0443\u043a, \u0430\u0434\u044a\u044e\u043d\u043a\u0442 \u0432 \u043d\u0430\u0443\u0447\u043d\u043e\u0439 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u041f\u043e\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043e\u043a\u0440\u0430\u0438\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0418\u0419\u041f \u041f\u0410\u041d, \u0433\u0434\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0441\u043a\u0438\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u0432 \u0423\u043a\u0440\u0430\u0438\u043d\u0435. \u0415\u0435 \u0445\u043e\u0431\u0431\u0438 \u044d\u0442\u043e \u0430\u0440\u0445\u0430\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0435 \u0438 \u0440\u0443\u0441\u0441\u043a\u0438\u0435 \u043d\u0430\u0440\u043e\u0434\u043d\u044b\u0435 \u043f\u0435\u0441\u043d\u0438.</p>\r\n\r\n<p><strong>\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u0421\u0435\u043a\u0443\u043b\u0430</strong> \u2013 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0438\u0441\u0442\u043e\u0440\u0438\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b, \u0434\u043e\u043a\u0442\u043e\u0440 \u0433\u0443\u043c\u0430\u043d\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043d\u0430\u0443\u043a, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u0430 \u0424\u0438\u043b\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0444\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \u0438 \u0428\u043a\u043e\u043b\u044b \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u0443\u043a \u043f\u0440\u0438 \u0418\u0444\u0438\u0421 \u041f\u0410\u041d. \u041f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0438 \u043d\u0430\u0443\u0447\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0441\u043a\u0438\u043c \u0440\u043e\u043c\u0430\u043d\u0442\u0438\u0437\u043c\u043e\u043c, \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0438\u0434\u0435\u0438 \u0438 \u0442\u0435\u043e\u0440\u0438\u0435\u0439 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u044b.</p>\r\n\r\n<p><strong>\u041f\u0430\u0432\u0435\u043b \u041a\u043e\u0437\u0435\u043b</strong>\u2013 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440. 1979 \u0433.\u0440., \u0434\u043e\u043a\u0442\u043e\u0440 \u0433\u0443\u043c\u0430\u043d\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043d\u0430\u0443\u043a, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u043f\u043e \u0434\u0440\u0435\u0432\u043d\u0435\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0435, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0424\u0438\u043b\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \u0438 Dulwich College \u0432 \u041b\u043e\u043d\u0434\u043e\u043d\u0435. \u041f\u043e\u044d\u0442, \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u043a\u0440\u0438\u0442\u0438\u043a, \u0441\u0442\u0438\u043f\u0435\u043d\u0434\u0438\u0430\u0442 \u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u044b \u0438 \u043d\u0430\u0440\u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0430 (2010).</p>\r\n\r\n<p><strong>\u041f\u0430\u0443\u043b\u0438\u043d\u0430 \u0425\u043e\u0440\u043e\u043c\u0430\u043d\u044c\u0441\u043a\u0430</strong> \u2013 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 II \u043a\u0443\u0440\u0441\u0430 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0430 \u041d\u0430\u0443\u0447\u043d\u043e\u0439 \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0412\u0423. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u0432 \u041d\u0430\u0443\u0447\u043d\u043e\u0439 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0442\u0435\u0430\u0442\u0440\u0430, \u0432 \u0422\u0435\u0430\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u043c \u0438\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0435 \u0438\u043c. \u0417. \u0420\u0430\u0448\u0435\u0432\u0441\u043ao\u0433\u043e \u0432 \u0412\u0430\u0440\u0448\u0430\u0432\u0435.</p>\r\n\r\n<p><strong>\u0410\u043d\u0435\u0442\u0430 \u0420\u0430\u0432\u0441\u043a\u0430</strong> - \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 II \u043a\u0443\u0440\u0441\u0430 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0430 \u041d\u0430\u0443\u0447\u043d\u043e\u0439 \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0412\u0423, \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u043d\u0438\u0446\u0430 \u0432\u044b\u043f\u0435\u043a\u0430\u043d\u0438\u044f \u0438 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043a\u0443\u0445\u043d\u0438. \u0421 2009 \u0433. \u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u043a\u0440\u0443\u0436\u043a\u0430 \u041f\u0417\u0412 \u043d\u043e.21 \u0432 \u0412\u043e\u043b\u043e\u043c\u0438\u043d\u0435.</p>\r\n", + "left_column_fr": "<p><strong>Magdalena Biernat</strong> \u2013 coordinatrice du projet et directrice administrative de la fondation Nowoczesna Polska, sociologue, gradu\u00e9e de l'Universit\u00e9 de Varsovie et l\u2019Universit\u00e9 libre de Bruxelles, sp\u00e9cialiste des projets Internet; elle a coordonn\u00e9 les projets Kandydaci 2009 et Mam Prawo Wiedzie\u0107 pour Stowarzyszenie 61 (l'Assocciation 61). Elle a particip\u00e9 aux travaux de recherches sociales r\u00e9alis\u00e9s par les organisations non gouvernementales et soci\u00e9t\u00e9s de recherche. </p>\r\n\r\n<p><strong>Rados\u0142aw Czajka</strong> \u2013 programmeur principal du projet, il a \u00e9tudi\u00e9 l'informatique \u00e0 MIMUW (l'Univerist\u00e9 de Varsovie, D\u00e9partement de Math\u00e9matique, Informatique et G\u00e9nie M\u00e9canique). Il est un expert dans les langages de programmation tels que Python, XHTML, Javascript, CSS, LaTeX, SQL. Il a de l'exp\u00e9rience dans les frameworks Django et Jquery, de l'exp\u00e9rience dans l'\u00e9dition de documents XML (XSLT), dans la production de livres num\u00e9riques aux formats PDF et EPUB et dans la cr\u00e9ation d'applications mobiles pour Android et iOS.</p>\r\n\r\n<p><strong>Marcin Koziej </strong> \u2013 programmeur, amateur infatigable de philosophie, informaticien, voyageur, cycliste et banqueteur. Homo ludens.</p>\r\n\r\n<p><strong>Marta Niedzia\u0142kowska</strong> \u2013 r\u00e9dactrice technique, gradu\u00e9e en Bibliothecologie et Sciences de l'Information de l'Universit\u00e9 de Varsovie. Une \u00e9tudiante d'\u00e9tudes secondaires en Public Policy and Administration au Collegium Civitas. </p>\r\n\r\n", + "title": "The team", + "title_lt": "\ufeffM\u016bs\u0173 komanda", + "right_column": "\ufeff\r\n<p><strong>Dorota A. Kowalska</strong> \u2013 literary editor, linguist, specialist in the field of Polish studies, Slavist, PhD holder. She is an assistant professor in Pracownia Polszczyzny Kresowej at the Institute of the Polish Language, Polish Academy of Sciences, where she works on the history and the present of the Polish language in Ukraine. As a hobby, she sings Ukrainian and Russian archaic songs and cycles.</p>\r\n\r\n<p><strong>Aleksandra Seku\u0142a</strong> \u2013 literary editor, literary historian, PhD holder. She is a graduate of the Faculty of Polish Studies, Warsaw University and the Graduate School for Social Research at the Institute of Philosophy and Sociology, Polish Academy of Sciences. Her research interests include Polish Romanticism, the history of ideas and the theory of culture. </p>\r\n\r\n<p><strong>Pawe\u0142 Kozio\u0142 </strong>\u2013 literary editor. B. 1979, he is a PhD holder specializing in classic literature and graduate of the Faculty of Polish Studies, Warsaw University and Dulwich College in London. A poet, literary critic, the Ministry of Culture and National Heritage scholarship holder (2010).</p>\r\n\r\n<p><strong>Paulina Choroma\u0144ska</strong> \u2013 production editor, undergraduate student of Information and Book Studies at Warsaw University. She also works in the Theatre Documentation Office of the Zbigniew Raszewski Theatrical Institute in Warsaw.</p>\r\n\r\n<p><strong>Aneta Rawska</strong> - production editor, undergraduate student of Information and Book Studies at Warsaw University, fan of pastries and good cuisine. Since 2009 she has been administering the portal of PZW (Polish Angling Association) group no. 21 in Wo\u0142omin.</p>", + "right_column_es": "<p><strong>Dorota A. Kowalska</strong> \u2013 redactora literaria, ling\u00fcista, licenciada en filolog\u00eda polaca y eslava, doctorada en humanidades, profesora adjunta en el Laboratorio de Idioma Polaco de la Zona Fronteriza, donde se ocupa de la historia y presente del idioma polaco en Ucrania. Su pasatiempo favorito es cantar canciones arcaicas ucranianas y rusas. Ciclista.</p>\r\n\r\n<p><strong>Aleksandra Seku\u0142a</strong> \u2013 redactora literaria, historiadora de literatura, doctorada en humanidades, licenciada por la Facultad de Filolog\u00eda Polaca por la Escuela de Ciencias Sociales del IFIS PAN (el Instituto de Filosof\u00eda y Sociolog\u00eda de la Academia Polaca de Ciencias). Se ocupa de el romanticismo polaco, historia de la idea y teor\u00eda de cultura.</p>\r\n\r\n<p><strong>Pawe\u0142 Kozio\u0142 </strong> \u2013 redactor literario. Naci\u00f3 en 1979, doctorado en humanidades, especializado en literatura antigua. Licenciado por la Facultad de Filolog\u00eda Polaca de la Universidad de Varsovia y por Dulwich College en Londres. Poeta y cr\u00edtico literario, becario de el Ministerio de Cultura y Patrimonio Nacional (2010).</p>\r\n\r\n<p><strong>Paulina Choroma\u0144ska</strong> \u2013 redactora t\u00e9cnica, estudiante de segundo curso de licenciatura en el Instituto de Informaci\u00f3n Cient\u00edfica y Bibliotecolog\u00eda de la Universidad de Varsovia. Aparte, trabaja en el Centro de Documentaci\u00f3n de Teatro en el Instituto de Teatro de Zbigniew Raszewski en Varsovia. </p> \r\n\r\n<p><strong>Aneta Rawska</strong> - redactora t\u00e9cnica, estudiante de segundo curso de licenciatura en el Instituto de Ciencias de la Informaci\u00f3n y Bibliotecolog\u00eda de la Universidad de Varsovia, amante de la pasteler\u00eda y la buena cocina. Desde 2009 est\u00e1 a cargo de la p\u00e1gina web de PZW (Asociaci\u00f3n Polaca de Pesca) n\u00famero 21 en Wolomin. </p>\r\n", + "right_column_en": "\ufeff\r\n<p><strong>Dorota A. Kowalska</strong> \u2013 literary editor, linguist, specialist in the field of Polish studies, Slavist, PhD holder. She is an assistant professor in Pracownia Polszczyzny Kresowej at the Institute of the Polish Language, Polish Academy of Sciences, where she works on the history and the present of the Polish language in Ukraine. As a hobby, she sings Ukrainian and Russian archaic songs and cycles.</p>\r\n\r\n<p><strong>Aleksandra Seku\u0142a</strong> \u2013 literary editor, literary historian, PhD holder. She is a graduate of the Faculty of Polish Studies, Warsaw University and the Graduate School for Social Research at the Institute of Philosophy and Sociology, Polish Academy of Sciences. Her research interests include Polish Romanticism, the history of ideas and the theory of culture. </p>\r\n\r\n<p><strong>Pawe\u0142 Kozio\u0142 </strong>\u2013 literary editor. B. 1979, he is a PhD holder specializing in classic literature and graduate of the Faculty of Polish Studies, Warsaw University and Dulwich College in London. A poet, literary critic, the Ministry of Culture and National Heritage scholarship holder (2010).</p>\r\n\r\n<p><strong>Paulina Choroma\u0144ska</strong> \u2013 production editor, undergraduate student of Information and Book Studies at Warsaw University. She also works in the Theatre Documentation Office of the Zbigniew Raszewski Theatrical Institute in Warsaw.</p>\r\n\r\n<p><strong>Aneta Rawska</strong> - production editor, undergraduate student of Information and Book Studies at Warsaw University, fan of pastries and good cuisine. Since 2009 she has been administering the portal of PZW (Polish Angling Association) group no. 21 in Wo\u0142omin.</p>", + "left_column_de": "<p><strong>Magdalena Biernat</strong> - Projektkoordinator, Verwaltungsleiterin der Stiftung Modernes Polen. Soziologin, Absolventin der Universit\u00e4t Warschau und der Universit\u00e9 libre de Bruxelles. Spezialistin f\u00fcr Internetprojekte. Sie hat die Projekte Kandydaci 2009 (Kandidaten 2009) und Mam Prawo Wiedzie\u00e6 (Ich habe Recht zu wissen) in Verein 61 (Stowarzyszenie 61) koordiniert. Sie hat an vielen Gesellschaftsstudien gearbeitet, die von Nichtregierungsorganisationen und Forschungsanstalten durchgef\u00fchrt wurden. </p>\r\n\r\n<p><strong>Rados\u0142aw Czajka</strong> - Hauptprogrammierer, studierte Informatik an der Fakult\u00e4t f\u00fcr Mathematik, Informatik und Maschinen an der Universit\u00e4t Warschau. Gewandt in Programmierersprachen und Datenbanken: Python, XHTML, Javascript, CSS, LaTeX, SQL. Er besitz Erfahrung in Frameworks: Django, Jquery, den Transformationen XML-Dateien (XSLT), der Herstellung von E-books in PDF und EPUB und Generierung von Mobilanwendungen f\u00fcr das Android- und iOS-System.</p>\r\n\r\n<p><strong>Marcin Koziej </strong> - Programmierer, Absolvent der Technischen Universit\u00e4t Warschau und Doktorand im Institut f\u00fcr Philosophie an Universit\u00e4t. T\u00e4tig im Konsumverein von Mokot\u00f3w (Mokotowska Kooperatywa Spo\u017cywcza). Reisender und Radfahrer. Homo ludens.</p>\r\n\r\n<p><strong>Marta Niedzia\u0142kowska</strong> - Textbearbeiterin, Absolventin der Wissenschaftsinformation und Bibliothekwissenschaft an der Universit\u00e4t Warschau. Masterstudium: Collegium Civitas, Fakult\u00e4t: Public Policy and Administration. </p>\r\n\r\n", + "title_uk": "\ufeff\u041a\u043e\u043c\u0430\u043d\u0434\u0430", + "right_column_it": "<p><strong>Dorota A. Kowalska</strong> \u2013 redattrice letteraria, linguista, ha studiato lingua e letteratura polacca e slava, ha conseguito il dottorato in discipline umanistiche, inoltre \u00e8 docente presso Pracownia Polszczyzny Kresowej IJP PAN, dove \u00e8 esperta di storia e contemporaneit\u00e0 della lingua polacca in Ucraina. Nel tempo libero canta canzoni arcaiche ucraine e russe, ed \u00e8 una ciclista.</p>\r\n\r\n<p><strong>Aleksandra Seku\u0142a</strong> \u2013 redattrice letteraria, storica della letteratura, ha conseguito il dottorato in discipline umanistiche, laureata in lingua e letteratura polacca presso l\u2019Universit\u00e0 di Varsavia e di Szko\u0142a Nauk Spo\u0142ecznych (Scuola delle Scienze Sociali) presso IFiS PAN.In ambito professionale si occupa del romanticismo polacco, della storia dell'idea e della teoria della cultura</p>\r\n\r\n<p><strong>Pawe\u0142 Kozio\u0142</strong> \u2013 redattore letterario. Nato nel 1979, dottore di ricerca in discipline umanistiche specializzato in letteratura antica, laureato in lingua e letteratura polacca presso l\u2019Universit\u00e0 di Varsavia e del Dulwich College di Londra.E' poeta, critico letterario e borsista del Ministero della Cultura e del Patrimonio Nazionale (2010).</p>\r\n\r\n<p><strong>Paulina Choroma\u0144ska</strong> \u2013 redattrice tecnica, studentessa del secondo anno dell\u2019Istituto di Informazione Scientifica e Biblioteconomia dell\u2019Universit\u00e0 di Varsavia. Lavora anche nel Laboratorio di Documentazione del Teatro presso l\u2019Istituto Teatrale im. Z. Raszewskiego a Varsavia.</p>\r\n\r\n<p><strong>Aneta Rawska</strong> \u2013 redattrice tecnica, studentessa del secondo anno dell\u2019Istituto di Informazione Scientifica e Biblioteconomia dell\u2019Universit\u00e0 di Varsavia, appassionata di cucina e dolci. Dal 2009 gestisce il circolo PZW nr 21 a Wo\u0142omin.</p>\r\n\r\n", + "title_pl": "Zesp\u00f3\u0142", + "left_column": "<p><strong>Magdalena Biernat</strong> - Project Coordinator, Managing Director of the Modern Poland Foundation. She is a sociologist, graduate of Warsaw University and L'Universit\u00e9 libre de Bruxelles, and a web-based project specialist. She coordinated projects \"Kandydaci 2009\" and \"Mam Prawo Wiedzie\u0107\" in Stowarzyszenie 61. She has been working on social research carried out by non-governmental organizations and research companies.</p>\r\n\r\n<p><strong>Rados\u0142aw Czajka</strong> - chief programmer, he studied informatics at the Faculty of Mathematics, Informatics and Mechanics, Warsaw University. Proficient in programming languages, Python, XHTML, Javascript, CSS, LaTeX, SQL markup. He has experience in working with Django framework, Jquery, converting XML (XSLT) documents, creating e-books in PDF and EPUB formats and creating mobile applications for Android and iOS systems.</p>\r\n\r\n<p><strong>Marcin Koziej </strong> - programmer. He is an indefatigable enthusiast of philosophy, IT specialist, traveller, cyclist and reveller. Homo Ludens.</p>\r\n\r\n<p><strong>Marta Niedzia\u0142kowska</strong> - production editor, graduate of the Information and Book Studies at Warsaw University. She is an undergraduate student of Public Policy and Administration at Collegium Civitas in Warsaw.</p>", + "right_column_uk": "\ufeff<p><strong>\u0414\u043e\u0440\u043e\u0442\u0430 \u0410. \u041a\u043e\u0432\u0430\u043b\u044c\u0441\u044c\u043a\u0430</strong> \u2013 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u043c\u043e\u0432\u043e\u0437\u043d\u0430\u0432\u0435\u0446\u044c, \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u0438\u0439 \u0444\u0456\u043b\u043e\u043b\u043e\u0433 \u0442\u0430 \u0441\u043b\u0430\u0432\u0456\u0441\u0442, \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u0433\u0443\u043c\u0430\u043d\u0456\u0442\u0430\u0440\u043d\u0438\u0445 \u043d\u0430\u0443\u043a, \u0430\u0434'\u044e\u043d\u043a\u0442 \u0443 \u0412\u0456\u0434\u0434\u0456\u043b\u0456 \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u043c\u043e\u0432\u0438 \u041a\u0440\u0435\u0441\u0456\u0432 \u0432 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u043c\u043e\u0432\u0438 \u0432 \u041f\u043e\u043b\u044c\u0441\u044c\u043a\u0456\u0439 \u0410\u043a\u0430\u0434\u0435\u043c\u0456\u0457 \u041d\u0430\u0443\u043a, \u0434\u0435 \u0437\u0430\u0439\u043c\u0430\u0454\u0442\u044c\u0441\u044f \u0456\u0441\u0442\u043e\u0440\u0456\u0454\u044e \u0442\u0430 \u0441\u0443\u0447\u0430\u0441\u043d\u0456\u0441\u0442\u044e \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u043c\u043e\u0432\u0438 \u0432 \u0423\u043a\u0440\u0430\u0457\u043d\u0456. \u0407\u0457 \u0445\u043e\u0431\u0456 - \u0441\u043f\u0456\u0432\u0430\u0442\u0438 \u0430\u0440\u0445\u0430\u0457\u0447\u043d\u0456 \u0443\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0456 \u0442\u0430 \u0440\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u0456 \u043f\u0456\u0441\u043d\u0456; \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0438\u0441\u0442\u043a\u0430.</p>\r\n\r\n<p><strong>\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u0421\u0435\u043a\u0443\u043b\u0430</strong> \u2013 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0456\u0441\u0442\u043e\u0440\u0438\u043a \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0438, \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u0433\u0443\u043c\u0430\u043d\u0456\u0442\u0430\u0440\u043d\u0438\u0445 \u043d\u0430\u0443\u043a, \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u044f \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0443 \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u0444\u0456\u043b\u043e\u043b\u043e\u0433\u0456\u0457 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u0442\u0430 \u0428\u043a\u043e\u043b\u0438 \u0421\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u0438\u0445 \u041d\u0430\u0443\u043a \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0443 \u0444\u0456\u043b\u043e\u0441\u043e\u0444\u0456\u0457 \u0442\u0430 \u0441\u043e\u0446\u0456\u043e\u043b\u043e\u0433\u0456\u0457 \u041f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u0430\u043a\u0430\u0434\u0435\u043c\u0456\u0457 \u043d\u0430\u0443\u043a. \u041f\u0440\u043e\u0444\u0435\u0441\u0456\u0439\u043d\u043e \u0442\u0430 \u043d\u0430\u0443\u043a\u043e\u0432\u043e \u0437\u0430\u0439\u043c\u0430\u0454\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u044c\u0441\u044c\u043a\u0438\u043c \u0440\u043e\u043c\u0430\u043d\u0442\u0438\u0437\u043c\u043e\u043c, \u0456\u0441\u0442\u043e\u0440\u0456\u0454\u044e \u0456\u0434\u0435\u0457 \u0442\u0430 \u0442\u0435\u043e\u0440\u0456\u0454\u044e \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0438. </p>\r\n\r\n<p><strong>\u041f\u0430\u0432\u0435\u043b \u041a\u043e\u0437\u0456\u043e\u043b </strong>\u2013 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u043d\u0430\u0440\u043e\u0434\u0436\u0435\u043d\u0438\u0439 \u0443 1979, \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u0433\u0443\u043c\u0430\u043d\u0456\u0442\u0430\u0440\u043d\u0438\u0445 \u043d\u0430\u0443\u043a, \u044f\u043a\u0438\u0439 \u0441\u043f\u0435\u0446\u0456\u0430\u043b\u0456\u0437\u0443\u0454\u0442\u044c\u0441\u044f \u0443 \u0434\u0430\u0432\u043d\u0456\u0439 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0456, \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0443 \u041f\u043e\u043b\u043e\u043d\u0456\u0441\u0442\u0438\u043a\u0438 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u0442\u0430 \u0414\u0430\u043b\u0456\u0434\u0436-\u041a\u043e\u043b\u0435\u0434\u0436\u0443 \u0443 \u041b\u043e\u043d\u0434\u043e\u043d\u0456. \u041f\u043e\u0435\u0442, \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0439 \u043a\u0440\u0438\u0442\u0438\u043a, \u0441\u0442\u0438\u043f\u0435\u043d\u0434\u0438\u0441\u0442 \u041c\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0438 \u0442\u0430 \u043d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0457 \u0441\u043f\u0430\u0434\u0449\u0438\u043d\u0438 (2010). </p>\r\n\r\n<p><strong>\u041f\u0430\u0443\u043b\u0456\u043d\u0430 \u0425\u043e\u0440\u043e\u043c\u0430\u043d\u0441\u044c\u043a\u0430</strong> \u2013 \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 \u0406\u0406 \u043a\u0443\u0440\u0441\u0443 \u043c\u0430\u0433\u0456\u0441\u0442\u0440\u0430\u0442\u0443\u0440\u0438 \u0432 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u043d\u0430\u0443\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0442\u0430 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u0437\u043d\u0430\u0432\u0441\u0442\u0432\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. \u041f\u0440\u0430\u0446\u044e\u0454 \u0442\u0430\u043a\u043e\u0436 \u0443 \u0412\u0456\u0434\u0434\u0456\u043b\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0456\u0457 \u0442\u0435\u0430\u0442\u0440\u0443 \u0432 \u0422\u0435\u0430\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u0456\u043c. \u0417. \u0420\u0430\u0448\u0435\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0443 \u0412\u0430\u0440\u0448\u0430\u0432\u0456.</p>\r\n\r\n<p><strong>\u0410\u043d\u0435\u0442\u0430 \u0420\u0430\u0432\u0441\u044c\u043a\u0430</strong> - \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 \u0406\u0406 \u043a\u0443\u0440\u0441\u0443 \u043c\u0430\u0433\u0456\u0441\u0442\u0440\u0430\u0442\u0443\u0440\u0438 \u0432 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0456 \u043d\u0430\u0443\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0442\u0430 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u0437\u043d\u0430\u0432\u0441\u0442\u0432\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443, \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u043a\u0430 \u0432\u0438\u043f\u0456\u0447\u043a\u0438 \u0442\u0430 \u0434\u043e\u0431\u0440\u043e\u0457 \u043a\u0443\u0445\u043d\u0456. \u0417 2009 \u0440\u043e\u043a\u0443 \u0437\u0430\u0439\u043c\u0430\u0454\u0442\u044c\u0441\u044f \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043d\u043e\u044e \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u043e\u044e \u0433\u0443\u0440\u0442\u043a\u0430 \u041f\u043e\u043b\u044c\u0441\u044c\u043a\u043e\u0457 \u0441\u043f\u0456\u043b\u043a\u0438 \u0440\u0438\u0431\u0430\u043b\u043e\u043a \u2116 21 \u0443 \u0412\u043e\u043b\u043e\u043c\u0456\u043d\u0456.</p>\r\n", + "title_en": "The team", + "left_column_pl": "<p><strong>Magdalena Biernat</strong> \u2013 koordynatorka projektu, dyrektor zarz\u0105dzaj\u0105ca fundacji Nowoczesna Polska. Socjolo\u017cka, absolwentka Uniwersytetu Warszawskiego i L\u2019Universit\u00e9 libre de Bruxelles. Specjalistka od projekt\u00f3w internetowych. Koordynowa\u0142a projekty Kandydaci 2009 i Mam Prawo Wiedzie\u0107 w Stowarzyszeniu 61. Pracowa\u0142a przy wielu badaniach spo\u0142ecznych realizowanych przez organizacje pozarz\u0105dowe i firmy badawcze. </p>\r\n\r\n<p><strong>Rados\u0142aw Czajka</strong> \u2013 g\u0142\u00f3wny programista, studiowa\u0142 informatyk\u0119 na MIMUW. Bieg\u0142y w j\u0119zykach programowania, znacznik\u00f3w: Python, XHTML, Javascript, CSS, LaTeX, SQL. Posiada do\u015bwiadczenie z frameworkami Django, Jquery, do\u015bwiadczenie w przekszta\u0142ceniach dokument\u00f3w XML (XSLT), w produkcji ebook\u00f3w w formatach PDF i EPUB oraz w tworzeniu aplikacji mobilnych na system Android i iOS.</p>\r\n\r\n<p><strong>Marcin Koziej </strong>\u2013 programista. Absolwent Politechniki Warszawskiej i doktorant w Instytucie Filozofii Uniwersytetu Warszawskiego. Dzia\u0142acz Mokotowskiej Kooperatywy Spo\u017cywczej. Podr\u00f3\u017cnik, rowerzysta i biesiadnik. Homo ludens.</p>\r\n\r\n<p><strong>Marta Niedzia\u0142kowska</strong> \u2013 redaktorka techniczna, absolwentka bibliotekoznawstwa i informacji naukowej UW. Studentka studi\u00f3w magisterskich Public Policy and Administration na Collegium Civitas. </p>\r\n\r\n", + "left_column_it": "<p><strong>Magdalena Biernat</strong> \u2013 coordinatrice del progetto, direttrice della fondazione Polonia Moderna. Si \u00e8 laureata in sociologia presso l\u2019Universit\u00e0 di Varsavia e L\u2019Universit\u00e9 libre de Bruxelles.Esperto di web design, ha coordinato i progetti Candidati 2009 e Ho Diritto di Sapere in Associazione 61. Ha lavorato su molte ricerche sociali svolte dalle organizzazioni non governative e di ricerca.</p>\r\n\r\n<p><strong>Rados\u0142aw Czajka</strong> \u2013 programmatore principale, ha studiato informatica al MIMUW (Dipartimento di Matematica, Informatica e Meccanica dell\u2019Universit\u00e0 di Varsavia). Conosce bene i linguaggi di programmazione, tag: Python, XHTML, Javascript, CSS, LaTeX, SQL. Ha esperienza con framework Django, Jquery, nella trasformazione di documenti XML (XSLT), nella produzione di e-books in formato PDF e EPUB e nella creazione di applicazioni mobili per il sistema Android e iOS.</p>\r\n\r\n<p><strong>Marcin Koziej</strong> \u2013 programmatore. Laureato presso Politechnika Warszawska (Universit\u00e0 della Tecnologia di Varsavia), ha conseguito il dottorato di ricerca presso l\u2019Istituto di Filosofia dell\u2019Universit\u00e0 di Varsavia. Attivista di Mokotowska Kooperatywa Spo\u017cywcza.E' inoltre viaggiatore, ciclista e homo ludens.</p>\r\n\r\n<p><strong>Marta Niedzia\u0142kowska</strong> \u2013 redattrice tecnica, laureata all\u2019Istituto di Informazione Scientifica e Biblioteconomia dell\u2019Universit\u00e0 di Varsavia. Studentessa di Public Policy and Administration in Collegium Civitas.</p>\r\n\r\n\r\n", + "title_es": "El equipo", + "left_column_ru": "\ufeff<p><strong>\u041c\u0430\u0433\u0434\u0430\u043b\u0435\u043d\u0430 \u0411\u0435\u0440\u043d\u0430\u0442</strong> \u2013 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440 \u0424\u043e\u043d\u0434\u0430 Nowoczesna Polska. \u0421\u043e\u0446\u0438\u043e\u043b\u043e\u0433, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u0430 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \u0438 L\u2019Universit\u00e9 libre de Bruxelles. \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. \u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u00ab\u041a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u044b 2009\u00bb \u0438 \u00ab\u0423 \u043c\u0435\u043d\u044f \u043f\u0440\u0430\u0432\u043e \u0437\u043d\u0430\u0442\u044c\u00bb \u0432 \u041e\u0431\u0449\u0435\u0441\u0442\u0432\u0435 61. \u0420\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043d\u0430\u0434 \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u0438 \u043e\u043f\u0440\u043e\u0441\u043d\u044b\u043c\u0438 \u0444\u0438\u0440\u043c\u0430\u043c\u0438. </p>\r\n\r\n<p><strong>\u0420\u0430\u0434\u043e\u0441\u043b\u0430\u0432 \u0427\u0430\u0439\u043a\u0430</strong> \u2013 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a\u0438 \u0432 \u041c\u0418\u041c\u0412\u0423. \u0411\u0435\u0433\u043b\u043e \u0437\u043d\u0430\u0435\u0442 \u044f\u0437\u044b\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: Python, XHTML, Javascript, CSS, LaTeX, SQL. \u0418\u043c\u0435\u0435\u0442 \u043e\u043f\u044b\u0442 \u0441 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c\u0438 \u0442\u0438\u043f\u0430: Django, Jquery; \u043e\u043f\u044b\u0442 \u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 XML (XSLT), \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 PDF \u0438 EPUB, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 Android \u0438 Ios.</p>\r\n\r\n<p><strong>\u041c\u0430\u0440\u0447\u0438\u043d \u041a\u043e\u0437\u0435\u0439 </strong>\u2013 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442. \u0412\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u041f\u043e\u043b\u0438\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0430 \u0438 \u0434\u043e\u043a\u0442\u043e\u0440\u0430\u043d\u0442 \u0432 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0435 \u0424\u0438\u043b\u043e\u0441\u043e\u0444\u0438\u0438 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u043a\u043e\u0433\u043e \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430. \u0414\u0435\u044f\u0442\u0435\u043b\u044c \u041c\u043e\u043a\u043e\u0442\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u0430. \u041f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a, \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0438\u0441\u0442 \u0438 \u043f\u0438\u0440\u0443\u044e\u0449\u0438\u0439. Homo ludens.</p>\r\n\r\n<p><strong>\u041c\u0430\u0440\u0442\u0430 \u041d\u0435\u0434\u044f\u043b\u043a\u043e\u0432\u0441\u043a\u0430 </strong> \u2013 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u0430 \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u0443\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0412\u0423. \u0421\u0442\u0443\u0434\u0435\u043d\u0442\u043a\u0430 Public Policy and Administration \u0432 Collegium Civitas. </p>\r\n\r\n", + "slug": "zespol", + "right_column_de": "<p><strong>Dorota A. Kowalska</strong> - Bearbeiterin im Literaturbereich, Sprachwissenschaftlerin, Polonistin und Slavistin, Doktortitel in Geisteswissenschaften, Mitarbeiterin in Pracownia Polszczyzny Kresowej IJP PAN, wo sie sich mit der Geschichte und dem heutigen Stand der polnischen Sprache in der Ukraine besch\u00e4ftigt. Sein Steckenpferd ist das Singen von alten russischen und ukrainischen Liedern. Radfahrerin.</p>\r\n\r\n<p><strong>Aleksandra Seku\u0142a</strong> - Bearbeiterin im Literaturbereich, Literaturgeschichtsforscherin, Doktortitel in Geisteswissenschaften, Absolventin der Polonistik an der Universit\u00e4t Warschau und der Gesellschaftswissenschaftsschule bei IFiS PAN. Beruflich und wissenschaftlich befasst sie sich mit der polnischen Romantik, Ideengeschichte und Kulturtheorie. </p>\r\n \r\n<p><strong>Pawe\u0142 Kozio\u0142 </strong> - Bearbeiter im Literaturbereich. 1979 geboren, Doktortitel in Geisteswissenschaften, Spezialisierung f\u00fcr die alte Literatur, Absolvent der Polonistik an der Universit\u00e4t Warschau und des Dulwich Colleges in London. Dichter, Literaturkritiker, Stipendiat des Ministeriums f\u00fcr Kultur und Nationale Erbe (2010). </p>\r\n\r\n<p><strong>Paulina Choroma\u0144ska</strong> - Textbearbeiterin, Studentin im 4. Semester des Masterstudiums im Insitut f\u00fcr Wissenschaftsinformation und Bibliothekwissenschaft an der Universit\u00e4t Warschau. Sie arbeitet auch in der Forschungsst\u00e4tte f\u00fcr Theaterdokumentation im Zbigniew-Raszewski-Theaterinsitut in Warschau.</p>\r\n\r\n<p><strong>Aneta Rawska</strong> - Textbearbeiterin, Studentin im 4. Semester des Masterstudiums im Insitut f\u00fcr Wissenschaftsinformation und Bibliothekwissenschaft. Sie mag gute K\u00fcche und ist Backenliebhaberin. Ab 2009 f\u00fchrt sie den Service des Polnischen Anglervereins Nr. 21 in Wo\u0142omin.</p>\r\n", + "left_column_es": "<p><strong>Magdalena Biernat</strong> \u2013 la coordinadora del proyecto, directora ejecutiva de la Fundaci\u00f3n Polonia Moderna. Soci\u00f3loga, licenciada por la Universidad de Varsovia y de L\u2019Universit\u00e9 libre de Bruxelles. Especializada en proyectos de Internet. Coordin\u00f3 los proyectos \u2018Candidatos 2009\u2019 y \u2018Tengo el Derecho de Saber\u2019 en la Asociaci\u00f3n 61. Ha trabajado en varias investigaciones sociales realizadas por organizaciones no gubernamentales y empresas investigadoras.</p>\r\n\r\n<p><strong>Rados\u0142aw Czajka</strong> \u2013 programador principal. Estudi\u00f3 inform\u00e1tica en MIM UW (La Facultad de Matem\u00e1ticas, Inform\u00e1tica y Mec\u00e1nica de la Universidad de Varsovia). Conoce los lenguajes de programaci\u00f3n y los marcados: Python, XHTML, Javascript, CSS, LaTex, SQL. Tiene experiencia en los frameworks Django, Jquery; en la transformaci\u00f3n de los archivos XML (XSLT), en la producci\u00f3n de libros electr\u00f3nicos en los formatos PDF y EPUB, incluso tambi\u00e9n en la creaci\u00f3n de aplicaciones m\u00f3viles para los sistema Android e iOS.</p>\r\n\r\n<p><strong>Marcin Koziej </strong> \u2013 programador. El incansable amateur de filosof\u00eda, inform\u00e1tico, viajero, ciclista y juerguista. Homo ludens.</p>\r\n\r\n<p><strong>Marta Niedzia\u0142kowska</strong> \u2013 redactora t\u00e9cnica, licenciada en Ciencias de la Informaci\u00f3n y Bibliotecolog\u00eda de la Universidad de Varsovia. Estudiante de segundo curso de licenciatura de Public Policy and Administration en el Collegium Civitas. </p>\r\n", + "left_column_en": "<p><strong>Magdalena Biernat</strong> - Project Coordinator, Managing Director of the Modern Poland Foundation. She is a sociologist, graduate of Warsaw University and L'Universit\u00e9 libre de Bruxelles, and a web-based project specialist. She coordinated projects \"Kandydaci 2009\" and \"Mam Prawo Wiedzie\u0107\" in Stowarzyszenie 61. She has been working on social research carried out by non-governmental organizations and research companies.</p>\r\n\r\n<p><strong>Rados\u0142aw Czajka</strong> - chief programmer, he studied informatics at the Faculty of Mathematics, Informatics and Mechanics, Warsaw University. Proficient in programming languages, Python, XHTML, Javascript, CSS, LaTeX, SQL markup. He has experience in working with Django framework, Jquery, converting XML (XSLT) documents, creating e-books in PDF and EPUB formats and creating mobile applications for Android and iOS systems.</p>\r\n\r\n<p><strong>Marcin Koziej </strong> - programmer. He is an indefatigable enthusiast of philosophy, IT specialist, traveller, cyclist and reveller. Homo Ludens.</p>\r\n\r\n<p><strong>Marta Niedzia\u0142kowska</strong> - production editor, graduate of the Information and Book Studies at Warsaw University. She is an undergraduate student of Public Policy and Administration at Collegium Civitas in Warsaw.</p>", + "right_column_fr": "<p><strong>Dorota A. Kowalska</strong> \u2013 r\u00e9dactrice litt\u00e9raire, linguiste, poloniste et slaviste, docteure en Lettres, conf\u00e9renci\u00e8re dans le Laboratoire de la Langue polonaise des Confins de l'INP PAN (l'Institut de la Langue polonaise de l'Acad\u00e9mie polonaise des Sciences) o\u00f9 elle s'occupe de l'histoire et contemporan\u00e9it\u00e9 de la langue polonaise en Ukraine. Pour son plaisir, elle chante des chansons archa\u00efque ukrainiennes et russes. Elle est aussi cycliste.</p>\r\n\r\n<p><strong>Aleksandra Seku\u0142a</strong> \u2013 r\u00e9dactrice litt\u00e9raire, historienne de la litt\u00e9rature, docteur \u00e8s lettres, gradu\u00e9e en D\u00e9partement de Langue polonaise de l'Universit\u00e9 de Varsovie et en \u00c9cole des Sciences Sociales de IFiS PAN (l'Institut de Philosophie et Sociologie de l'Acad\u00e9mie polonaise des Sciences). Professionnellement, elle s'occupe du romantisme polonais, histoire des id\u00e9es et th\u00e9orie de la culture.</p>\r\n\r\n<p><strong>Pawe\u0142 Kozio\u0142 </strong> \u2013 r\u00e9dacteur litt\u00e9raire, n\u00e9 en 1979, docteur en Lettres qui se sp\u00e9cialise en litt\u00e9rature ancienne, gradu\u00e9 en D\u00e9partement de Langue polonaise de l'Universit\u00e9 de Varsovie et en Dulwich College \u00e0 Londres. Il est aussi po\u00e8te, critique litt\u00e9raire, boursier du Minist\u00e8re de la Culture et du Patrimoine national (2010). </p>\r\n\r\n<p><strong>Paulina Choroma\u0144ska</strong> \u2013 r\u00e9dactrice technique, \u00e9tudiante de la deuxi\u00e8me ann\u00e9e d'\u00e9tudes secondaires Bibliothecologie et Sciences de l'Information de l'Universit\u00e9 de Varsovie. Elle travaille aussi dans le Centre de Documentation de Th\u00e9\u00e2tre de l'Institut th\u00e9\u00e2tral de Z. Raszewski \u00e0 Varsovie.</p>\r\n\r\n<p><strong>Aneta Rawska</strong> - r\u00e9dactrice technique, \u00e9tudiante de la deuxi\u00e8me ann\u00e9e d'\u00e9tudes secondaires en Bibliothecologie et Sciences de l'Information de l'Universit\u00e9 de Varsovie, amateure des fourn\u00e9es et bonne cuisine. Depuis 2009 elle administre le site du cercle 21 de l'Association polonaise de P\u00eache \u00e0 Wo\u0142omin.</p>\r\n", + "title_ru": "\ufeff\u041a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430", + "title_it": "Il nostro staff" + } + }, + { + "pk": 6, + "model": "infopages.infopage", + "fields": { + "title_de": "Arbeite zusammen", + "left_column_uk": "\ufeff<ul>\r\n<li>\u0421\u0442\u0430\u043d\u044c \u043d\u0430\u0448\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442\u043e\u043c \u0430\u0431\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u0430\u0447\u0435\u043c</li>\r\n<li>\u0417\u0434\u043e\u0431\u0443\u0434\u044c \u043d\u043e\u0432\u0456 \u0443\u043c\u0456\u043d\u043d\u044f \u0442\u0430 \u0434\u043e\u0441\u0432\u0456\u0434 </li>\r\n<li>\u0412\u0456\u0437\u044c\u043c\u0438 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0456 \u0442\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0436\u0438 \u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u0456\u043d\u043d\u043e\u0432\u0430\u0446\u0456\u0439\u043d\u0443 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0443 </li>\r\n</ul>\r\n\r\n<p>\u0417\u0430\u043f\u0440\u043e\u0448\u0443\u0454\u043c\u043e \u0443\u0441\u0456\u0445, \u0445\u0442\u043e \u0445\u043e\u0447\u0435 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0443 \u043d\u0430\u0448\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0456. \u0421\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e\u0454\u043c\u043e \u0437\u0456 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c\u0438, \u0432\u0447\u0438\u0442\u0435\u043b\u044f\u043c\u0438 \u0442\u0430 \u0443\u0441\u0456\u043c\u0430, \u0445\u0442\u043e \u0446\u0456\u043a\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043e\u044e, \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f\u043c \u0442\u0435\u043a\u0441\u0442\u0456\u0432 \u0442\u0430 \u043a\u043e\u043c\u043f\u2019\u044e\u0442\u0435\u0440\u043d\u0438\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438. \u041c\u0438 \u043f\u0440\u043e\u043f\u043e\u043d\u0443\u0454\u043c\u043e \u043f\u0440\u043e\u0444\u0435\u0441\u0456\u0439\u043d\u0456 \u0442\u0440\u0435\u043d\u0456\u043d\u0433\u0438 \u0442\u0430 \u043f\u043e\u0441\u0442\u0456\u0439\u043d\u0443 \u0437\u043c\u0456\u0441\u0442\u043e\u0432\u043d\u0443 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0443. \u0412\u043e\u043b\u043e\u043d\u0442\u0435\u0440\u0438 \u043c\u043e\u0436\u0443\u0442\u044c \u043f\u0440\u0430\u0446\u044e\u0432\u0430\u0442\u0438 \u0432 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u043c\u0443 \u0440\u0435\u0436\u0438\u043c\u0456 \u0430\u0431\u043e \u0432 \u043e\u0444\u0456\u0441\u0456 \u0424\u043e\u043d\u0434\u0443.</p>\r\n<p>\u0422\u0430\u043a\u043e\u0436 \u043c\u0438 \u043e\u0440\u0433\u0430\u043d\u0456\u0437\u0443\u0454\u043c\u043e \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0441\u044c\u043a\u0456 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 - \u0440\u043e\u0437\u043f\u043e\u0447\u0430\u043b\u0438 \u0441\u043f\u0456\u0432\u043f\u0440\u0430\u0446\u044e \u0437 \u0406\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u043e\u043c \u043d\u0430\u0443\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0442\u0430 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u0437\u043d\u0430\u0432\u0447\u0438\u0445 \u0434\u043e\u0441\u043b\u0456\u0434\u0436\u0435\u043d\u044c \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443, \u0421\u0442\u0443\u0434\u0435\u043d\u0442\u0441\u044c\u043a\u0438\u043c \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0437\u0430\u0439\u043d\u044f\u0442\u043e\u0441\u0442\u0456 \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443 \u041a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u0430 \u0421\u0442\u0435\u0444\u0430\u043d\u0430 \u0412\u0438\u0448\u0438\u043d\u0441\u044c\u043a\u043e\u0433\u043e \u0442\u0430 \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u043e\u043c \u0424\u0456\u0437\u0438\u043a\u0438 \u0412\u0430\u0440\u0448\u0430\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0443. </p>\r\n\r\n<h3>\u042f\u043a \u0434\u043e \u043d\u0430\u0441 \u043f\u0440\u0438\u0454\u0434\u043d\u0430\u0442\u0438\u0441\u044f?</h3>\r\n<p>\u0423\u0441\u0456\u0445 \u0437\u0430\u0446\u0456\u043a\u0430\u0432\u043b\u0435\u043d\u0438\u0445 \u043f\u0440\u043e\u0441\u0438\u043c\u043e \u0432\u0438\u0441\u043b\u0430\u0442\u0438 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0443 <a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n\r\n\r\n\r\n", + "main_page": 4, + "right_column_pl": "<h3>Kogo szukamy?</h3>\r\n\r\n<h3>Redaktor\u00f3w technicznych (sk\u0142ad tekstu)</h3>\r\n<p>Sk\u0142ad jest pierwszym etapem pracy nad tekstem. Za pomoc\u0105 znacznik\u00f3w j\u0119zyka WL-XML nadajemy tekstowi po\u017c\u0105dan\u0105 form\u0119 i umo\u017cliwiamy wy\u015bwietlenie go na stronie internetowej. Redakcje techniczna dokonywana jest na <a href=\"http://redakcja.wolnelektury.pl\">Platformie Redakcyjnej</a>, kt\u00f3ra pozwala na zautomatyzowanie du\u017cej cz\u0119\u015bci pracy.</p>\r\n\r\n<p><b>Kto mo\u017ce zosta\u0107 redaktorem technicznym?</b></p>\r\n<ul>\r\n<li>Ka\u017cdy \u2013 po kr\u00f3tkim szkoleniu.</li>\r\n</ul>\r\n\r\n<p>Wi\u0119cej informacji o redakcji technicznej znajdziecie na <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\">stronie redakcji Wolnych Lektur</a></p>\r\n\r\n<hr/>\r\n\r\n<h3>Redaktor\u00f3w literackich (merytorycznych)</h3>\r\n<p>Redakcja literacka obejmuje korekt\u0119, uwsp\u00f3\u0142cze\u015bnienia oraz dodawanie przypis\u00f3w i motyw\u00f3w literackich. To unikalna mo\u017cliwo\u015b\u0107 zdobycia do\u015bwiadczenia w cyfrowej edycji tekst\u00f3w.</p>\r\n\r\n<p><b>Kto mo\u017ce zosta\u0107 redaktorem literackim?</b></p>\r\n<ul>\r\n<li>Osoby, kt\u00f3re maj\u0105 do\u015bwiadczenie w redakcji tekst\u00f3w literackich,</li>\r\n<li>Studenci i absolwenci studi\u00f3w humanistycznych, kt\u00f3rzy chc\u0105 takie do\u015bwiadczenie zdoby\u0107.</li>\r\n</ul>\r\n<p>Wi\u0119cej informacji o redakcji merytorycznej znajdziecie na <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\">stronie redakcji Wolnych Lektur</a></p>\r\n<hr/>\r\n\r\n<h3>T\u0142umaczy</h3>\r\n<p>Strona WolneLektury.pl jest dost\u0119pna w siedmiu j\u0119zykach obcych \u2013 angielskim, francuskim, niemieckim, hiszpa\u0144skim, litewskim, rosyjskim oraz ukrai\u0144skim. U\u017cytkownikami biblioteki jest ponad 200 tysi\u0119cy os\u00f3b z zagranicy, a ju\u017c nied\u0142ugo nasze zbiory obejm\u0105 r\u00f3wnie\u017c dzie\u0142a w j\u0119zykach obcych. Dlatego potrzebujemy na bie\u017c\u0105co t\u0142umaczy\u0107 nowe informacje pojawiaj\u0105ce si\u0119 na stronie.</p>\r\n<p><b>Kto mo\u017ce pom\u00f3c w t\u0142umaczeniach?</b></p>\r\n<ul>\r\n<li>Ka\u017cdy, kto dobrze zna co najmniej jeden z powy\u017cszych j\u0119zyk\u00f3w.</li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h3>Programist\u00f3w</h3>\r\n<p>Poza sam\u0105 stron\u0105 Wolnych Lektur tworzymy r\u00f3wnie\u017c:</p>\r\n<ul>\r\n<li>narz\u0119dzia redakcyjne,</li>\r\n<li>konwertery do r\u00f3\u017cnych format\u00f3w e-book\u00f3w,</li>\r\n<li>aplikacje mobile u\u0142atwiaj\u0105ce dost\u0119p do naszych zasob\u00f3w.</li>\r\n</ul>\r\n\r\n<p>U\u017cywamy takich technologii jak: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nTworzone przez nas oprogramowanie udost\u0119pniamy na <a href=\"https://github.com/fnp/\">wolnej licencji</a>.</p>\r\n<p><b>Kto mo\u017ce pom\u00f3c w pracach programistycznych?</b> </p>\r\n<ul>\r\n<li>Ka\u017cdy, kto umie i chcia\u0142by zdoby\u0107 punkty do karmy za udzia\u0142 w otwartym projekcie programistycznym. ;)</li>\r\n</ul>\r\n", + "right_column_lt": "\ufeff<h3>Koki\u0173 \u017emoni\u0173 ie\u0161kome? </h3>\r\n<h3>Technini\u0173 redaktori\u0173 (teksto sudarymas) </h3>\r\n<p>Teksto sudarymas tai pirmas etapas dirbant su tekstu. Naudojant kalbos WL-XML \u017eymes, galima sukurti pageidaujam\u0105 teksto form\u0105 ir parodyti j\u012f interneto svetain\u0117je. Techninis redagavimas yra atliekamas <a href=\"http://redakcja.wolnelektury.pl\"> Redakcin\u0117je Platformoje </a>, leid\u017eiant automatin\u012f darbo atlikim\u0105. </p>\r\n<p><b>Kas gali tapti techniniu redaktoriumi?</b> </p>\r\n<ul>\r\n<li>Kiekvienas, baig\u0119s trump\u0105 mokym\u0105. </li>\r\n</ul>\r\n<p>Papildomos informacijos apie technin\u012f redagavim\u0105\r\n<a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">interneto svetain\u0117s Wolne Lektury redakcijos tinklalapyje. </a> </p>\r\n<hr/>\r\n\r\n<h3>Literat\u016bros redaktori\u0173 (esmini\u0173) </h3>\r\n<p>Literat\u016bros redagavimas apima teksto taisym\u0105, i\u0161na\u0161\u0173 ir motyv\u0173 prid\u0117jim\u0105. Tai unikali galimyb\u0117 \u012fgyti patirties teksto skaitmeninioje leidyboje. </p>\r\n\r\n<p><b>Kas gali tapti literat\u016bros redaktoriumi? </b> </p>\r\n<ul>\r\n<li>Asmenys turintys patirties literat\u016bros tekst\u0173 redagavimo srityje, </li>\r\n<li>Studentai bei absolventai humanitarini\u0173 moksl\u0173 studij\u0173 norinys igyti tokios patirties. </li>\r\n</ul>\r\n<p>Papildomos informacijos apie esmin\u012f redagavim\u0105\r\n<a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">interneto svetain\u0117s Wolne Lektury redakcijos tinklalapyje.</a> </p>\r\n<hr/>\r\n\r\n<h3>Vert\u0117j\u0173</h3>\r\n<p>Interneto svetain\u0117 WolneLektury.pl yra prieinama septyniomis u\u017esienio kalbomis \u2013 angl\u0173, pranc\u016bz\u0173, vokie\u010di\u0173, ispan\u0173, lietuvi\u0173, rus\u0173 bei ukrainie\u010di\u0173. \u0160ios bibliotekos u\u017esienio vartotoj\u0173 kiekis tai 200 t\u016bks., be to m\u016bs\u0173 i\u0161tekliai netrukus apims u\u017esienio kalb\u0173 k\u016brinius. D\u0117l to yra reikalingas \u0161ios interneto svetain\u0117s nauj\u0173 informacij\u0173 nuolatinis vertimas. </p>\r\n<p><b>Kas gali pad\u0117ti versti? </b> </p>\r\n<ul>\r\n<li>Kiekvienas gerai mokantys bent vien\u0105 i\u0161 anks\u010diau i\u0161vardyt\u0173 kalb\u0173. </li>\r\n</ul>\r\n<hr/>\r\n\r\n<h3>Programuotoj\u0173</h3>\r\n<p>I\u0161skyrus interneto svetain\u0119 Wolne Lektury, taip pat kuriame: </p>\r\n<ul>\r\n<li>redagavimo \u012frankius,</li>\r\n<li>\u012fvairi\u0173 format\u0173 e-knyg\u0173 konverterius, </li>\r\n\r\n<li> mobili\u0105sias programas lengvinan\u010dias prieig\u0105 prie m\u016bs\u0173 i\u0161tekli\u0173.</li>\r\n</ul>\r\n<p>Naudojame tokias technologijas kaip: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nM\u016bs\u0173 kuriama programin\u0117 \u012franga yra prieinama pagal <a href=\"https://github.com/fnp/\">laisv\u0105 licencij\u0105</a>. </p>\r\n<p><b>Kas gali pad\u0117ti programavimo darbuose?</b> </p>\r\n<ul>\r\n\r\n<li>Kiekvienas galintis ir norintis \u012fgauti patirties dalyvaudamas programavimo atvirame projekte. ;)</li>\r\n</ul>", + "left_column_lt": "\ufeff<ul>\r\n<li>Tapkite m\u016bs\u0173 redaktoriumi, programuotoju, arba vert\u0117ju</li>\r\n<li>\u012egykite \u012fg\u016bd\u017ei\u0173 ir patirties</li>\r\n<li>Dalyvaukite atvirame projekte ir kurkite naujovi\u0161k\u0105 internetin\u0119 bibliotek\u0105</li>\r\n</ul>\r\n\r\n<p>Kvie\u010diame visus norin\u010dius prisid\u0117ti prie m\u016bs\u0173 projekto. Bendradarbiaujame su studentais, mokytojais ir su visais susidom\u0117jusiais literat\u016bra, teksto redagavimu ir informaciniais projektais. Si\u016blome profesional\u0173 mokym\u0105 ir nuolatin\u0119 esmin\u0119 pagalb\u0105.\r\nSavanoriai gali dirbti nuotoliniu b\u016bdu arba fondo b\u016bstin\u0117je. </p>\r\n<p>Taip pat organizuojame student\u0173 praktikas \u2013 bendradarbiaujame su Var\u0161uvos universiteto Mokslin\u0117s informacijos bei bibliologijos studij\u0173 institutu, Kardinolo Stefano Vi\u0161inskio universiteto Karjer\u0173 skyriumi bei su Var\u0161uvos universiteto Fizikos fakultetu. </p>\r\n\r\n\r\n<h3>Kaip galite prane\u0161ti apie save?</h3>\r\n</h3>Visus susidom\u0117jusius pra\u0161ome ra\u0161yti adresu<a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n", + "title_fr": "Engagez-vous dans le travail", + "right_column_ru": "\ufeff<h3>\u041a\u043e\u0433\u043e \u043c\u044b \u0438\u0449\u0435\u043c?</h3>\r\n\r\n<h3>\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u0432 (\u043d\u0430\u0431\u043e\u0440 \u0442\u0435\u043a\u0441\u0442\u043e\u0432). </h3>\r\n <p>\u041d\u0430\u0431\u043e\u0440 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0434 \u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e WL-XML \u044f\u0437\u044b\u043a\u0430 \u0442\u0435\u043a\u0441\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435. \r\n\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 <a href=\"http://redakcja.wolnelektury.pl\">\u0420\u0435\u0434\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435</a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043d\u0430\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b. </p>\r\n\r\n <p><b>\u041a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c?</b> </p>\r\n<ul>\r\n<li>\u041b\u044e\u0431\u043e\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u2013 \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f.</li>\r\n</ul>\r\n\r\n <p>\u0411\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\"> \u0441\u0430\u0439\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Wolnych Lektur</a> </p>\r\n\r\n<hr/>\r\n\r\n<h3>\u041b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 (\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0430\u043d\u0442) </h3>\r\n <p>\u041b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0430\u044f \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0443\u0440\u0443, \u043e\u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0439 \u0438 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0442\u0438\u0432\u043e\u0432. \r\n\u042d\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u043e\u043f\u044b\u0442 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432.</p>\r\n\r\n <p><b>\u041a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c? </b> </p>\r\n<ul>\r\n<li>\u041b\u0438\u0446\u0430, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u044b\u0442 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439.</li>\r\n<li>\u0421\u0442\u0443\u0434\u0435\u043d\u0442\u044b \u0438 \u0430\u0431\u0438\u0442\u0443\u0440\u0438\u0435\u043d\u0442\u044b \u0433\u0443\u043c\u0430\u043d\u0438\u0442\u0430\u0440\u043d\u044b\u0445 \u0443\u0447\u0435\u0431\u043d\u044b\u0445 \u0437\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u044f\u0442 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u0442\u0430\u043a\u043e\u0439 \u043e\u043f\u044b\u0442. </li>\r\n</ul>\r\n<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u0441\u0447\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">\u0441\u0430\u0439\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Wolnych Lektur</a> </p>\r\n<hr/>\r\n\r\n<h3>\u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u043e\u0432</h3>\r\n <p>\u0421\u0430\u0439\u0442 WolneLektury.pl \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043d\u0430 7 \u0438\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u2013 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c, \u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u043e\u043c, \u043d\u0435\u043c\u0435\u0446\u043a\u043e\u043c, \u0438\u0441\u043f\u0430\u043d\u0441\u043a\u043e\u043c, \u043b\u0438\u0442\u043e\u0432\u0441\u043a\u043e\u043c, \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u0438 \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u043e\u043c. \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 200 \u0442\u044b\u0441\u044f\u0447 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0438\u0437 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b. \u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043a\u043d\u0438\u0436\u043d\u044b\u0439 \u0444\u043e\u043d\u0434 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u0442 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u0430 \u0438\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445. \r\n\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0449\u0435\u0439\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. </p>\r\n <p><b>\u041a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044b?</b> </p>\r\n<ul>\r\n<li>\u041a\u0430\u0436\u0434\u044b\u0439, \u043a\u0442\u043e \u0437\u043d\u0430\u0435\u0442 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u044b\u0448\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432. </li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h3>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b.</h3>\r\n <p>\u041a\u0440\u043e\u043c\u0435 \u0441\u0430\u0439\u0442\u0430 Woln\u0435Lektur\u0443 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0430\u043a\u0436\u0435: </p>\r\n<ul>\r\n<li>narz\u0119dzia redakcyjne,</li>\r\n<li>\u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 \u0430\u0443\u0434\u0438\u043e\u043a\u043d\u0438\u0433</li>\r\n<li>\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0449\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0444\u043e\u043d\u0434\u0443.</li>\r\n</ul>\r\n\r\n <p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e: : Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\n\u0421\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0435 \u043d\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043f\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 <a href=\"https://github.com/fnp/\">\u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438</a>. </p>\r\n <p><b>\u041a\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c?</b> </p>\r\n<ul>\r\n<li>\u041a\u0430\u0436\u0434\u044b\u0439, \u043a\u0442\u043e \u0437\u043d\u0430\u0435\u0442 \u043a\u0430\u043a, \u0438 \u043a\u0442\u043e \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u00ab\u043d\u0430\u0431\u0440\u0430\u0442\u044c \u043e\u0447\u043a\u043e\u0432\u00bb \u0432 \u0441\u0432\u043e\u044e \u00ab\u043a\u0430\u0440\u043c\u0443\u00bb \u0434\u043b\u044f \u0432\u0430\u0441 \u043e\u0442\u043a\u0440\u044b\u0442 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442. ;)</li>\r\n</ul>\r\n", + "left_column_fr": "<ul>\r\n<li>Devenez notre r\u00e9dacteur, programmeur ou traducteur!</li>\r\n<li>Acqu\u00e9rez de nouvelles comp\u00e9tences et exp\u00e9rience!</li>\r\n<li>Prenez part \u00e0 un projet ouvert et cr\u00e9ez une biblioth\u00e8que en ligne innovative!</li>\r\n</ul>\r\n\r\n<p>Nous invitons toutes les personnes qui sont int\u00e9ress\u00e9es par la participation \u00e0 notre projet. Nous coop\u00e9rons avec les \u00e9tudiants, professeurs et tous ceux qui s'int\u00e9ressent \u00e0 la litt\u00e9rature, \u00e0 la r\u00e9daction de textes ou aux projets informatiques. Nous offrons des instructions professionnelles et une aide substantielle constante. Les b\u00e9n\u00e9voles peuvent travailler chez eux ou bien dans le si\u00e8ge de la fondation.</p>\r\n<p>Nous organisons aussi des stages \u00e9tudiants - nous coop\u00e9rons avec l'Institut d'Information Scientifique et d'\u00c9tudes Bibliologiques de l'Universit\u00e9 de Varsovie, le Bureau des Carri\u00e8res de l'Universit\u00e9 Cardinal Stefan Wyszy\u0144ski \u00e0 Varsovie et la Facult\u00e9 de Physique de l'Universit\u00e9 de Varsovie. </p>\r\n\r\n<h3>Comment nous contacter?</h3>\r\n<p>Si vous \u00eates int\u00e9ress\u00e9s par notre projet, veuillez nous envoyer un courriel \u00e0 l'adresse suivante: <a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n", + "title": "Join in the work", + "title_lt": "Dalyvaukite projekte", + "right_column": "<h3>Who are we looking for?</h3>\r\n\r\n<h3>Production editors (text composition) </h3>\r\n <p>Text composition is the first stage in editing. By means of WL-XML markup we create a desired text format and display it on the webpage. Production editing takes place on <a href=\"http://redakcja.wolnelektury.pl\">Editorial Platform</a>, which enables us to automate a great deal of work. </p>\r\n\r\n <p><b>Who can become a production editor?</b> </p>\r\n<ul>\r\n<li>Anyone - after a short training.</li>\r\n</ul>\r\n\r\n <p>You will find more information on production editing on <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">editorial page of Wolne Lektury</a> </p>\r\n\r\n<hr/>\r\n\r\n<h3>Literary editors </h3>\r\n <p>Literary editing includes proofreading, updating and adding literary motifs. It is a unique opportunity to gain experience in digital text editing. </p>\r\n\r\n <p><b>Who can become a literary editor? </b> </p>\r\n<ul>\r\n<li>Those who have experience in literary text editing,</li>\r\n<li>Students and graduates of the humanities, who wants to gain such experience. </li>\r\n</ul>\r\n<p>You will find more information on literary editing on <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">editorial page of Wolne Lektury</a> </p>\r\n<hr/>\r\n\r\n<h3>Translators</h3>\r\n <p>WolneLektury.pl is available in 7 languages - English, French, German, Spanish, Lithuanian, Russian, and Ukrainian. The library is used by over 200 000 readers outside of Poland, and soon our collection will also include books written in foreign (non-Polish) languages. That is why we need to translate new pieces of information systematically, as they appear on the website. </p>\r\n <p><b>Who can help us translate? </b> </p>\r\n<ul>\r\n<li>Anyone with a good command of at least one of the languages listed above. </li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h3>Programmers</h3>\r\n <p>Apart from the website Wolne Lektury we also create: </p>\r\n<ul>\r\n<li>editorial tools,</li>\r\n<li>converters for various e-book formats, </li>\r\n<li>mobile applications facilitating access to our pages.</li>\r\n</ul>\r\n\r\n <p>We use technologies like: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nOur software is made available under <a href=\"https://github.com/fnp/\">the free license</a>. </p>\r\n <p><b>Who can help us with the programming?</b> </p>\r\n<ul>\r\n<li>Those who can do it and would like to gain experience by participating in an open programming project.</li>", + "right_column_es": "\ufeff<h3>\u00bfA qui\u00e9n buscamos?</h3>\r\n\r\n\r\n<h3>Redactores t\u00e9cnicos (composici\u00f3n tipogr\u00e1fica)</h3>\r\n <p>La composici\u00f3n tipogr\u00e1fica es la primera etapa del trabajo con el texto. Por medio de los marcados del idioma WL-XML le damos la forma deseada al texto y facilitamos su visualizaci\u00f3n en la p\u00e1gina web. La redacci\u00f3n t\u00e9cnica est\u00e1 realizada en <a href=\"http://redakcja.wolnelektury.pl\">la Plataforma Editorial</a>, que permite automatizar una gran parte del trabajo.</p>\r\n\r\n<p><b>\u00bfQui\u00e9n puede ser redactor t\u00e9cnico?</b> </p>\r\n<ul>\r\n<li>Cualquiera- despu\u00e9s de una breve formaci\u00f3n.</li>\r\n</ul>\r\n\r\n <p>Encontrar\u00e9is m\u00e1s informaci\u00f3n sobre la redacci\u00f3n t\u00e9cnica en <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\">la p\u00e1gina web de Wolne Lektury</a> </p>\r\n\r\n<hr/>\r\n\r\n<h3>Redactores literarios </h3>\r\n <p>La redacci\u00f3n literaria incluye la correcci\u00f3n de pruebas, adaptaci\u00f3n e inclusi\u00f3n de las notas a pie de p\u00e1gina , as\u00ed como el tratamiento de los temas literarios. Es una oportunidad \u00fanica de ganar experiencia en la edici\u00f3n digital de textos. </p>\r\n\r\n <p><b>\u00bfQui\u00e9n puede ser redactor literario? </b> </p>\r\n<ul>\r\n<li>Las personas que tengan experiencia en la redacci\u00f3n de textos literarios,</li>\r\n<li>estudiantes y licenciados en humanidades que desean obtener esta experiencia. </li>\r\n</ul>\r\n\r\n<p>Encontrar\u00e9is m\u00e1s informaci\u00f3n sobre la redacci\u00f3n literaria en <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">la p\u00e1gina web de Wolne Lektury</a> </p>\r\n\r\n<h3>Traductores</h3>\r\n<p>La p\u00e1gina web de Wolne Lektury.pl viene en 7 idiomas: ingl\u00e9s, franc\u00e9s, alem\u00e1n, espa\u00f1ol, lituano, ruso y ucraniano. Hay m\u00e1s de 200.000 usuarios del extranjero, adem\u00e1s, dentro de poco nuestra colecci\u00f3n incluir\u00e1 obras en otros idiomas. De ah\u00ed que necesitemos traducir sistem\u00e1ticamente nuevos contenidos que aparezcan en la p\u00e1gina. </p>\r\n<p><b>\u00bfQui\u00e9n puede ayudarnos con las traducciones?</b> </p>\r\n<ul>\r\n<li>Cualquiera que conozca bien por lo menos alguno de los idiomas anteriores.</li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h3>Programadores</h3>\r\n<p>Aparte de la p\u00e1gina creamos tambi\u00e9n:</p>\r\n<ul>\r\n<li>herramientas editoriales,</li>\r\n<li>convertidores para varios formatos de libros electr\u00f3nicos,</li>\r\n<li>aplicaciones m\u00f3viles que facilitan el acceso a nuestra colecci\u00f3n</li>\r\n</ul>\r\n\r\n <p>Usamos las siguientes tecnolog\u00edas: Python, Django, XHTML, JavaScript, jQuery, LaTex, Java. \r\nEl software creado por nosotros es <a href=\"https://github.com/fnp/\">libre</a>. </p>\r\n<p><b>\u00bfQui\u00e9n puede ayudar en las tareas programadores?</b> </p>\r\n<ul>\r\n<li>Cualquiera que sepa y quiera ganar puntos para su karma por la participaci\u00f3n en un proyecto de programaci\u00f3n abierto. ;)</li>\r\n</ul>\r\n\r\n", + "right_column_en": "<h3>Who are we looking for?</h3>\r\n\r\n<h3>Production editors (text composition) </h3>\r\n <p>Text composition is the first stage in editing. By means of WL-XML markup we create a desired text format and display it on the webpage. Production editing takes place on <a href=\"http://redakcja.wolnelektury.pl\">Editorial Platform</a>, which enables us to automate a great deal of work. </p>\r\n\r\n <p><b>Who can become a production editor?</b> </p>\r\n<ul>\r\n<li>Anyone - after a short training.</li>\r\n</ul>\r\n\r\n <p>You will find more information on production editing on <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">editorial page of Wolne Lektury</a> </p>\r\n\r\n<hr/>\r\n\r\n<h3>Literary editors </h3>\r\n <p>Literary editing includes proofreading, updating and adding literary motifs. It is a unique opportunity to gain experience in digital text editing. </p>\r\n\r\n <p><b>Who can become a literary editor? </b> </p>\r\n<ul>\r\n<li>Those who have experience in literary text editing,</li>\r\n<li>Students and graduates of the humanities, who wants to gain such experience. </li>\r\n</ul>\r\n<p>You will find more information on literary editing on <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">editorial page of Wolne Lektury</a> </p>\r\n<hr/>\r\n\r\n<h3>Translators</h3>\r\n <p>WolneLektury.pl is available in 7 languages - English, French, German, Spanish, Lithuanian, Russian, and Ukrainian. The library is used by over 200 000 readers outside of Poland, and soon our collection will also include books written in foreign (non-Polish) languages. That is why we need to translate new pieces of information systematically, as they appear on the website. </p>\r\n <p><b>Who can help us translate? </b> </p>\r\n<ul>\r\n<li>Anyone with a good command of at least one of the languages listed above. </li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h3>Programmers</h3>\r\n <p>Apart from the website Wolne Lektury we also create: </p>\r\n<ul>\r\n<li>editorial tools,</li>\r\n<li>converters for various e-book formats, </li>\r\n<li>mobile applications facilitating access to our pages.</li>\r\n</ul>\r\n\r\n <p>We use technologies like: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nOur software is made available under <a href=\"https://github.com/fnp/\">the free license</a>. </p>\r\n <p><b>Who can help us with the programming?</b> </p>\r\n<ul>\r\n<li>Those who can do it and would like to gain experience by participating in an open programming project.</li>", + "left_column_de": "<ul>\r\n<li>Werde unser Bearbeiter, Programmierer oder \u00dcbersetzter</li>\r\n<li>Erwirb neue F\u00e4higkeiten und Erfahrung</li>\r\n<li>Nimm an dem offenen Projekt teil und bilde eine innovative Internetbibliothek </li>\r\n</ul>\r\n\r\n<p>Wir laden alle Personen ein, die das Projekt mitgestalten m\u00f6chten. Wir arbeiten mit Studenten, Lehrern und Allen, die sich f\u00fcr Literatur, Textbearbeitung und informatische Projekte interessieren. Wir bieten professionelle Schulungen und st\u00e4ndige Sachhilfe. Volont\u00e4re k\u00f6nnen fern oder im Stiftungssitz arbeiten.</p>\r\n<p>Wir organisieren auch das Studentenpraktikum - wir arbeiten mit dem Institut f\u00fcr Wissenschaftsinformation und Bibliothekwissenschaft an der Universit\u00e4t Warschau, demKarriereb\u00fcro der Kardinal-Stefan-Wyszy\u00f1ski-Universit\u00e4t Warschau und der Fakult\u00e4t f\u00fcr Physik zusammen. </p>\r\n\r\n<h3>Wie kann man sich bei uns melden?</h3>\r\n<p>Alle Interessierten bitten wir um eine Mail an folgende Adresse <a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n\r\n\r\n\r\n", + "title_uk": "\ufeff\u0412\u0456\u0437\u044c\u043c\u0456\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u043d\u0430\u0448\u0456\u0439 \u0434\u0456\u044f\u043b\u044c\u043d\u043e\u0441\u0442\u0456", + "right_column_it": "<h3>Chi stiamo cercando?</h3>\r\n\r\n<h3>Redattori tecnici (composizione)</h3>\r\n <p>La composizione e la prima fase di lavoro sul testo. Utilizzando i tag di lingua WL-XML il testo ottiene una forma corretta e pu\u00f2 essere visualizzato sul sito web. La supervisione tecnica viene effettuata sulla <a href=\"http://redakcja.wolnelektury.pl\">Piattaforma Editoriale</a> che consente di automatizzare gran parte del lavoro.</p>\r\n\r\n<p><b>Chi puo diventare redattore tecnico?</b></p>\r\n<ul>\r\n<li>Ognuno-dopo un breve corso di formazione.</li>\r\n</ul>\r\n\r\n<p>Per maggiori informazioni sulla redazione tecnica andate <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\">sul sito web di Wolne Lektury (Letture Libere)</a></p>\r\n\r\n<hr/>\r\n\r\n<h3>Redattori letterari</h3>\r\n <p>Tale redazione include correzione, modernizzazione e aggiunta delle note e dei motivi letterari. E' l\u2019unica occasione di acquisire esperienza nell\u2019edizione digitale dei testi.</p>\r\n\r\n<p><b>Chi pu\u00f2 diventare redattore letterario?</b></p>\r\n<ul>\r\n<li>Le persone che hanno esperienza nella redazione dei testi letterari,< li>\r\n<li>Studenti e laureati in discipline umanistiche che vogliono acqusire tale esperienza.</li>\r\n</ul>\r\n<p>Per maggiori informazioni sulla redazione letteraria andate <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\"> sul sito web di Wolne Lektury</a></p>\r\n<hr/>\r\n\r\n<h3>Traduttori</h3>\r\n<p>Pagina WolneLektury.pl \u00e8 disponibile in sette lingue - inglese, francese, tedesco, spagnolo, lituano, russo e ucraino. Ci sono piu di 200 mila utenti della biblioteca provenienti dall'estero e tra poco le nostre collezioni comprenderanno anche le opere in lingue straniere.Per questo, dobbiamo continuare a tradurre le nuove informazioni che appaiono sul sito.</p>\r\n\r\n<p><b>Chi pu\u00f2 aiutare nelle traduzioni?</b></p>\r\n<ul>\r\n<li>Ognuno che conosce bene almeno una di queste lingue.</li>\r\n</ul>\r\n\r\n<hr/>\r\n<h3>Programmatori</h3>\r\n <p>Oltre al sito web di Letture Libere stiamo creando:</p>\r\n<ul>\r\n<li>strumenti editoriali,</li>\r\n<li>convertitori per diversi formati di e-books,</li>\r\n<li>applicazioni mobili che facilitino l\u2019accesso alle nostre risorse.</li>\r\n</ul>\r\n\r\n<p>Usiamo le tecnologie: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nIl nostro software \u00e8 disponibile su <a href=\"https://github.com/fnp/\">licenza libera</a>.</p>\r\n <p><b>Chi pu\u00f2 aiutare nei lavori di software?</b></p>\r\n<ul>\r\n<li>Ognuno che sa farlo e che vorrebbe ottenere i punti per Karma grazie alla partecipazione al progetto aperto di programmazione. ;)</li>\r\n</ul>\r\n\r\n", + "title_pl": "W\u0142\u0105cz si\u0119 w prace", + "left_column": "<ul>\r\n<li>Become our editor, programmer or traslator</li>\r\n<li>Gain new skills and experience </li>\r\n<li>Take part in an open project and create an innovative online library </li>\r\n</ul>\r\n\r\n<p>We invite every person to contribute to our project. We collaborate with students, teachers and anyone interested in literature, text editing and computer projects. We offer professional training courses and constant factual help. Volunteers can work at home or in our office.</p>\r\n<p>We also organize student trainings - we have established cooperation with the Institute of Information and Book Studies, Warsaw University (UW), the Careers Service at Cardinal Stefan Wyszy\u0144ski University in Warsaw, and with the Faculty of Physics, UW. </p>\r\n\r\n<h3>How to contact us?</h3>\r\n<p>We invite all the people interested to email us at<a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>", + "right_column_uk": "\ufeff<h3>\u041a\u043e\u0433\u043e \u043c\u0438 \u0448\u0443\u043a\u0430\u0454\u043c\u043e?</h3>\r\n\r\n<h3>\u0422\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0456\u0432 (\u0432\u0435\u0440\u0441\u0442\u043a\u0430) </h3>\r\n <p>\u0412\u0435\u0440\u0441\u0442\u043a\u0430 - \u0446\u0435 \u043f\u0435\u0440\u0448\u0438\u0439 \u0435\u0442\u0430\u043f \u043f\u0440\u0430\u0446\u0456 \u043d\u0430\u0434 \u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u0417\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u0442\u0435\u0433\u0456\u0432 \u043c\u043e\u0432\u0438 WL-XML \u043d\u0430\u0434\u0430\u0454\u043c\u043e \u0442\u0435\u043a\u0441\u0442\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0439 \u0432\u0438\u0433\u043b\u044f\u0434 \u0442\u0430 \u0440\u043e\u0431\u0438\u043c\u043e \u043c\u043e\u0436\u043b\u0438\u0432\u0438\u043c \u0457\u0445 \u043f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u044e \u043d\u0430 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u0456. \u0422\u0435\u0445\u043d\u0456\u0447\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u0438\u043a\u043e\u043d\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430 <a href=\"http://redakcja.wolnelektury.pl\">\u0420\u0435\u0434\u0430\u043a\u0446\u0456\u0439\u043d\u0456\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0456</a>, \u044f\u043a\u0430 \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0454 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0443\u0432\u0430\u0442\u0438 \u0432\u0435\u043b\u0438\u043a\u0443 \u0447\u0430\u0441\u0442\u0438\u043d\u0443 \u043f\u0440\u0430\u0446\u0456. </p>\r\n\r\n <p><b>\u0425\u0442\u043e \u043c\u043e\u0436\u0435 \u0441\u0442\u0430\u0442\u0438 \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c?</b> </p>\r\n<ul>\r\n<li>\u041a\u043e\u0436\u0435\u043d - \u043f\u0456\u0441\u043b\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u0442\u0440\u0435\u043d\u0456\u043d\u0433\u0443.</li>\r\n</ul>\r\n\r\n <p>\u0411\u0456\u043b\u044c\u0448\u0435 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u043f\u0440\u043e \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u043d\u0430 <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">\u0441\u0430\u0439\u0442\u0456 \u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0457 Wolne Lektury</a> </p>\r\n\r\n<hr/>\r\n\r\n<h3>\u041b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0456\u0432 </h3>\r\n <p>\u041b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0454 \u0432 \u0441\u0435\u0431\u0435 \u043a\u043e\u0440\u0435\u043a\u0442\u0443, \u043e\u0441\u0443\u0447\u0430\u0441\u043d\u0435\u043d\u043d\u044f \u0442\u0435\u043a\u0441\u0442\u0443, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0434\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u043f\u0440\u0438\u043c\u0456\u0442\u043e\u043a \u0442\u0430 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u043c\u043e\u0442\u0438\u0432\u0456\u0432. \u0426\u0435 \u0443\u043d\u0456\u043a\u0430\u043b\u044c\u043d\u0430 \u043c\u043e\u0436\u043b\u0438\u0432\u0456\u0441\u0442\u044c \u0437\u0434\u043e\u0431\u0443\u0442\u0438 \u0434\u043e\u0441\u0432\u0456\u0434 \u0443 \u0446\u0438\u0444\u0440\u043e\u0432\u0456\u0439 \u043e\u0431\u0440\u043e\u0431\u0446\u0456 \u0442\u0435\u043a\u0441\u0442\u0456\u0432. </p>\r\n\r\n <p><b>\u0425\u0442\u043e \u043c\u043e\u0436\u0435 \u0441\u0442\u0430\u0442\u0438 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c? </b> </p>\r\n<ul>\r\n<li>\u0422\u043e\u0439, \u0445\u0442\u043e \u043c\u0430\u0454 \u0434\u043e\u0441\u0432\u0456\u0434 \u0443 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u0456 \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0438\u0445 \u0442\u0435\u043a\u0441\u0442\u0456\u0432,</li>\r\n<li>\u0421\u0442\u0443\u0434\u0435\u043d\u0442\u0438 \u0442\u0430 \u0432\u0438\u043f\u0443\u0441\u043a\u043d\u0438\u043a\u0438 \u0433\u0443\u043c\u0430\u043d\u0456\u0442\u0430\u0440\u043d\u0438\u0445 \u0444\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0456\u0432, \u044f\u043a\u0456 \u0445\u043e\u0447\u0443\u0442\u044c \u0437\u0434\u043e\u0431\u0443\u0442\u0438 \u0442\u0430\u043a\u0438\u0439 \u0434\u043e\u0441\u0432\u0456\u0434. </li>\r\n</ul>\r\n<p>\u0411\u0456\u043b\u044c\u0448\u0435 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u043f\u0440\u043e \u043b\u0456\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u043d\u0430 <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">\u0441\u0430\u0439\u0442\u0456 \u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0457 Wolne Lektury</a> </p>\r\n<hr/>\r\n\r\n<h3>\u041f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u0430\u0447\u0456\u0432</h3>\r\n <p>\u0421\u0430\u0439\u0442 WolneLektury.pl \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u0439 \u043d\u0430 \u0441\u0435\u043c\u0438 \u0456\u043d\u043e\u0437\u0435\u043c\u043d\u0438\u0445 \u043c\u043e\u0432\u0430\u0445 \u2013 \u0430\u043d\u0433\u043b\u0456\u0439\u0441\u044c\u043a\u0456\u0439, \u0444\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0456\u0439, \u043d\u0456\u043c\u0435\u0446\u044c\u043a\u0456\u0439, \u0456\u0441\u043f\u0430\u043d\u0441\u044c\u043a\u0456\u0439, \u043b\u0438\u0442\u043e\u0432\u0441\u044c\u043a\u0456\u0439, \u0440\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u0456\u0439 \u0442\u0430 \u0443\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0456\u0439. \u0411\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u043e\u044e \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0454\u0442\u044c\u0441\u044f \u0431\u0456\u043b\u044c\u0448\u0435 \u043d\u0456\u0436 200 \u0442\u0438\u0441\u044f\u0447 \u0437\u0430\u043a\u043e\u0440\u0434\u043e\u043d\u043d\u0438\u0445 \u0432\u0456\u0434\u0432\u0456\u0447\u0443\u0432\u0430\u0447\u0456\u0432, \u0430 \u043d\u0435\u0437\u0430\u0431\u0430\u0440\u043e\u043c \u0443 \u043d\u0430\u0448\u0456\u0439 \u043a\u043e\u043b\u0435\u043a\u0446\u0456\u0439 \u0437\u043d\u0430\u0439\u0434\u0443\u0442\u044c\u0441\u044f \u0442\u0430\u043a\u043e\u0436 \u0442\u0432\u043e\u0440\u0438 \u043d\u0430 \u0456\u043d\u043e\u0437\u0435\u043c\u043d\u0438\u0445 \u043c\u043e\u0432\u0430\u0445. \u0422\u043e\u043c\u0443 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u0430\u0442\u0438 \u043d\u043e\u0432\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e, \u044f\u043a\u0430 \u0437\u2019\u044f\u0432\u043b\u044f\u0454\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0456. </p>\r\n <p><b>\u0425\u0442\u043e \u043c\u043e\u0436\u0435 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0443 \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u0430\u0445? </b> </p>\r\n<ul>\r\n<li>\u041a\u043e\u0436\u043d\u0438\u0439, \u0445\u0442\u043e \u0434\u043e\u0431\u0440\u0435 \u0432\u043e\u043b\u043e\u0434\u0456\u0454 \u043f\u0440\u0438\u043d\u0430\u0439\u043c\u043d\u0456 \u043e\u0434\u043d\u0456\u0454\u044e \u0437 \u0432\u0438\u0449\u0435\u0437\u0433\u0430\u0434\u0430\u043d\u0438\u0445 \u043c\u043e\u0432. </li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h3>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442\u0456\u0432</h3>\r\n <p>\u041a\u0440\u0456\u043c \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0443 Wolne Lektury \u043c\u0438 \u0442\u0432\u043e\u0440\u0438\u043c\u043e \u0442\u0430\u043a\u043e\u0436: </p>\r\n<ul>\r\n<li>\u0440\u0435\u0434\u0430\u043a\u0446\u0456\u0439\u043d\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438,</li>\r\n<li>\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u0438 \u0434\u043b\u044f \u0440\u0456\u0437\u043d\u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0456\u0432 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0438\u0445 \u043a\u043d\u0438\u0433, </li>\r\n<li>\u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0456 \u0430\u043f\u043b\u0456\u043a\u0430\u0446\u0456\u0457, \u044f\u043a\u0456 \u0440\u043e\u0431\u043b\u044f\u0442\u044c \u043c\u043e\u0436\u043b\u0438\u0432\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u043d\u0430\u0448\u0438\u0445 \u043a\u043e\u043b\u0435\u043a\u0446\u0456\u0439.</li>\r\n</ul>\r\n\r\n <p>\u041c\u0438 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0454\u043c\u043e\u0441\u044f \u0442\u0430\u043a\u0438\u043c\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0456\u044f\u043c\u0438, \u044f\u043a Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\n\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043d\u0435 \u0437\u0430\u0431\u0435\u0437\u043f\u0435\u0447\u0435\u043d\u043d\u044f, \u044f\u043a\u0435 \u0441\u0442\u0432\u043e\u0440\u044e\u0454\u043c\u043e, \u043d\u0430\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u043d\u0430 <a href=\"https://github.com/fnp/\">\u0432\u0456\u043b\u044c\u043d\u0456\u0439 \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457</a>. </p>\r\n <p><b>\u0425\u0442\u043e \u043c\u043e\u0436\u0435 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0442\u0438 \u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0443\u0432\u0430\u043d\u043d\u0456?</b> </p>\r\n<ul>\r\n<li>\u041a\u043e\u0436\u0435\u043d, \u0445\u0442\u043e \u0432\u043c\u0456\u0454 \u0456 \u0445\u043e\u0447\u0435 \u0437\u0430 \u0443\u0447\u0430\u0441\u0442\u044c \u0443 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0456\u0441\u0442\u0438\u0447\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0456 \u0437\u0434\u043e\u0431\u0443\u0442\u0438 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0456 \u0431\u0430\u043b\u0438 \u0434\u043e \u043a\u0430\u0440\u043c\u0438. ;)</li>\r\n</ul>\r\n", + "title_en": "Join in the work", + "left_column_pl": "<ul>\r\n<li>Zosta\u0144 naszym redaktorem, programist\u0105 lub t\u0142umaczem</li>\r\n<li>Zdob\u0105d\u017a nowe umiej\u0119tno\u015bci i do\u015bwiadczenie</li>\r\n<li>We\u017a udzia\u0142 w otwartym projekcie i tw\u00f3rz innowacyjn\u0105 bibliotek\u0119 internetow\u0105</li>\r\n</ul>\r\n\r\n<p>Zapraszamy wszystkie osoby, kt\u00f3re chc\u0105 wsp\u00f3\u0142tworzy\u0107 nasz projekt. Wsp\u00f3\u0142pracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi literatur\u0105, redagowaniem tekst\u00f3w i projektami informatycznymi. Oferujemy profesjonalne szkolenia i sta\u0142\u0105 pomoc merytoryczn\u0105. Wolontariusze mog\u0105 pracowa\u0107 zdalnie lub w siedzibie Fundacji.</p>\r\n<p>Organizujemy r\u00f3wnie\u017c praktyki studenckie \u2013 nawi\u0105zali\u015bmy wsp\u00f3\u0142prac\u0119 z Instytutem Informacji Naukowej i Studi\u00f3w Bibliologicznych UW, Biurem Karier UKSW oraz Wydzia\u0142em Fizyki UW.</p>\r\n\r\n<h3>Jak si\u0119 do nas zg\u0142osi\u0107?</h3>\r\n<p>Wszystkie zainteresowane osoby prosimy o przys\u0142anie maila na adres <a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n\r\n\r\n\r\n", + "left_column_it": "<ul>\r\n<li>Diventa il nostro redattore, programmatore o traduttore</li>\r\n<li>Acquisisci nuove capacit\u00e0 ed esperienze</li>\r\n<li>Prendi parte al progetto aperto e crea una biblioteca innovativa online</li>\r\n</ul>\r\n\r\n<p>Invitiamo tutte le persone volenterose a collaborare al nostro progetto. Lavoriamo con studenti, insegnanti e tutti gli interessati alla letteratura, stesura dei testi e ai progetti IT. Offriamo i corsi di formazione professionali e il sostegno. I volontari possono lavorare a distanza oppure presso la sede della Fondazione.</p>\r\n\r\n<p>Organizziamo anche i tirocini \u2013 collaboriamo con Instytut Informacji Naukowej i Studi\u00f3w Bibliologicznych (l\u2019Istituto di Informazione Scientifica e Biblioteconomia) dell\u2019Universit\u00e0 di Varsavia, Biuro Karier UKSW (Ufficio di carriera dell\u2019Universit\u00e0 del Cardinale Stefan Wyszy\u0144ski) e con il Dipartimento di Fisica dell\u2019Universit\u00e0 di Varsavia</p>\r\n\r\n<h3>Come contattarci? ?</h3>\r\n<p>Invitiamo Tutte le persone interessate ad inviarci un'e-mail all'indirizzo <a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n", + "title_es": "Colabora", + "left_column_ru": "\ufeff<ul>\r\n<li>\u0421\u0442\u0430\u043d\u044c \u043d\u0430\u0448\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u043c \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u043e\u043c</li>\r\n<li>\u041f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0438 \u043d\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u043d\u0438\u044f \u0438 \u043e\u043f\u044b\u0442 </li>\r\n<li>\u041f\u0440\u0438\u043c\u0438 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439 \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 </li>\r\n</ul>\r\n\r\n<p>\u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0432\u0441\u0435\u0445, \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u043c \u0441\u043e \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c\u0438, \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u0438 \u0432\u0441\u0435\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442\u0441\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u043e\u0439, \r\n\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0443\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443. \r\n\u0414\u043e\u0431\u0440\u043e\u0432\u043e\u043b\u044c\u0446\u044b \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0438\u043b\u0438 \u0432 \u0448\u0442\u0430\u0431-\u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0435 \u0424\u043e\u043d\u0434\u0430.</p>\r\n\r\n<p>\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u0441\u0442\u0443\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0442\u0430\u0436\u0438\u0440\u043e\u0432\u043a\u0438 - \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u0447\u0430\u0435\u043c \u0441 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u043e\u043c \u043d\u0430\u0443\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0411\u0438\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0412\u0423, \r\n\u0441 \u0411\u044e\u0440\u043e \u043a\u0430\u0440\u044c\u0435\u0440\u044b \u0423\u041a\u0421\u0412 \u0438 \u0424\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u043e\u043c \u0424\u0438\u0437\u0438\u043a\u0438 \u0412\u0423.</p>\r\n\r\n<h3>\u041a\u0430\u043a \u043a \u043d\u0430\u043c \u043f\u043e\u043f\u0430\u0441\u0442\u044c?</h3>\r\n<p>\u0412\u0441\u0435 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435-mail \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443: <a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n\r\n\r\n\r\n", + "slug": "wlacz-sie-w-prace", + "right_column_de": "<h3>Wen suchen wir?</h3>\r\n\r\n<h3>Textbearbeiter (Textbearbeitung) </h3>\r\n <p>In der ersten Phase wird der Text gesetzt. Mithilfe der WL-XML-Sprache gestalten wir den Text und erm\u00f6glichen seine Ver\u00f6ffentlichung auf der Internetseite. Textbearbeitung wird auf der <a href=\"http://redakcja.wolnelektury.pl\">Redaktionsplatrorm</a>durchgef\u00fchrt, die einen gro\u00dfen Arbeitsteil automatisieren l\u00e4sst.</p>\r\n\r\n <p><b>Wer kann Textbearbeiter werden</b> </p>\r\n<ul>\r\n<li>Jeder - nach einer kurzen Schulung.</li>\r\n</ul>\r\n\r\n <p>Mehr Infos \u00fcber Textbearbeitung<a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">auf der Impressumseite von Wolne Lektury</a> </p>\r\n\r\n<hr/>\r\n\r\n<h3>Bearbeiter im Literaturbereich (Sachbearbeiter) </h3>\r\n <p>Literarische Bearbeitung umfasst die Korrektur, Sprachmodernisierung und Erg\u00e4nzung von F\u00fc\u00dfnoten und literarischen Motiven. Das ist eine einzigartige M\u00f6glichkeit, die Kenntnis der Digitalverarbeitung von Texten zu erwerben. </p>\r\n\r\n <p><b>Wer kann Bearbeiter im Literaturbereich werden</b> </p>\r\n<ul>\r\n<li>Personen, die Erfahrung in der Bearbeitung von literarischen Texten besitzen,</li>\r\n<li>Studenten und Absolventen der Geisteswissenschaften, die solche Erfahrung gewinnen m\u00f6chten. </li>\r\n</ul>\r\n<p>Mehr Infos \u00fcber literarische Bearbeitung<a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">auf der Impressumseite von Wolne Lektury</a> </p>\r\n<hr/>\r\n\r\n<h3>\u00dcbersetzer</h3>\r\n <p>Die Internetseite WolneLektury.pl ist in sieben Spracheversionen zug\u00e4nglich - im Englischen, Franz\u00f6sichen, Deutschen, Spanischen, Lituanischen, Russischen und Ukrainischen. Bibliotheksbenutzer sind \u00fcber 200.000 Ausl\u00e4nder. Bald wird die Bibliothek mit fremdsprachigen Versionen bereichert. Deswegen brauchen wir auf dem Laufenden, die neu auf der Seite erschienen Infos zu \u00fcbersetzen. </p>\r\n <p><b>Wer kann bei \u00dcbersetzungen helfen? </b> </p>\r\n<ul>\r\n<li>Jeder, der mindestenst eine aus den oben genannten Sprachen beherrscht. </li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h3>Programmierer</h3>\r\n <p>Au\u00dfer der Internetseite von Wolne Lektury allein errichten wir: </p>\r\n<ul>\r\n<li>Bearbeitungsmittel,</li>\r\n<li>Konvertierungsprogramme zu den verschiedenen E-books-Formaten, </li>\r\n<li>Mobilanwendungen, die Zugang zu B\u00fcchern erleichtern.</li>\r\n</ul>\r\n\r\n <p>Wir machen Gebrauch von solchen Technologien wie: Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nDie von uns entwickelte Software machen wird auf<a href=\"https://github.com/fnp/\">unter der freien Lizenz verf\u00fcgbar</a>. </p>\r\n <p><b>Wer kann bei der Programmierung helfen?</b> </p>\r\n<ul>\r\n<li>Jeder, der dies kann und will Karmapunkte f\u00fcr die Teilnahme an dem offenen Programmierungsprojekt gewinnen . ;)</li>\r\n</ul>\r\n", + "left_column_es": "\ufeff<ul>\r\n<li>Hazte nuestro redactor, programador o traductor</li> \r\n<li>Adquiere nuevas aptitudes y experiencia</li>\r\n<li>Participa en un proyecto abierto y crea una innovadora biblioteca virtual</li>\r\n</ul>\r\n\r\n<p>Todos los que quieran participar en nuestro proyecto ser\u00e1n bienvenidos. Colaboramos con estudiantes, maestros, profesores y todos aquellos interesados en literatura, edici\u00f3n de textos y proyectos inform\u00e1ticos. Les ofrecemos aprendizaje profesional y constante ayuda en cuanto a el contenido. Los voluntarios pueden trabajar a distancia o en la oficina principal de la Fundaci\u00f3n.</p>\r\n<p>Tambi\u00e9n organizamos practicas para los estudiantes \u2013 hemos establecido cooperaci\u00f3n con el Instituto de Informaci\u00f3n Cient\u00edfica y Bibliotecolog\u00eda de la Universidad de Varsovia, el Servicio de Orientaci\u00f3n Profesional de la Universidad de Cardenal Stefan Wyszynski y la Facultad de F\u00edsica de la Universidad de Varsovia. </p>\r\n\r\n<h3>\u00bfC\u00f3mo contactar?</h3>\r\n<p>A todos los interesados les invitamos a mandar un e-mail a <a \r\nhref=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p> \r\n", + "left_column_en": "<ul>\r\n<li>Become our editor, programmer or traslator</li>\r\n<li>Gain new skills and experience </li>\r\n<li>Take part in an open project and create an innovative online library </li>\r\n</ul>\r\n\r\n<p>We invite every person to contribute to our project. We collaborate with students, teachers and anyone interested in literature, text editing and computer projects. We offer professional training courses and constant factual help. Volunteers can work at home or in our office.</p>\r\n<p>We also organize student trainings - we have established cooperation with the Institute of Information and Book Studies, Warsaw University (UW), the Careers Service at Cardinal Stefan Wyszy\u0144ski University in Warsaw, and with the Faculty of Physics, UW. </p>\r\n\r\n<h3>How to contact us?</h3>\r\n<p>We invite all the people interested to email us at<a href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta.niedzialkowska@nowoczesnapolska.org.pl.</a></p>", + "right_column_fr": "<h3>Qui cherchons-nous?</h3>\r\n\r\n<h3>R\u00e9dacteurs techniques (composition de texte) </h3>\r\n <p>La composition est une premi\u00e8re \u00e9tape du travail sur un texte. \u00c0 l'aide des balises du langage WL-XML on forme un texte et l'affiche sur le site. La r\u00e9daction est ex\u00e9cut\u00e9e sur <a href=\"http://redakcja.wolnelektury.pl\">la Plateforme de R\u00e9daction</a> qui permet d'automatiser la grande majorit\u00e9 du travail. </p>\r\n\r\n <p><b>Qui peut devenir r\u00e9dacteur technique?</b> </p>\r\n<ul>\r\n<li>Chacun(e) - apr\u00e8s une courte instruction.</li>\r\n</ul>\r\n\r\n <p>Si vous voulez trouver plus d'informations sur la r\u00e9daction technique, visitez <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">le site de la r\u00e9daction de Wolne Lektury</a> </p>\r\n\r\n<hr/>\r\n\r\n<h3>R\u00e9dacteurs litt\u00e9raires </h3>\r\n <p>La r\u00e9daction litt\u00e9raire se compose de la correction des \u00e9preuves, r\u00e9actualisation et addition des annotations et motifs litt\u00e9raires. C'est une opportunit\u00e9 unique d'acqu\u00e9rir de l'exp\u00e9rience dans le domaine de l'\u00e9dition num\u00e9rique. </p>\r\n\r\n<p><b>Qui peut devenir r\u00e9dacteur litt\u00e9raire? </b> </p>\r\n<ul>\r\n<li>Personnes qui ont d\u00e9j\u00e0 une exp\u00e9rience dans la r\u00e9daction des textes litt\u00e9raires,</li>\r\n<li>\u00c9tudiants et gradu\u00e9s d'\u00e9tudes humanistes qui souhaitent acqu\u00e9rir une telle exp\u00e9rience. </li>\r\n</ul>\r\n<p>Si vous voulez trouver plus d'informations sur la r\u00e9daction litt\u00e9raire, visitez <a href=\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n\">le site de la r\u00e9daction de Wolne Lektury</a> </p>\r\n<hr/>\r\n\r\n<h3>Traducteurs</h3>\r\n <p>Le site WolneLektury.pl est accessible en sept langues \u00e9trang\u00e8res - anglaise, fran\u00e7aise, allemande, espagnole, lithuanienne, russe et ukrainienne. Plus de 200 mille d'\u00e9trangers utilisent notre biblioth\u00e8que et comme prochainement notre collection contiendra aussi des ouvrages en langues \u00e9trang\u00e8res, il est essentiel de traduire de nouvelles informations et de les mettre r\u00e9guli\u00e8rement sur le site. </p>\r\n <p><b>Qui peut aider \u00e0 la pr\u00e9paration des traductions? </b> </p>\r\n<ul>\r\n<li>Chacun(e) qui conna\u00eet au moins une des cettes langues.</li>\r\n</ul>\r\n\r\n<hr/>\r\n\r\n<h3>Programmeurs</h3>\r\n <p>\u00c0 part le site de Wolne Lektury on cr\u00e9e aussi:</p>\r\n<ul>\r\n<li>des outils de r\u00e9daction,</li>\r\n<li>des convertisseurs de formats divers des livres audio,</li>\r\n<li>des applications mobiles qui facilitent l'acc\u00e8s \u00e0 notre collection.</li>\r\n</ul>\r\n\r\n <p>On utilise les technologies telles que Python, Django, XHTML, JavaScript, jQuery, LaTeX, Java.\r\nLes logiciels que l'on cr\u00e9e sont accessibles sous <a href=\"https://github.com/fnp/\">une licence libre</a>. </p>\r\n <p><b>Qui peut aider aux travaux de programmation?</b> </p>\r\n<ul>\r\n<li>Chacun(e) qui sait programmer et voudrait accumuler les points de karma pour participer \u00e0 un projet ouvert de programmation ;)</li>\r\n</ul>\r\n\r\n \r\n", + "title_ru": "\ufeff\u0412\u043a\u043b\u044e\u0447\u0438\u0441\u044c \u0432 \u0440\u0430\u0431\u043e\u0442\u0443", + "title_it": "Prendi parte all'iniziativa" + } + }, + { + "pk": 5, + "model": "infopages.infopage", + "fields": { + "title_de": "Unterst\u00fctze uns", + "left_column_uk": "\ufeff<p><strong>\u041f\u0435\u0440\u0435\u043a\u0430\u0436\u0456\u0442\u044c 1% \u043f\u043e\u0434\u0430\u0442\u043a\u0443 \u043d\u0430 Wolne Lektury</strong></p>\r\n<p>\u0424\u043e\u043d\u0434 \u0421\u0443\u0447\u0430\u0441\u043d\u0430 \u041f\u043e\u043b\u044c\u0449\u0430 (Fundacja Nowoczesna Polska) \u043c\u0430\u0454 \u0441\u0442\u0430\u0442\u0443\u0441 \u041e\u0440\u0433\u0430\u043d\u0456\u0437\u0430\u0446\u0456\u0457 \u0441\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0457 \u043a\u043e\u0440\u0438\u0441\u0442\u0456, \u0442\u043e\u043c\u0443 \u043d\u0430 \u0440\u043e\u0437\u0432\u0438\u0442\u043e\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 Wolne Lektury \u043c\u043e\u0436\u043d\u0430 \u043f\u0435\u0440\u0435\u043a\u0430\u0437\u0430\u0442\u0438 1% \u0441\u0432\u043e\u0433\u043e \u043f\u043e\u0434\u0430\u0442\u043a\u0443. \u0414\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0437\u0430\u043f\u043e\u0432\u043d\u0438\u0442\u0438 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u043d\u0435 \u043f\u043e\u043b\u0435 \u0443 \u0440\u0456\u0447\u043d\u0456\u0439 \u043f\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0456\u0439 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0456\u0457 (PIT-36, PIT-37 \u0430\u0431\u043e PIT-28). \u0423 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0456\u0457 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0432\u043a\u0430\u0437\u0430\u0442\u0438 \u043d\u0430\u0437\u0432\u0443 \u0424\u043e\u043d\u0434\u0443:</p>\r\nFundacja Nowoczesna Polska <br/>\r\n\u0442\u0430 \u043d\u043e\u043c\u0435\u0440 \u0437 \u041d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0421\u0443\u0434\u043e\u0432\u043e\u0433\u043e \u0420\u0435\u0454\u0441\u0442\u0440\u0443 (KRS) 0000070056<br/>\r\n", + "main_page": 5, + "right_column_pl": "<p><strong>Przeka\u017c darowizn\u0119 na Wolne Lektury</strong></p>\r\n<p>Ka\u017cda wp\u0142acona kwota zostanie przeznaczona na rozw\u00f3j zasob\u00f3w naszej biblioteki. Wystarczy dokona\u0107 przelewu na konto:</p>\r\n\r\nFundacja Nowoczesna Polska<br/>\r\nul. Marsza\u0142kowska 84/92 lok. 125<br/>\r\n00-514 Warszawa<br/>\r\nNr konta: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\nTytu\u0142 przelewu: Darowizna na Wolne Lektury<br/>", + "right_column_lt": "\ufeff<p><strong>Paremkite finansi\u0161kai Wolne Lektury interneto svetain\u0119</strong></p>\r\n<p>Sumok\u0117ti pinigai bus paskirti m\u016bs\u0173 bibliotekos i\u0161tekli\u0173 raidai. \r\nU\u017etenka atlikti banko pavedim\u0105 \u012f s\u0105skait\u0105: </p>\r\n\r\nFundacja Nowoczesna Polska<br/>\r\nul. Marsza\u0142kowska 84/92 lok. 125<br/>\r\n00-514 Warszawa<br/>\r\nS\u0105skaitos numeris: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\nPavedimo pavadinimas: Darowizna na Wolne Lektury<br/>\r\n", + "left_column_lt": "\ufeff<p><strong>Skirkite 1% pajam\u0173 mokes\u010dio Wolne Lektury interneto svetainei</strong></p>\r\n<p>Fondas \u0160iuolaikin\u0117 Lenkija turi komunalini\u0173 paslaug\u0173 \u012fstaigos status\u0105, d\u0117l to galima paskirti 1% pajam\u0173 mokes\u010dio projekto Wolne Lektury raidai. \u0160iuo tikslu reikia u\u017epildyti atitinkam\u0105 langel\u012f metin\u0117je pajam\u0173 mokes\u010dio deklaracijoje (PIT-36, PIT-37 lub PIT-28) ir pateikti \u017eemiau esant\u012f pavadinim\u0105: </p>\r\nFundacja Nowoczesna Polska <br/>\r\nbei Nacionalinio teism\u0173 registro (KRS) numer\u012f 0000070056<br/>\r\n\r\n\r\n", + "title_fr": "Aidez-nous", + "right_column_ru": "\ufeff<p><strong>\u041f\u0435\u0440\u0435\u0448\u043b\u0438 \u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u043b\u044f Wolne Lektury</strong></p>\r\n<p>\u0412\u0441\u0435 \u0434\u0435\u043d\u0435\u0436\u043d\u044b\u0435 \u0432\u0437\u043d\u043e\u0441\u044b \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043a\u043d\u0438\u0436\u043d\u043e\u0433\u043e \u0444\u043e\u043d\u0434\u0430 \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0434\u0435\u043d\u044c\u0433\u0438 \u043d\u0430 \u0441\u0447\u0435\u0442:</p>\r\n\r\nFundacja Nowoczesna Polska<br/>\r\nul. Marsza\u0142kowska 84/92 lok. 125<br/>\r\n00-514 Warszawa<br/>\r\n\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0435\u0442\u0430: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\n\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f: Darowizna na Wolne Lektury<br/>\r\n", + "left_column_fr": "<p><strong>Transf\u00e9rez 1% de vos imp\u00f4ts pour Wolne Lektury</strong></p>\r\n<p>La fondation Nowoczesna Polska est une organisation d'utilit\u00e9 publique et alors 1% de vos imp\u00f4ts peut \u00eatre transf\u00e9r\u00e9 pour le d\u00e9veloppement du projet Wolne Lektury. Pour le faire il faut remplir la rubrique convenable dans la d\u00e9claration annuelle des imp\u00f4ts (PIT-36, PIT-37 ou PIT-28). Dans la d\u00e9claration il faut donner le nom:</p>\r\nFundacja Nowoczesna Polska <br/>\r\net le num\u00e9ro KRS (Registre National Juridique): 0000070056<br/>\r\n", + "title": "Support us", + "title_lt": "Paremkite mus", + "right_column": "<p><strong>Donate to Wolne Lektury</strong></p>\r\n<p>Every donation will be allocated for developing the library collection. Just transfer the money to:</p>\r\n\r\nFundacja Nowoczesna Polska<br/>\r\nul. Marsza\u0142kowska 84/92 lok. 125<br/>\r\n00-514 Warszawa<br/>\r\nBank account number: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\nTitle of payment: Darowizna na Wolne Lektury<br/>", + "right_column_es": "<p><strong>Haz un donativo a Wolne Lektury</strong></p>\r\n<p>Cada aporte ser\u00e1 destinado al incremento del fondo de nuestra biblioteca. Basta con hacer una transferencia a nuestra cuenta:</p>\r\n\r\nFundacja Nowoczesna Polska<br/>\r\nUl. Marsza\u0142kowska84/92 lok. 125<br/>\r\n00-514 Warszawa<br/>\r\nEl numero de la cuenta: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\nEl titulo de la transferencia: Darowizna na Wolne Lektury<br/>\r\n", + "right_column_en": "<p><strong>Donate to Wolne Lektury</strong></p>\r\n<p>Every donation will be allocated for developing the library collection. Just transfer the money to:</p>\r\n\r\nFundacja Nowoczesna Polska<br/>\r\nul. Marsza\u0142kowska 84/92 lok. 125<br/>\r\n00-514 Warszawa<br/>\r\nBank account number: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\nTitle of payment: Darowizna na Wolne Lektury<br/>", + "left_column_de": "<p><strong>\u00dcbergeben Sie 1 % von Ihrer Steuer an Wolne Lektury</strong></p>\r\n<p>Die Stiftung Modernes Polen besitzt den Status einer Non-Profit-Organisation. Infolgedessen kann man 1 % seiner Steuer an die Entwicklung des Projektes Wolne Lektury \u00fcberreichen. Um dies zu tun, sollte man eine bestimmte Rubrik in der Jahressteuererkl\u00e4rung (Einkommenstuer-36, Einkommensteuer-37 oder Einkommensteuer-28) erf\u00fcllen. In der Erkl\u00e4rung ist die:</p>\r\nBezeichnung Stiftung Modernes Polen <br/>\r\nsowie die Nummer aus dem Landesgerichtsregister (KRS) 0000070056<br/> einzutragen.", + "title_uk": "\ufeff\u041f\u0456\u0434\u0442\u0440\u0438\u043c\u0430\u0439\u0442\u0435 \u043d\u0430\u0441", + "right_column_it": "<p><strong> Fai una donazione a Wolne Lektury</strong></p>\r\n<p>Ogni somma versata sar\u00e0 utilizzata per lo sviluppo delle nostre risorse bibliotecarie. Basta fare un versamento sul conto:</p>\r\n\r\nFundacja Nowoczesna Polska<br/>\r\nul. Marsza\u0142kowska 84/92 lok. 125<br/>\r\n00-514 Warszawa<br/>\r\nNr konta: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\nTytu\u0142 przelewu (Titolo del versamento): Darowizna na Wolne Lektury<br/>\r\n\r\n", + "title_pl": "Wesprzyj nas", + "left_column": "<p><strong>Support Wolne Lektury with 1% of income tax </strong></p>\r\n<p>The Modern Poland Foundation has the status of a public benefit organization (Pol. organizacja po\u017cytku publicznego) thanks to which Wolne Lektury can receive 1% of income tax from individuals. To help us in this way, it is necessary to fill in the correct space in the annual tax return (PIT-36, PIT-37 or PIT-28), providing the name:</p>\r\nFundacja Nowoczesna Polska <br/>\r\nand the National Court Register number - Krajowy Rejestr S\u0105dowy (KRS) 0000070056<br/>", + "right_column_uk": "\ufeff<p><strong>\u0417\u0440\u043e\u0431\u0456\u0442\u044c \u0431\u043b\u0430\u0433\u043e\u0434\u0456\u0439\u043d\u0438\u0439 \u0432\u043d\u0435\u0441\u043e\u043a \u043d\u0430 Wolne Lektury</strong></p>\r\n<p>\u0423\u0441\u0456 \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u0456 \u043a\u043e\u0448\u0442\u0438 \u0431\u0443\u0434\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043e \u0434\u043b\u044f \u0440\u043e\u0437\u0432\u0438\u0442\u043a\u0443 \u043a\u043e\u043b\u0435\u043a\u0446\u0456\u0457 \u043d\u0430\u0448\u043e\u0457 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438. \u0404\u0434\u0438\u043d\u0435, \u0449\u043e \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0437\u0440\u043e\u0431\u0438\u0442\u0438, \u0446\u0435 \u043f\u0435\u0440\u0435\u0440\u0430\u0445\u0443\u0432\u0430\u0442\u0438 \u043a\u043e\u0448\u0442\u0438 \u043d\u0430 \u0440\u0430\u0445\u0443\u043d\u043e\u043a:</p>\r\n\r\nFundacja Nowoczesna Polska<br/>\r\nul. Marsza\u0142kowska 84/92 lok. 125<br/>\r\n00-514 Warszawa<br/>\r\n\u041d\u043e\u043c\u0435\u0440 \u0431\u0430\u043d\u043a\u0456\u0432\u0441\u044c\u043a\u043e\u0433\u043e \u0440\u0430\u0445\u0443\u043d\u043a\u0443: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\n\u041f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u043f\u043b\u0430\u0442\u0435\u0436\u0443: \u0411\u043b\u0430\u0433\u043e\u0434\u0456\u0439\u043d\u0438\u0439 \u0432\u043d\u0435\u0441\u043e\u043a \u043d\u0430 Wolne Lektury<br/>\r\n", + "title_en": "Support us", + "left_column_pl": "<p><strong>Przeka\u017c 1% podatku na Wolne Lektury</strong></p>\r\n<p>Fundacja Nowoczesna Polska posiada status Organizacji Po\u017cytku Publicznego dzi\u0119ki czemu na rozw\u00f3j projektu Wolne Lektury mo\u017cna przekaza\u0107 1% swojego podatku. W tym celu nale\u017cy wype\u0142ni\u0107 odpowiedni\u0105 rubryk\u0119 w rocznym zeznaniu podatkowym (PIT-36, PIT-37 lub PIT-28). W zeznaniu nale\u017cy poda\u0107 nazw\u0119:</p>\r\nFundacja Nowoczesna Polska<br/>\r\noraz numer z Krajowego Rejestru S\u0105dowego (KRS) 0000070056<br/>\r\n", + "left_column_it": "<p><strong>Dona l'1% delle tue tasse a Wolne Lektury</strong></p>\r\n<p>Fundacja Nowoczesna Polska (Fondazione Polonia Moderna) ha lo status dell'Organizzazione del Beneficio Pubblico grazie a cui si pu\u00f2 donare l'1% delle proprie tasse. Per fare questo bisogna compilare l\u2019apposita casella nella dichiarazione annuale dei redditi (PIT-36, PIT-37 o PIT-28). Nella dichiarazione bisogna indicare il nome:</p> Fundacja Nowoczesna Polska<br/> e il numero del Krajowy Rejestr S\u0105dowy (KRS) \u2013 (Nazionale Registro Giudiziario) 0000070056<br/>\r\n", + "title_es": "Ap\u00f3yanos", + "left_column_ru": "\ufeff<p><strong>\u041f\u0435\u0440\u0435\u0434\u0430\u0439 1% \u0441\u0432\u043e\u0435\u0433\u043e \u043d\u0430\u043b\u043e\u0433\u0430 \u0434\u043b\u044f Wolne Lektury</strong></p>\r\n\r\n\r\n<p>\u0424\u043e\u043d\u0434 Nowoczesna Polska \u0438\u043c\u0435\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0447\u0435\u043c\u0443 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Wolne Lektury \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c 1% \r\n\u043e\u0442 \u0441\u0432\u043e\u0435\u0433\u043e \u043d\u0430\u043b\u043e\u0433\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0440\u0443\u0431\u0440\u0438\u043a\u0443 \u0432 \u043b\u0438\u0447\u043d\u043e\u0439 \u0433\u043e\u0434\u043e\u0432\u043e\u0439 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0438 \u043e \u0434\u043e\u0445\u043e\u0434\u0430\u0445 (PIT-36, PIT-37 \u0438 PIT-28), \r\n\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435:</p>\r\nFundacja Nowoczesna Polska <br/>\r\n\r\n\u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u043e\u043c\u0435\u0440 \u0438\u0437 \u0413\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0421\u0443\u0434\u0435\u0431\u043d\u043e\u0433\u043e \u0420\u0435\u0435\u0441\u0442\u0440\u0430 (KRS) 0000070056<br/>\r\n", + "slug": "wesprzyj-nas", + "right_column_de": "<p><strong>\u00dcbergeben Sie eine Spende an Wolne Lektury</strong></p>\r\n<p>Jede eingezahlte Summe wird f\u00fcr die Erweiterung der B\u00fccheranzahl in der Bibiothek \u00fcbermittelt. Es reicht nur eine \u00dcberweisung aufs Konto:</p>\r\n\r\nFundacja Nowoczesna Polska (Stiftung Modernes Polen)<br/>\r\nStra\u00dfe: Marsza\u00b3kowska 84/92, Wohnungsnummer 125<br/>\r\nPostleitzahl und Stadt: 00-514 Warszawa<br/>\r\nKontonummer: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\n\u00dcberweisungstitel: \"Spende an Wolne Lektury\" oder \"Darowizna na Wolne Lektury\"<br/>", + "left_column_es": "<p><strong>Dona 1% de tu impuesto a Wolne Lektury</strong></p> \r\n<p>La Fundaci\u00f3n Polonia Modera tiene car\u00e1cter de organizaci\u00f3n no gubernamental, por lo tanto se puede donar 1% de impuesto para el desarrollo del proyecto Wolne Lektury. Para este prop\u00f3sito hay que rellenar el espacio en blanco apropriado en la declaraci\u00f3n de la renta anual (PIT-36, PIT-37 o PIT-28). Se deber\u00eda poner el nombre:</p>\r\nFundacja Nowoczesna Polska<br/>\r\ny el numero de el Registro Judicial Nacional (KRS) 0000070056<br/>\r\n\r\n", + "left_column_en": "<p><strong>Support Wolne Lektury with 1% of income tax </strong></p>\r\n<p>The Modern Poland Foundation has the status of a public benefit organization (Pol. organizacja po\u017cytku publicznego) thanks to which Wolne Lektury can receive 1% of income tax from individuals. To help us in this way, it is necessary to fill in the correct space in the annual tax return (PIT-36, PIT-37 or PIT-28), providing the name:</p>\r\nFundacja Nowoczesna Polska <br/>\r\nand the National Court Register number - Krajowy Rejestr S\u0105dowy (KRS) 0000070056<br/>", + "right_column_fr": "<p><strong>Faites une donation au projet Wolne Lektury</strong></p>\r\n<p>Chaque somme donn\u00e9e servira au d\u00e9veloppement de notre biblioth\u00e8que. Il suffit de verser l'argent sur le compte:</p>\r\n\r\nFundacja Nowoczesna Polska<br/>\r\nul. Marsza\u0142kowska 84/92 lok. 125<br/>\r\n00-514 Warszawa<br/>\r\nLe num\u00e9ro de compte: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\nLe libell\u00e9 de virement: Darowizna na Wolne Lektury<br/>\r\n", + "title_ru": "\ufeff\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438 \u043d\u0430\u0441!", + "title_it": "Sostienici" + } + } +] \ No newline at end of file diff --git a/src/infopages/locale/de/LC_MESSAGES/django.mo b/src/infopages/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..80a39d9e6 Binary files /dev/null and b/src/infopages/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/infopages/locale/de/LC_MESSAGES/django.po b/src/infopages/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..5d8ff58e9 --- /dev/null +++ b/src/infopages/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,1217 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: \n" +"Last-Translator: Kamil <kjaklukowski@gmail.com>\n" +"Language-Team: de <yourteam@example.com>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 +msgid "main page priority" +msgstr "" + +#: models.py:12 +msgid "slug" +msgstr "" + +#: models.py:13 +msgid "title" +msgstr "" + +#: models.py:14 +msgid "left column" +msgstr "" + +#: models.py:15 +msgid "right column" +msgstr "" + +#: models.py:19 +msgid "info page" +msgstr "" + +#: models.py:20 +msgid "info pages" +msgstr "" + +#~ msgid "Wolontariat dla wiedzy" +#~ msgstr "Volontariat für Wissen" + +#~ msgid "" +#~ "<h2>Wolontariat</h2>\r\n" +#~ "\t<p>\r\n" +#~ "\t\tBiogramy pisarzy oraz definicje epok i gatunków literackich w\r\n" +#~ "\t\tbibliotece internetowej Wolne Lektury napisali uczniowie\r\n" +#~ "\t\tczterech szkóŠpodczas warsztatów âWolontariat dla wiedzyâ.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t\tUczniowie pracowali wspólnie pod merytorycznym nadzorem\r\n" +#~ "\t\tnauczycieli i specjalistów â literaturoznawców na\r\n" +#~ "\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n" +#~ "\r\n" +#~ "\t\t\tplatformie internetowej wiki</a>\r\n" +#~ "\t\tprzygotowanej przez zespóÅ\r\n" +#~ "\t\t<a href=\"http://2ia.pl/\">2ia</a>. Praca nad notami byÅa " +#~ "jednoczeÅnie naukÄ wykorzystywania\r\n" +#~ "\t\tkomputerów i internetu do wyszukiwania informacji, a także\r\n" +#~ "\t\tweryfikowania ich wiarygodnoÅci.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t\tProjekt \"Wolontariat dla wiedzy\" zostaÅ zrealizowany dziÄki\r\n" +#~ "\t\twsparciu\r\n" +#~ "\t\t<a href=\"http://www.menis.gov.pl/\">\r\n" +#~ "\t\t\tMinisterstwa Edukacji Narodowej</a>. Nagrody dla uczniów ufundowali" +#~ "\r\n" +#~ "\t\t<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n" +#~ "\r\n" +#~ "\t\t\tWydawnictwo Nasza KsiÄgarnia</a>\r\n" +#~ "\t\ti\r\n" +#~ "\t\t<a href=\"http://helion.pl/\">Wydawnictwo Helion</a>. Noty " +#~ "zweryfikowano w serwisie\r\n" +#~ "\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n" +#~ "\t\t\tPlagiat.pl</a>.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t\t<a href=\"/static/wolontariat.pdf\">Raport z realizacji projektu " +#~ "âWolontariat dla wiedzy\"</a>.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />" +#~ "\r\n" +#~ "\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n" +#~ "\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n" +#~ " <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />" +#~ "\r\n" +#~ " <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />" +#~ "\r\n" +#~ "\t</p>\r\n" +#~ msgstr "" +#~ "<h2>Volontariat</h2>\r\n" +#~ "\t<p>\r\n" +#~ "\t\tSchriftsteller-Biographien und Definitionen von Epochen und " +#~ "Literaturgattungen\r\n" +#~ " in der Internetbibliothek Freie Lektüren haben unsere Schüler aus vier" +#~ "\r\n" +#~ " Schulen während Workshops \"Volontariat für Wissen\" geschrieben.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t\tDie Schüler haben gemeinsam unter Aufsicht der Lehrer\r\n" +#~ "\t\tund Spezialisten -Literaturwissenschaftler - gearbeitet\r\n" +#~ "\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n" +#~ "\r\n" +#~ "\t\t\tauf \"wiki\" Internetplattform</a>\r\n" +#~ "\t\tvorbereitet von unserem Team\r\n" +#~ "\t\t<a href=\"http://2ia.pl/\">2ia</a>. Der Einsatz von Computer und " +#~ "Internet wurde\r\n" +#~ "\t\t- während der Arbeiten an Noten - für die Informationssuche und " +#~ "Informationsprüfung genutzt\r\n" +#~ "\t\tund gleichzeitig als notwendiges Werkzeug in den Lernprozess " +#~ "einbezogen.\r\n" +#~ "\t</p>\r\n" +#~ " \r\n" +#~ "\t<p>\r\n" +#~ "\t\tDas Projekt \"Volontariat für Wissen\" wurde dank der Unterstützung " +#~ "umgesetzt, von\r\n" +#~ "\t\t<a href=\"http://www.menis.gov.pl/\">\r\n" +#~ "\t\t\tMinisterium für Bildung</a>. Preise für Schüler spendeten\r\n" +#~ "\t\t<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n" +#~ "\r\n" +#~ "\t\t\tVerlag unsere Buchhandlung</a>\r\n" +#~ "\t\tund\r\n" +#~ "\t\t<a href=\"http://helion.pl/\">Wydawnictwo Helion</a>. Noten wurden im " +#~ "Service verifiziert\r\n" +#~ "\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n" +#~ "\t\t\tPlagiat.pl</a>.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t\t<a href=\"/static/wolontariat.pdf\">der Bericht über das Projekt " +#~ "\"Volontariat für Wissen\"</a>.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />" +#~ "\r\n" +#~ "\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n" +#~ "\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n" +#~ " <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />" +#~ "\r\n" +#~ " <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />" +#~ "\r\n" +#~ "\t</p>\r\n" + +#~ msgid "" +#~ "\t<h2>Autorzy</h2>\r\n" +#~ "\r\n" +#~ "\t<ol>\r\n" +#~ "\t\t<li>\r\n" +#~ "\t\t\t<p>\r\n" +#~ "\t\t\t\tGimnazjum nr 40 z OddziaÅami Integracyjnymi w Zespole\r\n" +#~ "\t\t\t\tSzkóŠnr 69 im. Armii Krajowej Grupy Bojowej âKRYBARâ,\r\n" +#~ "\t\t\t\tul. Drewniana 8, 00-345 Warszawa; klasa druga pod opiekÄ \r\n" +#~ "\t\t\t\tAnny Budziarek-Friedrich:\r\n" +#~ "\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t<ul>\r\n" +#~ "\t\t\t\t<li>Burdon Filip;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>DÄbski Bartek;</li>\r\n" +#~ "\t\t\t\t<li>Jackowicz Kamil;</li>\r\n" +#~ "\t\t\t\t<li>Kurek PaweÅ;</li>\r\n" +#~ "\t\t\t\t<li>Makles Bartosz;</li>\r\n" +#~ "\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n" +#~ "\t\t\t\t<li>MigdaÅ Katarzyna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Mioduszewski MichaÅ;</li>\r\n" +#~ "\t\t\t\t<li>Pfeiffer Ida;</li>\r\n" +#~ "\t\t\t\t<li>PÅaskowicka Karolina;</li>\r\n" +#~ "\t\t\t\t<li>Sailer Ewa.</li>\r\n" +#~ "\t\t\t</ul>\r\n" +#~ "\t\t</li>\r\n" +#~ "\r\n" +#~ "\t\t<li>\r\n" +#~ "\t\t\t<p>\r\n" +#~ "\t\t\t\tXXXIII Liceum OgólnoksztaÅcÄ ce im. MikoÅaja Kopernika,\r\n" +#~ "\t\t\t\tul. Bema 76, 01-225 Warszawa; klasa pierwsza o profilu\r\n" +#~ "\t\t\t\tbiologiczno-chemicznym pod opiekÄ Elżbiety Konkowskiej:\r\n" +#~ "\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t<ul>\r\n" +#~ "\t\t\t\t<li>Chwil BartÅomiej;</li>\r\n" +#~ "\t\t\t\t<li>Czarnecka Natalia;</li>\r\n" +#~ "\t\t\t\t<li>GawroÅska Iga;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Grabarczyk Marta;</li>\r\n" +#~ "\t\t\t\t<li>JastrzÄ b Katarzyna;</li>\r\n" +#~ "\t\t\t\t<li>Krawczak Olga;</li>\r\n" +#~ "\t\t\t\t<li>Krawczyk Marianna;</li>\r\n" +#~ "\t\t\t\t<li>Kur Natalia;</li>\r\n" +#~ "\t\t\t\t<li>Kwiatek Marta;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>LaÅkiewicz Joanna;</li>\r\n" +#~ "\t\t\t\t<li>MachczyÅska Daria;</li>\r\n" +#~ "\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n" +#~ "\t\t\t\t<li>Moczulska Karolina;</li>\r\n" +#~ "\t\t\t\t<li>MoÅcicka Aneta;</li>\r\n" +#~ "\t\t\t\t<li>Narloch Sabina;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Przybysz PaweÅ;</li>\r\n" +#~ "\t\t\t\t<li>Puchta Marek;</li>\r\n" +#~ "\t\t\t\t<li>Ryska Cezary;</li>\r\n" +#~ "\t\t\t\t<li>Sandomierski BartÅomiej;</li>\r\n" +#~ "\t\t\t\t<li>SÅawiÅski Tomasz;</li>\r\n" +#~ "\t\t\t\t<li>SÅowik Olga;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n" +#~ "\t\t\t\t<li>Strzelczak Karolina;</li>\r\n" +#~ "\t\t\t\t<li>Szafran Danuta;</li>\r\n" +#~ "\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n" +#~ "\t\t\t\t<li>Szulkowska Alicja;</li>\r\n" +#~ "\t\t\t\t<li>Ålusarczyk Anna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Tytkowska Anna.</li>\r\n" +#~ "\t\t\t</ul>\r\n" +#~ "\t\t\t<li>\r\n" +#~ "\t\t\t\t<p>\r\n" +#~ "\t\t\t\t\tAutorskie Niepubliczne Liceum OgólnoksztaÅcÄ ce nr\r\n" +#~ "\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; klasa pierwsza\r\n" +#~ "\t\t\t\t\to profilu ogólnym pod opiekÄ MichaÅa Friedricha:\r\n" +#~ "\t\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<ul>\r\n" +#~ "\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>GoÅaszewska Ewa;</li>\r\n" +#~ "\t\t\t\t\t<li>Kwiatkowski MichaÅ;</li>\r\n" +#~ "\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n" +#~ "\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n" +#~ "\t\t\t\t\t<li>Przespolewski PrzemysÅaw;</li>\r\n" +#~ "\t\t\t\t\t<li>RosiÅska Zuzanna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n" +#~ "\t\t\t\t</ul>\r\n" +#~ "\t\t\t</li>\r\n" +#~ "\t\t\t<li>\r\n" +#~ "\t\t\t\t<p>\r\n" +#~ "\t\t\t\t\tLXIV Liceum OgólnoksztaÅcÄ ce im. St. I. Witkiewicza,\r\n" +#~ "\t\t\t\t\tul. ElblÄ ska 51, 01-737 Warszawa; klasa pierwsza o\r\n" +#~ "\t\t\t\t\tprofilu ogólnym pod opiekÄ Daniela Zycha:\r\n" +#~ "\t\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<ul>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n" +#~ "\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n" +#~ "\t\t\t\t\t<li>DrÄ gowska Katarzyna;</li>\r\n" +#~ "\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n" +#~ "\t\t\t\t\t<li>GÅowacki Jan;</li>\r\n" +#~ "\t\t\t\t\t<li>Grad PaweÅ;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n" +#~ "\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n" +#~ "\t\t\t\t\t<li>KÅos Aneta;</li>\r\n" +#~ "\t\t\t\t\t<li>KozieÅ Barbara;</li>\r\n" +#~ "\t\t\t\t\t<li>KozÅowska Anna;</li>\r\n" +#~ "\t\t\t\t\t<li>Krug Pamela;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n" +#~ "\t\t\t\t\t<li>LubaÅ MichaÅ;</li>\r\n" +#~ "\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n" +#~ "\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n" +#~ "\t\t\t\t\t<li>Modelska Marta;</li>\r\n" +#~ "\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n" +#~ "\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n" +#~ "\t\t\t\t\t<li>Pielat Zofia;</li>\r\n" +#~ "\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n" +#~ "\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n" +#~ "\t\t\t\t\t<li>Rosa Karolina;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>SmyczyÅska Kamila;</li>\r\n" +#~ "\t\t\t\t\t<li>StoliÅska Barbara;</li>\r\n" +#~ "\t\t\t\t\t<li>SzymaÅska Katarzyna;</li>\r\n" +#~ "\t\t\t\t\t<li>Åcibior Ewa;</li>\r\n" +#~ "\t\t\t\t\t<li>Witczak Magda;</li>\r\n" +#~ "\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n" +#~ "\t\t\t\t\t<li>ZióÅkowska Adrianna.</li>\r\n" +#~ "\t\t\t\t</ul>\r\n" +#~ "\t\t\t</li>\r\n" +#~ "\t </li>\r\n" +#~ "\t </ol>\r\n" +#~ msgstr "" +#~ "\t<h2>Autoren</h2>\r\n" +#~ "\r\n" +#~ "\t<ol>\r\n" +#~ "\t\t<li>\r\n" +#~ "\t\t\t<p>\r\n" +#~ "\t\t\t\tGymnasium Nr. 40 mit Integrationsabteilungen \r\n" +#~ "\t\t\t\tSchulverbund Nr. 69 Schulname: Armii Krajowej Grupy Bojowej " +#~ "âKRYBARâ, \r\n" +#~ "\t\t\t\tStr. Drewniana 8, 00-345 Warszawa; 2. Klasse\r\n" +#~ "\t\t\t\tKlassenlehrerin: Anna Budziarek-Friedrich:\r\n" +#~ "\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t<ul>\r\n" +#~ "\t\t\t\t<li>Burdon Filip;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>DÄbski Bartek;</li>\r\n" +#~ "\t\t\t\t<li>Jackowicz Kamil;</li>\r\n" +#~ "\t\t\t\t<li>Kurek PaweÅ;</li>\r\n" +#~ "\t\t\t\t<li>Makles Bartosz;</li>\r\n" +#~ "\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n" +#~ "\t\t\t\t<li>MigdaÅ Katarzyna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Mioduszewski MichaÅ;</li>\r\n" +#~ "\t\t\t\t<li>Pfeiffer Ida;</li>\r\n" +#~ "\t\t\t\t<li>PÅaskowicka Karolina;</li>\r\n" +#~ "\t\t\t\t<li>Sailer Ewa.</li>\r\n" +#~ "\t\t\t</ul>\r\n" +#~ "\t\t</li>\r\n" +#~ "\r\n" +#~ "\t\t<li>\r\n" +#~ "\t\t\t<p>\r\n" +#~ "\t\t\t\tXXXIII Kopernikus Oberschule,\r\n" +#~ "\t\t\t\tStr. Bema 76, 01-225 Warszawa; 1. Klasse; \r\n" +#~ "\t\t\t\tFachbereiche: Biologie-Chemie; Klassenlehrerin: Elżbieta " +#~ "Konkowska:\r\n" +#~ "\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t<ul>\r\n" +#~ "\t\t\t\t<li>Chwil BartÅomiej;</li>\r\n" +#~ "\t\t\t\t<li>Czarnecka Natalia;</li>\r\n" +#~ "\t\t\t\t<li>GawroÅska Iga;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Grabarczyk Marta;</li>\r\n" +#~ "\t\t\t\t<li>JastrzÄ b Katarzyna;</li>\r\n" +#~ "\t\t\t\t<li>Krawczak Olga;</li>\r\n" +#~ "\t\t\t\t<li>Krawczyk Marianna;</li>\r\n" +#~ "\t\t\t\t<li>Kur Natalia;</li>\r\n" +#~ "\t\t\t\t<li>Kwiatek Marta;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>LaÅkiewicz Joanna;</li>\r\n" +#~ "\t\t\t\t<li>MachczyÅska Daria;</li>\r\n" +#~ "\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n" +#~ "\t\t\t\t<li>Moczulska Karolina;</li>\r\n" +#~ "\t\t\t\t<li>MoÅcicka Aneta;</li>\r\n" +#~ "\t\t\t\t<li>Narloch Sabina;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Przybysz PaweÅ;</li>\r\n" +#~ "\t\t\t\t<li>Puchta Marek;</li>\r\n" +#~ "\t\t\t\t<li>Ryska Cezary;</li>\r\n" +#~ "\t\t\t\t<li>Sandomierski BartÅomiej;</li>\r\n" +#~ "\t\t\t\t<li>SÅawiÅski Tomasz;</li>\r\n" +#~ "\t\t\t\t<li>SÅowik Olga;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n" +#~ "\t\t\t\t<li>Strzelczak Karolina;</li>\r\n" +#~ "\t\t\t\t<li>Szafran Danuta;</li>\r\n" +#~ "\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n" +#~ "\t\t\t\t<li>Szulkowska Alicja;</li>\r\n" +#~ "\t\t\t\t<li>Ålusarczyk Anna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Tytkowska Anna.</li>\r\n" +#~ "\t\t\t</ul>\r\n" +#~ "\t\t\t<li>\r\n" +#~ "\t\t\t\t<p>\r\n" +#~ "\t\t\t\t\tPrivate Oberschule Nr 42,\r\n" +#~ "\t\t\t\t\tStr. Iwicka 47 B, 00-735 Warszawa; 1. Klasse\r\n" +#~ "\t\t\t\t\tFachbereich: Allgemeinbildung; Klassenlehrer: MichaÅ Friedrich:" +#~ "\r\n" +#~ "\t\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<ul>\r\n" +#~ "\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>GoÅaszewska Ewa;</li>\r\n" +#~ "\t\t\t\t\t<li>Kwiatkowski MichaÅ;</li>\r\n" +#~ "\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n" +#~ "\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n" +#~ "\t\t\t\t\t<li>Przespolewski PrzemysÅaw;</li>\r\n" +#~ "\t\t\t\t\t<li>RosiÅska Zuzanna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n" +#~ "\t\t\t\t</ul>\r\n" +#~ "\t\t\t</li>\r\n" +#~ "\t\t\t<li>\r\n" +#~ "\t\t\t\t<p>\r\n" +#~ "\t\t\t\t\tLXIV Witkiewicz Oberschule,\r\n" +#~ "\t\t\t\t\tStr. ElblÄ ska 51, 01-737 Warszawa; 1. Klasse, \r\n" +#~ "\t\t\t\t\tFachbereich: Allgemeinbildung; Klassenlehrer: Daniel Zych:\r\n" +#~ "\t\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<ul>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n" +#~ "\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n" +#~ "\t\t\t\t\t<li>DrÄ gowska Katarzyna;</li>\r\n" +#~ "\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n" +#~ "\t\t\t\t\t<li>GÅowacki Jan;</li>\r\n" +#~ "\t\t\t\t\t<li>Grad PaweÅ;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n" +#~ "\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n" +#~ "\t\t\t\t\t<li>KÅos Aneta;</li>\r\n" +#~ "\t\t\t\t\t<li>KozieÅ Barbara;</li>\r\n" +#~ "\t\t\t\t\t<li>KozÅowska Anna;</li>\r\n" +#~ "\t\t\t\t\t<li>Krug Pamela;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n" +#~ "\t\t\t\t\t<li>LubaÅ MichaÅ;</li>\r\n" +#~ "\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n" +#~ "\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n" +#~ "\t\t\t\t\t<li>Modelska Marta;</li>\r\n" +#~ "\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n" +#~ "\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n" +#~ "\t\t\t\t\t<li>Pielat Zofia;</li>\r\n" +#~ "\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n" +#~ "\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n" +#~ "\t\t\t\t\t<li>Rosa Karolina;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>SmyczyÅska Kamila;</li>\r\n" +#~ "\t\t\t\t\t<li>StoliÅska Barbara;</li>\r\n" +#~ "\t\t\t\t\t<li>SzymaÅska Katarzyna;</li>\r\n" +#~ "\t\t\t\t\t<li>Åcibior Ewa;</li>\r\n" +#~ "\t\t\t\t\t<li>Witczak Magda;</li>\r\n" +#~ "\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n" +#~ "\t\t\t\t\t<li>ZióÅkowska Adrianna.</li>\r\n" +#~ "\t\t\t\t</ul>\r\n" +#~ "\t\t\t</li>\r\n" +#~ "\t </li>\r\n" +#~ "\t </ol>\r\n" + +#~ msgid "Możesz nam pomóc" +#~ msgstr "Du kannst uns helfen" + +#~ msgid "" +#~ "<h2>Wolontariat w Wolnych Lekturach</h2>\r\n" +#~ "<ul>\r\n" +#~ "<li>ZostaÅ naszym redaktorem, programistÄ lub tÅumaczem â wolontariuszem." +#~ "</li>\r\n" +#~ "<li>ZdobÄ dź nowe umiejÄtnoÅci i doÅwiadczenie. </li>\r\n" +#~ "<li>Weź udziaÅ w otwartym projekcie i twórz innowacyjnÄ bibliotekÄ " +#~ "internetowÄ . </li>\r\n" +#~ "</ul>\r\n" +#~ "<p>DziÄki pracy naszych wolontariuszy opublikowaliÅmy już ponad <b>1500 " +#~ "lektur</b>, z których skorzystaÅy ponad <b>3 miliony</b> czytelników z " +#~ "caÅego Åwiata. </p>\r\n" +#~ "<p>Zapraszamy wszystkie osoby, które chcÄ wspóÅtworzyÄ nasz projekt. " +#~ "WspóÅpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " +#~ "literaturÄ , redagowaniem tekstów i projektami informatycznymi. Oferujemy " +#~ "profesjonalne szkolenia i staÅÄ pomoc merytorycznÄ . Wolontariusze mogÄ " +#~ "pracowaÄ zdalnie lub w siedzibie Fundacji.</p>\r\n" +#~ "<p>Organizujemy również praktyki studenckie â nawiÄ zaliÅmy wspóÅpracÄ z " +#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " +#~ "Karier UKSW oraz WydziaÅem Fizyki UW. </p>\r\n" +#~ "\r\n" +#~ "<h2>Jak siÄ do nas zgÅosiÄ?</h2>\r\n" +#~ "<p>Wszystkie zainteresowane osoby prosimy o przysÅanie maila na adres <a " +#~ "href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n" +#~ msgstr "" +#~ "<h2>Volontariat</h2>\r\n" +#~ "\r\n" +#~ " <p>Wir sind stets bemüht, unseren Bibliothekbestand ständig um " +#~ "neue Werke zu erweitern. Dies ist nur \r\n" +#~ " dank der Hilfe unserer Volontäre möglich.</p>\r\n" +#~ "\r\n" +#~ " <p>Wir laden herzlich alle Menschen ein, die sich an der " +#~ "Mitgestaltung unserer Internet-Schulbibliothek beteiligen wollen.</p>\r\n" +#~ " \r\n" +#~ " \r\n" +#~ " \r\n" +#~ " <p>Allen Volontären bieten wir Schulungen und Praktikum im " +#~ "Bereich der Textverarbeitung an: \r\n" +#~ " technische und sachliche Redaktion. Volontäre können mehr über " +#~ "Probleme und Möglichkeiten erfahren, \r\n" +#~ " die mit der Veröffentlichung von Internetpublikationen verbunden " +#~ "sind. Unsere Volontäre beteiligen \r\n" +#~ " sich zudem an der Organisation von Schulungen und Konferenzen, " +#~ "helfen bei der Vorbereitung \r\n" +#~ " von Hörtexten (sog. Audiobooks). Wir stellen Verträge und " +#~ "Bescheinigungen unseren Volontären \r\n" +#~ " bezüglich der Art der Tätigkeit und deren Zeitrahmen aus. " +#~ "Schulungen, Verlagspraktikum sowie \r\n" +#~ " während des Volontariats erworbene Erfahrungen und Kompetenzen " +#~ "können ganz gewiss zum beruflichen Aufstieg verhelfen.</p> \r\n" +#~ " \r\n" +#~ " \r\n" +#~ " <h2>Was zu tun ist?</h2>\r\n" +#~ " \r\n" +#~ " <p>Der GroÃteil der Arbeit liegt in der Vorbereitung der Lektüren " +#~ "zur Veröffentlichung. Die Texte, die wir \r\n" +#~ " von der Nationalbibliothek bekommen, müssen auf Tipp- und andere " +#~ "mechanische Fehler überprüft werden. \r\n" +#~ " Die Anmerkungen müssen in den Text eingefügt werden. Es sei zu " +#~ "bedenken, dass unsere Zielgruppe Schüler sind, \r\n" +#~ " so müssen dementsprechend die Wörter und Wendungen an diese " +#~ "Altersgruppe angepasst werden. Ãltere Ausgaben \r\n" +#~ " (hier gilt das strenge Uhrheberrecht) werden stets in Hinblick " +#~ "auf Rechtsschreibung und Flexion an die \r\n" +#~ " Gegenwartssprache angepasst und zwar unter gleichzeitiger " +#~ "Beachtung der Einheit von Form und literarischen Stilen. \r\n" +#~ " Das Aussuchen von literarischen Motiven und Themen, die uns " +#~ "helfen sollen, Literaturinhalte tiefgreifend zu verstehen, \r\n" +#~ " schlieÃen unsere Projektarbeiten ab. Bei allen diesen " +#~ "Unternehmungen helfen uns Volontäre - Lehrer sowie Schüller - \r\n" +#~ " die uns mit eigenen Ratschlägen und Bemerkungen bei der " +#~ "Entscheidungsfindung unterstützen.</p>\r\n" +#~ " \r\n" +#~ " \r\n" +#~ " <h2>Wie Sie uns erreichen?</h2>\r\n" +#~ " \r\n" +#~ " <p>Personen, die an der Zusammenarbeit interessiert sind, bitten " +#~ "wir um eine E-Mail an folgende Adresse zu richten: <a href=\"mail:" +#~ "fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</" +#~ "p>\r\n" +#~ "\r\n" +#~ " <p>Wir laden Sie auch ein unter <a href=\"http://redakcja." +#~ "wolnelektury.pl/documents/catalogue/\">Redaktonseite der Freien Lektüren</" +#~ "a>, auf unserer Hompage finden Sie nützliche Informationen rund um das " +#~ "Thema Redaktionsarbeit.</p>\r\n" + +#~ msgid "" +#~ "<h2>Kogo szukamy?</h2>\r\n" +#~ "\r\n" +#~ "<h3>Redaktorów technicznych (skÅad tekstu) </h3>\r\n" +#~ " <p>SkÅad jest pierwszym etapem pracy nad tekstem. Za pomocÄ znaczników " +#~ "jÄzyka WL-XML nadajemy tekstowi poÅ¼Ä danÄ formÄ i umożliwiamy wyÅwietlenie " +#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na <a " +#~ "href=\"http://redakcja.wolnelektury.pl\">Platformie Redakcyjnej</a>, " +#~ "która pozwala na zautomatyzowanie dużej czÄÅci pracy. </p>\r\n" +#~ "\r\n" +#~ " <p><b>Kto może zostaÄ redaktorem technicznym?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Każdy â po krótkim szkoleniu.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>WiÄcej informacji o redakcji technicznej znajdziecie na <a href=" +#~ "\"http://redakcja.wolnelektury.pl/documents/catalogue/\">stronie redakcji " +#~ "Wolnych Lektur</a> </p>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Redaktorów literackich (merytorycznych) </h3>\r\n" +#~ " <p>Redakcja literacka obejmuje korektÄ, uwspóÅczeÅnienia oraz dodawanie " +#~ "przypisów i motywów literackich. To unikalna możliwoÅÄ zdobycia " +#~ "doÅwiadczenia w cyfrowej edycji tekstów. </p>\r\n" +#~ "\r\n" +#~ " <p><b>Kto może zostaÄ redaktorem literackim? </b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Osoby, które majÄ doÅwiadczenie w redakcji tekstów literackich,</li>" +#~ "\r\n" +#~ "<li>Studenci i absolwenci studiów humanistycznych, którzy chcÄ takie " +#~ "doÅwiadczenie zdobyÄ. </li>\r\n" +#~ "</ul>\r\n" +#~ "<p>WiÄcej informacji o redakcji merytorycznej znajdziecie na <a href=" +#~ "\"http://redakcja.wolnelektury.pl/documents/catalogue/\">stronie redakcji " +#~ "Wolnych Lektur</a> </p>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>TÅumaczy</h3>\r\n" +#~ " <p>Strona WolneLektury.pl jest dostÄpna w siedmiu jÄzykach obcych â " +#~ "angielskim, francuskim, niemieckim, hiszpaÅskim, litewskim, rosyjskim " +#~ "oraz ukraiÅskim. Użytkownikami biblioteki jest ponad 200 tysiÄcy osób z " +#~ "zagranicy, a już niedÅugo nasze zbiory obejmÄ również dzieÅa w jÄzykach " +#~ "obcych. Dlatego potrzebujemy na bieÅ¼Ä co tÅumaczyÄ nowe informacje " +#~ "pojawiajÄ ce siÄ na stronie. </p>\r\n" +#~ " <p><b>Kto może pomóc w tÅumaczeniach? </b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Każdy, kto dobrze zna co najmniej jeden z powyższych jÄzyków. </li>" +#~ "\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Programistów</h3>\r\n" +#~ " <p>Poza samÄ stronÄ Wolnych Lektur tworzymy również: </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>narzÄdzia redakcyjne,</li>\r\n" +#~ "<li>konwertery do różnych formatów e-booków, </li>\r\n" +#~ "<li>aplikacje mobile uÅatwiajÄ ce dostÄp do naszych zasobów.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " +#~ "jQuery, LaTeX, Java.\r\n" +#~ "Tworzone przez nas oprogramowanie udostÄpniamy na <a href=\"https://" +#~ "github.com/fnp/\">wolnej licencji</a>. </p>\r\n" +#~ " <p><b>Kto może pomóc w pracach programistycznych?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Każdy, kto umie i chciaÅby zdobyÄ punkty do karmy za udziaÅ w " +#~ "otwartym projekcie programistycznym. ;)</li>\r\n" +#~ "</ul>\r\n" +#~ msgstr "" +#~ "<h2>Wohlverdiente Volontäre</h2>\r\n" +#~ "\r\n" +#~ "\t<h3>Agatapaszkowska (Mitarbeit seit 15. März 2008)</h3>\r\n" +#~ "\r\n" +#~ " <p>bearbeitete u.a. \"Durch Wüste und Wildnis\" von Sienkiewicz; " +#~ "s. auf unserer Website die \"Benutzerbeiträge\": <a href=\"http://wiki." +#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki." +#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\t<h3>AgnieszkaKappa (Mitarbeit seit 16. März 2008)</h3>\r\n" +#~ "\r\n" +#~ " <p>arbeitete u.a. an der Erstellung der Liste und Beschreibung " +#~ "der literarischen Themen und Motive;bearbeitete Texten von Sienkiewicz " +#~ "( Der Leuchtturmwärter, Janko der Musikant, Quo vadis);s. auf unserer " +#~ "Website die \"Benutzerbeiträge\": <a href=\"http://wiki.wolnepodreczniki." +#~ "pl/index.php?title=Specjalna:Wk%C5%82ad&limit=500&" +#~ "target=AgnieszkaKappa\">http://wiki.wolnepodreczniki.pl/index.php?" +#~ "title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>" +#~ "\r\n" +#~ "\r\n" +#~ "\r\n" +#~ " \r\n" +#~ " \r\n" +#~ "\r\n" +#~ " <h3>Anerys (Mitarbeit seit 5. Juli 2007)</h3>\r\n" +#~ "\r\n" +#~ " <p>arbeitete u.a. an der Erstellung der Liste und Beschreibung " +#~ "der literarischen Themen und Motive;nahm an der Diskussion über " +#~ "Literaturgattungen teil, bearbeitete folgende Werke: Bogurodzica, " +#~ "\"Spruchgedichte\" und \"Klagelieder\" von Kochanowski; Gedichte von " +#~ "Slowacki ( Agamemnons Grab), \"Tartuffe oder der Betrüger\" von Moliere, " +#~ "ob Poesien von Kasprowicz (u.a. eine Hymne \"Dies Irae\"); s. auf " +#~ "unserer Website die \"Benutzerbeiträge\": <a href=\"http://wiki." +#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://wiki." +#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n" +#~ " \r\n" +#~ "\r\n" +#~ "\t<h3>EmiliaZdankiewicz (Mitarbeit seit 17. März 2008)</h3>\r\n" +#~ "\r\n" +#~ " <p>nahm u.a. an der Diskussion und Beschreibung literarischer " +#~ "Motive teil, SÅowacki, Kordian; Konopnicka, Unsere Mähre; Mickiewicz, " +#~ "Totenfeier Teil III; s. auf unserer Website die \"Benutzerbeiträge\": <a " +#~ "href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/" +#~ "EmiliaZdankiewicz\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/" +#~ "EmiliaZdankiewicz</a></p>\r\n" +#~ "\r\n" +#~ " \r\n" +#~ "\t\r\n" +#~ "\t<h3>Ewa_Serafin (Mitarbeit seit 15. März 2008)</h3>\r\n" +#~ "\r\n" +#~ " <p>arbeitete u.a. an der Erstellung der Liste und Beschreibung " +#~ "der literarischen Themen und Motive, bearbeitete Kasprowicz Gedichte (âZ " +#~ "wichrów i halâ, âNad przepaÅciamiâ, âW ciemnoÅci schodzi moja duszaâ oraz " +#~ "âNad Niemnemâ Orzeszkowej; s. auf unserer Website die \"Benutzerbeiträge" +#~ "\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/" +#~ "Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/" +#~ "Ewa_Serafi</a>n</p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ " \t<h3>Hanna_Golab (Mitarbeit seit 15. März 2008)</h3>\r\n" +#~ "\r\n" +#~ " <p>bearbeitete \" König Ãdipus\" von Sophokles sowie \"DusioÅek" +#~ "\" von Lesmian; s. auf unserer Website die \"Benutzerbeiträge\": <a href=" +#~ "\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab" +#~ "\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></" +#~ "p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\t<h3>Ingene (Mitarbeit seit 16. Juli 2008)</h3>\r\n" +#~ "\r\n" +#~ " <p>bearbeitete u.a. âSiÅaczkaâ von Å»eromski, âQuo vadisâ von " +#~ "Sienkiewicz sowie âKlageliederâ von Kochanowski; s. auf unserer Website " +#~ "die \"Benutzerbeiträge\": <a href=\"http://wiki.wolnepodreczniki.pl/" +#~ "Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk" +#~ "%C5%82ad/Ingene</a></p>\r\n" +#~ " \r\n" +#~ "\t<h3>Jmyszkowska (Mitarbeit seit 26. März 2008)</h3>\r\n" +#~ "\r\n" +#~ " <p>bearbeitete u.a. âGiaurâ von Byron sowie âQuo vadisâ von " +#~ "Sienkiewicz; s. auf unserer Website die \"Benutzerbeiträge\": <a href=" +#~ "\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska" +#~ "\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></" +#~ "p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ " <h3>Marysiabailey (Mitarbeit seit 1. Oktober 2007)</h3>\r\n" +#~ "\r\n" +#~ " <p>arbeitete u.a. an der Erstellung der Liste und Beschreibung " +#~ "der literarischen Themen und Motive sowie deren Benutzung; bearbeitete " +#~ "folgende Werke: \"Die Bauern\" von Reymont, \"Die Puppe\" von Prus, \"Un-" +#~ "göttliche Komödie\" von Krasinski, \"Märchens\" und \"Satire\" von " +#~ "Krasickiego, \"Antigone\" von Sophokles sowie Werke von Kochanowski, " +#~ "Morsztyn, Mickiewicz, Kasprowicz, Goethe, Oppman, Kasprowicz; s. auf " +#~ "unserer Website die \"Benutzerbeiträgeâ: <a href=\"http://wiki." +#~ "wolnepodreczniki.pl/index.php?title=Specjalna:Wk%C5%82ad&" +#~ "limit=500&target=Marysiabailey\">http://wiki.wolnepodreczniki.pl/" +#~ "index.php?title=Specjalna:Wk%C5%82ad&limit=500&" +#~ "target=Marysiabailey</a zusätzlich beteiligte sie sich am 15. März 2008 " +#~ "an der Organisation von Volontär-Schulungen, beschäftigte sich mit " +#~ "proofreading, gegenwärtig arbeitet sie an Hörbüchern.</p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ " <h3>Olga_Wojtczak (Mitarbeit seit 21. Oktober 2008)</h3>\r\n" +#~ "\r\n" +#~ " <p>bearbeitete u.a. Romane von Sienkiewicz ( Die Trilogie), " +#~ "Reymont, Å»eromski und Dramen von Shakespeare; s. auf unserer Website die " +#~ "\"Benutzerbeiträge\": <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:" +#~ "Wk%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk" +#~ "%C5%82ad/Olga_Wojtczak</a></p>\r\n" +#~ "\r\n" +#~ " <h3>Renataml (Mitarbeit seit 30. Juni 2007)</h3>\r\n" +#~ "\r\n" +#~ " <p>nahm an der Diskussion über Motivlisten teil, als erfahrene " +#~ "Lehrerin unterstützte sie uns mit vielen Ratschlägen, bearbeitete " +#~ "folgende Werke: \"Die Puppe\" von Prus, \"Balladyna\" von Slowacki, " +#~ "\"SiÅaczka\" Å»eromski.\r\n" +#~ "\r\n" +#~ " <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/" +#~ "Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</" +#~ "a></p>\r\n" + +#~ msgid "O projekcie" +#~ msgstr "Ãber das Projekt" + +#~ msgid "" +#~ "{% load reporting_stats %}\r\n" +#~ "\r\n" +#~ "<p><strong>Wolne Lektury to biblioteka internetowa czynna 24 godziny na " +#~ "dobÄ, 365 dni w roku i caÅkowicie darmowa</strong>. W jej zbiorach " +#~ "znajduje siÄ <strong>{% count_books %}</strong> utworów, w tym wiele " +#~ "lektur szkolnych zalecanych do użytku przez Ministerstwo Edukacji " +#~ "Narodowej, które trafiÅy już do domeny publicznej. Wszystkie dzieÅa sÄ " +#~ "odpowiednio opracowane - opatrzone przypisami, motywami i udostÄpnione w " +#~ "kilku formatach - <strong>HTML </strong>, <strong>TXT </strong>, " +#~ "<strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>. W " +#~ "bibliotece znajduje siÄ również kilkaset audiobooków, czytanych przez " +#~ "takich aktorów jak: Danuta Stenka, Jan Peszek czy Andrzej Chyra. Można " +#~ "ich sÅuchaÄ w formatach <strong>MP3</strong> i <strong>Ogg Vorbis</" +#~ "strong>. Audiobooki sÄ również dostÄpne w formacie <strong>DAISY </" +#~ "strong>dostosowanym do potrzeb osób sÅabowidzÄ cych, niewidomych oraz osób " +#~ "majÄ cych trudnoÅci z czytaniem.</p>\r\n" +#~ "\r\n" +#~ "<p>Biblioteka Wolne Lektury dostÄpna jest za poÅrednictwem aplikacji " +#~ "mobilnych â na system <a href=\"https://market.android.com/details?id=pl." +#~ "org.nowoczesnapolska.wlmobi\"> Android</a> oraz na system iOS. </p>\r\n" +#~ "\r\n" +#~ "<p><strong>Wszystkie utwory zamieszczone w bibliotece Wolne Lektury można " +#~ "zgodnie z prawem bezpÅatnie przeglÄ daÄ, sÅuchaÄ, ÅciÄ gaÄ na swój " +#~ "komputer, a także udostÄpniaÄ innym i cytowaÄ.</strong> </p>" +#~ msgstr "" +#~ "{% load reporting_stats %}\r\n" +#~ "\r\n" +#~ "<p><strong>Wolne Lektury ist eine Internetbibliothek, die 24 Stunden " +#~ "zugänglich ist, 365 Tage im Jahr, dazu völlig kostenlos</strong>. Sie " +#~ "beinhält <strong>{% count_books %}</strong> Werke, darunter viele " +#~ "Schullektüren, die durch das polnische Bildungsministerium empfohlen " +#~ "werden und die zur Gemeinfreiheit gehören. Alle Werke werden entsprechend " +#~ "bearbeitet - mit FuÃnoten und Motiven versehen sowie in verschiedenen " +#~ "Formaten zugänglich - <strong>HTML </strong>, <strong>TXT</strong>, " +#~ "<strong>PDF</strong>, <strong>EPUB</strong>, <strong>MOBI</strong>. In " +#~ "der Bibliothek befinden sich auch einige hundert von Hörbüchern, die von " +#~ "bekannten polnischen Schauspielern wie Danuta Stenka, Jan Peszek oder " +#~ "Andrzej Chyra vorgelesen werden. Es ist möglich sie in folgenden Formaten " +#~ "abzuspielen: <strong>MP3</strong> und <strong>Ogg Vorbis</strong>. " +#~ "Hörbücher sind auch im Format <strong>DAISY </strong> zugänglich, die für " +#~ "Bedürfnisse von Schwachsehenden, Blinden und Personen mit " +#~ "Lesenschwierigkeiten geeignet sind.</p>\r\n" +#~ "\r\n" +#~ "<p>Wolne Lektury-Bibliothek ist auch für Nutzer der mobilen Geräte " +#~ "zugänglich  für das System <a href=\"https://market.android.com/details?" +#~ "id=pl.org.nowoczesnapolska.wlmobi\"> Android</a> und für das System iOS. " +#~ "zugänglich </p>\r\n" +#~ "\r\n" +#~ "<p><strong>Alle in der Wolne Lektury-Bibliothek veröffentlichten Werke " +#~ "kann man rechtsmäÃig kostenlos durchsehen, hören, auf eigenen Computer " +#~ "herunterladen; überdies ist ihre Weitervermittlung und Anführung erlaubt." +#~ "</strong> </p>" + +#~ msgid "" +#~ "<p>Wolne Lektury to projekt fundacji Nowoczesna Polska realizowany pro " +#~ "publico bono, we wspóÅpracy z BibliotekÄ NarodowÄ , BibliotekÄ ÅlaskÄ oraz " +#~ "BibliotekÄ ElblÄ skÄ pod patronatem Ministerstwa Edukacji Narodowej, " +#~ "Ministerstwa Kultury i Dziedzictwa Narodowego oraz Stowarzyszenia Pisarzy " +#~ "Polskich. W Komitecie Honorowym Wolnych Lektur zasiadajÄ : prof. Maria " +#~ "Janion, prof. Grażyna Borkowska, prof. PrzemysÅaw CzapliÅski, prof. " +#~ "MieczysÅaw DÄ browski, prof. Ewa Kraskowska, prof. MaÅgorzata CzermiÅska, " +#~ "prof. Jerzy JarzÄbski i prof. Piotr ÅliwiÅski.</p>\r\n" +#~ "\r\n" +#~ "<p>WiÄkszoÅÄ utworów w bibliotece nie jest chroniona prawem autorskim i " +#~ "znajduje siÄ w domenie publicznej, co oznacza że można je swobodnie " +#~ "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 <a " +#~ "href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie " +#~ "autorstwa-Na tych samych warunkach 3.0</a>. Publikujemy również kilka " +#~ "utworów, które autorzy lub spadkobiercy praw udostÄpnili na wolnej " +#~ "licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl" +#~ "\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>.</p>\r\n" +#~ "\r\n" +#~ "Kontakt: wolnelektury@nowoczesnapolska.org.pl" +#~ msgstr "" +#~ "<p>Wolne Lektury ist ein pro bono Projekt der Stiftung Nowoczesna Polska " +#~ "(Modernes Polen), in Zusammenarbeit mit der Nationalbibliothek, der " +#~ "Schlesischen Bibliothek und der Elblinger Bibliothek unter dem Patronat " +#~ "des polnischen Bildungsministeriums und des Verbandes polnischer " +#~ "Schrifsteller (Stowarzyszenie Pisarzy Polskich). Im Ehrenkomitee von " +#~ "Wolne Lektury sind Prof. Maria Janion, Prof. Grażyna Borkowska, Prof. " +#~ "PrzemysÅaw Czapliñski, Prof. MieczysÅaw DÄ browski, Prof. Ewa Kraskowska, " +#~ "Prof. MaÅgorzata Czermiñska, Prof. Jerzy Jarzêbski und Prof. Piotr " +#~ "Åliwiñski tätig.</p>\r\n" +#~ "\r\n" +#~ "<p>Die Mehrheit von Bibliothekwerken steht nicht unter dem Schutz des " +#~ "Urheberrechts und gehört zu dem Gemeinfreiheitsbereich, was bedeutet, " +#~ "dass man sie frei veröffentlichen und vermitteln darf. Sollte das Werk " +#~ "mit zusätzlichen Angaben versehen werden (FüÃnoten und literarischen " +#~ "Motiven), die dem Urheberrechtsschutz unterliegen, sind diese " +#~ "zusätzlichen Angaben unter der Lizenz <a href=\"http://creativecommons." +#~ "org/licenses/by-sa/3.0/deed.pl\"> Urheberschaftanerkennung unter gleichen " +#~ "Bedigungen 3.0</a> verfügbar. Wir veröffentlichen auch Werke, die " +#~ "Verfasser oder Rechtsnachfolger unter der freien Lizenz <a href=\"http://" +#~ "creativecommons.org/licenses/by-sa/3.0/deed.pl\">Urheberschaftanerkennung " +#~ "unter gleichen Bedigungen 3.0</a>.</p> herausgegeben haben. \r\n" +#~ "\r\n" +#~ "Kontakt: wolnelektury@nowoczesnapolska.org.pl" + +#~ msgid "ZespóÅ" +#~ msgstr "Unser Team" + +#~ msgid "" +#~ "<p><strong>Magdalena Biernat</strong> â koordynatorka projektu, dyrektor " +#~ "zarzÄ dzajÄ ca fundacji Nowoczesna Polska. Socjolożka, absolwentka " +#~ "Uniwersytetu Warszawskiego i LâUniversité libre de Bruxelles. " +#~ "Specjalistka od projektów internetowych. KoordynowaÅa projekty Kandydaci " +#~ "2009 i Mam Prawo WiedzieÄ w Stowarzyszeniu 61. PracowaÅa przy wielu " +#~ "badaniach spoÅecznych realizowanych przez organizacje pozarzÄ dowe i firmy " +#~ "badawcze. </p>\r\n" +#~ "\r\n" +#~ "<p><strong>RadosÅaw Czajka</strong> â gÅówny programista, studiowaÅ " +#~ "informatykÄ na MIMUW. BiegÅy w jÄzykach programowania, znaczników: " +#~ "Python, XHTML, Javascript, CSS, LaTeX, SQL. Posiada doÅwiadczenie z " +#~ "frameworkami Django, Jquery, doÅwiadczenie w przeksztaÅceniach dokumentów " +#~ "XML (XSLT), w produkcji ebooków w formatach PDF i EPUB oraz w tworzeniu " +#~ "aplikacji mobilnych na system Android i iOS.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Marcin Koziej </strong>â programista. Absolwent Politechniki " +#~ "Warszawskiej i doktorant w Instytucie Filozofii Uniwersytetu " +#~ "Warszawskiego. DziaÅacz Mokotowskiej Kooperatywy Spożywczej. Podróżnik, " +#~ "rowerzysta i biesiadnik. Homo ludens.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Marta NiedziaÅkowska</strong> â redaktorka techniczna, " +#~ "absolwentka bibliotekoznawstwa i informacji naukowej UW. Studentka " +#~ "studiów magisterskich Public Policy and Administration na Collegium " +#~ "Civitas. </p>\r\n" +#~ "\r\n" +#~ msgstr "" +#~ "<p><strong>Magdalena Biernat</strong> - Projektkoordinator, " +#~ "Verwaltungsleiterin der Stiftung Modernes Polen. Soziologin, Absolventin " +#~ "der Universität Warschau und der Université libre de Bruxelles. " +#~ "Spezialistin für Internetprojekte. Sie hat die Projekte Kandydaci 2009 " +#~ "(Kandidaten 2009) und Mam Prawo Wiedzieæ (Ich habe Recht zu wissen) in " +#~ "Verein 61 (Stowarzyszenie 61) koordiniert. Sie hat an vielen " +#~ "Gesellschaftsstudien gearbeitet, die von Nichtregierungsorganisationen " +#~ "und Forschungsanstalten durchgeführt wurden. </p>\r\n" +#~ "\r\n" +#~ "<p><strong>RadosÅaw Czajka</strong> - Hauptprogrammierer, studierte " +#~ "Informatik an der Fakultät für Mathematik, Informatik und Maschinen an " +#~ "der Universität Warschau. Gewandt in Programmierersprachen und " +#~ "Datenbanken: Python, XHTML, Javascript, CSS, LaTeX, SQL. Er besitz " +#~ "Erfahrung in Frameworks: Django, Jquery, den Transformationen XML-Dateien " +#~ "(XSLT), der Herstellung von E-books in PDF und EPUB und Generierung von " +#~ "Mobilanwendungen für das Android- und iOS-System.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Marcin Koziej </strong> - Programmierer, Absolvent der " +#~ "Technischen Universität Warschau und Doktorand im Institut für " +#~ "Philosophie an Universität. Tätig im Konsumverein von Mokotów (Mokotowska " +#~ "Kooperatywa Spożywcza). Reisender und Radfahrer. Homo ludens.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Marta NiedziaÅkowska</strong> - Textbearbeiterin, Absolventin " +#~ "der Wissenschaftsinformation und Bibliothekwissenschaft an der " +#~ "Universität Warschau. Masterstudium: Collegium Civitas, Fakultät: Public " +#~ "Policy and Administration. </p>\r\n" +#~ "\r\n" + +#~ msgid "" +#~ "<p><strong>Dorota A. Kowalska</strong> â redaktorka literacka, " +#~ "jÄzykoznawca, polonistka i slawistka, doktor nauk humanistycznych, " +#~ "adiunkt w Pracowni Polszczyzny Kresowej IJP PAN, gdzie zajmuje siÄ " +#~ "historiÄ i wspóÅczesnoÅciÄ jÄzyka polskiego na Ukrainie. Hobbystycznie " +#~ "Åpiewa archaiczne pieÅni ukraiÅskie i rosyjskie, cyklistka.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Aleksandra SekuÅa</strong> â redaktorka literacka, historyczka " +#~ "literatury, doktor nauk humanistycznych, absolwentka WydziaÅu Polonistyki " +#~ "Uniwersytetu Warszawskiego i SzkoÅy Nauk SpoÅecznych przy IFiS PAN. " +#~ "Zawodowo i naukowo zajmuje siÄ polskim romantyzmem, historiÄ idei i " +#~ "teoriÄ kultury. </p>\r\n" +#~ "\r\n" +#~ "<p><strong>PaweÅ KozioÅ </strong>â redaktor literacki. Ur. 1979, doktor " +#~ "nauk humanistycznych specjalizujÄ cy siÄ w literaturze dawnej, absolwent " +#~ "WydziaÅu Polonistyki Uniwersytetu Warszawskiego oraz Dulwich College w " +#~ "Londynie. Poeta, krytyk literacki, stypendysta Ministerstwa Kultury i " +#~ "Dziedzictwa Narodowego (2010). </p>\r\n" +#~ "\r\n" +#~ "<p><strong>Paulina ChoromaÅska</strong> â redaktorka techniczna, " +#~ "studentka II roku studiów magisterskich w Instytucie Informacji Naukowej " +#~ "i Studiów Bibliologicznych UW. Pracuje również w Pracowni Dokumentacji " +#~ "Teatru w Instytucie Teatralnym im. Z. Raszewskiego w Warszawie.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Aneta Rawska</strong> - redaktorka techniczna, studentka II " +#~ "roku studiów magisterskich w Instytucie Informacji Naukowej i Studiów " +#~ "Bibliologicznych UW, miÅoÅniczka wypieków i dobrej kuchni. Od 2009 roku " +#~ "prowadzi serwis koÅa PZW nr 21 w WoÅominie.</p>\r\n" +#~ msgstr "" +#~ "<p><strong>Dorota A. Kowalska</strong> - Bearbeiterin im " +#~ "Literaturbereich, Sprachwissenschaftlerin, Polonistin und Slavistin, " +#~ "Doktortitel in Geisteswissenschaften, Mitarbeiterin in Pracownia " +#~ "Polszczyzny Kresowej IJP PAN, wo sie sich mit der Geschichte und dem " +#~ "heutigen Stand der polnischen Sprache in der Ukraine beschäftigt. Sein " +#~ "Steckenpferd ist das Singen von alten russischen und ukrainischen " +#~ "Liedern. Radfahrerin.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Aleksandra SekuÅa</strong> - Bearbeiterin im Literaturbereich, " +#~ "Literaturgeschichtsforscherin, Doktortitel in Geisteswissenschaften, " +#~ "Absolventin der Polonistik an der Universität Warschau und der " +#~ "Gesellschaftswissenschaftsschule bei IFiS PAN. Beruflich und " +#~ "wissenschaftlich befasst sie sich mit der polnischen Romantik, " +#~ "Ideengeschichte und Kulturtheorie. </p>\r\n" +#~ " \r\n" +#~ "<p><strong>PaweÅ KozioÅ </strong> - Bearbeiter im Literaturbereich. 1979 " +#~ "geboren, Doktortitel in Geisteswissenschaften, Spezialisierung für die " +#~ "alte Literatur, Absolvent der Polonistik an der Universität Warschau und " +#~ "des Dulwich Colleges in London. Dichter, Literaturkritiker, Stipendiat " +#~ "des Ministeriums für Kultur und Nationale Erbe (2010). </p>\r\n" +#~ "\r\n" +#~ "<p><strong>Paulina ChoromaÅska</strong> - Textbearbeiterin, Studentin im " +#~ "4. Semester des Masterstudiums im Insitut für Wissenschaftsinformation " +#~ "und Bibliothekwissenschaft an der Universität Warschau. Sie arbeitet auch " +#~ "in der Forschungsstätte für Theaterdokumentation im Zbigniew-Raszewski-" +#~ "Theaterinsitut in Warschau.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Aneta Rawska</strong> - Textbearbeiterin, Studentin im 4. " +#~ "Semester des Masterstudiums im Insitut für Wissenschaftsinformation und " +#~ "Bibliothekwissenschaft. Sie mag gute Küche und ist Backenliebhaberin. Ab " +#~ "2009 führt sie den Service des Polnischen Anglervereins Nr. 21 in WoÅomin." +#~ "</p>\r\n" + +#~ msgid "Wesprzyj nas" +#~ msgstr "Unterstütze uns" + +#~ msgid "" +#~ "<p><strong>Przekaż 1% podatku na Wolne Lektury</strong></p>\r\n" +#~ "<p>Fundacja Nowoczesna Polska posiada status Organizacji Pożytku " +#~ "Publicznego dziÄki czemu na rozwój projektu Wolne Lektury można przekazaÄ " +#~ "1% swojego podatku. W tym celu należy wypeÅniÄ odpowiedniÄ rubrykÄ w " +#~ "rocznym zeznaniu podatkowym (PIT-36, PIT-37 lub PIT-28). W zeznaniu " +#~ "należy podaÄ nazwÄ:</p>\r\n" +#~ "Fundacja Nowoczesna Polska <br/>\r\n" +#~ "oraz numer z Krajowego Rejestru SÄ dowego (KRS) 0000070056<br/>" +#~ msgstr "" +#~ "<p><strong>Ãbergeben Sie 1 % von Ihrer Steuer an Wolne Lektury</strong></" +#~ "p>\r\n" +#~ "<p>Die Stiftung Modernes Polen besitzt den Status einer Non-Profit-" +#~ "Organisation. Infolgedessen kann man 1 % seiner Steuer an die Entwicklung " +#~ "des Projektes Wolne Lektury überreichen. Um dies zu tun, sollte man eine " +#~ "bestimmte Rubrik in der Jahressteuererklärung (Einkommenstuer-36, " +#~ "Einkommensteuer-37 oder Einkommensteuer-28) erfüllen. In der Erklärung " +#~ "ist die:</p>\r\n" +#~ "Bezeichnung Stiftung Modernes Polen <br/>\r\n" +#~ "sowie die Nummer aus dem Landesgerichtsregister (KRS) 0000070056<br/> " +#~ "einzutragen." + +#~ msgid "" +#~ "<p><strong>Przekaż darowiznÄ na Wolne Lektury</strong></p>\r\n" +#~ "<p>Każda wpÅacona kwota zostanie przeznaczona na rozwój zasobów naszej " +#~ "biblioteki. Wystarczy dokonaÄ przelewu na konto:</p>\r\n" +#~ "\r\n" +#~ "Fundacja Nowoczesna Polska<br/>\r\n" +#~ "ul. MarszaÅkowska 84/92 lok. 125<br/>\r\n" +#~ "00-514 Warszawa<br/>\r\n" +#~ "Nr konta: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\n" +#~ "TytuÅ przelewu: Darowizna na Wolne Lektury<br/>" +#~ msgstr "" +#~ "<p><strong>Ãbergeben Sie eine Spende an Wolne Lektury</strong></p>\r\n" +#~ "<p>Jede eingezahlte Summe wird für die Erweiterung der Bücheranzahl in " +#~ "der Bibiothek übermittelt. Es reicht nur eine Ãberweisung aufs Konto:</p>" +#~ "\r\n" +#~ "\r\n" +#~ "Fundacja Nowoczesna Polska (Stiftung Modernes Polen)<br/>\r\n" +#~ "StraÃe: Marsza³kowska 84/92, Wohnungsnummer 125<br/>\r\n" +#~ "Postleitzahl und Stadt: 00-514 Warszawa<br/>\r\n" +#~ "Kontonummer: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\n" +#~ "Ãberweisungstitel: \"Spende an Wolne Lektury\" oder \"Darowizna na Wolne " +#~ "Lektury\"<br/>" + +#~ msgid "WÅÄ cz siÄ w prace" +#~ msgstr "Arbeite zusammen" + +#~ msgid "" +#~ "<ul>\r\n" +#~ "<li>ZostaÅ naszym redaktorem, programistÄ lub tÅumaczem</li>\r\n" +#~ "<li>ZdobÄ dź nowe umiejÄtnoÅci i doÅwiadczenie </li>\r\n" +#~ "<li>Weź udziaÅ w otwartym projekcie i twórz innowacyjnÄ bibliotekÄ " +#~ "internetowÄ </li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ "<p>Zapraszamy wszystkie osoby, które chcÄ wspóÅtworzyÄ nasz projekt. " +#~ "WspóÅpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " +#~ "literaturÄ , redagowaniem tekstów i projektami informatycznymi. Oferujemy " +#~ "profesjonalne szkolenia i staÅÄ pomoc merytorycznÄ . Wolontariusze mogÄ " +#~ "pracowaÄ zdalnie lub w siedzibie Fundacji.</p>\r\n" +#~ "<p>Organizujemy również praktyki studenckie â nawiÄ zaliÅmy wspóÅpracÄ z " +#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " +#~ "Karier UKSW oraz WydziaÅem Fizyki UW. </p>\r\n" +#~ "\r\n" +#~ "<h3>Jak siÄ do nas zgÅosiÄ?</h3>\r\n" +#~ "<p>Wszystkie zainteresowane osoby prosimy o przysÅanie maila na adres <a " +#~ "href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\r\n" +#~ msgstr "" +#~ "<ul>\r\n" +#~ "<li>Werde unser Bearbeiter, Programmierer oder Ãbersetzter</li>\r\n" +#~ "<li>Erwirb neue Fähigkeiten und Erfahrung</li>\r\n" +#~ "<li>Nimm an dem offenen Projekt teil und bilde eine innovative " +#~ "Internetbibliothek </li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ "<p>Wir laden alle Personen ein, die das Projekt mitgestalten möchten. Wir " +#~ "arbeiten mit Studenten, Lehrern und Allen, die sich für Literatur, " +#~ "Textbearbeitung und informatische Projekte interessieren. Wir bieten " +#~ "professionelle Schulungen und ständige Sachhilfe. Volontäre können fern " +#~ "oder im Stiftungssitz arbeiten.</p>\r\n" +#~ "<p>Wir organisieren auch das Studentenpraktikum - wir arbeiten mit dem " +#~ "Institut für Wissenschaftsinformation und Bibliothekwissenschaft an der " +#~ "Universität Warschau, demKarrierebüro der Kardinal-Stefan-Wyszyñski-" +#~ "Universität Warschau und der Fakultät für Physik zusammen. </p>\r\n" +#~ "\r\n" +#~ "<h3>Wie kann man sich bei uns melden?</h3>\r\n" +#~ "<p>Alle Interessierten bitten wir um eine Mail an folgende Adresse <a " +#~ "href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\r\n" + +#~ msgid "" +#~ "<h3>Kogo szukamy?</h3>\r\n" +#~ "\r\n" +#~ "<h3>Redaktorów technicznych (skÅad tekstu) </h3>\r\n" +#~ " <p>SkÅad jest pierwszym etapem pracy nad tekstem. Za pomocÄ znaczników " +#~ "jÄzyka WL-XML nadajemy tekstowi poÅ¼Ä danÄ formÄ i umożliwiamy wyÅwietlenie " +#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na <a " +#~ "href=\"http://redakcja.wolnelektury.pl\">Platformie Redakcyjnej</a>, " +#~ "która pozwala na zautomatyzowanie dużej czÄÅci pracy. </p>\r\n" +#~ "\r\n" +#~ " <p><b>Kto może zostaÄ redaktorem technicznym?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Każdy â po krótkim szkoleniu.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>WiÄcej informacji o redakcji technicznej znajdziecie na <a href=" +#~ "\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" +#~ "\">stronie redakcji Wolnych Lektur</a> </p>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Redaktorów literackich (merytorycznych) </h3>\r\n" +#~ " <p>Redakcja literacka obejmuje korektÄ, uwspóÅczeÅnienia oraz dodawanie " +#~ "przypisów i motywów literackich. To unikalna możliwoÅÄ zdobycia " +#~ "doÅwiadczenia w cyfrowej edycji tekstów. </p>\r\n" +#~ "\r\n" +#~ " <p><b>Kto może zostaÄ redaktorem literackim? </b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Osoby, które majÄ doÅwiadczenie w redakcji tekstów literackich,</li>" +#~ "\r\n" +#~ "<li>Studenci i absolwenci studiów humanistycznych, którzy chcÄ takie " +#~ "doÅwiadczenie zdobyÄ. </li>\r\n" +#~ "</ul>\r\n" +#~ "<p>WiÄcej informacji o redakcji merytorycznej znajdziecie na <a href=" +#~ "\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" +#~ "\">stronie redakcji Wolnych Lektur</a> </p>\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>TÅumaczy</h3>\r\n" +#~ " <p>Strona WolneLektury.pl jest dostÄpna w siedmiu jÄzykach obcych â " +#~ "angielskim, francuskim, niemieckim, hiszpaÅskim, litewskim, rosyjskim " +#~ "oraz ukraiÅskim. Użytkownikami biblioteki jest ponad 200 tysiÄcy osób z " +#~ "zagranicy, a już niedÅugo nasze zbiory obejmÄ również dzieÅa w jÄzykach " +#~ "obcych. Dlatego potrzebujemy na bieÅ¼Ä co tÅumaczyÄ nowe informacje " +#~ "pojawiajÄ ce siÄ na stronie. </p>\r\n" +#~ " <p><b>Kto może pomóc w tÅumaczeniach? </b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Każdy, kto dobrze zna co najmniej jeden z powyższych jÄzyków. </li>" +#~ "\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Programistów</h3>\r\n" +#~ " <p>Poza samÄ stronÄ Wolnych Lektur tworzymy również: </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>narzÄdzia redakcyjne,</li>\r\n" +#~ "<li>konwertery do różnych formatów e-booków, </li>\r\n" +#~ "<li>aplikacje mobile uÅatwiajÄ ce dostÄp do naszych zasobów.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " +#~ "jQuery, LaTeX, Java.\r\n" +#~ "Tworzone przez nas oprogramowanie udostÄpniamy na <a href=\"https://" +#~ "github.com/fnp/\">wolnej licencji</a>. </p>\r\n" +#~ " <p><b>Kto może pomóc w pracach programistycznych?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Każdy, kto umie i chciaÅby zdobyÄ punkty do karmy za udziaÅ w " +#~ "otwartym projekcie programistycznym. ;)</li>\r\n" +#~ "</ul>\r\n" +#~ msgstr "" +#~ "<h3>Wen suchen wir?</h3>\r\n" +#~ "\r\n" +#~ "<h3>Textbearbeiter (Textbearbeitung) </h3>\r\n" +#~ " <p>In der ersten Phase wird der Text gesetzt. Mithilfe der WL-XML-" +#~ "Sprache gestalten wir den Text und ermöglichen seine Veröffentlichung auf " +#~ "der Internetseite. Textbearbeitung wird auf der <a href=\"http://redakcja." +#~ "wolnelektury.pl\">Redaktionsplatrorm</a>durchgeführt, die einen groÃen " +#~ "Arbeitsteil automatisieren lässt.</p>\r\n" +#~ "\r\n" +#~ " <p><b>Wer kann Textbearbeiter werden</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Jeder - nach einer kurzen Schulung.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>Mehr Infos über Textbearbeitung<a href=\"http://redmine." +#~ "nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" +#~ "\">auf der Impressumseite von Wolne Lektury</a> </p>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Bearbeiter im Literaturbereich (Sachbearbeiter) </h3>\r\n" +#~ " <p>Literarische Bearbeitung umfasst die Korrektur, Sprachmodernisierung " +#~ "und Ergänzung von FüÃnoten und literarischen Motiven. Das ist eine " +#~ "einzigartige Möglichkeit, die Kenntnis der Digitalverarbeitung von Texten " +#~ "zu erwerben. </p>\r\n" +#~ "\r\n" +#~ " <p><b>Wer kann Bearbeiter im Literaturbereich werden</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Personen, die Erfahrung in der Bearbeitung von literarischen Texten " +#~ "besitzen,</li>\r\n" +#~ "<li>Studenten und Absolventen der Geisteswissenschaften, die solche " +#~ "Erfahrung gewinnen möchten. </li>\r\n" +#~ "</ul>\r\n" +#~ "<p>Mehr Infos über literarische Bearbeitung<a href=\"http://redmine." +#~ "nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" +#~ "\">auf der Impressumseite von Wolne Lektury</a> </p>\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Ãbersetzer</h3>\r\n" +#~ " <p>Die Internetseite WolneLektury.pl ist in sieben Spracheversionen " +#~ "zugänglich - im Englischen, Französichen, Deutschen, Spanischen, " +#~ "Lituanischen, Russischen und Ukrainischen. Bibliotheksbenutzer sind über " +#~ "200.000 Ausländer. Bald wird die Bibliothek mit fremdsprachigen Versionen " +#~ "bereichert. Deswegen brauchen wir auf dem Laufenden, die neu auf der " +#~ "Seite erschienen Infos zu übersetzen. </p>\r\n" +#~ " <p><b>Wer kann bei Ãbersetzungen helfen? </b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Jeder, der mindestenst eine aus den oben genannten Sprachen " +#~ "beherrscht. </li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Programmierer</h3>\r\n" +#~ " <p>AuÃer der Internetseite von Wolne Lektury allein errichten wir: </p>" +#~ "\r\n" +#~ "<ul>\r\n" +#~ "<li>Bearbeitungsmittel,</li>\r\n" +#~ "<li>Konvertierungsprogramme zu den verschiedenen E-books-Formaten, </li>" +#~ "\r\n" +#~ "<li>Mobilanwendungen, die Zugang zu Büchern erleichtern.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>Wir machen Gebrauch von solchen Technologien wie: Python, Django, " +#~ "XHTML, JavaScript, jQuery, LaTeX, Java.\r\n" +#~ "Die von uns entwickelte Software machen wird auf<a href=\"https://github." +#~ "com/fnp/\">unter der freien Lizenz verfügbar</a>. </p>\r\n" +#~ " <p><b>Wer kann bei der Programmierung helfen?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Jeder, der dies kann und will Karmapunkte für die Teilnahme an dem " +#~ "offenen Programmierungsprojekt gewinnen . ;)</li>\r\n" +#~ "</ul>\r\n" + +#~ msgid "Prawa" +#~ msgstr "Rechts" + +#~ msgid "" +#~ "<p>WiÄkszoÅÄ utworów w bibliotece nie jest chroniona prawem autorskim i " +#~ "znajduje siÄ w domenie publicznej, co oznacza, że można je swobodnie " +#~ "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 <a " +#~ "href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie " +#~ "autorstwa-Na tych samych warunkach 3.0</a>. Publikujemy również kilka " +#~ "utworów, które autorzy lub spadkobiercy praw udostÄpnili na wolnej " +#~ "licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl" +#~ "\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>.</p>" +#~ msgstr "" +#~ "<p>Die Mehrheit von Bibliothekwerken steht nicht unter dem Schutz des " +#~ "Urheberrechts und gehört zu dem Gemeinfreiheitsbereich, was bedeutet, " +#~ "dass man sie frei veröffentlichen und vermitteln darf. Sollte das Werk " +#~ "mit zusätzlichen Angaben versehen werden (FüÃnoten und literarischen " +#~ "Motiven), die dem Urheberrechtsschutz unterliegen, sind diese " +#~ "zusätzlichen Angaben unter der Lizenz <a href=\"http://creativecommons." +#~ "org/licenses/by-sa/3.0/deed.pl\"> Urheberschaftanerkennung unter gleichen " +#~ "Bedigungen 3.0</a> verfügbar. Wir veröffentlichen auch Werke, die " +#~ "Verfasser oder Rechtsnachfolger unter der freien Lizenz <a href=\"http://" +#~ "creativecommons.org/licenses/by-sa/3.0/deed.pl\">Urheberschaftanerkennung " +#~ "unter gleichen Bedigungen 3.0</a>.</p> herausgegeben haben. " diff --git a/src/infopages/locale/es/LC_MESSAGES/django.mo b/src/infopages/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..d87aa7da3 Binary files /dev/null and b/src/infopages/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/infopages/locale/es/LC_MESSAGES/django.po b/src/infopages/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..09b64835c --- /dev/null +++ b/src/infopages/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,1126 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: \n" +"Last-Translator: KG <kamila.gawron87@gmail.com>\n" +"Language-Team: es <yourteam@example.com>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 +msgid "main page priority" +msgstr "" + +#: models.py:12 +msgid "slug" +msgstr "" + +#: models.py:13 +msgid "title" +msgstr "" + +#: models.py:14 +msgid "left column" +msgstr "" + +#: models.py:15 +msgid "right column" +msgstr "" + +#: models.py:19 +msgid "info page" +msgstr "" + +#: models.py:20 +msgid "info pages" +msgstr "" + +#~ msgid "Wolontariat dla wiedzy" +#~ msgstr "Voluntariado para el conocimiento" + +#~ msgid "" +#~ "<h2>Wolontariat</h2>\r\n" +#~ "\t<p>\r\n" +#~ "\t\tBiogramy pisarzy oraz definicje epok i gatunków literackich w\r\n" +#~ "\t\tbibliotece internetowej Wolne Lektury napisali uczniowie\r\n" +#~ "\t\tczterech szkóŠpodczas warsztatów âWolontariat dla wiedzyâ.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t\tUczniowie pracowali wspólnie pod merytorycznym nadzorem\r\n" +#~ "\t\tnauczycieli i specjalistów â literaturoznawców na\r\n" +#~ "\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n" +#~ "\r\n" +#~ "\t\t\tplatformie internetowej wiki</a>\r\n" +#~ "\t\tprzygotowanej przez zespóÅ\r\n" +#~ "\t\t<a href=\"http://2ia.pl/\">2ia</a>. Praca nad notami byÅa " +#~ "jednoczeÅnie naukÄ wykorzystywania\r\n" +#~ "\t\tkomputerów i internetu do wyszukiwania informacji, a także\r\n" +#~ "\t\tweryfikowania ich wiarygodnoÅci.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t\tProjekt \"Wolontariat dla wiedzy\" zostaÅ zrealizowany dziÄki\r\n" +#~ "\t\twsparciu\r\n" +#~ "\t\t<a href=\"http://www.menis.gov.pl/\">\r\n" +#~ "\t\t\tMinisterstwa Edukacji Narodowej</a>. Nagrody dla uczniów ufundowali" +#~ "\r\n" +#~ "\t\t<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n" +#~ "\r\n" +#~ "\t\t\tWydawnictwo Nasza KsiÄgarnia</a>\r\n" +#~ "\t\ti\r\n" +#~ "\t\t<a href=\"http://helion.pl/\">Wydawnictwo Helion</a>. Noty " +#~ "zweryfikowano w serwisie\r\n" +#~ "\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n" +#~ "\t\t\tPlagiat.pl</a>.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t\t<a href=\"/static/wolontariat.pdf\">Raport z realizacji projektu " +#~ "âWolontariat dla wiedzy\"</a>.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />" +#~ "\r\n" +#~ "\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n" +#~ "\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n" +#~ " <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />" +#~ "\r\n" +#~ " <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />" +#~ "\r\n" +#~ "\t</p>\r\n" +#~ msgstr "" +#~ "<h2>Voluntariado</h2>\r\n" +#~ "\t<p>\r\n" +#~ "\t\tLas biografÃas de los escritores y las descripciones de las épocas y " +#~ "los géneros literarios en \r\n" +#~ "\t\tla biblioteca virtual de Wolne Lektury han elaborado los alumnos\r\n" +#~ "\t\tde cuatro escuelas durante los talleres âVoluntariado para el " +#~ "conocimientoâ.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t\tLos alumnos han trabajado juntos bajo la supervisión \r\n" +#~ "\t\tde profesores y teóricos de la literatura\r\n" +#~ "\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n" +#~ "\r\n" +#~ "\t\t\tplataforma virtual wiki </a>\r\n" +#~ "\t\tpreparada por el equipo\r\n" +#~ "\t\t<a href=\"http://2ia.pl/\">2ia</a>. Al mismo tiempo los alumnos " +#~ "estaban aprendiendo a utilizar\r\n" +#~ "\t\tlos ordenadores e internet para buscar informaciones y \r\n" +#~ "\t\tverificar su credibilidad.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t\tEl proyecto \"Voluntariado para el conocimiento\" se ha realizado " +#~ "gracias al \r\n" +#~ "\t\apoyo de\r\n" +#~ "l\t\t<a href=\"http://www.menis.gov.pl/\">\r\n" +#~ "\t\t\tMinisterio de Educación Nacional</a>. Los premios para los alumnos " +#~ "han sido fundados por\r\n" +#~ "\t\t<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n" +#~ "\r\n" +#~ "\t\t\tEditorial Nasza KsiÄgarnia</a>\r\n" +#~ "\t\ty\r\n" +#~ "\t\t<a href=\"http://helion.pl/\">Editorial Helion</a>. Los textos han " +#~ "sido verificados en la página\r\n" +#~ "\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n" +#~ "\t\t\tPlagiat.pl</a>.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t\t<a href=\"/static/wolontariat.pdf\"> El informe de la realización del " +#~ "proyecto âVoluntariado para el conocimientoâ</a>.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />" +#~ "\r\n" +#~ "\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n" +#~ "\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n" +#~ " <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />" +#~ "\r\n" +#~ " <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />" +#~ "\r\n" +#~ "\t</p>\r\n" + +#~ msgid "" +#~ "\t<h2>Autorzy</h2>\r\n" +#~ "\r\n" +#~ "\t<ol>\r\n" +#~ "\t\t<li>\r\n" +#~ "\t\t\t<p>\r\n" +#~ "\t\t\t\tGimnazjum nr 40 z OddziaÅami Integracyjnymi w Zespole\r\n" +#~ "\t\t\t\tSzkóŠnr 69 im. Armii Krajowej Grupy Bojowej âKRYBARâ,\r\n" +#~ "\t\t\t\tul. Drewniana 8, 00-345 Warszawa; klasa druga pod opiekÄ \r\n" +#~ "\t\t\t\tAnny Budziarek-Friedrich:\r\n" +#~ "\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t<ul>\r\n" +#~ "\t\t\t\t<li>Burdon Filip;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>DÄbski Bartek;</li>\r\n" +#~ "\t\t\t\t<li>Jackowicz Kamil;</li>\r\n" +#~ "\t\t\t\t<li>Kurek PaweÅ;</li>\r\n" +#~ "\t\t\t\t<li>Makles Bartosz;</li>\r\n" +#~ "\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n" +#~ "\t\t\t\t<li>MigdaÅ Katarzyna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Mioduszewski MichaÅ;</li>\r\n" +#~ "\t\t\t\t<li>Pfeiffer Ida;</li>\r\n" +#~ "\t\t\t\t<li>PÅaskowicka Karolina;</li>\r\n" +#~ "\t\t\t\t<li>Sailer Ewa.</li>\r\n" +#~ "\t\t\t</ul>\r\n" +#~ "\t\t</li>\r\n" +#~ "\r\n" +#~ "\t\t<li>\r\n" +#~ "\t\t\t<p>\r\n" +#~ "\t\t\t\tXXXIII Liceum OgólnoksztaÅcÄ ce im. MikoÅaja Kopernika,\r\n" +#~ "\t\t\t\tul. Bema 76, 01-225 Warszawa; klasa pierwsza o profilu\r\n" +#~ "\t\t\t\tbiologiczno-chemicznym pod opiekÄ Elżbiety Konkowskiej:\r\n" +#~ "\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t<ul>\r\n" +#~ "\t\t\t\t<li>Chwil BartÅomiej;</li>\r\n" +#~ "\t\t\t\t<li>Czarnecka Natalia;</li>\r\n" +#~ "\t\t\t\t<li>GawroÅska Iga;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Grabarczyk Marta;</li>\r\n" +#~ "\t\t\t\t<li>JastrzÄ b Katarzyna;</li>\r\n" +#~ "\t\t\t\t<li>Krawczak Olga;</li>\r\n" +#~ "\t\t\t\t<li>Krawczyk Marianna;</li>\r\n" +#~ "\t\t\t\t<li>Kur Natalia;</li>\r\n" +#~ "\t\t\t\t<li>Kwiatek Marta;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>LaÅkiewicz Joanna;</li>\r\n" +#~ "\t\t\t\t<li>MachczyÅska Daria;</li>\r\n" +#~ "\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n" +#~ "\t\t\t\t<li>Moczulska Karolina;</li>\r\n" +#~ "\t\t\t\t<li>MoÅcicka Aneta;</li>\r\n" +#~ "\t\t\t\t<li>Narloch Sabina;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Przybysz PaweÅ;</li>\r\n" +#~ "\t\t\t\t<li>Puchta Marek;</li>\r\n" +#~ "\t\t\t\t<li>Ryska Cezary;</li>\r\n" +#~ "\t\t\t\t<li>Sandomierski BartÅomiej;</li>\r\n" +#~ "\t\t\t\t<li>SÅawiÅski Tomasz;</li>\r\n" +#~ "\t\t\t\t<li>SÅowik Olga;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n" +#~ "\t\t\t\t<li>Strzelczak Karolina;</li>\r\n" +#~ "\t\t\t\t<li>Szafran Danuta;</li>\r\n" +#~ "\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n" +#~ "\t\t\t\t<li>Szulkowska Alicja;</li>\r\n" +#~ "\t\t\t\t<li>Ålusarczyk Anna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Tytkowska Anna.</li>\r\n" +#~ "\t\t\t</ul>\r\n" +#~ "\t\t\t<li>\r\n" +#~ "\t\t\t\t<p>\r\n" +#~ "\t\t\t\t\tAutorskie Niepubliczne Liceum OgólnoksztaÅcÄ ce nr\r\n" +#~ "\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; klasa pierwsza\r\n" +#~ "\t\t\t\t\to profilu ogólnym pod opiekÄ MichaÅa Friedricha:\r\n" +#~ "\t\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<ul>\r\n" +#~ "\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>GoÅaszewska Ewa;</li>\r\n" +#~ "\t\t\t\t\t<li>Kwiatkowski MichaÅ;</li>\r\n" +#~ "\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n" +#~ "\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n" +#~ "\t\t\t\t\t<li>Przespolewski PrzemysÅaw;</li>\r\n" +#~ "\t\t\t\t\t<li>RosiÅska Zuzanna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n" +#~ "\t\t\t\t</ul>\r\n" +#~ "\t\t\t</li>\r\n" +#~ "\t\t\t<li>\r\n" +#~ "\t\t\t\t<p>\r\n" +#~ "\t\t\t\t\tLXIV Liceum OgólnoksztaÅcÄ ce im. St. I. Witkiewicza,\r\n" +#~ "\t\t\t\t\tul. ElblÄ ska 51, 01-737 Warszawa; klasa pierwsza o\r\n" +#~ "\t\t\t\t\tprofilu ogólnym pod opiekÄ Daniela Zycha:\r\n" +#~ "\t\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<ul>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n" +#~ "\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n" +#~ "\t\t\t\t\t<li>DrÄ gowska Katarzyna;</li>\r\n" +#~ "\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n" +#~ "\t\t\t\t\t<li>GÅowacki Jan;</li>\r\n" +#~ "\t\t\t\t\t<li>Grad PaweÅ;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n" +#~ "\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n" +#~ "\t\t\t\t\t<li>KÅos Aneta;</li>\r\n" +#~ "\t\t\t\t\t<li>KozieÅ Barbara;</li>\r\n" +#~ "\t\t\t\t\t<li>KozÅowska Anna;</li>\r\n" +#~ "\t\t\t\t\t<li>Krug Pamela;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n" +#~ "\t\t\t\t\t<li>LubaÅ MichaÅ;</li>\r\n" +#~ "\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n" +#~ "\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n" +#~ "\t\t\t\t\t<li>Modelska Marta;</li>\r\n" +#~ "\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n" +#~ "\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n" +#~ "\t\t\t\t\t<li>Pielat Zofia;</li>\r\n" +#~ "\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n" +#~ "\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n" +#~ "\t\t\t\t\t<li>Rosa Karolina;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>SmyczyÅska Kamila;</li>\r\n" +#~ "\t\t\t\t\t<li>StoliÅska Barbara;</li>\r\n" +#~ "\t\t\t\t\t<li>SzymaÅska Katarzyna;</li>\r\n" +#~ "\t\t\t\t\t<li>Åcibior Ewa;</li>\r\n" +#~ "\t\t\t\t\t<li>Witczak Magda;</li>\r\n" +#~ "\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n" +#~ "\t\t\t\t\t<li>ZióÅkowska Adrianna.</li>\r\n" +#~ "\t\t\t\t</ul>\r\n" +#~ "\t\t\t</li>\r\n" +#~ "\t </li>\r\n" +#~ "\t </ol>\r\n" +#~ msgstr "" +#~ "\t<h2>Autores</h2>\r\n" +#~ "\r\n" +#~ "\t<ol>\r\n" +#~ "\t\t<li>\r\n" +#~ "\t\t\t<p>\r\n" +#~ "\t\t\t\tGimnazjum nr 40 z OddziaÅami Integracyjnymi w Zespole\r\n" +#~ "\t\t\t\tSzkóŠnr 69 im. Armii Krajowej Grupy Bojowej âKRYBARâ,\r\n" +#~ "\t\t\t\tul. Drewniana 8, 00-345 Varsovia; segundo curso bajo la " +#~ "supervisión de\r\n" +#~ "\t\t\t\tAnna Budziarek-Friedrich:\r\n" +#~ "\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<ul>\r\n" +#~ "\t\t\t\t<li>Burdon Filip;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>DÄbski Bartek;</li>\r\n" +#~ "\t\t\t\t<li>Jackowicz Kamil;</li>\r\n" +#~ "\t\t\t\t<li>Kurek PaweÅ;</li>\r\n" +#~ "\t\t\t\t<li>Makles Bartosz;</li>\r\n" +#~ "\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n" +#~ "\t\t\t\t<li>MigdaÅ Katarzyna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Mioduszewski MichaÅ;</li>\r\n" +#~ "\t\t\t\t<li>Pfeiffer Ida;</li>\r\n" +#~ "\t\t\t\t<li>PÅaskowicka Karolina;</li>\r\n" +#~ "\t\t\t\t<li>Sailer Ewa.</li>\r\n" +#~ "\t\t\t</ul>\r\n" +#~ "\t\t</li>\r\n" +#~ "\r\n" +#~ "\t\t<li>\r\n" +#~ "\t\t\t<p>\r\n" +#~ "\t\t\t\tXXXIII Liceum OgólnoksztaÅcÄ ce im. MikoÅaja Kopernika,\r\n" +#~ "\t\t\t\tul.Bema 76, 01-225 Varsovia; primer curso de\r\n" +#~ "\t\t\t</p>perfil biológico-quÃmico bajo la supervisión de Elżbieta " +#~ "Konkowska\r\n" +#~ "\t\t\t<ul>\r\n" +#~ "\r\n" +#~ "\t\t\t<ul>\r\n" +#~ "\t\t\t\t<li>Chwil BartÅomiej;</li>\r\n" +#~ "\t\t\t\t<li>Czarnecka Natalia;</li>\r\n" +#~ "\t\t\t\t<li>GawroÅska Iga;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Grabarczyk Marta;</li>\r\n" +#~ "\t\t\t\t<li>JastrzÄ b Katarzyna;</li>\r\n" +#~ "\t\t\t\t<li>Krawczak Olga;</li>\r\n" +#~ "\t\t\t\t<li>Krawczyk Marianna;</li>\r\n" +#~ "\t\t\t\t<li>Kur Natalia;</li>\r\n" +#~ "\t\t\t\t<li>Kwiatek Marta;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>LaÅkiewicz Joanna;</li>\r\n" +#~ "\t\t\t\t<li>MachczyÅska Daria;</li>\r\n" +#~ "\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n" +#~ "\t\t\t\t<li>Moczulska Karolina;</li>\r\n" +#~ "\t\t\t\t<li>MoÅcicka Aneta;</li>\r\n" +#~ "\t\t\t\t<li>Narloch Sabina;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Przybysz PaweÅ;</li>\r\n" +#~ "\t\t\t\t<li>Puchta Marek;</li>\r\n" +#~ "\t\t\t\t<li>Ryska Cezary;</li>\r\n" +#~ "\t\t\t\t<li>Sandomierski BartÅomiej;</li>\r\n" +#~ "\t\t\t\t<li>SÅawiÅski Tomasz;</li>\r\n" +#~ "\t\t\t\t<li>SÅowik Olga;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n" +#~ "\t\t\t\t<li>Strzelczak Karolina;</li>\r\n" +#~ "\t\t\t\t<li>Szafran Danuta;</li>\r\n" +#~ "\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n" +#~ "\t\t\t\t<li>Szulkowska Alicja;</li>\r\n" +#~ "\t\t\t\t<li>Ålusarczyk Anna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Tytkowska Anna.</li>\r\n" +#~ "\t\t\t</ul>\r\n" +#~ "\t\t\t<li>\r\n" +#~ "\t\t\t\t<p>\r\n" +#~ "\t\t\t\t\tAutorskie Niepubliczne Liceum OgólnoksztaÅcÄ ce nr\r\n" +#~ "\t\t\t\t\t42, ul.Iwicka 47 B, 00-735 Varsovia; primer curso\r\n" +#~ "\t\t\t\t\tbajo la supervisión de MichaÅ Friedrich:\r\n" +#~ "\t\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<ul>\r\n" +#~ "\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>GoÅaszewska Ewa;</li>\r\n" +#~ "\t\t\t\t\t<li>Kwiatkowski MichaÅ;</li>\r\n" +#~ "\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n" +#~ "\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n" +#~ "\t\t\t\t\t<li>Przespolewski PrzemysÅaw;</li>\r\n" +#~ "\t\t\t\t\t<li>RosiÅska Zuzanna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n" +#~ "\t\t\t\t</ul>\r\n" +#~ "\t\t\t</li>\r\n" +#~ "\t\t\t<li>\r\n" +#~ "\t\t\t\t<p>\r\n" +#~ "\t\t\t\t\tLXIV Liceum OgólnoksztaÅcÄ ce im. St. I. Witkiewicza,\r\n" +#~ "\t\t\t\t\tul.ElblÄ ska 51, 01-737 Varsovia; primer curso bajo la " +#~ "supervisión de Daniel Zych:\r\n" +#~ "\t\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<ul>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n" +#~ "\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n" +#~ "\t\t\t\t\t<li>DrÄ gowska Katarzyna;</li>\r\n" +#~ "\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n" +#~ "\t\t\t\t\t<li>GÅowacki Jan;</li>\r\n" +#~ "\t\t\t\t\t<li>Grad PaweÅ;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n" +#~ "\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n" +#~ "\t\t\t\t\t<li>KÅos Aneta;</li>\r\n" +#~ "\t\t\t\t\t<li>KozieÅ Barbara;</li>\r\n" +#~ "\t\t\t\t\t<li>KozÅowska Anna;</li>\r\n" +#~ "\t\t\t\t\t<li>Krug Pamela;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n" +#~ "\t\t\t\t\t<li>LubaÅ MichaÅ;</li>\r\n" +#~ "\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n" +#~ "\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n" +#~ "\t\t\t\t\t<li>Modelska Marta;</li>\r\n" +#~ "\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n" +#~ "\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n" +#~ "\t\t\t\t\t<li>Pielat Zofia;</li>\r\n" +#~ "\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n" +#~ "\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n" +#~ "\t\t\t\t\t<li>Rosa Karolina;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>SmyczyÅska Kamila;</li>\r\n" +#~ "\t\t\t\t\t<li>StoliÅska Barbara;</li>\r\n" +#~ "\t\t\t\t\t<li>SzymaÅska Katarzyna;</li>\r\n" +#~ "\t\t\t\t\t<li>Åcibior Ewa;</li>\r\n" +#~ "\t\t\t\t\t<li>Witczak Magda;</li>\r\n" +#~ "\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n" +#~ "\t\t\t\t\t<li>ZióÅkowska Adrianna.</li>\r\n" +#~ "\t\t\t\t</ul>\r\n" +#~ "\t\t\t</li>\r\n" +#~ "\t </li>\r\n" +#~ "\t </ol>\r\n" + +#~ msgid "Możesz nam pomóc" +#~ msgstr "Puedes ayudarnos" + +#~ msgid "" +#~ "<h2>Wolontariat w Wolnych Lekturach</h2>\r\n" +#~ "<ul>\r\n" +#~ "<li>ZostaÅ naszym redaktorem, programistÄ lub tÅumaczem â wolontariuszem." +#~ "</li>\r\n" +#~ "<li>ZdobÄ dź nowe umiejÄtnoÅci i doÅwiadczenie. </li>\r\n" +#~ "<li>Weź udziaÅ w otwartym projekcie i twórz innowacyjnÄ bibliotekÄ " +#~ "internetowÄ . </li>\r\n" +#~ "</ul>\r\n" +#~ "<p>DziÄki pracy naszych wolontariuszy opublikowaliÅmy już ponad <b>1500 " +#~ "lektur</b>, z których skorzystaÅy ponad <b>3 miliony</b> czytelników z " +#~ "caÅego Åwiata. </p>\r\n" +#~ "<p>Zapraszamy wszystkie osoby, które chcÄ wspóÅtworzyÄ nasz projekt. " +#~ "WspóÅpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " +#~ "literaturÄ , redagowaniem tekstów i projektami informatycznymi. Oferujemy " +#~ "profesjonalne szkolenia i staÅÄ pomoc merytorycznÄ . Wolontariusze mogÄ " +#~ "pracowaÄ zdalnie lub w siedzibie Fundacji.</p>\r\n" +#~ "<p>Organizujemy również praktyki studenckie â nawiÄ zaliÅmy wspóÅpracÄ z " +#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " +#~ "Karier UKSW oraz WydziaÅem Fizyki UW. </p>\r\n" +#~ "\r\n" +#~ "<h2>Jak siÄ do nas zgÅosiÄ?</h2>\r\n" +#~ "<p>Wszystkie zainteresowane osoby prosimy o przysÅanie maila na adres <a " +#~ "href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n" +#~ msgstr "" +#~ "<h2>Voluntariado en Wolne Lektury</h2>\r\n" +#~ "<ul>\r\n" +#~ "<li>Hazte nuestro voluntario como redactor, programador o traductor</li>" +#~ "\r\n" +#~ "<li>Adquiere nuevas habilidades y gana experiencia. </li>\r\n" +#~ "<li>Participa en un proyecto abierto y crea una innovadora biblioteca " +#~ "virtual. </li>\r\n" +#~ "</ul>\r\n" +#~ "<p>Gracias al trabajo de nuestros voluntarios hemos logrado publicar más " +#~ "de <b>1500 libros </b> que ha usado ya más de <b>3 millones</b> de " +#~ "lectores del mundo. </p>\r\n" +#~ "<p>Todos los que quieran participar en nuestro proyecto estarán " +#~ "bienvenidos. Colaboramos con estudiantes, docentes y todos los que " +#~ "est'an interesados y aficionados en literatura, redacción de textos o en " +#~ "proyectos informáticos. Les ofrecemos adiestramiento y ayuda en cuanto al " +#~ "contenido. Los voluntarios pueden trabajar a distancia o en la oficina " +#~ "principal de la Fundación.</p>\r\n" +#~ "<p> Organizamos también prácticas para estudiantes: colaboramos con el " +#~ "Instituto de Información CientÃfica y BibliologÃa de la Universidad de " +#~ "Varsovia, el Servicio de Orientación Profesional de la Universidad de " +#~ "Cardenal Stefan Wyszynski y la Facultad de FÃsica de la Universidad de " +#~ "Varsovia. </p>\r\n" +#~ "\r\n" +#~ "<h2>¿Cómo contactar con nosotros?</h2>\r\n" +#~ "<p>A todos los interesados les invitamos a mandarnos un e-mail a <a href=" +#~ "\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n" + +#~ msgid "" +#~ "<h2>Kogo szukamy?</h2>\r\n" +#~ "\r\n" +#~ "<h3>Redaktorów technicznych (skÅad tekstu) </h3>\r\n" +#~ " <p>SkÅad jest pierwszym etapem pracy nad tekstem. Za pomocÄ znaczników " +#~ "jÄzyka WL-XML nadajemy tekstowi poÅ¼Ä danÄ formÄ i umożliwiamy wyÅwietlenie " +#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na <a " +#~ "href=\"http://redakcja.wolnelektury.pl\">Platformie Redakcyjnej</a>, " +#~ "która pozwala na zautomatyzowanie dużej czÄÅci pracy. </p>\r\n" +#~ "\r\n" +#~ " <p><b>Kto może zostaÄ redaktorem technicznym?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Każdy â po krótkim szkoleniu.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>WiÄcej informacji o redakcji technicznej znajdziecie na <a href=" +#~ "\"http://redakcja.wolnelektury.pl/documents/catalogue/\">stronie redakcji " +#~ "Wolnych Lektur</a> </p>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Redaktorów literackich (merytorycznych) </h3>\r\n" +#~ " <p>Redakcja literacka obejmuje korektÄ, uwspóÅczeÅnienia oraz dodawanie " +#~ "przypisów i motywów literackich. To unikalna możliwoÅÄ zdobycia " +#~ "doÅwiadczenia w cyfrowej edycji tekstów. </p>\r\n" +#~ "\r\n" +#~ " <p><b>Kto może zostaÄ redaktorem literackim? </b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Osoby, które majÄ doÅwiadczenie w redakcji tekstów literackich,</li>" +#~ "\r\n" +#~ "<li>Studenci i absolwenci studiów humanistycznych, którzy chcÄ takie " +#~ "doÅwiadczenie zdobyÄ. </li>\r\n" +#~ "</ul>\r\n" +#~ "<p>WiÄcej informacji o redakcji merytorycznej znajdziecie na <a href=" +#~ "\"http://redakcja.wolnelektury.pl/documents/catalogue/\">stronie redakcji " +#~ "Wolnych Lektur</a> </p>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>TÅumaczy</h3>\r\n" +#~ " <p>Strona WolneLektury.pl jest dostÄpna w siedmiu jÄzykach obcych â " +#~ "angielskim, francuskim, niemieckim, hiszpaÅskim, litewskim, rosyjskim " +#~ "oraz ukraiÅskim. Użytkownikami biblioteki jest ponad 200 tysiÄcy osób z " +#~ "zagranicy, a już niedÅugo nasze zbiory obejmÄ również dzieÅa w jÄzykach " +#~ "obcych. Dlatego potrzebujemy na bieÅ¼Ä co tÅumaczyÄ nowe informacje " +#~ "pojawiajÄ ce siÄ na stronie. </p>\r\n" +#~ " <p><b>Kto może pomóc w tÅumaczeniach? </b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Każdy, kto dobrze zna co najmniej jeden z powyższych jÄzyków. </li>" +#~ "\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Programistów</h3>\r\n" +#~ " <p>Poza samÄ stronÄ Wolnych Lektur tworzymy również: </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>narzÄdzia redakcyjne,</li>\r\n" +#~ "<li>konwertery do różnych formatów e-booków, </li>\r\n" +#~ "<li>aplikacje mobile uÅatwiajÄ ce dostÄp do naszych zasobów.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " +#~ "jQuery, LaTeX, Java.\r\n" +#~ "Tworzone przez nas oprogramowanie udostÄpniamy na <a href=\"https://" +#~ "github.com/fnp/\">wolnej licencji</a>. </p>\r\n" +#~ " <p><b>Kto może pomóc w pracach programistycznych?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Każdy, kto umie i chciaÅby zdobyÄ punkty do karmy za udziaÅ w " +#~ "otwartym projekcie programistycznym. ;)</li>\r\n" +#~ "</ul>\r\n" +#~ msgstr "" +#~ " <h3>¿A quién buscamos?</h3>\r\n" +#~ "\r\n" +#~ "<h3>Redactores técnicos (composición tipográfica)</h3>\r\n" +#~ " <p>La composición tipográfica es la primera etapa del trabajo con el " +#~ "texto. Por medio de los marcados del idioma WL-XML le damos la forma " +#~ "deseada al texto y facilitamos su visualización en la página web. La " +#~ "redacción técnica se realiza en <a href=\"http://redakcja.wolnelektury.pl" +#~ "\">la Plataforma Editorial</a>, que permite automatizar gran parte del " +#~ "trabajo.</p>\r\n" +#~ "\r\n" +#~ "<p><b>¿Quién puede ser redactor técnico?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Cualquiera, después de una breve formación.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>Más información sobre la redacción técnica en <a href=\"http://" +#~ "redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\\r\n" +#~ "\">la página web de Wolne Lektury</a> </p>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Redactores literarios </h3>\r\n" +#~ " <p>La redacción literaria incluye la corrección de pruebas, adaptación e " +#~ "inclusión de las notas a pie de página , asà como el tratamiento de los " +#~ "temas literarios. Es una oportunidad única de ganar experiencia en la " +#~ "edición digital de textos. </p>\r\n" +#~ "\r\n" +#~ " <p><b>¿Quién puede ser redactor literario? </b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Las personas que tengan experiencia en la redacción de textos " +#~ "literarios,</li>\r\n" +#~ "<li>Los estudiantes y licenciados en humanidades que deseen obtener esta " +#~ "experiencia. </li>\r\n" +#~ "</ul>\r\n" +#~ "<p>Más información sobre la redacción literaria en <a href=\"http://" +#~ "redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" +#~ "\">la página web de Wolne Lektury</a> </p>\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Traductores</h3>\r\n" +#~ "<p>La página web de Wolne Lektury.pl está traducida a 7 idiomas: inglés, " +#~ "francés, alemán, español, lituano, ruso y ucraniano. Hay más de 200 mil " +#~ "de usuarios del extranjero, además, dentro de poco nuestra colección " +#~ "incluirá también obras en otros idiomas. De ahà que necesitemos traducir " +#~ "sistemáticamente nuevos contenidos que aparezcan en la página. </p>\r\n" +#~ "<p><b>¿Quién puede ayudarnos con las traducciones?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Cualquiera que domine bien por lo menos uno de los idiomas " +#~ "mencionados anteriormente.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Programadores</h3>\r\n" +#~ "<p>Aparte de la página web creamos también:</p>\r\n" +#~ "<ul>\r\n" +#~ "<li>herramientas editoriales,</li>\r\n" +#~ "<li>convertidores para varios formatos de libros electrónicos,</li>\r\n" +#~ "<li>aplicaciones móviles que facilitan el acceso a nuestra colección</li>" +#~ "\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>Usamos las siguientes tecnologÃas: Python, Django, XHTML, JavaScript, " +#~ "jQuery, LaTex, Java. \r\n" +#~ "El software creado por nosotros lo ponemos a su disposición en <a href=" +#~ "\"https://github.com/fnp/\">libre</a>. </p>\r\n" +#~ "<p><b>¿Quién puede ayudar en las tareas relacionadas con la programación?" +#~ "</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Cualquiera que sepa y quiera ganar puntos para su karma por la " +#~ "participación en un proyecto de programación abierto. ;)</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" + +#~ msgid "O projekcie" +#~ msgstr "Sobre el proyecto" + +#~ msgid "" +#~ "{% load reporting_stats %}\r\n" +#~ "\r\n" +#~ "<p><strong>Wolne Lektury to biblioteka internetowa czynna 24 godziny na " +#~ "dobÄ, 365 dni w roku i caÅkowicie darmowa</strong>. W jej zbiorach " +#~ "znajduje siÄ <strong>{% count_books %}</strong> utworów, w tym wiele " +#~ "lektur szkolnych zalecanych do użytku przez Ministerstwo Edukacji " +#~ "Narodowej, które trafiÅy już do domeny publicznej. Wszystkie dzieÅa sÄ " +#~ "odpowiednio opracowane - opatrzone przypisami, motywami i udostÄpnione w " +#~ "kilku formatach - <strong>HTML </strong>, <strong>TXT </strong>, " +#~ "<strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>. W " +#~ "bibliotece znajduje siÄ również kilkaset audiobooków, czytanych przez " +#~ "takich aktorów jak: Danuta Stenka, Jan Peszek czy Andrzej Chyra. Można " +#~ "ich sÅuchaÄ w formatach <strong>MP3</strong> i <strong>Ogg Vorbis</" +#~ "strong>. Audiobooki sÄ również dostÄpne w formacie <strong>DAISY </" +#~ "strong>dostosowanym do potrzeb osób sÅabowidzÄ cych, niewidomych oraz osób " +#~ "majÄ cych trudnoÅci z czytaniem.</p>\r\n" +#~ "\r\n" +#~ "<p>Biblioteka Wolne Lektury dostÄpna jest za poÅrednictwem aplikacji " +#~ "mobilnych â na system <a href=\"https://market.android.com/details?id=pl." +#~ "org.nowoczesnapolska.wlmobi\"> Android</a> oraz na system iOS. </p>\r\n" +#~ "\r\n" +#~ "<p><strong>Wszystkie utwory zamieszczone w bibliotece Wolne Lektury można " +#~ "zgodnie z prawem bezpÅatnie przeglÄ daÄ, sÅuchaÄ, ÅciÄ gaÄ na swój " +#~ "komputer, a także udostÄpniaÄ innym i cytowaÄ.</strong> </p>\r\n" +#~ msgstr "" +#~ "{% load reporting_stats %}\r\n" +#~ "\r\n" +#~ "<p><strong>Wolne Lektury es una biblioteca virtual de 24 horas, 365 dÃas " +#~ "al año y completamente gratuita</strong>. La colección consta de <strong>" +#~ "{% count_books %}</strong> obras, incluso muchas de lectura obligatoria " +#~ "recomendadas por el Ministerio de Educación Nacional y que ya forman " +#~ "parte del dominio público. Todos los textos están adecuadamente " +#~ "preparados â con notas a pie de página, temas literarios, y están " +#~ "disponibles en varios formatos - <strong>HTML </strong>, <strong>TXT </" +#~ "strong>, <strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</" +#~ "strong>.\r\n" +#~ " La biblioteca contiene también centenares de audiolibros, leÃdos por " +#~ "autores como Danuta Stenka, Jan Peszek o Andrzej Chyra. Se los puede " +#~ "escuchar en los formatos <strong>MP3</strong> y <strong>Ogg Vorbis</" +#~ "strong>. Los audiolibros se pueden conseguir también en el formato " +#~ "<strong>DAISY </strong>, adaptado a las necesidades de las personas con " +#~ "baja visión, invidentes, incluso las que tienen dificultades para leer.</" +#~ "p>\r\n" +#~ "\r\n" +#~ "<p>La Biblioteca Wolne Lektury está disponible por medio de aplicaciones " +#~ "móviles para los sistemas <a href=\"https://market.android.com/details?" +#~ "id=pl.org.nowoczesnapolska.wlmobi\"> Android</a> e iOS. </p>\r\n" +#~ "\r\n" +#~ "<p><strong>Todos los textos publicados en la Biblioteca Wolne Lektury " +#~ "están preparados para hojear, escuchar, descargar, para ponerlos a la " +#~ "disposición de otros y citar, todo esto de acuerdo con la ley.</strong> </" +#~ "p>\r\n" + +#~ msgid "" +#~ "<p>Wolne Lektury to projekt fundacji Nowoczesna Polska realizowany pro " +#~ "publico bono, we wspóÅpracy z BibliotekÄ NarodowÄ , BibliotekÄ ÅlaskÄ oraz " +#~ "BibliotekÄ ElblÄ skÄ pod patronatem Ministerstwa Edukacji Narodowej, " +#~ "Ministerstwa Kultury i Dziedzictwa Narodowego oraz Stowarzyszenia Pisarzy " +#~ "Polskich. W Komitecie Honorowym Wolnych Lektur zasiadajÄ : prof. Maria " +#~ "Janion, prof. Grażyna Borkowska, prof. PrzemysÅaw CzapliÅski, prof. " +#~ "MieczysÅaw DÄ browski, prof. Ewa Kraskowska, prof. MaÅgorzata CzermiÅska, " +#~ "prof. Jerzy JarzÄbski i prof. Piotr ÅliwiÅski.</p>\r\n" +#~ "\r\n" +#~ "<p>WiÄkszoÅÄ utworów w bibliotece nie jest chroniona prawem autorskim i " +#~ "znajduje siÄ w domenie publicznej, co oznacza że można je swobodnie " +#~ "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 <a " +#~ "href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie " +#~ "autorstwa-Na tych samych warunkach 3.0</a>. Publikujemy również kilka " +#~ "utworów, które autorzy lub spadkobiercy praw udostÄpnili na wolnej " +#~ "licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl" +#~ "\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>.</p>\r\n" +#~ "\r\n" +#~ "Kontakt: wolnelektury@nowoczesnapolska.org.pl\r\n" +#~ msgstr "" +#~ "<p>Wolne Lektury es un proyecto creado por la Fundación Polonia Moderna, " +#~ "realizado pro publico bono en colaboración con la Biblioteca Nacional, la " +#~ "Biblioteca de Silesia y la Biblioteca de Elblag bajo los auspicios del " +#~ "Ministerio de Cultura y Patrimonio Nacional y la Adociación de Escritores " +#~ "Polacos. El Comité de Honor de Wolne Lektury reúne a los profesores: " +#~ "Maria Janion, Grażyna Borkowska, PrzemysÅaw CzapliÅski, MieczysÅaw " +#~ "DÄ browski, Ewa Kraskowska, MaÅgorzata CzermiÅska, Jerzy JarzÄbski y Piotr " +#~ "ÅliwiÅski.</p>\r\n" +#~ "\r\n" +#~ "</p>La mayorÃa de los textos de la Biblioteca están libres de derechos de " +#~ "autor y son de dominio público, por lo tanto se pueden publicar y " +#~ "difundir libremente. Si un texto tiene materiales adicionales (notas a " +#~ "pie de página, temas literarios, etc.), que no están libres de derechos " +#~ "de autor, dichos materiales están publicados bajo la licencia <a href=" +#~ "\"http://creativecommons.org/licenses/by-sa/3.0/deed.es\">Reconocimiento-" +#~ "Compartir bajo la misma licencia 3.0</a>.También publicamos algunos " +#~ "textos legados al dominio público por los autores o herederos bajo la " +#~ "licencia <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.es" +#~ "\">Reconocimiento-Compartir bajo la misma licencia 3.0</a>.</p>\r\n" +#~ "\r\n" +#~ "Contacto: wolnelektury@nowoczesnapolska.org.pl \r\n" + +#~ msgid "ZespóÅ" +#~ msgstr "El equipo" + +#~ msgid "" +#~ "<p><strong>Magdalena Biernat</strong> â koordynatorka projektu, dyrektor " +#~ "zarzÄ dzajÄ ca fundacji Nowoczesna Polska. Socjolożka, absolwentka " +#~ "Uniwersytetu Warszawskiego i LâUniversité libre de Bruxelles. " +#~ "Specjalistka od projektów internetowych. KoordynowaÅa projekty Kandydaci " +#~ "2009 i Mam Prawo WiedzieÄ w Stowarzyszeniu 61. PracowaÅa przy wielu " +#~ "badaniach spoÅecznych realizowanych przez organizacje pozarzÄ dowe i firmy " +#~ "badawcze. </p>\r\n" +#~ "\r\n" +#~ "<p><strong>RadosÅaw Czajka</strong> â gÅówny programista, studiowaÅ " +#~ "informatykÄ na MIMUW. BiegÅy w jÄzykach programowania, znaczników: " +#~ "Python, XHTML, Javascript, CSS, LaTeX, SQL. Posiada doÅwiadczenie z " +#~ "frameworkami Django, Jquery, doÅwiadczenie w przeksztaÅceniach dokumentów " +#~ "XML (XSLT), w produkcji ebooków w formatach PDF i EPUB oraz w tworzeniu " +#~ "aplikacji mobilnych na system Android i iOS.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Marcin Koziej </strong>â programista. Absolwent Politechniki " +#~ "Warszawskiej i doktorant w Instytucie Filozofii Uniwersytetu " +#~ "Warszawskiego. DziaÅacz Mokotowskiej Kooperatywy Spożywczej. Podróżnik, " +#~ "rowerzysta i biesiadnik. Homo ludens.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Marta NiedziaÅkowska</strong> â redaktorka techniczna, " +#~ "absolwentka bibliotekoznawstwa i informacji naukowej UW. Studentka " +#~ "studiów magisterskich Public Policy and Administration na Collegium " +#~ "Civitas. </p>\r\n" +#~ "\r\n" +#~ msgstr "" +#~ "<p><strong>Magdalena Biernat</strong> â la coordinadora del proyecto, " +#~ "directora ejecutiva de la Fundación Polonia Moderna. Socióloga, " +#~ "licenciada por la Universidad de Varsovia y de LâUniversité libre de " +#~ "Bruxelles. Especializada en proyectos de Internet. Coordinó los proyectos " +#~ "âCandidatos 2009â y âTengo el Derecho de Saberâ en la Asociación 61. Ha " +#~ "trabajado en varias investigaciones sociales realizadas por " +#~ "organizaciones no gubernamentales y empresas investigadoras.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>RadosÅaw Czajka</strong> â programador principal. Estudió " +#~ "informática en MIM UW (La Facultad de Matemáticas, Informática y Mecánica " +#~ "de la Universidad de Varsovia). Conoce los lenguajes de programación y " +#~ "los marcados: Python, XHTML, Javascript, CSS, LaTex, SQL. Tiene " +#~ "experiencia en los frameworks Django, Jquery; en la transformación de los " +#~ "archivos XML (XSLT), en la producción de libros electrónicos en los " +#~ "formatos PDF y EPUB, asimismo en la creación de aplicaciones móviles para " +#~ "los sistema Android e iOS.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Marcin Koziej </strong> â programador. El incansable amateur " +#~ "de filosofÃa, informático, viajero, ciclista y juerguista. Homo ludens.</" +#~ "p>\r\n" +#~ "\r\n" +#~ "<p><strong>Marta NiedziaÅkowska</strong> â redactora técnica, licenciada " +#~ "en Ciencias de la Información y BibliotecologÃa de la Universidad de " +#~ "Varsovia. Estudiante de segundo curso de licenciatura de Public Policy " +#~ "and Administration en el Collegium Civitas. </p>\r\n" + +#~ msgid "" +#~ "<p><strong>Dorota A. Kowalska</strong> â redaktorka literacka, " +#~ "jÄzykoznawca, polonistka i slawistka, doktor nauk humanistycznych, " +#~ "adiunkt w Pracowni Polszczyzny Kresowej IJP PAN, gdzie zajmuje siÄ " +#~ "historiÄ i wspóÅczesnoÅciÄ jÄzyka polskiego na Ukrainie. Hobbystycznie " +#~ "Åpiewa archaiczne pieÅni ukraiÅskie i rosyjskie, cyklistka.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Aleksandra SekuÅa</strong> â redaktorka literacka, historyczka " +#~ "literatury, doktor nauk humanistycznych, absolwentka WydziaÅu Polonistyki " +#~ "Uniwersytetu Warszawskiego i SzkoÅy Nauk SpoÅecznych przy IFiS PAN. " +#~ "Zawodowo i naukowo zajmuje siÄ polskim romantyzmem, historiÄ idei i " +#~ "teoriÄ kultury. </p>\r\n" +#~ "\r\n" +#~ "<p><strong>PaweÅ KozioÅ </strong>â redaktor literacki. Ur. 1979, doktor " +#~ "nauk humanistycznych specjalizujÄ cy siÄ w literaturze dawnej, absolwent " +#~ "WydziaÅu Polonistyki Uniwersytetu Warszawskiego oraz Dulwich College w " +#~ "Londynie. Poeta, krytyk literacki, stypendysta Ministerstwa Kultury i " +#~ "Dziedzictwa Narodowego (2010). </p>\r\n" +#~ "\r\n" +#~ "<p><strong>Paulina ChoromaÅska</strong> â redaktorka techniczna, " +#~ "studentka II roku studiów magisterskich w Instytucie Informacji Naukowej " +#~ "i Studiów Bibliologicznych UW. Pracuje również w Pracowni Dokumentacji " +#~ "Teatru w Instytucie Teatralnym im. Z. Raszewskiego w Warszawie.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Aneta Rawska</strong> - redaktorka techniczna, studentka II " +#~ "roku studiów magisterskich w Instytucie Informacji Naukowej i Studiów " +#~ "Bibliologicznych UW, miÅoÅniczka wypieków i dobrej kuchni. Od 2009 roku " +#~ "prowadzi serwis koÅa PZW nr 21 w WoÅominie.</p>\r\n" +#~ msgstr "" +#~ "<p><strong>Dorota A. Kowalska</strong> â redactora literaria, lingüista, " +#~ "licenciada en filologÃa polaca y eslava, doctorada en humanidades, " +#~ "profesora adjunta en el Laboratorio de Idioma Polaco de la Zona " +#~ "Fronteriza, donde se ocupa de la historia y presente del idioma polaco en " +#~ "Ucrania. Su pasatiempo favorito es cantar canciones arcaicas ucranianas y " +#~ "rusas. Ciclista.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Aleksandra SekuÅa</strong> â redactora literaria, historiadora " +#~ "de literatura, doctorada en humanidades, licenciada por la Facultad de " +#~ "FilologÃa Polaca por la Escuela de Ciencias Sociales del IFIS PAN (el " +#~ "Instituto de FilosofÃa y SociologÃa de la Academia Polaca de Ciencias). " +#~ "Se ocupa del romanticismo polaco, historia de la idea y teorÃa de cultura." +#~ "</p>\r\n" +#~ "\r\n" +#~ "<p><strong>PaweÅ KozioÅ </strong> â redactor literario. Nació en 1979, " +#~ "doctorado en humanidades, especializado en literatura antigua. Licenciado " +#~ "por la Facultad de FilologÃa Polaca de la Universidad de Varsovia y por " +#~ "Dulwich College en Londres. Poeta y crÃtico literario, becario de el " +#~ "Ministerio de Cultura y Patrimonio Nacional (2010).</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Paulina ChoromaÅska</strong> â redactora técnica, estudiante " +#~ "de segundo curso de licenciatura en el Instituto de Información " +#~ "CientÃfica y BibliotecologÃa de la Universidad de Varsovia. Aparte, " +#~ "trabaja en el Centro de Documentación de Teatro en el Instituto de " +#~ "Teatro de Zbigniew Raszewski en Varsovia. </p> \r\n" +#~ "\r\n" +#~ "<p><strong>Aneta Rawska</strong> - redactora técnica, estudiante de " +#~ "segundo curso de licenciatura en el Instituto de Ciencias de la " +#~ "Información y BibliotecologÃa de la Universidad de Varsovia, amante de la " +#~ "pastelerÃa y la buena cocina. Desde 2009 está a cargo de la página web de " +#~ "PZW (Asociación Polaca de Pesca) número 21 en Wolomin. </p>\r\n" + +#~ msgid "Wesprzyj nas" +#~ msgstr "Apóyanos" + +#~ msgid "" +#~ "<p><strong>Przekaż 1% podatku na Wolne Lektury</strong></p>\r\n" +#~ "<p>Fundacja Nowoczesna Polska posiada status Organizacji Pożytku " +#~ "Publicznego dziÄki czemu na rozwój projektu Wolne Lektury można przekazaÄ " +#~ "1% swojego podatku. W tym celu należy wypeÅniÄ odpowiedniÄ rubrykÄ w " +#~ "rocznym zeznaniu podatkowym (PIT-36, PIT-37 lub PIT-28). W zeznaniu " +#~ "należy podaÄ nazwÄ:</p>\r\n" +#~ "Fundacja Nowoczesna Polska <br/>\r\n" +#~ "oraz numer z Krajowego Rejestru SÄ dowego (KRS) 0000070056<br/>" +#~ msgstr "" +#~ "<p><strong>Dona 1% de tu impuesto a Wolne Lektury</strong></p> \r\n" +#~ "<p>La Fundación Polonia Modera tiene carácter de organización no " +#~ "gubernamental, por lo tanto se puede donar 1% de impuesto para el " +#~ "desarrollo del proyecto Wolne Lektury. Para este propósito hay que " +#~ "rellenar la casilla adecuada en la declaración de la renta anual (PIT-36, " +#~ "PIT-37 o PIT-28). Se deberÃa poner el nombre:</p>\r\n" +#~ "Fundacja Nowoczesna Polska<br/>\r\n" +#~ "y el numero de el Registro Judicial Nacional (KRS) 0000070056<br/>" + +#~ msgid "" +#~ "<p><strong>Przekaż darowiznÄ na Wolne Lektury</strong></p>\r\n" +#~ "<p>Każda wpÅacona kwota zostanie przeznaczona na rozwój zasobów naszej " +#~ "biblioteki. Wystarczy dokonaÄ przelewu na konto:</p>\r\n" +#~ "\r\n" +#~ "Fundacja Nowoczesna Polska<br/>\r\n" +#~ "ul. MarszaÅkowska 84/92 lok. 125<br/>\r\n" +#~ "00-514 Warszawa<br/>\r\n" +#~ "Nr konta: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\n" +#~ "TytuÅ przelewu: Darowizna na Wolne Lektury<br/>\r\n" +#~ msgstr "" +#~ "<p><strong>Haz un donativo a Wolne Lektury</strong></p>\r\n" +#~ "<p>Cada aporte será destinado al incremento d los fondos de nuestra " +#~ "biblioteca. Basta con hacer una transferencia a nuestra cuenta:</p>\r\n" +#~ "\r\n" +#~ "Fundacja Nowoczesna Polska<br/>\r\n" +#~ "Ul. MarszaÅkowska84/92 lok. 125<br/>\r\n" +#~ "00-514 Warszawa<br/>\r\n" +#~ "El numero de la cuenta: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\n" +#~ "El titulo de la transferencia: Darowizna na Wolne Lektury<br/>\r\n" + +#~ msgid "WÅÄ cz siÄ w prace" +#~ msgstr "Colabora" + +#~ msgid "" +#~ "<ul>\r\n" +#~ "<li>ZostaÅ naszym redaktorem, programistÄ lub tÅumaczem</li>\r\n" +#~ "<li>ZdobÄ dź nowe umiejÄtnoÅci i doÅwiadczenie </li>\r\n" +#~ "<li>Weź udziaÅ w otwartym projekcie i twórz innowacyjnÄ bibliotekÄ " +#~ "internetowÄ </li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ "<p>Zapraszamy wszystkie osoby, które chcÄ wspóÅtworzyÄ nasz projekt. " +#~ "WspóÅpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " +#~ "literaturÄ , redagowaniem tekstów i projektami informatycznymi. Oferujemy " +#~ "profesjonalne szkolenia i staÅÄ pomoc merytorycznÄ . Wolontariusze mogÄ " +#~ "pracowaÄ zdalnie lub w siedzibie Fundacji.</p>\r\n" +#~ "<p>Organizujemy również praktyki studenckie â nawiÄ zaliÅmy wspóÅpracÄ z " +#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " +#~ "Karier UKSW oraz WydziaÅem Fizyki UW. </p>\r\n" +#~ "\r\n" +#~ "<h3>Jak siÄ do nas zgÅosiÄ?</h3>\r\n" +#~ "<p>Wszystkie zainteresowane osoby prosimy o przysÅanie maila na adres <a " +#~ "href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\r\n" +#~ msgstr "" +#~ "<ul>\r\n" +#~ "<li>Hazte nuestro voluntario como redactor, programador o traductor</li> " +#~ "\r\n" +#~ "<li>Adquiere nuevas habilidades y gana experiencia</li>\r\n" +#~ "<li>Participa en un proyecto abierto y crea una innovadora biblioteca " +#~ "virtual</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ "<p>Todos los que quieran participar en nuestro proyecto estarán " +#~ "bienvenidos. Colaboramos con estudiantes, docentes y todos los que están " +#~ "interesados y aficionados en literatura, redacción de textos o en " +#~ "proyectos informáticos. Les ofrecemos adiestramiento y ayuda en cuanto al " +#~ "contenido. Los voluntarios pueden trabajar a distancia o en la oficina " +#~ "principal de la Fundación.</p>\r\n" +#~ "<p>Organizamos también prácticas para estudiantes: colaboramos con el " +#~ "Instituto de Información CientÃfica y BibliologÃa de la Universidad de " +#~ "Varsovia, el Servicio de Orientación Profesional de la Universidad de " +#~ "Cardenal Stefan Wyszynski y la Facultad de FÃsica de la Universidad de " +#~ "Varsovia. </p>\r\n" +#~ "\n" +#~ "\r\n" +#~ "<h3>¿Cómo contactar con nosotros?</h3>\r\n" +#~ "<p>A todos los interesados les invitamos a mandarnos un e-mail a <a \r\n" +#~ "href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p> \r\n" + +#~ msgid "" +#~ "<h3>Kogo szukamy?</h3>\r\n" +#~ "\r\n" +#~ "<h3>Redaktorów technicznych (skÅad tekstu) </h3>\r\n" +#~ " <p>SkÅad jest pierwszym etapem pracy nad tekstem. Za pomocÄ znaczników " +#~ "jÄzyka WL-XML nadajemy tekstowi poÅ¼Ä danÄ formÄ i umożliwiamy wyÅwietlenie " +#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na <a " +#~ "href=\"http://redakcja.wolnelektury.pl\">Platformie Redakcyjnej</a>, " +#~ "która pozwala na zautomatyzowanie dużej czÄÅci pracy. </p>\r\n" +#~ "\r\n" +#~ " <p><b>Kto może zostaÄ redaktorem technicznym?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Każdy â po krótkim szkoleniu.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>WiÄcej informacji o redakcji technicznej znajdziecie na <a href=" +#~ "\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" +#~ "\">stronie redakcji Wolnych Lektur</a> </p>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Redaktorów literackich (merytorycznych) </h3>\r\n" +#~ " <p>Redakcja literacka obejmuje korektÄ, uwspóÅczeÅnienia oraz dodawanie " +#~ "przypisów i motywów literackich. To unikalna możliwoÅÄ zdobycia " +#~ "doÅwiadczenia w cyfrowej edycji tekstów. </p>\r\n" +#~ "\r\n" +#~ " <p><b>Kto może zostaÄ redaktorem literackim? </b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Osoby, które majÄ doÅwiadczenie w redakcji tekstów literackich,</li>" +#~ "\r\n" +#~ "<li>Studenci i absolwenci studiów humanistycznych, którzy chcÄ takie " +#~ "doÅwiadczenie zdobyÄ. </li>\r\n" +#~ "</ul>\r\n" +#~ "<p>WiÄcej informacji o redakcji merytorycznej znajdziecie na <a href=" +#~ "\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" +#~ "\">stronie redakcji Wolnych Lektur</a> </p>\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>TÅumaczy</h3>\r\n" +#~ " <p>Strona WolneLektury.pl jest dostÄpna w siedmiu jÄzykach obcych â " +#~ "angielskim, francuskim, niemieckim, hiszpaÅskim, litewskim, rosyjskim " +#~ "oraz ukraiÅskim. Użytkownikami biblioteki jest ponad 200 tysiÄcy osób z " +#~ "zagranicy, a już niedÅugo nasze zbiory obejmÄ również dzieÅa w jÄzykach " +#~ "obcych. Dlatego potrzebujemy na bieÅ¼Ä co tÅumaczyÄ nowe informacje " +#~ "pojawiajÄ ce siÄ na stronie. </p>\r\n" +#~ " <p><b>Kto może pomóc w tÅumaczeniach? </b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Każdy, kto dobrze zna co najmniej jeden z powyższych jÄzyków. </li>" +#~ "\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Programistów</h3>\r\n" +#~ " <p>Poza samÄ stronÄ Wolnych Lektur tworzymy również: </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>narzÄdzia redakcyjne,</li>\r\n" +#~ "<li>konwertery do różnych formatów e-booków, </li>\r\n" +#~ "<li>aplikacje mobile uÅatwiajÄ ce dostÄp do naszych zasobów.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " +#~ "jQuery, LaTeX, Java.\r\n" +#~ "Tworzone przez nas oprogramowanie udostÄpniamy na <a href=\"https://" +#~ "github.com/fnp/\">wolnej licencji</a>. </p>\r\n" +#~ " <p><b>Kto może pomóc w pracach programistycznych?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Każdy, kto umie i chciaÅby zdobyÄ punkty do karmy za udziaÅ w " +#~ "otwartym projekcie programistycznym. ;)</li>\r\n" +#~ "</ul>\r\n" +#~ msgstr "" +#~ "<h3>¿A quién buscamos?</h3>\r\n" +#~ "\r\n" +#~ "<h3>Redactores técnicos (composición tipográfica)</h3>\r\n" +#~ " <p>La composición tipográfica es la primera etapa del trabajo con el " +#~ "texto. Por medio de los marcados del idioma WL-XML le damos la forma " +#~ "deseada al texto y facilitamos su visualización en la página web. La " +#~ "redacción técnica se realiza en <a href=\"http://redakcja.wolnelektury.pl" +#~ "\">la Plataforma Editorial</a>, que permite automatizar gran parte del " +#~ "trabajo.</p>\r\n" +#~ "\r\n" +#~ "<p><b>¿Quién puede ser redactor técnico?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Cualquiera, después de una breve formación.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>Más información sobre la redacción técnica en <a href=\"http://" +#~ "redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\\r\n" +#~ "\">la página web de Wolne Lektury</a> </p>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Redactores literarios </h3>\r\n" +#~ " <p>La redacción literaria incluye la corrección de pruebas, adaptación e " +#~ "inclusión de las notas a pie de página , asà como el tratamiento de los " +#~ "temas literarios. Es una oportunidad única de ganar experiencia en la " +#~ "edición digital de textos. </p>\r\n" +#~ "\r\n" +#~ " <p><b>¿Quién puede ser redactor literario? </b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Las personas que tengan experiencia en la redacción de textos " +#~ "literarios,</li>\r\n" +#~ "<li>Los estudiantes y licenciados en humanidades que deseen obtener esta " +#~ "experiencia. </li>\r\n" +#~ "</ul>\r\n" +#~ "<p>Más información sobre la redacción literaria en <a href=\"http://" +#~ "redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" +#~ "\">la página web de Wolne Lektury</a> </p>\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Traductores</h3>\r\n" +#~ "<p>La página web de Wolne Lektury.pl está traducida a 7 idiomas: inglés, " +#~ "francés, alemán, español, lituano, ruso y ucraniano. Hay más de 200 mil " +#~ "de usuarios del extranjero, además, dentro de poco nuestra colección " +#~ "incluirá también obras en otros idiomas. De ahà que necesitemos traducir " +#~ "sistemáticamente nuevos contenidos que aparezcan en la página. </p>\r\n" +#~ "<p><b>¿Quién puede ayudarnos con las traducciones?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Cualquiera que domine bien por lo menos uno de los idiomas " +#~ "mencionados anteriormente.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Programadores</h3>\r\n" +#~ "<p>Aparte de la página web creamos también:</p>\r\n" +#~ "<ul>\r\n" +#~ "<li>herramientas editoriales,</li>\r\n" +#~ "<li>convertidores para varios formatos de libros electrónicos,</li>\r\n" +#~ "<li>aplicaciones móviles que facilitan el acceso a nuestra colección</li>" +#~ "\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>Usamos las siguientes tecnologÃas: Python, Django, XHTML, JavaScript, " +#~ "jQuery, LaTex, Java. \r\n" +#~ "El software creado por nosotros lo ponemos a su disposición en <a href=" +#~ "\"https://github.com/fnp/\">libre</a>. </p>\r\n" +#~ "<p><b>¿Quién puede ayudar en las tareas relacionadas con la programación?" +#~ "</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Cualquiera que sepa y quiera ganar puntos para su karma por la " +#~ "participación en un proyecto de programación abierto. ;)</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" + +#~ msgid "Prawa" +#~ msgstr "Derechos" + +#~ msgid "" +#~ "<p>WiÄkszoÅÄ utworów w bibliotece nie jest chroniona prawem autorskim i " +#~ "znajduje siÄ w domenie publicznej, co oznacza, że można je swobodnie " +#~ "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 <a " +#~ "href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie " +#~ "autorstwa-Na tych samych warunkach 3.0</a>. Publikujemy również kilka " +#~ "utworów, które autorzy lub spadkobiercy praw udostÄpnili na wolnej " +#~ "licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl" +#~ "\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>.</p>" +#~ msgstr "" +#~ "</p>La mayorÃa de los textos de la Biblioteca son libres de derechos de " +#~ "autor y son de dominio público, por lo tanto se pueden publicar y " +#~ "difundir libremente. Si un texto tiene materiales adicionales (notas a " +#~ "pie de página, temas literarios, etc.), que no están libres de derechos " +#~ "de autor, dichos materiales están publicados bajo la licencia <a href=" +#~ "\"http://creativecommons.org/licenses/by-sa/3.0/deed.es\">Reconocimiento-" +#~ "Compartir bajo la misma licencia 3.0</a>.También publicamos algunos " +#~ "textos legados al dominio público por los autores o herederos bajo la " +#~ "licencia <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.es" +#~ "\">Reconocimiento-Compartir bajo la misma licencia 3.0</a>.</p>" diff --git a/src/infopages/locale/pl/LC_MESSAGES/django.mo b/src/infopages/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..0310e4668 Binary files /dev/null and b/src/infopages/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/infopages/locale/pl/LC_MESSAGES/django.po b/src/infopages/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..ceb4d08fe --- /dev/null +++ b/src/infopages/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,47 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-01-27 16:38+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2)\n" + +#: models.py:11 +msgid "main page priority" +msgstr "kolejnoÅÄ na stronie gÅównej" + +#: models.py:12 +msgid "slug" +msgstr "slug" + +#: models.py:13 +msgid "title" +msgstr "tytuÅ" + +#: models.py:14 +msgid "left column" +msgstr "lewa kolumna" + +#: models.py:15 +msgid "right column" +msgstr "prawa kolumna" + +#: models.py:19 +msgid "info page" +msgstr "strona informacyjna" + +#: models.py:20 +msgid "info pages" +msgstr "strony informacyjne" diff --git a/src/infopages/locale/uk/LC_MESSAGES/django.mo b/src/infopages/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..fe58f78b4 Binary files /dev/null and b/src/infopages/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/infopages/locale/uk/LC_MESSAGES/django.po b/src/infopages/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..0ff6832e8 --- /dev/null +++ b/src/infopages/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,1265 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: \n" +"Last-Translator: Natalia Kertyczak <natalczyk@o2.pl>\n" +"Language-Team: uk <yourteam@example.com>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:11 +msgid "main page priority" +msgstr "" + +#: models.py:12 +msgid "slug" +msgstr "" + +#: models.py:13 +msgid "title" +msgstr "" + +#: models.py:14 +msgid "left column" +msgstr "" + +#: models.py:15 +msgid "right column" +msgstr "" + +#: models.py:19 +msgid "info page" +msgstr "" + +#: models.py:20 +msgid "info pages" +msgstr "" + +#~ msgid "Wolontariat dla wiedzy" +#~ msgstr "ÐолонÑеÑÑÑво в оÑвÑÑÑ" + +#~ msgid "" +#~ "<h2>Wolontariat</h2>\r\n" +#~ "\t<p>\r\n" +#~ "\t\tBiogramy pisarzy oraz definicje epok i gatunków literackich w\r\n" +#~ "\t\tbibliotece internetowej Wolne Lektury napisali uczniowie\r\n" +#~ "\t\tczterech szkóŠpodczas warsztatów âWolontariat dla wiedzyâ.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t\tUczniowie pracowali wspólnie pod merytorycznym nadzorem\r\n" +#~ "\t\tnauczycieli i specjalistów â literaturoznawców na\r\n" +#~ "\t\t<a href=\"http://wolnepodreczniki.pl/wolontariat/\">\r\n" +#~ "\r\n" +#~ "\t\t\tplatformie internetowej wiki</a>\r\n" +#~ "\t\tprzygotowanej przez zespóÅ\r\n" +#~ "\t\t<a href=\"http://2ia.pl/\">2ia</a>. Praca nad notami byÅa " +#~ "jednoczeÅnie naukÄ wykorzystywania\r\n" +#~ "\t\tkomputerów i internetu do wyszukiwania informacji, a także\r\n" +#~ "\t\tweryfikowania ich wiarygodnoÅci.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t\tProjekt \"Wolontariat dla wiedzy\" zostaÅ zrealizowany dziÄki\r\n" +#~ "\t\twsparciu\r\n" +#~ "\t\t<a href=\"http://www.menis.gov.pl/\">\r\n" +#~ "\t\t\tMinisterstwa Edukacji Narodowej</a>. Nagrody dla uczniów ufundowali" +#~ "\r\n" +#~ "\t\t<a href=\"http://www.nk.com.pl/engine/index.php?page=glowna\">\r\n" +#~ "\r\n" +#~ "\t\t\tWydawnictwo Nasza KsiÄgarnia</a>\r\n" +#~ "\t\ti\r\n" +#~ "\t\t<a href=\"http://helion.pl/\">Wydawnictwo Helion</a>. Noty " +#~ "zweryfikowano w serwisie\r\n" +#~ "\t\t<a href=\"http://www.plagiat.pl/webplagiat/main.action\">\r\n" +#~ "\t\t\tPlagiat.pl</a>.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t\t<a href=\"/static/wolontariat.pdf\">Raport z realizacji projektu " +#~ "âWolontariat dla wiedzy\"</a>.\r\n" +#~ "\t</p>\r\n" +#~ "\r\n" +#~ "\t<p>\r\n" +#~ "\t<img src=\"/static/img/wolontariat/okladka.jpg\" style='margin: 10px' />" +#~ "\r\n" +#~ "\t<img src=\"/static/img/wolontariat/01.jpg\" style='margin: 10px' />\r\n" +#~ "\t<img src=\"/static/img/wolontariat/02.jpg\" style='margin: 10px' />\r\n" +#~ " <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />" +#~ "\r\n" +#~ " <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />" +#~ "\r\n" +#~ "\t</p>\r\n" +#~ msgstr "" +#~ "<h2>ÐолонÑеÑÑÑво</h2>\r\n" +#~ "               <p>\r\n" +#~ "                              ÐÑогÑами пиÑÑменникÑв Ñа деÑÑнÑÑÑÑ ÐµÐ¿Ð¾Ñ Ñа " +#~ "лÑÑеÑаÑÑÑÐ½Ð¸Ñ Ð¶Ð°Ð½ÑÑв в ÑнÑеÑнеÑ-бÑблÑоÑеÑÑ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ñ ÑÑнÑми ÑоÑиÑÑÐ¾Ñ ÑкÑл " +#~ "пÑдÑÐ°Ñ Ð¼Ð°Ð¹ÑÑеÑ-клаÑÑв âÐолонÑеÑÑÑво в оÑвÑÑÑâ.\r\n" +#~ "               </p>\r\n" +#~ "\r\n" +#~ "               <p>\r\n" +#~ "                              УÑÐ½Ñ ÑпÑлÑно пÑаÑÑвали вÑд доглÑдом " +#~ "вÑиÑелÑв Ñа ÑпеÑÑалÑÑÑÑв â лÑÑеÑаÑÑÑознавÑÑв на <a href=\"http://" +#~ "wolnepodreczniki.pl/wolontariat/\">\r\n" +#~ "\r\n" +#~ "                                              ÑнÑеÑнеÑовÑй вÑкÑ-" +#~ "плаÑÑоÑмÑ</a>\r\n" +#~ "                              вÑÑановленÑй командоÑ\r\n" +#~ "                              <a href=\"http://2ia.pl/\">2ia</a>. РобоÑа " +#~ "над Ñими ÑекÑÑами бÑла водноÑÐ°Ñ Ð½Ð°ÑÐºÐ¾Ñ ÐºÐ¾ÑиÑÑÑваÑиÑÑ ÐºÐ¾Ð¼Ð¿âÑÑеÑом Ñа " +#~ "ÑнÑеÑнеÑом Ð´Ð»Ñ Ð¿Ð¾ÑÑÐºÑ ÑнÑоÑмаÑÑÑ, а Ñакож пеÑевÑÑки ÑÑ Ð²ÑÑогÑдноÑÑÑ.\r\n" +#~ "               </p>\r\n" +#~ "\r\n" +#~ "               <p>\r\n" +#~ "                              ÐÑÐ¾ÐµÐºÑ \"ÐолонÑеÑÑÑво в оÑвÑÑÑ\" здÑйÑнено " +#~ "завдÑки пÑдÑÑимÑÑ \r\n" +#~ "                              <a href=\"http://www.menis.gov.pl/\">\r\n" +#~ "                                              ÐÑнÑÑÑеÑÑÑва наÑÑоналÑÐ½Ð¾Ñ " +#~ "оÑвÑÑи</a>. ÐÑизи Ð´Ð»Ñ ÑÑнÑв пÑигоÑÑвали             <a href=\"http://www." +#~ "nk.com.pl/engine/index.php?page=glowna\">\r\n" +#~ "\r\n" +#~ "                                              ÐидавниÑÑво Nasza " +#~ "KsiÄgarnia</a>\r\n" +#~ "                              Ñа\r\n" +#~ "                              <a href=\"http://helion.pl/\">ÐидавниÑÑво " +#~ "Helion</a>. ТекÑÑи пеÑевÑÑено в ÑеÑÑÑÑÑ <a href=\"http://www.plagiat.pl/" +#~ "webplagiat/main.action\">\r\n" +#~ "                                              Plagiat.pl</a>.\r\n" +#~ "               </p>\r\n" +#~ "\r\n" +#~ "               <p>\r\n" +#~ "                              <a href=\"/static/wolontariat.pdf\">ÐвÑÑ Ð· " +#~ "ÑеалÑзаÑÑÑ Ð¿ÑоекÑÑ \"ÐолонÑеÑÑÑво в оÑвÑÑÑ\"</a>.\r\n" +#~ "               </p>\r\n" +#~ "\r\n" +#~ "               <p>\r\n" +#~ "               <img src=\"/static/img/wolontariat/okladka.jpg\" " +#~ "style='margin: 10px' />\r\n" +#~ "               <img src=\"/static/img/wolontariat/01.jpg\" " +#~ "style='margin: 10px' />\r\n" +#~ "               <img src=\"/static/img/wolontariat/02.jpg\" " +#~ "style='margin: 10px' />\r\n" +#~ "   <img src=\"/static/img/wolontariat/03.jpg\" style='margin: 10px' />" +#~ "\r\n" +#~ "   <img src=\"/static/img/wolontariat/04.jpg\" style='margin: 10px' />" +#~ "\r\n" +#~ "               </p> \r\n" + +#~ msgid "" +#~ "\t<h2>Autorzy</h2>\r\n" +#~ "\r\n" +#~ "\t<ol>\r\n" +#~ "\t\t<li>\r\n" +#~ "\t\t\t<p>\r\n" +#~ "\t\t\t\tGimnazjum nr 40 z OddziaÅami Integracyjnymi w Zespole\r\n" +#~ "\t\t\t\tSzkóŠnr 69 im. Armii Krajowej Grupy Bojowej âKRYBARâ,\r\n" +#~ "\t\t\t\tul. Drewniana 8, 00-345 Warszawa; klasa druga pod opiekÄ \r\n" +#~ "\t\t\t\tAnny Budziarek-Friedrich:\r\n" +#~ "\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t<ul>\r\n" +#~ "\t\t\t\t<li>Burdon Filip;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>DÄbski Bartek;</li>\r\n" +#~ "\t\t\t\t<li>Jackowicz Kamil;</li>\r\n" +#~ "\t\t\t\t<li>Kurek PaweÅ;</li>\r\n" +#~ "\t\t\t\t<li>Makles Bartosz;</li>\r\n" +#~ "\t\t\t\t<li>Markiewicz Jeremiasz;</li>\r\n" +#~ "\t\t\t\t<li>MigdaÅ Katarzyna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Mioduszewski MichaÅ;</li>\r\n" +#~ "\t\t\t\t<li>Pfeiffer Ida;</li>\r\n" +#~ "\t\t\t\t<li>PÅaskowicka Karolina;</li>\r\n" +#~ "\t\t\t\t<li>Sailer Ewa.</li>\r\n" +#~ "\t\t\t</ul>\r\n" +#~ "\t\t</li>\r\n" +#~ "\r\n" +#~ "\t\t<li>\r\n" +#~ "\t\t\t<p>\r\n" +#~ "\t\t\t\tXXXIII Liceum OgólnoksztaÅcÄ ce im. MikoÅaja Kopernika,\r\n" +#~ "\t\t\t\tul. Bema 76, 01-225 Warszawa; klasa pierwsza o profilu\r\n" +#~ "\t\t\t\tbiologiczno-chemicznym pod opiekÄ Elżbiety Konkowskiej:\r\n" +#~ "\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t<ul>\r\n" +#~ "\t\t\t\t<li>Chwil BartÅomiej;</li>\r\n" +#~ "\t\t\t\t<li>Czarnecka Natalia;</li>\r\n" +#~ "\t\t\t\t<li>GawroÅska Iga;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Grabarczyk Marta;</li>\r\n" +#~ "\t\t\t\t<li>JastrzÄ b Katarzyna;</li>\r\n" +#~ "\t\t\t\t<li>Krawczak Olga;</li>\r\n" +#~ "\t\t\t\t<li>Krawczyk Marianna;</li>\r\n" +#~ "\t\t\t\t<li>Kur Natalia;</li>\r\n" +#~ "\t\t\t\t<li>Kwiatek Marta;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>LaÅkiewicz Joanna;</li>\r\n" +#~ "\t\t\t\t<li>MachczyÅska Daria;</li>\r\n" +#~ "\t\t\t\t<li>Miecznikowska Izabela;</li>\r\n" +#~ "\t\t\t\t<li>Moczulska Karolina;</li>\r\n" +#~ "\t\t\t\t<li>MoÅcicka Aneta;</li>\r\n" +#~ "\t\t\t\t<li>Narloch Sabina;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Przybysz PaweÅ;</li>\r\n" +#~ "\t\t\t\t<li>Puchta Marek;</li>\r\n" +#~ "\t\t\t\t<li>Ryska Cezary;</li>\r\n" +#~ "\t\t\t\t<li>Sandomierski BartÅomiej;</li>\r\n" +#~ "\t\t\t\t<li>SÅawiÅski Tomasz;</li>\r\n" +#~ "\t\t\t\t<li>SÅowik Olga;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Starzycka Katarzyna;</li>\r\n" +#~ "\t\t\t\t<li>Strzelczak Karolina;</li>\r\n" +#~ "\t\t\t\t<li>Szafran Danuta;</li>\r\n" +#~ "\t\t\t\t<li>Szmigielska Magdalena;</li>\r\n" +#~ "\t\t\t\t<li>Szulkowska Alicja;</li>\r\n" +#~ "\t\t\t\t<li>Ålusarczyk Anna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<li>Tytkowska Anna.</li>\r\n" +#~ "\t\t\t</ul>\r\n" +#~ "\t\t\t<li>\r\n" +#~ "\t\t\t\t<p>\r\n" +#~ "\t\t\t\t\tAutorskie Niepubliczne Liceum OgólnoksztaÅcÄ ce nr\r\n" +#~ "\t\t\t\t\t42, ul. Iwicka 47 B, 00-735 Warszawa; klasa pierwsza\r\n" +#~ "\t\t\t\t\to profilu ogólnym pod opiekÄ MichaÅa Friedricha:\r\n" +#~ "\t\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<ul>\r\n" +#~ "\t\t\t\t\t<li>Baraniecka Marta;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>GoÅaszewska Ewa;</li>\r\n" +#~ "\t\t\t\t\t<li>Kwiatkowski MichaÅ;</li>\r\n" +#~ "\t\t\t\t\t<li>Machnikowska Monika;</li>\r\n" +#~ "\t\t\t\t\t<li>Pietrzak Bartosz;</li>\r\n" +#~ "\t\t\t\t\t<li>Przespolewski PrzemysÅaw;</li>\r\n" +#~ "\t\t\t\t\t<li>RosiÅska Zuzanna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Sibiga Magdalena.</li>\r\n" +#~ "\t\t\t\t</ul>\r\n" +#~ "\t\t\t</li>\r\n" +#~ "\t\t\t<li>\r\n" +#~ "\t\t\t\t<p>\r\n" +#~ "\t\t\t\t\tLXIV Liceum OgólnoksztaÅcÄ ce im. St. I. Witkiewicza,\r\n" +#~ "\t\t\t\t\tul. ElblÄ ska 51, 01-737 Warszawa; klasa pierwsza o\r\n" +#~ "\t\t\t\t\tprofilu ogólnym pod opiekÄ Daniela Zycha:\r\n" +#~ "\t\t\t\t</p>\r\n" +#~ "\r\n" +#~ "\t\t\t\t<ul>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Andrzejczak Kamil;</li>\r\n" +#~ "\t\t\t\t\t<li>Czubaj Konrad;</li>\r\n" +#~ "\t\t\t\t\t<li>DrÄ gowska Katarzyna;</li>\r\n" +#~ "\t\t\t\t\t<li>Gajewska Magdalena;</li>\r\n" +#~ "\t\t\t\t\t<li>GÅowacki Jan;</li>\r\n" +#~ "\t\t\t\t\t<li>Grad PaweÅ;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Hnatowski Bartek;</li>\r\n" +#~ "\t\t\t\t\t<li>Karwowski Marcin;</li>\r\n" +#~ "\t\t\t\t\t<li>KÅos Aneta;</li>\r\n" +#~ "\t\t\t\t\t<li>KozieÅ Barbara;</li>\r\n" +#~ "\t\t\t\t\t<li>KozÅowska Anna;</li>\r\n" +#~ "\t\t\t\t\t<li>Krug Pamela;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Krzosek Jakub;</li>\r\n" +#~ "\t\t\t\t\t<li>LubaÅ MichaÅ;</li>\r\n" +#~ "\t\t\t\t\t<li>Masewicz Natalia;</li>\r\n" +#~ "\t\t\t\t\t<li>Mastalerz Agnieszka;</li>\r\n" +#~ "\t\t\t\t\t<li>Modelska Marta;</li>\r\n" +#~ "\t\t\t\t\t<li>Nowak Aleksandra;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Pabian Agnieszka;</li>\r\n" +#~ "\t\t\t\t\t<li>Paszkowska Aleksandra;</li>\r\n" +#~ "\t\t\t\t\t<li>Pielat Zofia;</li>\r\n" +#~ "\t\t\t\t\t<li>Poniecka Agnieszka;</li>\r\n" +#~ "\t\t\t\t\t<li>Pytlak Urszula;</li>\r\n" +#~ "\t\t\t\t\t<li>Rosa Karolina;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>SmyczyÅska Kamila;</li>\r\n" +#~ "\t\t\t\t\t<li>StoliÅska Barbara;</li>\r\n" +#~ "\t\t\t\t\t<li>SzymaÅska Katarzyna;</li>\r\n" +#~ "\t\t\t\t\t<li>Åcibior Ewa;</li>\r\n" +#~ "\t\t\t\t\t<li>Witczak Magda;</li>\r\n" +#~ "\t\t\t\t\t<li>Witkowska Justyna;</li>\r\n" +#~ "\r\n" +#~ "\t\t\t\t\t<li>Wyrzykowska Jowita;</li>\r\n" +#~ "\t\t\t\t\t<li>ZióÅkowska Adrianna.</li>\r\n" +#~ "\t\t\t\t</ul>\r\n" +#~ "\t\t\t</li>\r\n" +#~ "\t </li>\r\n" +#~ "\t </ol>\r\n" +#~ msgstr "" +#~ "<h2>ÐвÑоÑи</h2>\r\n" +#~ "\r\n" +#~ "               <ol>\r\n" +#~ "                              <li>\r\n" +#~ "                                              <p>\r\n" +#~ "                                                              ÐÑмназÑÑ " +#~ "â40 з ÑнÑегÑаÑÑйними вÑддÑлами в ÐомплекÑÑ ÑкÑл â 69 ÑÐ¼ÐµÐ½Ñ ÐÑмÑÑ ÐÑÐ°Ð¹Ð¾Ð²Ð¾Ñ " +#~ "ÐÐ¾Ð¹Ð¾Ð²Ð¾Ñ ÐÑÑпи âÐÐ ÐÐÐÐ â,\r\n" +#~ "                                                              вÑл. " +#~ "ÐÑевнÑна 8, 00-345 ÐаÑÑава; дÑÑгий ÐºÐ»Ð°Ñ Ð¿Ñд опÑÐºÐ¾Ñ Ðнни ÐÑдзÑÑек-ФÑÑдÑÑÑ :" +#~ "\r\n" +#~ "                                              </p>\r\n" +#~ "\r\n" +#~ "                                              <ul>\r\n" +#~ "                                                              <li>ÐÑÑдон " +#~ "ФÑлÑп;</li>\r\n" +#~ "\r\n" +#~ "                                                              " +#~ "<li>ÐембÑÑÐºÑ ÐаÑÑек;</li>\r\n" +#~ "                                                              " +#~ "<li>ЯÑковÑÑ ÐамÑл;</li>\r\n" +#~ "                                                              <li>ÐÑÑек " +#~ "Ðавел;</li>\r\n" +#~ "                                                              <li>ÐÐ°ÐºÐ»ÐµÑ " +#~ "ÐаÑÑоÑ;</li>\r\n" +#~ "                                                              " +#~ "<li>ÐаÑкевÑÑ ÐÑемÑÑ;</li>\r\n" +#~ "                                                              <li>ÐÑгдал " +#~ "ÐаÑажина;</li>\r\n" +#~ "\r\n" +#~ "                                                              " +#~ "<li>ÐÑодÑÑевÑÑÐºÑ ÐÑÑ Ð°Ð»;</li>\r\n" +#~ "                                                              <li>ФайÑÐµÑ " +#~ "Ðда;</li>\r\n" +#~ "                                                              " +#~ "<li>ÐлаÑковÑÑÑка ÐаÑолÑна;</li>\r\n" +#~ "                                                              <li>Ð¡Ð°Ð¹Ð»ÐµÑ " +#~ "Ðва.</li>\r\n" +#~ "                                              </ul>\r\n" +#~ "                              </li>\r\n" +#~ "\r\n" +#~ "                              <li>\r\n" +#~ "                                              <p>\r\n" +#~ "                                                              XXXIII " +#~ "ÐагалÑнооÑвÑÑний лÑÑей ÑÐ¼ÐµÐ½Ñ ÐÐ¸ÐºÐ¾Ð»Ð°Ñ ÐопеÑника,\r\n" +#~ "                                                              вÑл. Ðема " +#~ "76, 01-225 ÐаÑÑава; пеÑÑий ÐºÐ»Ð°Ñ Ð±ÑологÑÑно-Ñ ÑмÑÑного пÑоÑÑÐ»Ñ Ð¿Ñд опÑÐºÐ¾Ñ " +#~ "ÐлÑжбÑÑи ÐонковÑÑÐºÐ¾Ñ :\r\n" +#~ "                                              </p>\r\n" +#~ "\r\n" +#~ "                                              <ul>\r\n" +#~ "                                                              <li>ХвÑл " +#~ "ÐаÑÑломÑй;</li>\r\n" +#~ "                                                              " +#~ "<li>ЧаÑнеÑÑка ÐаÑалÑÑ ;</li>\r\n" +#~ "                                                              " +#~ "<li>ÒавÑонÑÑка ÐÒа ;</li>\r\n" +#~ "\r\n" +#~ "                                                              " +#~ "<li>ÒÑабаÑÑик ÐаÑÑа;</li>\r\n" +#~ "                                                              " +#~ "<li>ЯаÑÑжомб ÐаÑажина;</li>\r\n" +#~ "                                                              " +#~ "<li>ÐÑавÑак ÐлÑга;</li>\r\n" +#~ "                                                              " +#~ "<li>ÐÑавÑик ÐаÑÑанна ;</li>\r\n" +#~ "                                                              <li>ÐÑÑ " +#~ "ÐаÑалÑÑ;</li>\r\n" +#~ "                                                              <li>ÐвÑÑек " +#~ "ÐаÑÑа;</li>\r\n" +#~ "\r\n" +#~ "                                                              " +#~ "<li>ÐаÑÑÐºÐµÐ²Ð¸Ñ Ðоанна;</li>\r\n" +#~ "                                                              " +#~ "<li>ÐÐ°Ñ ÑинÑÑка ÐаÑÑÑ;</li>\r\n" +#~ "                                                              " +#~ "<li>ÐÑÑнÑковÑÑка ÐзабелÑ;</li>\r\n" +#~ "                                                              " +#~ "<li>ÐоÑÑлÑÑка ÐаÑолÑна;</li>\r\n" +#~ "                                                              " +#~ "<li>ÐоÑÑÑÑÑка ÐнеÑа;</li>\r\n" +#~ "                                                              <li>ÐаÑÐ»Ð¾Ñ " +#~ "СабÑна;</li>\r\n" +#~ "\r\n" +#~ "                                                              <li>ÐÑÐ¸Ð±Ð¸Ñ " +#~ "Ðавел;</li>\r\n" +#~ "                                                              <li>ÐÑÑ Ñа " +#~ "ÐаÑек;</li>\r\n" +#~ "                                                              <li>РиÑка " +#~ "ЦезаÑи;</li>\r\n" +#~ "                                                              " +#~ "<li>СандомÑÑÑÑÐºÑ ÐаÑломÑй;</li>\r\n" +#~ "                                                              " +#~ "<li>СлавÑнÑÑÐºÑ Ð¢Ð¾Ð¼Ð°Ñ;</li>\r\n" +#~ "                                                              <li>СловÑк " +#~ "ÐлÑга;</li>\r\n" +#~ "\r\n" +#~ "                                                              " +#~ "<li>СÑажиÑÑка ÐаÑажина;</li>\r\n" +#~ "                                                              " +#~ "<li>СÑжелÑак ÐаÑолÑна;</li>\r\n" +#~ "                                                              <li>ШаÑÑан " +#~ "ÐанÑÑа;</li>\r\n" +#~ "                                                              " +#~ "<li>ШмÑÒÑлÑÑÑка ÐаÒдалена;</li>\r\n" +#~ "                                                              " +#~ "<li>ШÑлковаÑÑка ÐлÑÑÑÑ;</li>\r\n" +#~ "                                                              " +#~ "<li>СÑлÑÑаÑÑик Ðнна;</li>\r\n" +#~ "\r\n" +#~ "                                                              " +#~ "<li>ТиÑковÑÑка  Ðнна.</li>\r\n" +#~ "                                              </ul>\r\n" +#~ "                                              <li>\r\n" +#~ "                                                              <p>\r\n" +#~ "                                                                             " +#~ "ÐвÑоÑÑÑкий ÐепÑблÑÑний ÐагалÑнооÑвÑÑнÑй ÐÑÑей â " +#~ "                                                             42, вÑл. " +#~ "ÐвÑÑÑка 47 B, 00-735 ÐаÑÑава; пеÑÑий ÐºÐ»Ð°Ñ Ð·Ð°Ð³Ð°Ð»Ñного пÑоÑÑÐ»Ñ Ð¿Ñд опÑÐºÐ¾Ñ " +#~ "ÐÑÑ Ð°Ð»Ð° ФÑÑдÑÑÑ Ð°:\r\n" +#~ "                                                              </p>\r\n" +#~ "\r\n" +#~ "                                                              <ul>\r\n" +#~ "                                                                             " +#~ "<li>ÐаÑанÑÑÑка ÐаÑÑа;</li>\r\n" +#~ "\r\n" +#~ "                                                                             " +#~ "<li>ÒолаÑевÑÑка Ðва;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐвÑÑковÑÑÐºÑ ÐÑÑ Ð°Ð»;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐÐ°Ñ Ð½ÑковÑÑка ÐонÑка;</li>\r\n" +#~ "                              " +#~ "                                              <li>ÐÑÑжак ÐаÑÑоÑ;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐÑеÑполевÑÑÐºÑ ÐÑемиÑлав;</li>\r\n" +#~ "                                                                             " +#~ "<li>РоÑÑнÑÑка ÐÑзанна;</li>\r\n" +#~ "\r\n" +#~ "                                                                             " +#~ "<li>СÑбÑÒа ÐаÒдалена.</li>\r\n" +#~ "                                                              </ul>\r\n" +#~ "                                              </li>\r\n" +#~ "                                              <li>\r\n" +#~ "                                                              <p>\r\n" +#~ "                                                                             " +#~ "LXIV ÐагалÑнооÑвÑÑнÑй ÐÑÑей ÑÐ¼ÐµÐ½Ñ Ð¡Ñ.Ð. ÐÑÑкÑвÑÑа,\r\n" +#~ "                                                                             " +#~ "вÑл. ÐлÑблонзÑка 51, 01-737 ÐаÑÑава; пеÑÑий ÐºÐ»Ð°Ñ Ð·Ð°Ð³Ð°Ð»Ñного пÑоÑÑÐ»Ñ Ð¿Ñд " +#~ "опÑÐºÐ¾Ñ ÐанÑла ÐÐ¸Ñ Ð°:\r\n" +#~ "                                                              </p>\r\n" +#~ "\r\n" +#~ "                                                              <ul>\r\n" +#~ "\r\n" +#~ "                                                                             " +#~ "<li>ÐнджейÑак ÐамÑл;</li>\r\n" +#~ "                                                                             " +#~ "<li>ЧÑбай ÐонÑад;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐÑонÒовÑÑка ÐаÑажина;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÒаÑвÑÑка ÐаÒдалена;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÒловаÑÑÐºÑ Ð¯Ð½;</li>\r\n" +#~ "                              " +#~ "                                              <li>ÒÑад  Ðавел;</li>\r\n" +#~ "\r\n" +#~ "                                                                             " +#~ "<li>ÐнаÑовÑÑÐºÑ ÐаÑÑек;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐаÑвовÑÑÐºÑ ÐаÑÑÑн;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐÐ»Ð¾Ñ ÐнеÑа;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐозÑл ÐаÑбаÑа;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐозловÑÑка Ðнна;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐÑÑÒ Ðамела;</li>\r\n" +#~ "\r\n" +#~ "                                                                             " +#~ "<li>ÐжоÑек ЯкÑб;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐÑбаÑÑ ÐÑÑ Ð°Ð»;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐаÑевÑÑ ÐаÑалÑÑ;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐаÑÑалеж ÐÒнÑÑка;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐоделÑÑÑка ÐаÑÑа;</li>\r\n" +#~ "                                                                             " +#~ "<li>Ðовак ÐлекÑандÑа;</li>\r\n" +#~ "\r\n" +#~ "                                                                             " +#~ "<li>ÐабÑн ÐÒнÑÑка;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐаÑковÑÑка ÐлекÑандÑа;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐÑÐ»Ð°Ñ ÐоÑÑÑ;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐонÑÑÑка ÐÒнÑÑка;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐиÑлак УÑÑÑлÑ;</li>\r\n" +#~ "                                                                             " +#~ "<li>РоÑа ÐаÑолÑна;</li>\r\n" +#~ "\r\n" +#~ "                                                                             " +#~ "<li>СмÑинÑÑка ÐамÑлÑ;</li>\r\n" +#~ "                                                                             " +#~ "<li>СÑолÑнÑÑка ÐаÑбаÑа;</li>\r\n" +#~ "                                                                             " +#~ "<li>ШиманÑÑка ÐаÑажина;</li>\r\n" +#~ "                                                                             " +#~ "<li>СÑÑÑÐ±Ð¾Ñ Ðва;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐÑÑÑак ÐаÒда;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐÑÑковÑÑка ЮÑÑина;</li>\r\n" +#~ "\r\n" +#~ "                                                                             " +#~ "<li>ÐижиковÑÑка ÐовÑÑа;</li>\r\n" +#~ "                                                                             " +#~ "<li>ÐÑлковÑÑка ÐдÑÑанна.</li>\r\n" +#~ "                                                              </ul>\r\n" +#~ "                                              </li>\r\n" +#~ "                </li>\r\n" +#~ "                </ol>\r\n" + +#~ msgid "Możesz nam pomóc" +#~ msgstr "ÐожеÑе нам допомогÑи" + +#~ msgid "" +#~ "<h2>Wolontariat w Wolnych Lekturach</h2>\r\n" +#~ "<ul>\r\n" +#~ "<li>ZostaÅ naszym redaktorem, programistÄ lub tÅumaczem â wolontariuszem." +#~ "</li>\r\n" +#~ "<li>ZdobÄ dź nowe umiejÄtnoÅci i doÅwiadczenie. </li>\r\n" +#~ "<li>Weź udziaÅ w otwartym projekcie i twórz innowacyjnÄ bibliotekÄ " +#~ "internetowÄ . </li>\r\n" +#~ "</ul>\r\n" +#~ "<p>DziÄki pracy naszych wolontariuszy opublikowaliÅmy już ponad <b>1500 " +#~ "lektur</b>, z których skorzystaÅy ponad <b>3 miliony</b> czytelników z " +#~ "caÅego Åwiata. </p>\r\n" +#~ "<p>Zapraszamy wszystkie osoby, które chcÄ wspóÅtworzyÄ nasz projekt. " +#~ "WspóÅpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " +#~ "literaturÄ , redagowaniem tekstów i projektami informatycznymi. Oferujemy " +#~ "profesjonalne szkolenia i staÅÄ pomoc merytorycznÄ . Wolontariusze mogÄ " +#~ "pracowaÄ zdalnie lub w siedzibie Fundacji.</p>\r\n" +#~ "<p>Organizujemy również praktyki studenckie â nawiÄ zaliÅmy wspóÅpracÄ z " +#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " +#~ "Karier UKSW oraz WydziaÅem Fizyki UW. </p>\r\n" +#~ "\r\n" +#~ "<h2>Jak siÄ do nas zgÅosiÄ?</h2>\r\n" +#~ "<p>Wszystkie zainteresowane osoby prosimy o przysÅanie maila na adres <a " +#~ "href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n" +#~ msgstr "" +#~ "<h2>ÐолонÑеÑÑÑво</h2>\r\n" +#~ "\r\n" +#~ "<p>Ðи намагаÑмоÑÑ Ñкомога кÑаÑе пÑдгоÑÑваÑи ÑвоÑи, ÑÐºÑ Ð¿Ð¾ÑÑÑпово " +#~ "додаÑÑÑÑÑ Ð´Ð¾ наÑÐ¾Ñ Ð±ÑблÑоÑеки. Це можливо ÑÑлÑки завдÑки наÑим волонÑеÑам." +#~ "</p>\r\n" +#~ "\r\n" +#~ "<p>ÐапÑоÑÑÑмо ÑÑÑÑ , Ñ Ñо Ñ Ð¾Ñе допомогÑи Ñ ÑвоÑÐµÐ½Ð½Ñ ÑкÑлÑÐ½Ð¾Ñ ÑнÑеÑнеÑ-" +#~ "бÑблÑоÑеки Wolne Lektury.</p>\r\n" +#~ "\r\n" +#~ "<p>ÐÑÑм волонÑеÑам ми пÑопонÑÑмо ÑÑенÑнги Ñ Ð¿ÑакÑиÑний доÑвÑд обÑобки " +#~ "ÑекÑÑÑ: змÑÑÑовне Ñа ÑÐµÑ Ð½ÑÑне ÑедагÑваннÑ. ÐолонÑеÑи можÑÑÑ Ð¾Ð·Ð½Ð°Ð¹Ð¾Ð¼Ð¸ÑиÑÑ " +#~ "з пÑоблемами Ñа можливоÑÑÑми, повâÑзаними з ÑнÑеÑнеÑ-пÑблÑкаÑÑÑми.\r\n" +#~ "\r\n" +#~ "СпÑлÑно з нами волонÑеÑи оÑганÑзÑÑÑÑ ÑÑенÑнги Ñа конÑеÑенÑÑÑ, допомагаÑÑÑ " +#~ "в пÑдгоÑÐ¾Ð²Ð»ÐµÐ½Ð½Ñ ÑекÑÑÑв Ð´Ð»Ñ ÑлÑÑ Ð°Ð½Ð½Ñ (Ñак Ð·Ð²Ð°Ð½Ð¸Ñ Ð°ÑдÑо-книг). Ðи " +#~ "пÑдпиÑÑÑмо з волонÑеÑами Ñгоди Ñа надаÑмо Ñм поÑвÑдÑÐµÐ½Ð½Ñ Ð¿Ñо Ñе коли Ñ " +#~ "ÑÐºÑ Ð¿ÑаÑÑ Ð²Ð¸ÐºÐ¾Ð½Ñвав Ð´Ð»Ñ Ð½Ð°Ñого ÑÐ¾Ð½Ð´Ñ Ð²Ð¾Ð»Ð¾Ð½ÑеÑ. ТÑенÑнги, доÑвÑд " +#~ "ÑедагÑÐ²Ð°Ð½Ð½Ñ Ñа ÑеÑÑиÑÑкаÑи, ÑÐºÑ Ñе заÑвÑдÑÑÑÑÑ, можÑÑÑ Ð±ÑÑи ÑÑнними в " +#~ "пÑоÑеÑÑ Ð¿ÑдвиÑÐµÐ½Ð½Ñ ÐºÐ²Ð°Ð»ÑÑÑкаÑÑй Ñ Ð¿ÑоÑеÑÑйнÑй каÑ'ÑÑÑ.</p>\r\n" +#~ "\r\n" +#~ "<h2>Що можна ÑобиÑи?</h2>\r\n" +#~ "\r\n" +#~ "<p>ÐайбÑлÑÑе ÑобоÑи пÑиÑвÑÑÑÑÑÑÑÑ Ð¿ÑдгоÑÐ¾Ð²Ð»ÐµÐ½Ð½Ñ ÑекÑÑÑ Ð´Ð»Ñ Ð¿ÑблÑкаÑÑÑ. Ð " +#~ "ÑекÑÑÑ, Ñкий ми оÑÑимÑÑмо вÑд ÐаÑÑоналÑÐ½Ð¾Ñ Ð±ÑблÑоÑеки ÑÑеба випÑавиÑи " +#~ "оÑÑогÑаÑÑÑÐ½Ñ Ñа ÑнÑÑ Ð¼ÐµÑ Ð°Ð½ÑÑÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸, а поÑÑм додаÑи в ÑекÑÑÑ Ð¿ÑимÑÑки, " +#~ "памâÑÑаÑÑи пÑо Ñе, Ñо наÑа пÑопозиÑÑÑ ÑкеÑована пеÑÑ Ð·Ð° вÑе до ÑÑнÑв, Ð´Ð»Ñ " +#~ "ÑÐºÐ¸Ñ Ð±Ð°Ð³Ð°Ñо ÑлÑв Ñа ÑÑаз звÑÑаÑиме Ð°Ð½Ð°Ñ ÑонÑÑно. ÐавнÑÑÑ Ð¿ÑблÑкаÑÑÑ (вÑе " +#~ "залежиÑÑ ÑÑÑ Ð²Ñд авÑоÑÑÑкого пÑава) пÑддаÑÑÑÑÑ Ð½ÐµÐ¾Ð±Ñ ÑÐ´Ð½Ð¾Ð¼Ñ Ð¼Ð¾Ð²Ð½Ð¾Ð¼Ñ " +#~ "оÑÑÑаÑненнÑ, на пÑиклад Ñодо пÑавопиÑÑ Ñи ÑлекÑÑÑ, пÑи ÑÐ¾Ð¼Ñ Ð¼Ð¸ дбаÑмо пÑо " +#~ "Ñе Ñоб не поÑÑÑÑваÑи аÑÑиÑÑиÑного Ñ Ð°ÑакÑеÑÑ ÑекÑÑÑ. ÐÑÑаннÑм еÑапом Ñ " +#~ "поÑÑк лÑÑеÑаÑÑÑÐ½Ð¸Ñ Ð¼Ð¾ÑивÑв Ñа Ñем, ÑÐºÑ Ð¼Ð°ÑÑÑ Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ñи в Ð³Ð»Ð¸Ð±Ð¸Ð½Ð½Ð¾Ð¼Ñ " +#~ "пÑÐ·Ð½Ð°Ð½Ð½Ñ Ð»ÑÑеÑаÑÑÑи. Ð ÑÑÑÑ ÑÐ¸Ñ Ð¿ÑаÑÑÑ Ð½Ð°Ñ Ð¿ÑдÑÑимÑÑÑÑ Ð²Ð¾Ð»Ð¾Ð½ÑеÑи - " +#~ "вÑиÑÐµÐ»Ñ Ñа ÑÑÑденÑи - ÑÐºÑ ÑаÑÑо допомагаÑÑÑ Ñакож поÑÐ°Ð´Ð¾Ñ Ñа заÑваженнÑми " +#~ "пÑи пÑийнÑÑÑÑ Ð²Ð°Ð¶Ð»Ð¸Ð²Ð¸Ñ ÑÑÑенÑ.</p>\r\n" +#~ "\r\n" +#~ "<h2>Як до Ð½Ð°Ñ Ð·Ð³Ð¾Ð»Ð¾ÑиÑиÑÑ?</h2>\r\n" +#~ "\r\n" +#~ "<p>УÑÑÑ Ð·Ð°ÑÑÐºÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑоÑимо виÑлаÑи лиÑÑа на адÑеÑÑ <a href=\"mail:" +#~ "fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>.</" +#~ "p>\r\n" +#~ "\r\n" +#~ "<p>ÐапÑоÑÑÑмо Ñакож на <a href=\"http://redakcja.wolnelektury.pl/" +#~ "documents/catalogue/\">ÑÐ°Ð¹Ñ ÑедакÑÑÑ Wolne Lektury</a>, де можна знайÑи " +#~ "ÑÑÑ Ð½ÐµÐ¾Ð±Ñ ÑÐ´Ð½Ñ ÑнÑоÑмаÑÑÑ Ð¿Ñо Ñе, Ñк залÑÑиÑиÑÑ Ñ ÑедакÑÑÐ¹Ð½Ñ ÑобоÑÑ.</p>" +#~ "\r\n" + +#~ msgid "" +#~ "<h2>Kogo szukamy?</h2>\r\n" +#~ "\r\n" +#~ "<h3>Redaktorów technicznych (skÅad tekstu) </h3>\r\n" +#~ " <p>SkÅad jest pierwszym etapem pracy nad tekstem. Za pomocÄ znaczników " +#~ "jÄzyka WL-XML nadajemy tekstowi poÅ¼Ä danÄ formÄ i umożliwiamy wyÅwietlenie " +#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na <a " +#~ "href=\"http://redakcja.wolnelektury.pl\">Platformie Redakcyjnej</a>, " +#~ "która pozwala na zautomatyzowanie dużej czÄÅci pracy. </p>\r\n" +#~ "\r\n" +#~ " <p><b>Kto może zostaÄ redaktorem technicznym?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Każdy â po krótkim szkoleniu.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>WiÄcej informacji o redakcji technicznej znajdziecie na <a href=" +#~ "\"http://redakcja.wolnelektury.pl/documents/catalogue/\">stronie redakcji " +#~ "Wolnych Lektur</a> </p>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Redaktorów literackich (merytorycznych) </h3>\r\n" +#~ " <p>Redakcja literacka obejmuje korektÄ, uwspóÅczeÅnienia oraz dodawanie " +#~ "przypisów i motywów literackich. To unikalna możliwoÅÄ zdobycia " +#~ "doÅwiadczenia w cyfrowej edycji tekstów. </p>\r\n" +#~ "\r\n" +#~ " <p><b>Kto może zostaÄ redaktorem literackim? </b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Osoby, które majÄ doÅwiadczenie w redakcji tekstów literackich,</li>" +#~ "\r\n" +#~ "<li>Studenci i absolwenci studiów humanistycznych, którzy chcÄ takie " +#~ "doÅwiadczenie zdobyÄ. </li>\r\n" +#~ "</ul>\r\n" +#~ "<p>WiÄcej informacji o redakcji merytorycznej znajdziecie na <a href=" +#~ "\"http://redakcja.wolnelektury.pl/documents/catalogue/\">stronie redakcji " +#~ "Wolnych Lektur</a> </p>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>TÅumaczy</h3>\r\n" +#~ " <p>Strona WolneLektury.pl jest dostÄpna w siedmiu jÄzykach obcych â " +#~ "angielskim, francuskim, niemieckim, hiszpaÅskim, litewskim, rosyjskim " +#~ "oraz ukraiÅskim. Użytkownikami biblioteki jest ponad 200 tysiÄcy osób z " +#~ "zagranicy, a już niedÅugo nasze zbiory obejmÄ również dzieÅa w jÄzykach " +#~ "obcych. Dlatego potrzebujemy na bieÅ¼Ä co tÅumaczyÄ nowe informacje " +#~ "pojawiajÄ ce siÄ na stronie. </p>\r\n" +#~ " <p><b>Kto może pomóc w tÅumaczeniach? </b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Każdy, kto dobrze zna co najmniej jeden z powyższych jÄzyków. </li>" +#~ "\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Programistów</h3>\r\n" +#~ " <p>Poza samÄ stronÄ Wolnych Lektur tworzymy również: </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>narzÄdzia redakcyjne,</li>\r\n" +#~ "<li>konwertery do różnych formatów e-booków, </li>\r\n" +#~ "<li>aplikacje mobile uÅatwiajÄ ce dostÄp do naszych zasobów.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " +#~ "jQuery, LaTeX, Java.\r\n" +#~ "Tworzone przez nas oprogramowanie udostÄpniamy na <a href=\"https://" +#~ "github.com/fnp/\">wolnej licencji</a>. </p>\r\n" +#~ " <p><b>Kto może pomóc w pracach programistycznych?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Każdy, kto umie i chciaÅby zdobyÄ punkty do karmy za udziaÅ w " +#~ "otwartym projekcie programistycznym. ;)</li>\r\n" +#~ "</ul>\r\n" +#~ msgstr "" +#~ "<h2>ÐайбÑлÑÑ Ð·Ð°ÑлÑÐ¶ÐµÐ½Ñ Ð²Ð¾Ð»Ð¾Ð½ÑеÑи</h2>\r\n" +#~ "\r\n" +#~ "\t<h3>Agatapaszkowska (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 15 беÑÐµÐ·Ð½Ñ 2008)</h3>\r\n" +#~ "\r\n" +#~ " <p>мÑж ÑнÑими, опÑаÑÑвала «РпÑÑÑÐµÐ»Ñ Ñ Ð² джÑнглÑÑ Â» СенкевиÑа; " +#~ "дивиÑÑ Ñакож на наÑÐ¾Ð¼Ñ ÑайÑÑ Â«Ð²ÐºÐ»Ð°Ð´ коÑиÑÑÑваÑа»: <a href=\"http://wiki." +#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska\">http://wiki." +#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Agatapaszkowska</a></p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\t<h3>AgnieszkaKappa (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 16 беÑÐµÐ·Ð½Ñ 2008)</h3>\r\n" +#~ "\r\n" +#~ " <p>мÑж ÑнÑими, бÑала ÑÑаÑÑÑ Ð² ÑвоÑÐµÐ½Ð½Ñ ÑпиÑÐºÑ Ñа опиÑÑ " +#~ "викоÑиÑÑÐ°Ð½Ð½Ñ Ð»ÑÑеÑаÑÑÑÐ½Ð¸Ñ Ð¼Ð¾ÑивÑв Ñа Ñем; опÑаÑÑвала ÑекÑÑи СенкевиÑа " +#~ "(Latarnik, Янко ÐÑзиканÑ, Quo vadis); дивиÑÑ Ñакож на наÑÐ¾Ð¼Ñ ÑайÑÑ Â«Ð²ÐºÐ»Ð°Ð´ " +#~ "коÑиÑÑÑваÑа»: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?" +#~ "title=Specjalna:Wk%C5%82ad&limit=500&target=AgnieszkaKappa" +#~ "\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk" +#~ "%C5%82ad&limit=500&target=AgnieszkaKappa</a></p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ " <h3>Anerys (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 5 Ð»Ð¸Ð¿Ð½Ñ 2007)</h3>\r\n" +#~ "\r\n" +#~ " <p> мÑж ÑнÑими, бÑала ÑÑаÑÑÑ Ð² ÑвоÑÐµÐ½Ð½Ñ ÑпиÑÐºÑ Ð»ÑÑеÑаÑÑÑÐ½Ð¸Ñ " +#~ "моÑивÑв Ñа Ñем, диÑкÑÑÑÑ Ð½Ð° ÑÐµÐ¼Ñ Ð»ÑÑеÑаÑÑÑÐ½Ð¸Ñ Ð¶Ð°Ð½ÑÑв, опÑаÑÑвала гÑмн " +#~ "ÐогоÑодиÑÑ, «ФÑаÑки» Ñа «ТÑени» ÐÐ¾Ñ Ð°Ð½Ð¾Ð²ÑÑкого; вÑÑÑÑ Ð¡Ð»Ð¾Ð²Ð°ÑÑкого (Grób " +#~ "Agamemnona), «ТаÑÑÑÑа» ÐолÑÑÑа, Ñа поезÑÑ ÐаÑпÑовÑÑа (в ÑÑÐ¾Ð¼Ñ ÑиÑÐ»Ñ Ð³Ñмн " +#~ "âDies Iraeâ); дивиÑÑ Ñакож на наÑÐ¾Ð¼Ñ ÑайÑÑ Â«Ð²ÐºÐ»Ð°Ð´ коÑиÑÑÑваÑа»: <a href=" +#~ "\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys\">http://" +#~ "wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Anerys</a></p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\t<h3>EmiliaZdankiewicz (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 17 беÑÐµÐ·Ð½Ñ 2008)</h3>\r\n" +#~ "\r\n" +#~ " <p>мÑж ÑнÑими, лÑÑеÑаÑÑÑÐ½Ñ Ð¼Ð¾Ñиви â диÑкÑÑÑÑ Ñа опиÑ, СловаÑÑкий, " +#~ "ÐоÑдÑан; ÐонопнÑÑÑка, Nasza szkapa; ÐÑÑкевиÑ, ÐзÑди Ñ. III; дивиÑÑ Ñакож " +#~ "на наÑÐ¾Ð¼Ñ ÑайÑÑ Â«Ð²ÐºÐ»Ð°Ð´ коÑиÑÑÑваÑа»: <a href=\"http://wiki." +#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz\">http://wiki." +#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/EmiliaZdankiewicz</a></p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\t<h3>Ewa_Serafin (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 15 беÑÐµÐ·Ð½Ñ 2008)</h3>\r\n" +#~ "\r\n" +#~ " <p>мÑж ÑнÑими, бÑала ÑÑаÑÑÑ Ð² ÑвоÑÐµÐ½Ð½Ñ ÑпиÑÐºÑ Ñа опиÑÑ " +#~ "викоÑиÑÑÐ°Ð½Ð½Ñ Ð»ÑÑеÑаÑÑÑÐ½Ð¸Ñ Ð¼Ð¾ÑивÑв Ñа Ñем, опÑаÑÑвала поезÑÑ ÐаÑпÑовÑÑа " +#~ "(âZ wichrów i halâ, âNad przepaÅciamiâ, âW ciemnoÅci schodzi moja " +#~ "duszaâ), а Ñакож âNad Niemnemâ ÐлÑзи ÐжеÑко; дивиÑÑ Ñакож на наÑÐ¾Ð¼Ñ ÑайÑÑ " +#~ "«вклад коÑиÑÑÑваÑа»: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:" +#~ "Wk%C5%82ad/Ewa_Serafi\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk" +#~ "%C5%82ad/Ewa_Serafi</a>n</p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ " \t<h3>Hanna_Golab (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 15 беÑÐµÐ·Ð½Ñ 2008)</h3>\r\n" +#~ "\r\n" +#~ " <p>опÑаÑÑвала âЦаÑÑ ÐдÑпаâ СоÑокла Ñа вÑÑÑ âDusioÅekâ ÐеÑÑмÑна; " +#~ "дивиÑÑ Ñакож на наÑÐ¾Ð¼Ñ ÑайÑÑ Â«Ð²ÐºÐ»Ð°Ð´ коÑиÑÑÑваÑа»: <a href=\"http://wiki." +#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab\">http://wiki." +#~ "wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Hanna_Golab</a></p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\t<h3>Ingene (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 16 Ð»Ð¸Ð¿Ð½Ñ 2008)</h3>\r\n" +#~ "\r\n" +#~ " <p> мÑж ÑнÑими, опÑаÑÑвала оповÑÐ´Ð°Ð½Ð½Ñ âSiÅaczkaâ ÐеÑомÑÑкого, " +#~ "âQuo vadisâ СенкевиÑа Ñа âТÑениâ ÐÐ¾Ñ Ð°Ð½Ð¾Ð²ÑÑкого; дивиÑÑ Ñакож на наÑÐ¾Ð¼Ñ " +#~ "ÑайÑÑ Â«Ð²ÐºÐ»Ð°Ð´ коÑиÑÑÑваÑа»: <a href=\"http://wiki.wolnepodreczniki.pl/" +#~ "Specjalna:Wk%C5%82ad/Ingene\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk" +#~ "%C5%82ad/Ingene</a></p>\r\n" +#~ " \r\n" +#~ "\t<h3>Jmyszkowska (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 26 беÑÐµÐ·Ð½Ñ 2008)</h3>\r\n" +#~ "\r\n" +#~ " <p>мÑж ÑнÑими, опÑаÑÑвала âÐÑÑÑаâ ÐайÑона Ñа âQuo vadisâ " +#~ "СенкевиÑа; дивиÑÑ Ñакож на наÑÐ¾Ð¼Ñ ÑайÑÑ Â«Ð²ÐºÐ»Ð°Ð´ коÑиÑÑÑваÑа»: <a href=" +#~ "\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska" +#~ "\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Jmyszkowska</a></" +#~ "p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ " <h3>Marysiabailey (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 1 жовÑÐ½Ñ 2007)</h3>\r\n" +#~ "\r\n" +#~ " <p>мÑж ÑнÑими, бÑала ÑÑаÑÑÑ Ñ ÑвоÑÐµÐ½Ð½Ñ ÑпиÑÐºÑ Ð»ÑÑеÑаÑÑÑÐ½Ð¸Ñ Ñем Ñа " +#~ "опиÑÑ ÑÑ Ð·Ð°ÑÑоÑÑваннÑ; опÑаÑÑвала ÑвоÑи: âСелÑниâ РеймонÑа , âLalkaâ " +#~ "ÐÑÑÑа, âNie-Boska komediaâ ÐÑаÑÑнÑÑкого, âBajkiâ Ñа âSatyryâ ÐÑаÑÑÑÑкого, " +#~ "âÐнÑигонаâ СоÑокла, а Ñакож ÑвоÑи ÐÐ¾Ñ Ð°Ð½Ð¾Ð²ÑÑкого, ÐоÑÑÑина, ÐÑÑкевиÑа, " +#~ "ÒеÑе, Ðппмана, ÐаÑпÑовÑÑа; дивиÑÑ Ñакож на наÑÐ¾Ð¼Ñ ÑайÑÑ Â«Ð²ÐºÐ»Ð°Ð´ " +#~ "коÑиÑÑÑваÑа»: <a href=\"http://wiki.wolnepodreczniki.pl/index.php?" +#~ "title=Specjalna:Wk%C5%82ad&limit=500&target=Marysiabailey" +#~ "\">http://wiki.wolnepodreczniki.pl/index.php?title=Specjalna:Wk" +#~ "%C5%82ad&limit=500&target=Marysiabailey</a>; кÑÑм Ñого, " +#~ "пÑдгоÑÑвала Ñ Ð¿Ñовела ÑÑенÑнг Ð´Ð»Ñ Ð²Ð¾Ð»Ð¾Ð½ÑеÑÑв 15 беÑÐµÐ·Ð½Ñ 2008; заÑмалаÑÑ " +#~ "Ñакод коÑекÑоÑ, а на даний Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¿ÑаÑÑÑ Ð½Ð°Ð´ аÑдÑо-книгами.</p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ " <h3>Olga_Wojtczak (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 21 жовÑÐ½Ñ 2008)</h3>\r\n" +#~ "\r\n" +#~ " <p> мÑж ÑнÑими, опÑаÑÑвала Ñомани СенкевиÑа (ТÑилогÑÑ), РеймонÑа, " +#~ "ÐеÑомÑÑкого, дÑами ШекÑпÑÑа; дивиÑÑ Ñакож на наÑÐ¾Ð¼Ñ ÑайÑÑ Â«Ð²ÐºÐ»Ð°Ð´ " +#~ "коÑиÑÑÑваÑа»: <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk" +#~ "%C5%82ad/Olga_Wojtczak\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk" +#~ "%C5%82ad/Olga_Wojtczak</a></p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ " <h3>Renataml (ÑпÑвпÑаÑÑÑ Ð· нами вÑд 30 ÑеÑÐ²Ð½Ñ 2007)</h3>\r\n" +#~ "\r\n" +#~ " <p>бÑала ÑÑаÑÑÑ Ð² диÑкÑÑÑÑ Ð½Ð° ÑÐµÐ¼Ñ ÑпиÑÐºÑ Ð¼Ð¾ÑивÑв; Ñк доÑвÑдÑена " +#~ "вÑиÑелÑка, надавала пÑдÑÑÐ¸Ð¼ÐºÑ Ñа поÑади, ÑедагÑвала Ñоман «Lalka» ÐÑÑÑа, " +#~ "дÑÐ°Ð¼Ñ Â«Ðалладина» СловаÑÑкого, оповÑÐ´Ð°Ð½Ð½Ñ Â«SiÅaczka» ÐеÑомÑÑкого.\r\n" +#~ "\r\n" +#~ " <a href=\"http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/" +#~ "Renataml\">http://wiki.wolnepodreczniki.pl/Specjalna:Wk%C5%82ad/Renataml</" +#~ "a></p>\r\n" + +#~ msgid "O projekcie" +#~ msgstr "ÐÑо пÑоекÑ" + +#~ msgid "" +#~ "{% load reporting_stats %}\r\n" +#~ "\r\n" +#~ "<p><strong>Wolne Lektury to biblioteka internetowa czynna 24 godziny na " +#~ "dobÄ, 365 dni w roku i caÅkowicie darmowa</strong>. W jej zbiorach " +#~ "znajduje siÄ <strong>{% count_books %}</strong> utworów, w tym wiele " +#~ "lektur szkolnych zalecanych do użytku przez Ministerstwo Edukacji " +#~ "Narodowej, które trafiÅy już do domeny publicznej. Wszystkie dzieÅa sÄ " +#~ "odpowiednio opracowane - opatrzone przypisami, motywami i udostÄpnione w " +#~ "kilku formatach - <strong>HTML </strong>, <strong>TXT </strong>, " +#~ "<strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>. W " +#~ "bibliotece znajduje siÄ również kilkaset audiobooków, czytanych przez " +#~ "takich aktorów jak: Danuta Stenka, Jan Peszek czy Andrzej Chyra. Można " +#~ "ich sÅuchaÄ w formatach <strong>MP3</strong> i <strong>Ogg Vorbis</" +#~ "strong>. Audiobooki sÄ również dostÄpne w formacie <strong>DAISY </" +#~ "strong>dostosowanym do potrzeb osób sÅabowidzÄ cych, niewidomych oraz osób " +#~ "majÄ cych trudnoÅci z czytaniem.</p>\r\n" +#~ "\r\n" +#~ "<p>Biblioteka Wolne Lektury dostÄpna jest za poÅrednictwem aplikacji " +#~ "mobilnych â na system <a href=\"https://market.android.com/details?id=pl." +#~ "org.nowoczesnapolska.wlmobi\"> Android</a> oraz na system iOS. </p>\r\n" +#~ "\r\n" +#~ "<p><strong>Wszystkie utwory zamieszczone w bibliotece Wolne Lektury można " +#~ "zgodnie z prawem bezpÅatnie przeglÄ daÄ, sÅuchaÄ, ÅciÄ gaÄ na swój " +#~ "komputer, a także udostÄpniaÄ innym i cytowaÄ.</strong> </p>\r\n" +#~ msgstr "" +#~ "{% load reporting_stats %}\r\n" +#~ "\r\n" +#~ "<p><strong>Wolne Lektury Ñе елекÑÑонна бÑблÑоÑека вÑдкÑиÑа 24 години на " +#~ "добÑ, 365 днÑв в ÑоÑÑ Ñ Ð¿Ð¾Ð²Ð½ÑÑÑÑ Ð±ÐµÐ·ÐºÐ¾ÑÑовна</strong>. Ð ÑÑ ÐºÐ¾Ð»ÐµÐºÑÑÑ " +#~ "Ð·Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑÑ <strong>{% count_books %}</strong> ÑвоÑÑв, в ÑÐ¾Ð¼Ñ ÑиÑÐ»Ñ " +#~ "багаÑо ÑкÑлÑÐ½Ð¾Ñ Ð»ÑÑеÑаÑÑÑи, ÑÐµÐºÐ¾Ð¼ÐµÐ½Ð´Ð¾Ð²Ð°Ð½Ð¾Ñ ÐÑнÑÑÑеÑÑÑвом наÑÑоналÑÐ½Ð¾Ñ " +#~ "оÑвÑÑи, Ñка ÑвÑйÑла вже до ÑÑÑпÑлÑного надбаннÑ. УÑÑ ÑвоÑи ÑÑаÑанно " +#~ "опÑаÑÑÐ¾Ð²Ð°Ð½Ñ - до Ð½Ð¸Ñ Ð´Ð¾Ð´Ð°ÑÑÑÑÑ Ð¿ÑимÑÑки, моÑиви Ñ Ð½Ð°Ð´Ð°ÑÑÑÑÑ Ð´Ð¾ÑÑÑп в " +#~ "декÑлÑÐºÐ¾Ñ ÑоÑмаÑÐ°Ñ - <strong>HTML </strong>, <strong>TXT </strong>, " +#~ "<strong>PDF</strong>,<strong> EPUB</strong>, <strong>MOBI</strong>. У " +#~ "бÑблÑоÑеÑÑ Ð¼Ð¾Ð¶Ð½Ð° Ñакож знайÑи кÑлÑка ÑоÑÐµÐ½Ñ Ð°ÑдÑокниг Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÑÐ°ÐºÐ¸Ñ " +#~ "авÑоÑÑв Ñк: ÐанÑÑа СÑенка, Ян ÐеÑек Ñи Ðнджей ХиÑа. Ðожна ÑÑ ÑлÑÑ Ð°Ñи Ñ " +#~ "ÑоÑмаÑÐ°Ñ <strong>MP3</strong> i <strong>Ogg Vorbis</strong>. ÐÑдÑокниги " +#~ "доÑÑÑÐ¿Ð½Ñ Ñакож Ñ ÑоÑмаÑÑ <strong>DAISY </strong>, Ñкий пÑиÑÑоÑований Ð´Ð»Ñ " +#~ "ÑлабозоÑÐ¸Ñ Ñа ÑлÑÐ¿Ð¸Ñ Ð¾ÑÑб, а Ñакож Ð´Ð»Ñ ÑÐ¸Ñ , Ñ Ñо Ð¼Ð°Ñ ÑÑÑдноÑÑ Ð· ÑиÑаннÑм.</" +#~ "p>\r\n" +#~ "\r\n" +#~ "<p>ÐÑблÑоÑека Wolne Lektury Ñакож доÑÑÑпна за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð¼Ð¾Ð±ÑлÑÐ½Ð¸Ñ " +#~ "аплÑкаÑÑй â в ÑиÑÑÐµÐ¼Ñ <a href=\"https://market.android.com/details?id=pl." +#~ "org.nowoczesnapolska.wlmobi\">Android</a>, а Ñакож в ÑиÑÑÐµÐ¼Ñ iOS.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>УÑÑ ÑвоÑи ÑозмÑÑÐµÐ½Ñ Ñ Ð±ÑблÑоÑеÑÑ Wolne Lektury можна легалÑно " +#~ "пеÑеглÑдаÑи, ÑлÑÑ Ð°Ñи, заванÑажÑваÑи на влаÑний компâÑÑеÑ, надаваÑи доÑÑÑп " +#~ "до Ð½Ð¸Ñ ÑнÑим Ñа ÑиÑÑваÑи.</strong></p>\r\n" + +#~ msgid "" +#~ "<p>Wolne Lektury to projekt fundacji Nowoczesna Polska realizowany pro " +#~ "publico bono, we wspóÅpracy z BibliotekÄ NarodowÄ , BibliotekÄ ÅlaskÄ oraz " +#~ "BibliotekÄ ElblÄ skÄ pod patronatem Ministerstwa Edukacji Narodowej, " +#~ "Ministerstwa Kultury i Dziedzictwa Narodowego oraz Stowarzyszenia Pisarzy " +#~ "Polskich. W Komitecie Honorowym Wolnych Lektur zasiadajÄ : prof. Maria " +#~ "Janion, prof. Grażyna Borkowska, prof. PrzemysÅaw CzapliÅski, prof. " +#~ "MieczysÅaw DÄ browski, prof. Ewa Kraskowska, prof. MaÅgorzata CzermiÅska, " +#~ "prof. Jerzy JarzÄbski i prof. Piotr ÅliwiÅski.</p>\r\n" +#~ "\r\n" +#~ "<p>WiÄkszoÅÄ utworów w bibliotece nie jest chroniona prawem autorskim i " +#~ "znajduje siÄ w domenie publicznej, co oznacza że można je swobodnie " +#~ "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 <a " +#~ "href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie " +#~ "autorstwa-Na tych samych warunkach 3.0</a>. Publikujemy również kilka " +#~ "utworów, które autorzy lub spadkobiercy praw udostÄpnili na wolnej " +#~ "licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl" +#~ "\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>.</p>\r\n" +#~ "\r\n" +#~ "Kontakt: wolnelektury@nowoczesnapolska.org.pl\r\n" +#~ msgstr "" +#~ "<p>Wolne Lektury Ñе пÑÐ¾ÐµÐºÑ Ð¤Ð¾Ð½Ð´Ñ Ð¡ÑÑаÑна ÐолÑÑа (Fundacja Nowoczesna " +#~ "Polska), ÑеалÑзований з некомеÑÑÑÐ¹Ð½Ð¾Ñ Ð¼ÐµÑоÑ, Ñ ÑпÑвпÑаÑÑ Ð· ÐаÑÑоналÑÐ½Ð¾Ñ " +#~ "бÑблÑоÑекоÑ, СÑлезÑÐºÐ¾Ñ Ð±ÑблÑоÑÐµÐºÐ¾Ñ Ñа ÐлÑблонзÑÐºÐ¾Ñ Ð±ÑблÑоÑÐµÐºÐ¾Ñ Ð¿Ñд " +#~ "паÑÑонаÑом ÐÑнÑÑÑеÑÑÑва наÑÑоналÑÐ½Ð¾Ñ Ð¾ÑвÑÑи, ÐÑнÑÑÑеÑÑÑва кÑлÑÑÑÑи Ñа " +#~ "наÑÑоналÑÐ½Ð¾Ñ ÑпадÑини, а Ñакож СпÑлки полÑÑÑÐºÐ¸Ñ Ð¿Ð¸ÑÑменникÑв. Ð ÐоÑеÑÐ½Ð¾Ð¼Ñ " +#~ "комÑÑеÑÑ Ð¿ÑоекÑÑ Wolne Lektury заÑÑдаÑÑÑ Ð¿ÑоÑ. ÐаÑÑÑ Ð¯Ð½Ñон, пÑоÑ. ÒÑажина " +#~ "ÐоÑковÑÑка, пÑоÑ. ÐÑемиÑлав ЧаплÑнÑÑкий, пÑоÑ. ÐÑÑиÑлав ÐомбÑовÑÑкий, " +#~ "пÑоÑ. Ðва ÐÑаÑковÑÑка, пÑоÑ. ÐалÒожаÑа ЧеÑмÑнÑÑка, пÑоÑ. Ðжи ЯжембÑÑкий " +#~ "Ñа пÑоÑ. ÐÑоÑÑ Ð¡Ð»ÑвÑнÑÑкий.</p>\r\n" +#~ "\r\n" +#~ "<p>ÐÑлÑÑÑÑÑÑ ÑвоÑÑв Ñ Ð±ÑблÑоÑеÑÑ Ð½Ðµ Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом Ñ " +#~ "ÑвлÑÑÑÑÑÑ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного надбаннÑ, ÑÐ¾Ð¼Ñ ÑÑ Ð¼Ð¾Ð¶Ð½Ð° вÑлÑно пÑблÑкÑваÑи " +#~ "Ñа ÑозповÑÑджÑваÑи. ЯкÑо ÑекÑÑи ÑÑпÑоводжÑÑÑÑÑÑ Ð´Ð¾Ð´Ð°Ñковими маÑеÑÑалами " +#~ "(пÑимÑÑками, лÑÑеÑаÑÑÑними моÑивами ÑоÑо), ÑÐºÑ Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким " +#~ "пÑавом, доÑÑÑп до ÑÐ¸Ñ Ð´Ð¾Ð´Ð°ÑÐºÐ¾Ð²Ð¸Ñ Ð¼Ð°ÑеÑÑалÑв надаÑÑÑÑÑ Ð½Ð° ÑÐ¼Ð¾Ð²Ð°Ñ Ð»ÑÑензÑÑ " +#~ "<a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Ðз " +#~ "зазнаÑеннÑм ÑÐ¼ÐµÐ½Ñ Ð°Ð²ÑоÑа â Ðа ÑÐ¸Ñ Ð¶Ðµ ÑÐ¼Ð¾Ð²Ð°Ñ 3.0</a>. Також ми пÑблÑкÑÑмо " +#~ "декÑлÑка ÑвоÑÑв, до ÑÐºÐ¸Ñ Ð°Ð²ÑоÑи або ÑпадкоÑмÑÑ Ð¿Ñав надали доÑÑÑп на " +#~ "пÑдÑÑÐ°Ð²Ñ Ð²ÑлÑÐ½Ð¾Ñ Ð»ÑÑензÑÑ <a href=\"http://creativecommons.org/licenses/" +#~ "by-sa/3.0/deed.pl\">Ðз зазнаÑеннÑм ÑÐ¼ÐµÐ½Ñ Ð°Ð²ÑоÑа â Ðа ÑÐ¸Ñ Ð¶Ðµ ÑÐ¼Ð¾Ð²Ð°Ñ 3.0</" +#~ "a>.</p>\r\n" +#~ "\r\n" +#~ "ÐонÑакÑ: wolnelektury@nowoczesnapolska.org.pl\r\n" + +#~ msgid "ZespóÅ" +#~ msgstr "Ðоманда" + +#~ msgid "" +#~ "<p><strong>Magdalena Biernat</strong> â koordynatorka projektu, dyrektor " +#~ "zarzÄ dzajÄ ca fundacji Nowoczesna Polska. Socjolożka, absolwentka " +#~ "Uniwersytetu Warszawskiego i LâUniversité libre de Bruxelles. " +#~ "Specjalistka od projektów internetowych. KoordynowaÅa projekty Kandydaci " +#~ "2009 i Mam Prawo WiedzieÄ w Stowarzyszeniu 61. PracowaÅa przy wielu " +#~ "badaniach spoÅecznych realizowanych przez organizacje pozarzÄ dowe i firmy " +#~ "badawcze. </p>\r\n" +#~ "\r\n" +#~ "<p><strong>RadosÅaw Czajka</strong> â gÅówny programista, studiowaÅ " +#~ "informatykÄ na MIMUW. BiegÅy w jÄzykach programowania, znaczników: " +#~ "Python, XHTML, Javascript, CSS, LaTeX, SQL. Posiada doÅwiadczenie z " +#~ "frameworkami Django, Jquery, doÅwiadczenie w przeksztaÅceniach dokumentów " +#~ "XML (XSLT), w produkcji ebooków w formatach PDF i EPUB oraz w tworzeniu " +#~ "aplikacji mobilnych na system Android i iOS.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Marcin Koziej </strong>â programista. Absolwent Politechniki " +#~ "Warszawskiej i doktorant w Instytucie Filozofii Uniwersytetu " +#~ "Warszawskiego. DziaÅacz Mokotowskiej Kooperatywy Spożywczej. Podróżnik, " +#~ "rowerzysta i biesiadnik. Homo ludens.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Marta NiedziaÅkowska</strong> â redaktorka techniczna, " +#~ "absolwentka bibliotekoznawstwa i informacji naukowej UW. Studentka " +#~ "studiów magisterskich Public Policy and Administration na Collegium " +#~ "Civitas. </p>\r\n" +#~ "\r\n" +#~ msgstr "" +#~ "<p><strong>ÐаÒдалена ÐâÑÑнаÑ</strong> â кооÑдинаÑÐ¾Ñ Ð¿ÑоекÑÑ, кеÑÑÑÑий " +#~ "диÑекÑÐ¾Ñ Ð¤Ð¾Ð½Ð´Ñ Ð¡ÑÑаÑна ÐолÑÑа (Fundacja Nowoczesna Polska). СоÑÑолог, " +#~ "випÑÑкниÑÑ ÐаÑÑавÑÑкого ÑнÑвеÑÑиÑеÑÑ Ñа ÐÑÑÑÑелÑÑÑкого вÑлÑного " +#~ "ÑнÑвеÑÑиÑеÑÑ. СпеÑÑалÑÑÑ ÑнÑеÑнеÑÐ½Ð¸Ñ Ð¿ÑоекÑÑв. ÐеÑÑвала пÑоекÑами " +#~ "«ÐандидаÑи 2009» Ñа «Я Ð¼Ð°Ñ Ð¿Ñаво знаÑи» Ñ ÐÑоÑÑаÑÑÑ 61. ÐÑаÑÑвала Ñ " +#~ "багаÑÑÐ¾Ñ ÑоÑÑалÑÐ½Ð¸Ñ Ð´Ð¾ÑлÑдженнÑÑ , ÑÐºÑ Ð¿ÑоводилиÑÑ Ð³ÑомадÑÑкими " +#~ "оÑганÑзаÑÑÑми Ñа доÑлÑдниÑÑкими ÑÑÑмами. </p>\r\n" +#~ "\r\n" +#~ "<p><strong>РадоÑлав Чайка</strong> â головний пÑогÑамÑÑÑ, вивÑав " +#~ "ÑнÑоÑмаÑÐ¸ÐºÑ Ð½Ð° ФакÑлÑÑеÑÑ ÐаÑемаÑики, ÐнÑоÑмаÑики Ñа ÐÐµÑ Ð°Ð½Ñки " +#~ "ÐаÑÑавÑÑкого УнÑвеÑÑиÑеÑÑ. ÐолодÑÑ Ð½Ð°ÑÑÑпними мовами пÑогÑамÑÐ²Ð°Ð½Ð½Ñ Ñа " +#~ "ÑегÑв: Python, XHTML, Javascript, CSS, LaTeX, SQL. ÐÐ°Ñ Ð´Ð¾ÑвÑд Ñ " +#~ "ÑÑеймвоÑÐºÐ°Ñ Django, Jquery, а Ñакож Ñ ÑÑанÑÑоÑмÑÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ÐºÑменÑÑв XML " +#~ "(XSLT), Ñ ÑвоÑÐµÐ½Ð½Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ð¸Ñ ÐºÐ½Ð¸Ð³ Ñ ÑоÑмаÑÐ°Ñ PDF Ñа EPUB Ñ Ð¼Ð¾Ð±ÑлÑÐ½Ð¸Ñ " +#~ "аплÑкаÑÑй на ÑиÑÑеми Android Ñа iOS.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>ÐаÑÑÑн ÐозÑй </strong>â пÑогÑамÑÑÑ. ÐипÑÑкник ÐаÑÑавÑÑкого " +#~ "ÐолÑÑÐµÑ Ð½ÑÑного УнÑвеÑÑиÑеÑÑ Ñа аÑпÑÑÐ°Ð½Ñ Ð² ÐнÑÑиÑÑÑÑ Ð¤ÑлоÑоÑÑÑ " +#~ "ÐаÑÑавÑÑкого УнÑвеÑÑиÑеÑÑ. ÐÑÑÑ ÐокоÑовÑÑкого ÐÑодоволÑÑого ÐоопеÑаÑивÑ. " +#~ "ÐандÑÑвник, велоÑипедиÑÑ, лÑбиÑÐµÐ»Ñ ÑÑÑлÑÐºÐ¸Ñ Ð±Ð°Ð½ÐºÐµÑÑв. Homo ludens.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>ÐаÑÑа ÐÑдзÑлковÑÑка</strong> â ÑÐµÑ Ð½ÑÑний ÑедакÑоÑ, випÑÑкниÑÑ " +#~ "бÑблÑоÑекознавÑÑва Ñа наÑÐºÐ¾Ð²Ð¾Ñ ÑнÑоÑмаÑÑÑ ÐаÑÑавÑÑкого ÑнÑвеÑÑиÑеÑÑ. " +#~ "СÑÑденÑка магÑÑÑÑаÑÑÑи на ÑпеÑÑалÑноÑÑÑ Public Policy and Administration " +#~ "Ñ Collegium Civitas. </p>\r\n" +#~ "\r\n" + +#~ msgid "" +#~ "<p><strong>Dorota A. Kowalska</strong> â redaktorka literacka, " +#~ "jÄzykoznawca, polonistka i slawistka, doktor nauk humanistycznych, " +#~ "adiunkt w Pracowni Polszczyzny Kresowej IJP PAN, gdzie zajmuje siÄ " +#~ "historiÄ i wspóÅczesnoÅciÄ jÄzyka polskiego na Ukrainie. Hobbystycznie " +#~ "Åpiewa archaiczne pieÅni ukraiÅskie i rosyjskie, cyklistka.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Aleksandra SekuÅa</strong> â redaktorka literacka, historyczka " +#~ "literatury, doktor nauk humanistycznych, absolwentka WydziaÅu Polonistyki " +#~ "Uniwersytetu Warszawskiego i SzkoÅy Nauk SpoÅecznych przy IFiS PAN. " +#~ "Zawodowo i naukowo zajmuje siÄ polskim romantyzmem, historiÄ idei i " +#~ "teoriÄ kultury. </p>\r\n" +#~ "\r\n" +#~ "<p><strong>PaweÅ KozioÅ </strong>â redaktor literacki. Ur. 1979, doktor " +#~ "nauk humanistycznych specjalizujÄ cy siÄ w literaturze dawnej, absolwent " +#~ "WydziaÅu Polonistyki Uniwersytetu Warszawskiego oraz Dulwich College w " +#~ "Londynie. Poeta, krytyk literacki, stypendysta Ministerstwa Kultury i " +#~ "Dziedzictwa Narodowego (2010). </p>\r\n" +#~ "\r\n" +#~ "<p><strong>Paulina ChoromaÅska</strong> â redaktorka techniczna, " +#~ "studentka II roku studiów magisterskich w Instytucie Informacji Naukowej " +#~ "i Studiów Bibliologicznych UW. Pracuje również w Pracowni Dokumentacji " +#~ "Teatru w Instytucie Teatralnym im. Z. Raszewskiego w Warszawie.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>Aneta Rawska</strong> - redaktorka techniczna, studentka II " +#~ "roku studiów magisterskich w Instytucie Informacji Naukowej i Studiów " +#~ "Bibliologicznych UW, miÅoÅniczka wypieków i dobrej kuchni. Od 2009 roku " +#~ "prowadzi serwis koÅa PZW nr 21 w WoÅominie.</p>\r\n" +#~ msgstr "" +#~ "<p><strong>ÐоÑоÑа Ð. ÐовалÑÑÑка</strong> â лÑÑеÑаÑÑÑний ÑедакÑоÑ, " +#~ "мовознавеÑÑ, полÑÑÑкий ÑÑлолог Ñа ÑлавÑÑÑ, ÐºÐ°Ð½Ð´Ð¸Ð´Ð°Ñ Ð³ÑманÑÑаÑÐ½Ð¸Ñ Ð½Ð°Ñк, " +#~ "ад'ÑÐ½ÐºÑ Ñ ÐÑддÑÐ»Ñ Ð¿Ð¾Ð»ÑÑÑÐºÐ¾Ñ Ð¼Ð¾Ð²Ð¸ ÐÑеÑÑв в ÐнÑÑиÑÑÑÑ Ð¿Ð¾Ð»ÑÑÑÐºÐ¾Ñ Ð¼Ð¾Ð²Ð¸ в " +#~ "ÐолÑÑÑкÑй ÐкадемÑÑ ÐаÑк, де займаÑÑÑÑÑ ÑÑÑоÑÑÑÑ Ñа ÑÑÑаÑнÑÑÑÑ Ð¿Ð¾Ð»ÑÑÑÐºÐ¾Ñ " +#~ "мови в УкÑаÑнÑ. ÐÑ Ñ Ð¾Ð±Ñ - ÑпÑваÑи аÑÑ Ð°ÑÑÐ½Ñ ÑкÑаÑнÑÑÐºÑ Ñа ÑоÑÑйÑÑÐºÑ Ð¿ÑÑнÑ; " +#~ "велоÑипедиÑÑка.</p>\r\n" +#~ "\r\n" +#~ "<p><strong>ÐлекÑандÑа СекÑла</strong> â лÑÑеÑаÑÑÑний ÑедакÑоÑ, ÑÑÑоÑик " +#~ "лÑÑеÑаÑÑÑи, ÐºÐ°Ð½Ð´Ð¸Ð´Ð°Ñ Ð³ÑманÑÑаÑÐ½Ð¸Ñ Ð½Ð°Ñк, випÑÑкниÑÑ Ð¤Ð°ÐºÑлÑÑеÑÑ Ð¿Ð¾Ð»ÑÑÑÐºÐ¾Ñ " +#~ "ÑÑлологÑÑ ÐаÑÑавÑÑкого ÑнÑвеÑÑиÑеÑÑ Ñа Школи СÑÑпÑлÑÐ½Ð¸Ñ ÐаÑк ÐнÑÑиÑÑÑÑ " +#~ "ÑÑлоÑоÑÑÑ Ñа ÑоÑÑологÑÑ ÐолÑÑÑÐºÐ¾Ñ Ð°ÐºÐ°Ð´ÐµÐ¼ÑÑ Ð½Ð°Ñк. ÐÑоÑеÑÑйно Ñа наÑково " +#~ "займаÑÑÑÑÑ Ð¿Ð¾Ð»ÑÑÑким ÑоманÑизмом, ÑÑÑоÑÑÑÑ ÑÐ´ÐµÑ Ñа ÑеоÑÑÑÑ ÐºÑлÑÑÑÑи. </p>" +#~ "\r\n" +#~ "\r\n" +#~ "<p><strong>Ðавел ÐозÑол </strong>â лÑÑеÑаÑÑÑний ÑедакÑоÑ, наÑоджений Ñ " +#~ "1979, ÐºÐ°Ð½Ð´Ð¸Ð´Ð°Ñ Ð³ÑманÑÑаÑÐ½Ð¸Ñ Ð½Ð°Ñк, Ñкий ÑпеÑÑалÑзÑÑÑÑÑÑ Ñ Ð´Ð°Ð²Ð½Ñй " +#~ "лÑÑеÑаÑÑÑÑ, випÑÑкник ФакÑлÑÑеÑÑ ÐолонÑÑÑики ÐаÑÑавÑÑкого ÑнÑвеÑÑиÑеÑÑ Ñа " +#~ "ÐалÑдж-ÐÐ¾Ð»ÐµÐ´Ð¶Ñ Ñ ÐондонÑ. ÐоеÑ, лÑÑеÑаÑÑÑний кÑиÑик, ÑÑипендиÑÑ " +#~ "ÐÑнÑÑÑеÑÑÑва кÑлÑÑÑÑи Ñа наÑÑоналÑÐ½Ð¾Ñ ÑпадÑини (2010). </p>\r\n" +#~ "\r\n" +#~ "<p><strong>ÐаÑлÑна ХоÑоманÑÑка</strong> â ÑÐµÑ Ð½ÑÑний ÑедакÑоÑ, ÑÑÑденÑка " +#~ "ÐРкÑÑÑÑ Ð¼Ð°Ð³ÑÑÑÑаÑÑÑи в ÐнÑÑиÑÑÑÑ Ð½Ð°ÑÐºÐ¾Ð²Ð¾Ñ ÑнÑоÑмаÑÑÑ Ñа " +#~ "бÑблÑоÑекознавÑÑва ÐаÑÑавÑÑкого УнÑвеÑÑиÑеÑÑ. ÐÑаÑÑÑ Ñакож Ñ ÐÑддÑÐ»Ñ " +#~ "докÑменÑаÑÑÑ ÑеаÑÑÑ Ð² ТеаÑÑалÑÐ½Ð¾Ð¼Ñ ÐнÑÑиÑÑÑÑ Ñм. Ð. РаÑевÑÑкого Ñ ÐаÑÑавÑ." +#~ "</p>\r\n" +#~ "\r\n" +#~ "<p><strong>ÐнеÑа РавÑÑка</strong> - ÑÐµÑ Ð½ÑÑний ÑедакÑоÑ, ÑÑÑденÑка ÐÐ " +#~ "кÑÑÑÑ Ð¼Ð°Ð³ÑÑÑÑаÑÑÑи в ÐнÑÑиÑÑÑÑ Ð½Ð°ÑÐºÐ¾Ð²Ð¾Ñ ÑнÑоÑмаÑÑÑ Ñа бÑблÑоÑекознавÑÑва " +#~ "ÐаÑÑавÑÑкого УнÑвеÑÑиÑеÑÑ, лÑбиÑелÑка випÑÑки Ñа добÑÐ¾Ñ ÐºÑÑ Ð½Ñ. Ð 2009 " +#~ "ÑÐ¾ÐºÑ Ð·Ð°Ð¹Ð¼Ð°ÑÑÑÑÑ ÑнÑеÑнеÑÐ½Ð¾Ñ ÑÑоÑÑÐ½ÐºÐ¾Ñ Ð³ÑÑÑка ÐолÑÑÑÐºÐ¾Ñ ÑпÑлки Ñибалок â " +#~ "21 Ñ ÐоломÑнÑ.</p>\r\n" + +#~ msgid "Wesprzyj nas" +#~ msgstr "ÐÑдÑÑимайÑе наÑ" + +#~ msgid "" +#~ "<p><strong>Przekaż 1% podatku na Wolne Lektury</strong></p>\r\n" +#~ "<p>Fundacja Nowoczesna Polska posiada status Organizacji Pożytku " +#~ "Publicznego dziÄki czemu na rozwój projektu Wolne Lektury można przekazaÄ " +#~ "1% swojego podatku. W tym celu należy wypeÅniÄ odpowiedniÄ rubrykÄ w " +#~ "rocznym zeznaniu podatkowym (PIT-36, PIT-37 lub PIT-28). W zeznaniu " +#~ "należy podaÄ nazwÄ:</p>\r\n" +#~ "Fundacja Nowoczesna Polska <br/>\r\n" +#~ "oraz numer z Krajowego Rejestru SÄ dowego (KRS) 0000070056<br/>\r\n" +#~ msgstr "" +#~ "<p><strong>ÐеÑекажÑÑÑ 1% подаÑÐºÑ Ð½Ð° Wolne Lektury</strong></p>\r\n" +#~ "<p>Фонд СÑÑаÑна ÐолÑÑа (Fundacja Nowoczesna Polska) Ð¼Ð°Ñ ÑÑаÑÑÑ " +#~ "ÐÑганÑзаÑÑÑ ÑÑÑпÑлÑÐ½Ð¾Ñ ÐºÐ¾ÑиÑÑÑ, ÑÐ¾Ð¼Ñ Ð½Ð° ÑозвиÑок пÑоекÑÑ Wolne Lektury " +#~ "можна пеÑеказаÑи 1% Ñвого подаÑкÑ. ÐÐ»Ñ ÑÑого поÑÑÑбно заповниÑи " +#~ "вÑдповÑдне поле Ñ ÑÑÑнÑй подаÑковÑй деклаÑаÑÑÑ (PIT-36, PIT-37 або " +#~ "PIT-28). У деклаÑаÑÑÑ Ð¿Ð¾ÑÑÑбно вказаÑи Ð½Ð°Ð·Ð²Ñ Ð¤Ð¾Ð½Ð´Ñ:</p>\r\n" +#~ "Fundacja Nowoczesna Polska <br/>\r\n" +#~ "Ñа Ð½Ð¾Ð¼ÐµÑ Ð· ÐаÑÑоналÑного СÑдового РеÑÑÑÑÑ (KRS) 0000070056<br/>\r\n" + +#~ msgid "" +#~ "<p><strong>Przekaż darowiznÄ na Wolne Lektury</strong></p>\r\n" +#~ "<p>Każda wpÅacona kwota zostanie przeznaczona na rozwój zasobów naszej " +#~ "biblioteki. Wystarczy dokonaÄ przelewu na konto:</p>\r\n" +#~ "\r\n" +#~ "Fundacja Nowoczesna Polska<br/>\r\n" +#~ "ul. MarszaÅkowska 84/92 lok. 125<br/>\r\n" +#~ "00-514 Warszawa<br/>\r\n" +#~ "Nr konta: PKO BP 46 10201097 0000 7502 0001 6766<br/>\r\n" +#~ "TytuÅ przelewu: Darowizna na Wolne Lektury<br/>\r\n" +#~ msgstr "" +#~ "<p><strong>ÐÑобÑÑÑ Ð±Ð»Ð°Ð³Ð¾Ð´Ñйний внеÑок на Wolne Lektury</strong></p>\r\n" +#~ "<p>УÑÑ Ð¾ÑÑÐ¸Ð¼Ð°Ð½Ñ ÐºÐ¾ÑÑи бÑде викоÑиÑÑано Ð´Ð»Ñ ÑозвиÑÐºÑ ÐºÐ¾Ð»ÐµÐºÑÑÑ Ð½Ð°ÑÐ¾Ñ " +#~ "бÑблÑоÑеки. Ðдине, Ñо поÑÑÑбно зÑобиÑи, Ñе пеÑеÑÐ°Ñ ÑваÑи коÑÑи на ÑÐ°Ñ Ñнок:" +#~ "</p>\r\n" +#~ "\r\n" +#~ "Fundacja Nowoczesna Polska<br/>\r\n" +#~ "ul. MarszaÅkowska 84/92 lok. 125<br/>\r\n" +#~ "00-514 Warszawa<br/>\r\n" +#~ "ÐÐ¾Ð¼ÐµÑ Ð±Ð°Ð½ÐºÑвÑÑкого ÑÐ°Ñ ÑнкÑ: PKO BP 46 10201097 0000 7502 0001 6766<br/>" +#~ "\r\n" +#~ "ÐÑизнаÑÐµÐ½Ð½Ñ Ð¿Ð»Ð°ÑежÑ: ÐлагодÑйний внеÑок на Wolne Lektury<br/>\r\n" + +#~ msgid "WÅÄ cz siÄ w prace" +#~ msgstr "ÐÑзÑмÑÑÑ ÑÑаÑÑÑ Ñ Ð½Ð°ÑÑй дÑÑлÑноÑÑÑ" + +#~ msgid "" +#~ "<ul>\r\n" +#~ "<li>ZostaÅ naszym redaktorem, programistÄ lub tÅumaczem</li>\r\n" +#~ "<li>ZdobÄ dź nowe umiejÄtnoÅci i doÅwiadczenie </li>\r\n" +#~ "<li>Weź udziaÅ w otwartym projekcie i twórz innowacyjnÄ bibliotekÄ " +#~ "internetowÄ </li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ "<p>Zapraszamy wszystkie osoby, które chcÄ wspóÅtworzyÄ nasz projekt. " +#~ "WspóÅpracujemy ze studentami, nauczycielami i wszystkimi zainteresowanymi " +#~ "literaturÄ , redagowaniem tekstów i projektami informatycznymi. Oferujemy " +#~ "profesjonalne szkolenia i staÅÄ pomoc merytorycznÄ . Wolontariusze mogÄ " +#~ "pracowaÄ zdalnie lub w siedzibie Fundacji.</p>\r\n" +#~ "<p>Organizujemy również praktyki studenckie â nawiÄ zaliÅmy wspóÅpracÄ z " +#~ "Instytutem Informacji Naukowej i Studiów Bibliologicznych UW, Biurem " +#~ "Karier UKSW oraz WydziaÅem Fizyki UW. </p>\r\n" +#~ "\r\n" +#~ "<h3>Jak siÄ do nas zgÅosiÄ?</h3>\r\n" +#~ "<p>Wszystkie zainteresowane osoby prosimy o przysÅanie maila na adres <a " +#~ "href=\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\r\n" +#~ msgstr "" +#~ "<ul>\r\n" +#~ "<li>СÑÐ°Ð½Ñ Ð½Ð°Ñим ÑедакÑоÑом, пÑогÑамÑÑÑом або пеÑекладаÑем</li>\r\n" +#~ "<li>ÐдобÑÐ´Ñ Ð½Ð¾Ð²Ñ ÑмÑÐ½Ð½Ñ Ñа доÑвÑд </li>\r\n" +#~ "<li>ÐÑзÑми ÑÑаÑÑÑ Ñ Ð²ÑдкÑиÑÐ¾Ð¼Ñ Ð¿ÑоекÑÑ Ñа допоможи ÑвоÑиÑи ÑнноваÑÑÐ¹Ð½Ñ " +#~ "ÑнÑеÑнеÑ-бÑблÑоÑÐµÐºÑ </li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ "<p>ÐапÑоÑÑÑмо ÑÑÑÑ , Ñ Ñо Ñ Ð¾Ñе допомогÑи Ñ Ð½Ð°ÑÐ¾Ð¼Ñ Ð¿ÑоекÑÑ. СпÑвпÑаÑÑÑмо Ð·Ñ " +#~ "ÑÑÑденÑами, вÑиÑелÑми Ñа ÑÑÑма, Ñ Ñо ÑÑкавиÑÑÑÑ Ð»ÑÑеÑаÑÑÑоÑ, ÑедагÑваннÑм " +#~ "ÑекÑÑÑв Ñа компâÑÑеÑними пÑоекÑами. Ðи пÑопонÑÑмо пÑоÑеÑÑÐ¹Ð½Ñ ÑÑенÑнги Ñа " +#~ "поÑÑÑÐ¹Ð½Ñ Ð·Ð¼ÑÑÑÐ¾Ð²Ð½Ñ Ð¿ÑдÑÑимкÑ. ÐолонÑеÑи можÑÑÑ Ð¿ÑаÑÑваÑи в елекÑÑÐ¾Ð½Ð½Ð¾Ð¼Ñ " +#~ "ÑÐµÐ¶Ð¸Ð¼Ñ Ð°Ð±Ð¾ в оÑÑÑÑ Ð¤Ð¾Ð½Ð´Ñ.</p>\r\n" +#~ "<p>Також ми оÑганÑзÑÑмо ÑÑÑденÑÑÑÐºÑ Ð¿ÑакÑики - ÑозпоÑали ÑпÑвпÑаÑÑ Ð· " +#~ "ÐнÑÑиÑÑÑом наÑÐºÐ¾Ð²Ð¾Ñ ÑнÑоÑмаÑÑÑ Ñа бÑблÑоÑекознавÑÐ¸Ñ Ð´Ð¾ÑлÑÐ´Ð¶ÐµÐ½Ñ " +#~ "ÐаÑÑавÑÑкого УнÑвеÑÑиÑеÑÑ, СÑÑденÑÑÑким ÑенÑÑом зайнÑÑоÑÑÑ Ð£Ð½ÑвеÑÑиÑеÑÑ " +#~ "ÐаÑдинала СÑеÑана ÐиÑинÑÑкого Ñа ФакÑлÑÑеÑом ФÑзики ÐаÑÑавÑÑкого " +#~ "УнÑвеÑÑиÑеÑÑ. </p>\r\n" +#~ "\r\n" +#~ "<h3>Як до Ð½Ð°Ñ Ð¿ÑиÑднаÑиÑÑ?</h3>\r\n" +#~ "<p>УÑÑÑ Ð·Ð°ÑÑÐºÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑоÑимо виÑлаÑи повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð° адÑеÑÑ <a href=" +#~ "\"mail:marta.niedzialkowska@nowoczesnapolska.org.pl\">marta." +#~ "niedzialkowska@nowoczesnapolska.org.pl.</a></p>\r\n" +#~ "\r\n" +#~ "\r\n" +#~ "\r\n" + +#~ msgid "" +#~ "<h3>Kogo szukamy?</h3>\r\n" +#~ "\r\n" +#~ "<h3>Redaktorów technicznych (skÅad tekstu) </h3>\r\n" +#~ " <p>SkÅad jest pierwszym etapem pracy nad tekstem. Za pomocÄ znaczników " +#~ "jÄzyka WL-XML nadajemy tekstowi poÅ¼Ä danÄ formÄ i umożliwiamy wyÅwietlenie " +#~ "go na stronie internetowej. Redakcje techniczna dokonywana jest na <a " +#~ "href=\"http://redakcja.wolnelektury.pl\">Platformie Redakcyjnej</a>, " +#~ "która pozwala na zautomatyzowanie dużej czÄÅci pracy. </p>\r\n" +#~ "\r\n" +#~ " <p><b>Kto może zostaÄ redaktorem technicznym?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Każdy â po krótkim szkoleniu.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>WiÄcej informacji o redakcji technicznej znajdziecie na <a href=" +#~ "\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" +#~ "\">stronie redakcji Wolnych Lektur</a> </p>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Redaktorów literackich (merytorycznych) </h3>\r\n" +#~ " <p>Redakcja literacka obejmuje korektÄ, uwspóÅczeÅnienia oraz dodawanie " +#~ "przypisów i motywów literackich. To unikalna możliwoÅÄ zdobycia " +#~ "doÅwiadczenia w cyfrowej edycji tekstów. </p>\r\n" +#~ "\r\n" +#~ " <p><b>Kto może zostaÄ redaktorem literackim? </b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Osoby, które majÄ doÅwiadczenie w redakcji tekstów literackich,</li>" +#~ "\r\n" +#~ "<li>Studenci i absolwenci studiów humanistycznych, którzy chcÄ takie " +#~ "doÅwiadczenie zdobyÄ. </li>\r\n" +#~ "</ul>\r\n" +#~ "<p>WiÄcej informacji o redakcji merytorycznej znajdziecie na <a href=" +#~ "\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" +#~ "\">stronie redakcji Wolnych Lektur</a> </p>\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>TÅumaczy</h3>\r\n" +#~ " <p>Strona WolneLektury.pl jest dostÄpna w siedmiu jÄzykach obcych â " +#~ "angielskim, francuskim, niemieckim, hiszpaÅskim, litewskim, rosyjskim " +#~ "oraz ukraiÅskim. Użytkownikami biblioteki jest ponad 200 tysiÄcy osób z " +#~ "zagranicy, a już niedÅugo nasze zbiory obejmÄ również dzieÅa w jÄzykach " +#~ "obcych. Dlatego potrzebujemy na bieÅ¼Ä co tÅumaczyÄ nowe informacje " +#~ "pojawiajÄ ce siÄ na stronie. </p>\r\n" +#~ " <p><b>Kto może pomóc w tÅumaczeniach? </b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Każdy, kto dobrze zna co najmniej jeden z powyższych jÄzyków. </li>" +#~ "\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>Programistów</h3>\r\n" +#~ " <p>Poza samÄ stronÄ Wolnych Lektur tworzymy również: </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>narzÄdzia redakcyjne,</li>\r\n" +#~ "<li>konwertery do różnych formatów e-booków, </li>\r\n" +#~ "<li>aplikacje mobile uÅatwiajÄ ce dostÄp do naszych zasobów.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>Używamy takich technologii jak: Python, Django, XHTML, JavaScript, " +#~ "jQuery, LaTeX, Java.\r\n" +#~ "Tworzone przez nas oprogramowanie udostÄpniamy na <a href=\"https://" +#~ "github.com/fnp/\">wolnej licencji</a>. </p>\r\n" +#~ " <p><b>Kto może pomóc w pracach programistycznych?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Każdy, kto umie i chciaÅby zdobyÄ punkty do karmy za udziaÅ w " +#~ "otwartym projekcie programistycznym. ;)</li>\r\n" +#~ "</ul>\r\n" +#~ msgstr "" +#~ "<h3>Ðого ми ÑÑкаÑмо?</h3>\r\n" +#~ "\r\n" +#~ "<h3>Ð¢ÐµÑ Ð½ÑÑÐ½Ð¸Ñ ÑедакÑоÑÑв (веÑÑÑка) </h3>\r\n" +#~ " <p>ÐеÑÑÑка - Ñе пеÑÑий еÑап пÑаÑÑ Ð½Ð°Ð´ ÑекÑÑом. Ðа Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ ÑегÑв мови " +#~ "WL-XML надаÑмо ÑекÑÑам поÑÑÑбний виглÑд Ñа Ñобимо можливим ÑÑ Ð¿ÑблÑкаÑÑÑ " +#~ "на веб-ÑайÑÑ. Ð¢ÐµÑ Ð½ÑÑне ÑедагÑÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½ÑÑÑÑÑÑ Ð½Ð° <a href=\"http://" +#~ "redakcja.wolnelektury.pl\">РедакÑÑйнÑй плаÑÑоÑмÑ</a>, Ñка дозволÑÑ " +#~ "авÑомаÑизÑваÑи Ð²ÐµÐ»Ð¸ÐºÑ ÑаÑÑÐ¸Ð½Ñ Ð¿ÑаÑÑ. </p>\r\n" +#~ "\r\n" +#~ " <p><b>Ð¥Ñо може ÑÑаÑи ÑÐµÑ Ð½ÑÑним ÑедакÑоÑом?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Ðожен - пÑÑÐ»Ñ ÐºÐ¾ÑоÑкого ÑÑенÑнгÑ.</li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>ÐÑлÑÑе ÑнÑоÑмаÑÑÑ Ð¿Ñо ÑÐµÑ Ð½ÑÑне ÑедагÑÐ²Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ð¹Ð´ÐµÑе на <a href=" +#~ "\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" +#~ "\">ÑайÑÑ ÑедакÑÑÑ Wolne Lektury</a> </p>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>ÐÑÑеÑаÑÑÑÐ½Ð¸Ñ ÑедакÑоÑÑв </h3>\r\n" +#~ " <p>ÐÑÑеÑаÑÑÑне ÑедагÑÐ²Ð°Ð½Ð½Ñ Ð²ÐºÐ»ÑÑÐ°Ñ Ð² Ñебе коÑекÑÑ, оÑÑÑаÑÐ½ÐµÐ½Ð½Ñ ÑекÑÑÑ, а " +#~ "Ñакож Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð¿ÑимÑÑок Ñа лÑÑеÑаÑÑÑÐ½Ð¸Ñ Ð¼Ð¾ÑивÑв. Це ÑнÑкалÑна можливÑÑÑÑ " +#~ "здобÑÑи доÑвÑд Ñ ÑиÑÑовÑй обÑобÑÑ ÑекÑÑÑв. </p>\r\n" +#~ "\r\n" +#~ " <p><b>Ð¥Ñо може ÑÑаÑи лÑÑеÑаÑÑÑним ÑедакÑоÑом? </b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Той, Ñ Ñо Ð¼Ð°Ñ Ð´Ð¾ÑвÑд Ñ ÑедагÑÐ²Ð°Ð½Ð½Ñ Ð»ÑÑеÑаÑÑÑÐ½Ð¸Ñ ÑекÑÑÑв,</li>\r\n" +#~ "<li>СÑÑденÑи Ñа випÑÑкники гÑманÑÑаÑÐ½Ð¸Ñ ÑакÑлÑÑеÑÑв, ÑÐºÑ Ñ Ð¾ÑÑÑÑ Ð·Ð´Ð¾Ð±ÑÑи " +#~ "Ñакий доÑвÑд. </li>\r\n" +#~ "</ul>\r\n" +#~ "<p>ÐÑлÑÑе ÑнÑоÑмаÑÑÑ Ð¿Ñо лÑÑеÑаÑÑÑне ÑедагÑÐ²Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ð¹Ð´ÐµÑе на <a href=" +#~ "\"http://redmine.nowoczesnapolska.org.pl/projects/wl-publikacje/wiki\r\n" +#~ "\">ÑайÑÑ ÑедакÑÑÑ Wolne Lektury</a> </p>\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>ÐеÑекладаÑÑв</h3>\r\n" +#~ " <p>Ð¡Ð°Ð¹Ñ WolneLektury.pl доÑÑÑпний на Ñеми ÑÐ½Ð¾Ð·ÐµÐ¼Ð½Ð¸Ñ Ð¼Ð¾Ð²Ð°Ñ â англÑйÑÑкÑй, " +#~ "ÑÑанÑÑзÑкÑй, нÑмеÑÑкÑй, ÑÑпанÑÑкÑй, лиÑовÑÑкÑй, ÑоÑÑйÑÑкÑй Ñа " +#~ "ÑкÑаÑнÑÑкÑй. ÐÑблÑоÑÐµÐºÐ¾Ñ ÐºÐ¾ÑиÑÑÑÑÑÑÑÑ Ð±ÑлÑÑе нÑж 200 ÑиÑÑÑ Ð·Ð°ÐºÐ¾ÑÐ´Ð¾Ð½Ð½Ð¸Ñ " +#~ "вÑдвÑÑÑваÑÑв, а незабаÑом Ñ Ð½Ð°ÑÑй колекÑÑй знайдÑÑÑÑÑ Ñакож ÑвоÑи на " +#~ "ÑÐ½Ð¾Ð·ÐµÐ¼Ð½Ð¸Ñ Ð¼Ð¾Ð²Ð°Ñ . Ð¢Ð¾Ð¼Ñ Ð½Ð°Ð¼ поÑÑÑбно ÑиÑÑемаÑиÑно пеÑекладаÑи Ð½Ð¾Ð²Ñ " +#~ "ÑнÑоÑмаÑÑÑ, Ñка зâÑвлÑÑÑÑÑÑ Ð½Ð° ÑайÑÑ. </p>\r\n" +#~ " <p><b>Ð¥Ñо може допомогÑи Ñ Ð¿ÐµÑÐµÐºÐ»Ð°Ð´Ð°Ñ ? </b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Ðожний, Ñ Ñо добÑе володÑÑ Ð¿ÑÐ¸Ð½Ð°Ð¹Ð¼Ð½Ñ Ð¾Ð´Ð½ÑÑÑ Ð· виÑÐµÐ·Ð³Ð°Ð´Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð². </li>" +#~ "\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ "<hr/>\r\n" +#~ "\r\n" +#~ "<h3>ÐÑогÑамÑÑÑÑв</h3>\r\n" +#~ " <p>ÐÑÑм Ñамого ÑайÑÑ Wolne Lektury ми ÑвоÑимо Ñакож: </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>ÑедакÑÑÐ¹Ð½Ñ ÑнÑÑÑÑменÑи,</li>\r\n" +#~ "<li>конвеÑÑеÑи Ð´Ð»Ñ ÑÑÐ·Ð½Ð¸Ñ ÑоÑмаÑÑв елекÑÑÐ¾Ð½Ð½Ð¸Ñ ÐºÐ½Ð¸Ð³, </li>\r\n" +#~ "<li>мобÑлÑÐ½Ñ Ð°Ð¿Ð»ÑкаÑÑÑ, ÑÐºÑ ÑоблÑÑÑ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¸Ð¼ доÑÑÑп до наÑÐ¸Ñ ÐºÐ¾Ð»ÐµÐºÑÑй.</" +#~ "li>\r\n" +#~ "</ul>\r\n" +#~ "\r\n" +#~ " <p>Ðи коÑиÑÑÑÑмоÑÑ Ñакими ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³ÑÑми, Ñк Python, Django, XHTML, " +#~ "JavaScript, jQuery, LaTeX, Java.\r\n" +#~ "ÐÑогÑамне забезпеÑеннÑ, Ñке ÑÑвоÑÑÑмо, надаÑÑÑÑÑ Ð½Ð° <a href=\"https://" +#~ "github.com/fnp/\">вÑлÑнÑй лÑÑензÑÑ</a>. </p>\r\n" +#~ " <p><b>Ð¥Ñо може допомогÑи Ñ Ð¿ÑогÑамÑваннÑ?</b> </p>\r\n" +#~ "<ul>\r\n" +#~ "<li>Ðожен, Ñ Ñо вмÑÑ Ñ Ñ Ð¾Ñе за ÑÑаÑÑÑ Ñ Ð²ÑдкÑиÑÐ¾Ð¼Ñ Ð¿ÑогÑамÑÑÑиÑÐ½Ð¾Ð¼Ñ " +#~ "пÑоекÑÑ Ð·Ð´Ð¾Ð±ÑÑи додаÑÐºÐ¾Ð²Ñ Ð±Ð°Ð»Ð¸ до каÑми. ;)</li>\r\n" +#~ "</ul>\r\n" + +#~ msgid "Prawa" +#~ msgstr "ÐÑава" + +#~ msgid "" +#~ "<p>WiÄkszoÅÄ utworów w bibliotece nie jest chroniona prawem autorskim i " +#~ "znajduje siÄ w domenie publicznej, co oznacza, że można je swobodnie " +#~ "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 <a " +#~ "href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie " +#~ "autorstwa-Na tych samych warunkach 3.0</a>. Publikujemy również kilka " +#~ "utworów, które autorzy lub spadkobiercy praw udostÄpnili na wolnej " +#~ "licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl" +#~ "\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>.</p>" +#~ msgstr "" +#~ "<p>ÐÑлÑÑÑÑÑÑ ÑвоÑÑв Ñ Ð±ÑблÑоÑеÑÑ Ð½Ðµ Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом Ñ " +#~ "ÑвлÑÑÑÑÑÑ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного надбаннÑ, ÑÐ¾Ð¼Ñ ÑÑ Ð¼Ð¾Ð¶Ð½Ð° вÑлÑно пÑблÑкÑваÑи " +#~ "Ñа ÑозповÑÑджÑваÑи. ЯкÑо ÑекÑÑи ÑÑпÑоводжÑÑÑÑÑÑ Ð´Ð¾Ð´Ð°Ñковими маÑеÑÑалами " +#~ "(пÑимÑÑками, лÑÑеÑаÑÑÑними моÑивами ÑоÑо), ÑÐºÑ Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким " +#~ "пÑавом, доÑÑÑп до ÑÐ¸Ñ Ð´Ð¾Ð´Ð°ÑÐºÐ¾Ð²Ð¸Ñ Ð¼Ð°ÑеÑÑалÑв надаÑÑÑÑÑ Ð½Ð° ÑÐ¼Ð¾Ð²Ð°Ñ Ð»ÑÑензÑÑ " +#~ "<a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Ðз " +#~ "зазнаÑеннÑм ÑÐ¼ÐµÐ½Ñ Ð°Ð²ÑоÑа â Ðа ÑÐ¸Ñ Ð¶Ðµ ÑÐ¼Ð¾Ð²Ð°Ñ 3.0</a>. Також ми пÑблÑкÑÑмо " +#~ "декÑлÑка ÑвоÑÑв, до ÑÐºÐ¸Ñ Ð°Ð²ÑоÑи або ÑпадкоÑмÑÑ Ð¿Ñав надали доÑÑÑп на " +#~ "пÑдÑÑÐ°Ð²Ñ Ð²ÑлÑÐ½Ð¾Ñ Ð»ÑÑензÑÑ <a href=\"http://creativecommons.org/licenses/" +#~ "by-sa/3.0/deed.pl\">Ðз зазнаÑеннÑм ÑÐ¼ÐµÐ½Ñ Ð°Ð²ÑоÑа â Ðа ÑÐ¸Ñ Ð¶Ðµ ÑÐ¼Ð¾Ð²Ð°Ñ 3.0</" +#~ "a>.</p>" diff --git a/src/infopages/migrations/0001_initial.py b/src/infopages/migrations/0001_initial.py new file mode 100644 index 000000000..2c3f4f07a --- /dev/null +++ b/src/infopages/migrations/0001_initial.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='InfoPage', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('main_page', models.IntegerField(null=True, verbose_name='main page priority', blank=True)), + ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), + ('title', models.CharField(max_length=120, verbose_name='Title', blank=True)), + ('title_de', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), + ('title_en', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), + ('title_es', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), + ('title_fr', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), + ('title_it', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), + ('title_lt', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), + ('title_pl', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), + ('title_ru', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), + ('title_uk', models.CharField(max_length=120, null=True, verbose_name='Title', blank=True)), + ('left_column', models.TextField(verbose_name='left column', blank=True)), + ('left_column_de', models.TextField(null=True, verbose_name='left column', blank=True)), + ('left_column_en', models.TextField(null=True, verbose_name='left column', blank=True)), + ('left_column_es', models.TextField(null=True, verbose_name='left column', blank=True)), + ('left_column_fr', models.TextField(null=True, verbose_name='left column', blank=True)), + ('left_column_it', models.TextField(null=True, verbose_name='left column', blank=True)), + ('left_column_lt', models.TextField(null=True, verbose_name='left column', blank=True)), + ('left_column_pl', models.TextField(null=True, verbose_name='left column', blank=True)), + ('left_column_ru', models.TextField(null=True, verbose_name='left column', blank=True)), + ('left_column_uk', models.TextField(null=True, verbose_name='left column', blank=True)), + ('right_column', models.TextField(verbose_name='right column', blank=True)), + ('right_column_de', models.TextField(null=True, verbose_name='right column', blank=True)), + ('right_column_en', models.TextField(null=True, verbose_name='right column', blank=True)), + ('right_column_es', models.TextField(null=True, verbose_name='right column', blank=True)), + ('right_column_fr', models.TextField(null=True, verbose_name='right column', blank=True)), + ('right_column_it', models.TextField(null=True, verbose_name='right column', blank=True)), + ('right_column_lt', models.TextField(null=True, verbose_name='right column', blank=True)), + ('right_column_pl', models.TextField(null=True, verbose_name='right column', blank=True)), + ('right_column_ru', models.TextField(null=True, verbose_name='right column', blank=True)), + ('right_column_uk', models.TextField(null=True, verbose_name='right column', blank=True)), + ], + options={ + 'ordering': ('main_page', 'slug'), + 'verbose_name': 'info page', + 'verbose_name_plural': 'info pages', + }, + bases=(models.Model,), + ), + ] diff --git a/src/infopages/migrations/0002_auto_20151221_1225.py b/src/infopages/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..d5755e7ef --- /dev/null +++ b/src/infopages/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('infopages', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='infopage', + name='slug', + field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), + ), + migrations.AlterField( + model_name='infopage', + name='title', + field=models.CharField(max_length=120, verbose_name='title', blank=True), + ), + migrations.AlterField( + model_name='infopage', + name='title_de', + field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), + ), + migrations.AlterField( + model_name='infopage', + name='title_en', + field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), + ), + migrations.AlterField( + model_name='infopage', + name='title_es', + field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), + ), + migrations.AlterField( + model_name='infopage', + name='title_fr', + field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), + ), + migrations.AlterField( + model_name='infopage', + name='title_it', + field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), + ), + migrations.AlterField( + model_name='infopage', + name='title_lt', + field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), + ), + migrations.AlterField( + model_name='infopage', + name='title_pl', + field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), + ), + migrations.AlterField( + model_name='infopage', + name='title_ru', + field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), + ), + migrations.AlterField( + model_name='infopage', + name='title_uk', + field=models.CharField(max_length=120, null=True, verbose_name='title', blank=True), + ), + ] diff --git a/src/infopages/migrations/__init__.py b/src/infopages/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/infopages/models.py b/src/infopages/models.py new file mode 100644 index 000000000..cf9e9bf66 --- /dev/null +++ b/src/infopages/models.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.db import models +from django.utils.translation import ugettext_lazy as _ + +class InfoPage(models.Model): + """An InfoPage is used to display a two-column flatpage.""" + + main_page = models.IntegerField(_('main page priority'), null=True, blank=True) + slug = models.SlugField(_('slug'), max_length=120, unique=True, db_index=True) + title = models.CharField(_('title'), max_length=120, blank=True) + left_column = models.TextField(_('left column'), blank=True) + right_column = models.TextField(_('right column'), blank=True) + + class Meta: + ordering = ('main_page', 'slug',) + verbose_name = _('info page') + verbose_name_plural = _('info pages') + + def __unicode__(self): + return self.title + + @models.permalink + def get_absolute_url(self): + return ('infopage', [self.slug]) diff --git a/src/infopages/templates/infopages/infopage.html b/src/infopages/templates/infopages/infopage.html new file mode 100755 index 000000000..75dae0850 --- /dev/null +++ b/src/infopages/templates/infopages/infopage.html @@ -0,0 +1,23 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block titleextra %}{{ page.title }}{% endblock %} + +{% block metadescription %}{{ left_column|striptags|truncatewords:10 }}{% endblock %} + +{% block body %} + <h1>{{ page.title }}</h1> + + {% autoescape off %} + <div class="left-column"> + <div class="normal-text"> + {{ left_column }} + </div> + </div> + <div class="right-column"> + <div class="normal-text"> + {{ right_column }} + </div> + </div> + {% endautoescape %} +{% endblock %} diff --git a/src/infopages/templates/infopages/on_main.html b/src/infopages/templates/infopages/on_main.html new file mode 100755 index 000000000..5d80dad57 --- /dev/null +++ b/src/infopages/templates/infopages/on_main.html @@ -0,0 +1,3 @@ +{% for page in objects %} + <li><a href="{{ page.get_absolute_url }}">{{ page.title }}</a></li> +{% endfor %} diff --git a/src/infopages/templatetags/__init__.py b/src/infopages/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/infopages/templatetags/infopages_tags.py b/src/infopages/templatetags/infopages_tags.py new file mode 100755 index 000000000..d7c93ca8f --- /dev/null +++ b/src/infopages/templatetags/infopages_tags.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import template +from infopages.models import InfoPage + +register = template.Library() + + +@register.inclusion_tag('infopages/on_main.html') +def infopages_on_main(): + objects = InfoPage.objects.exclude(main_page=None) + return {"objects": objects} diff --git a/src/infopages/translation.py b/src/infopages/translation.py new file mode 100644 index 000000000..e002482a3 --- /dev/null +++ b/src/infopages/translation.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# + +from modeltranslation.translator import translator, TranslationOptions +from infopages.models import InfoPage + +class InfoPageTranslationOptions(TranslationOptions): + fields = ('title', 'left_column', 'right_column') + +translator.register(InfoPage, InfoPageTranslationOptions) diff --git a/src/infopages/urls.py b/src/infopages/urls.py new file mode 100755 index 000000000..206f7cbf9 --- /dev/null +++ b/src/infopages/urls.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url + + +urlpatterns = patterns('infopages.views', + url(r'^(?P<slug>[a-zA-Z0-9_-]+)/$', 'infopage', name='infopage'), +) + diff --git a/src/infopages/views.py b/src/infopages/views.py new file mode 100644 index 000000000..d5dee7630 --- /dev/null +++ b/src/infopages/views.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.shortcuts import render_to_response, get_object_or_404 +from django.template import RequestContext, Template, TemplateSyntaxError + +from infopages.models import InfoPage + + +def infopage(request, slug): + page = get_object_or_404(InfoPage, slug=slug) + rc = RequestContext(request) + try: + left_column = Template(page.left_column).render(rc) + except TemplateSyntaxError: + left_column = '' + + try: + right_column = Template(page.right_column).render(rc) + except TemplateSyntaxError: + left_column = '' + + return render_to_response('infopages/infopage.html', locals(), + context_instance=RequestContext(request)) diff --git a/src/lesmianator/__init__.py b/src/lesmianator/__init__.py new file mode 100644 index 000000000..54eee5b94 --- /dev/null +++ b/src/lesmianator/__init__.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# + +# LeÅmianator do dziaÅania wymaga pliku dictionary.p w katalogu aplikacji +# plik ten powinien zawieraÄ sÅownik postaci: +# <3-znakowy ciÄ g> => <kolejny znak> => <czÄstoÅÄ wystÄpowania> diff --git a/src/lesmianator/locale/pl/LC_MESSAGES/django.mo b/src/lesmianator/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..a072a55da Binary files /dev/null and b/src/lesmianator/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/lesmianator/locale/pl/LC_MESSAGES/django.po b/src/lesmianator/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..959b77882 --- /dev/null +++ b/src/lesmianator/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,47 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-01-27 16:38+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2)\n" + +#: models.py:26 +msgid "slug" +msgstr "slug" + +#: models.py:27 +msgid "text" +msgstr "tekst" + +#: models.py:29 +msgid "extra information" +msgstr "dodatkowe informacje" + +#: models.py:30 +msgid "creation date" +msgstr "data utworzenia" + +#: models.py:31 +msgid "last view date" +msgstr "data ostatniego obejrzenia" + +#: models.py:32 +msgid "view count" +msgstr "licznik obejrzeÅ" + +#: models.py:104 +msgid "Continuations file" +msgstr "plik kontynuacji" diff --git a/src/lesmianator/management/__init__.py b/src/lesmianator/management/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/lesmianator/management/commands/__init__.py b/src/lesmianator/management/commands/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/lesmianator/management/commands/lesmianator.py b/src/lesmianator/management/commands/lesmianator.py new file mode 100644 index 000000000..b2341ab31 --- /dev/null +++ b/src/lesmianator/management/commands/lesmianator.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import re +from cPickle import dump +from optparse import make_option + +from django.core.management.base import BaseCommand +from django.core.management.color import color_style +from django.conf import settings + +from catalogue.models import Book, Tag + +# extract text from text file +re_text = re.compile(r'\n{3,}(.*?)\n*-----\n', re.S).search + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('-t', '--tags', dest='tags', metavar='SLUG,...', + help='Use only books tagged with this tags'), + make_option('-i', '--include', dest='include', metavar='SLUG,...', + help='Include specific books by slug'), + make_option('-e', '--exclude', dest='exclude', metavar='SLUG,...', + help='Exclude specific books by slug') + ) + help = 'Prepare data for Lesmianator.' + + def handle(self, *args, **options): + self.style = color_style() + verbose = int(options.get('verbosity')) + tags = options.get('tags') + include = options.get('include') + exclude = options.get('exclude') + + try: + path = settings.LESMIANATOR_PICKLE + except: + print self.style.ERROR('LESMIANATOR_PICKLE not set in the settings.') + return + + books = [] + + if include: + books += list(Book.objects.filter(slug__in=include.split(',')).only('slug', 'txt_file')) + + if tags: + books += list(Book.tagged.with_all(Tag.objects.filter(slug__in=tags.split(','))).only('slug', 'txt_file')) + elif not include: + books = list(Book.objects.all().only('slug', 'txt_file')) + + if exclude: + books = [book for book in books if book.slug not in exclude.split(',')] + + books = set(books) + + lesmianator = {} + processed = skipped = 0 + for book in books: + if verbose >= 2: + print 'Parsing', book.slug + if not book.txt_file: + if verbose >= 1: + print self.style.NOTICE('%s has no TXT file' % book.slug) + skipped += 1 + continue + f = open(book.txt_file.path) + m = re_text(f.read()) + if not m: + print self.style.ERROR("Unknown text format: %s" % book.slug) + skipped += 1 + continue + + processed += 1 + last_word = '' + text = unicode(m.group(1), 'utf-8').lower() + for letter in text: + mydict = lesmianator.setdefault(last_word, {}) + mydict.setdefault(letter, 0) + mydict[letter] += 1 + last_word = last_word[-2:] + letter + f.close() + + if not processed: + if skipped: + print self.style.ERROR("No books with TXT files found") + else: + print self.style.ERROR("No books found") + return + + try: + dump(lesmianator, open(path, 'w')) + except: + print self.style.ERROR("Couldn't write to $s" % path) + return + + dump(lesmianator, open(path, 'w')) + if verbose >= 1: + print "%d processed, %d skipped" % (processed, skipped) + print "Results dumped to %s" % path diff --git a/src/lesmianator/migrations/0001_initial.py b/src/lesmianator/migrations/0001_initial.py new file mode 100644 index 000000000..17627e682 --- /dev/null +++ b/src/lesmianator/migrations/0001_initial.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import jsonfield.fields +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('contenttypes', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Continuations', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('pickle', models.FileField(upload_to=b'lesmianator', verbose_name='Continuations file')), + ('object_id', models.PositiveIntegerField()), + ('content_type', models.ForeignKey(to='contenttypes.ContentType')), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Poem', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('slug', models.SlugField(max_length=120, verbose_name='Slug')), + ('text', models.TextField(verbose_name='text')), + ('created_from', jsonfield.fields.JSONField(null=True, verbose_name='Additional information', blank=True)), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date')), + ('seen_at', models.DateTimeField(auto_now_add=True, verbose_name='last view date')), + ('view_count', models.IntegerField(default=1, verbose_name='view count')), + ('created_by', models.ForeignKey(to=settings.AUTH_USER_MODEL, null=True)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.AlterUniqueTogether( + name='continuations', + unique_together=set([('content_type', 'object_id')]), + ), + ] diff --git a/src/lesmianator/migrations/0002_auto_20151221_1225.py b/src/lesmianator/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..29a33a85c --- /dev/null +++ b/src/lesmianator/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import jsonfield.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('lesmianator', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='poem', + name='created_from', + field=jsonfield.fields.JSONField(null=True, verbose_name='extra information', blank=True), + ), + migrations.AlterField( + model_name='poem', + name='slug', + field=models.SlugField(max_length=120, verbose_name='slug'), + ), + ] diff --git a/src/lesmianator/migrations/__init__.py b/src/lesmianator/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/lesmianator/models.py b/src/lesmianator/models.py new file mode 100644 index 000000000..5db02c2ae --- /dev/null +++ b/src/lesmianator/models.py @@ -0,0 +1,178 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import cPickle +from datetime import datetime +from random import randint +from StringIO import StringIO + +from django.core.files.base import ContentFile +from django.db import models +from django.utils.timezone import utc +from django.utils.translation import ugettext_lazy as _ +from django.core.urlresolvers import reverse +from django.contrib.auth.models import User +from django.contrib.contenttypes.models import ContentType +from django.contrib.contenttypes.fields import GenericForeignKey +from django.conf import settings + +from jsonfield import JSONField +from catalogue.models import Book, Tag + + +class Poem(models.Model): + slug = models.SlugField(_('slug'), max_length=120, db_index=True) + text = models.TextField(_('text')) + created_by = models.ForeignKey(User, null=True) + created_from = JSONField(_('extra information'), null=True, blank=True) + created_at = models.DateTimeField(_('creation date'), auto_now_add=True, editable=False) + seen_at = models.DateTimeField(_('last view date'), auto_now_add=True, editable=False) + view_count = models.IntegerField(_('view count'), default=1) + + try: + f = open(settings.LESMIANATOR_PICKLE) + global_dictionary = cPickle.load(f) + f.close() + except: + global_dictionary = {} + + def visit(self): + self.view_count += 1 + self.seen_at = datetime.utcnow().replace(tzinfo=utc) + self.save() + + def __unicode__(self): + return "%s (%s...)" % (self.slug, self.text[:20]) + + @staticmethod + def choose_letter(word, continuations): + if word not in continuations: + return u'\n' + + choices = sum((continuations[word][letter] + for letter in continuations[word])) + r = randint(0, choices - 1) + + for letter in continuations[word]: + r -= continuations[word][letter] + if r < 0: + return letter + + @classmethod + def write(cls, continuations=None, length=3, min_lines=2, maxlen=1000): + if continuations is None: + continuations = cls.global_dictionary + if not continuations: + return '' + + letters = [] + word = u'' + + finished_stanza_verses = 0 + current_stanza_verses = 0 + verse_start = True + + char_count = 0 + + # do `min_lines' non-empty verses and then stop, + # but let Lesmianator finish his last stanza. + while finished_stanza_verses < min_lines and char_count < maxlen: + letter = cls.choose_letter(word, continuations) + letters.append(letter) + word = word[-length + 1:] + letter + char_count += 1 + + if letter == u'\n': + if verse_start: + finished_stanza_verses += current_stanza_verses + current_stanza_verses = 0 + else: + current_stanza_verses += 1 + verse_start = True + else: + verse_start = False + + return ''.join(letters).strip() + + def get_absolute_url(self): + return reverse('get_poem', kwargs={'poem': self.slug}) + + +class Continuations(models.Model): + pickle = models.FileField(_('Continuations file'), upload_to='lesmianator') + content_type = models.ForeignKey(ContentType) + object_id = models.PositiveIntegerField() + content_object = GenericForeignKey('content_type', 'object_id') + + class Meta: + unique_together = (('content_type', 'object_id'), ) + + def __unicode__(self): + return "Continuations for: %s" % unicode(self.content_object) + + @staticmethod + def join_conts(a, b): + for pre in b: + a.setdefault(pre, {}) + for post in b[pre]: + a[pre].setdefault(post, 0) + a[pre][post] += b[pre][post] + return a + + @classmethod + def for_book(cls, book, length=3): + # count from this book only + output = StringIO() + wldoc = book.wldocument(parse_dublincore=False) + output = wldoc.as_text(('raw-text',)).get_string() + del wldoc + + conts = {} + last_word = '' + for letter in output.decode('utf-8').strip().lower(): + mydict = conts.setdefault(last_word, {}) + mydict.setdefault(letter, 0) + mydict[letter] += 1 + last_word = last_word[-length+1:] + letter + # add children + return reduce(cls.join_conts, + (cls.get(child) for child in book.children.all().iterator()), + conts) + + @classmethod + def for_set(cls, tag): + books = Book.tagged_top_level([tag]) + cont_tabs = (cls.get(b) for b in books.iterator()) + return reduce(cls.join_conts, cont_tabs) + + @classmethod + def get(cls, sth): + object_type = ContentType.objects.get_for_model(sth) + should_keys = set([sth.id]) + if isinstance(sth, Tag): + should_keys = set(b.pk for b in Book.tagged.with_any((sth,)).iterator()) + try: + obj = cls.objects.get(content_type=object_type, object_id=sth.id) + if not obj.pickle: + raise cls.DoesNotExist + f = open(obj.pickle.path) + keys, conts = cPickle.load(f) + f.close() + if set(keys) != should_keys: + raise cls.DoesNotExist + return conts + except cls.DoesNotExist: + if isinstance(sth, Book): + conts = cls.for_book(sth) + elif isinstance(sth, Tag): + conts = cls.for_set(sth) + else: + raise NotImplementedError('Lesmianator continuations: only Book and Tag supported') + + c, created = cls.objects.get_or_create(content_type=object_type, object_id=sth.id) + c.pickle.save(sth.slug+'.p', ContentFile(cPickle.dumps((should_keys, conts)))) + c.save() + return conts + + diff --git a/src/lesmianator/templates/lesmianator/lesmianator.html b/src/lesmianator/templates/lesmianator/lesmianator.html new file mode 100644 index 000000000..cc7decbc7 --- /dev/null +++ b/src/lesmianator/templates/lesmianator/lesmianator.html @@ -0,0 +1,60 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} + +{% block titleextra %}LeÅmianator{% endblock %} + +{% block metadescription %}Stwórz wÅasny wierszmiks z utworów znajdujÄ cych siÄ na Wolnych Lekturach.{% endblock %} + +{% block bodyid %}lesmianator{% endblock %} + +{% block body %} + <h1>LeÅmianator</h1> + + <div class="left-column"> + <div class="normal-text"> + <p>LeÅmianator tworzy wierszmiksy â dziÄki niemu + <a href="{% url 'new_poem' %}">napiszesz wiersz jednym klikniÄciem</a>. + W nowej odsÅonie nowe możliwoÅci zabawy â teraz możesz zdecydowaÄ, co wrzucasz do miksera, + a swoimi dzieÅami podzieliÄ siÄ z przyjacióÅmi!</p> + <p>PrzygotowaliÅmy kilka propozycji na start â możesz wybraÄ jednÄ z nich, + albo uÅożyÄ sobie wÅasnÄ , niepowtarzalnÄ mieszankÄ.</p> + <ul> + <li><a href="{% url 'poem_from_book' 'liryki-lozanskie' %}">Adam Mickiewicz, Liryki lozaÅskie</a></li> + <li><a href="{% url 'poem_from_book' 'sonety-krymskie' %}">Adam Mickiewicz, Sonety krymskie</a></li> + <li><a href="{% url 'poem_from_book' 'hymny' %}">Jan Kasprowicz, Hymny</a></li> + <li><a href="{% url 'poem_from_book' 'bogurodzica' %}">Bogurodzica</a></li> + {% for s in shelves %} + <li><a href="{% url 'poem_from_set' s.slug %}">{{ s.name }}</a></li> + {% endfor %} + + </div> + </div> + + <div class="right-column"> + <div class="normal-text"> + <h3>Miksuj utwory</h3> + <p>Możesz <a href="{% url 'new_poem' %}">zmiksowaÄ caÅÄ lirykÄ</a> w naszej bibliotece + albo tylko jeden konkretny utwór. Jak? Wejdź na + <a href="{% url 'book_detail' 'do-m' %}">stronÄ utworu</a>, + kliknij w link âmiksuj ten utwórâ â i gotowe!</p> + + <h3>Miksuj póÅki</h3> + <p>ZaÅóż konto, poukÅadaj swoje ulubione ksiÄ Å¼ki na póÅkach i miksuj + w dowolnych konfiguracjach. Nic prostszego, niż zmieszaÄ + <a href="{% url 'tagged_object_list' 'autor/boleslaw-lesmian' %}">LeÅmiana</a> z + <a href="{% url 'tagged_object_list' 'autor/kazimierz-przerwa-tetmajer' %}">Tetmajerem</a>, + a <a href="{% url 'tagged_object_list' 'autor/stefan-zeromski' %}">Å»eromskiego</a> z + <a href="{% url 'tagged_object_list' 'autor/henryk-sienkiewicz' %}">Sienkiewiczem</a> + â wystarczy wrzuciÄ ich utwory na póÅkÄ i kliknÄ Ä + w link âmiksuj utwory z tej póÅkiâ.</p> + + <h3>Dziel siÄ z innymi</h3> + <p>WyszedÅ Ci wyjÄ tkowo udany wierszmiks? Znajdziesz pod nim link, przy pomocy + którego możesz siÄ nim podzieliÄ z przyjacióÅmi.</p> + + <p>MiÅej zabawy!</p> + + </div> + </div> +{% endblock %} diff --git a/src/lesmianator/templates/lesmianator/poem.html b/src/lesmianator/templates/lesmianator/poem.html new file mode 100644 index 000000000..4c4726f0f --- /dev/null +++ b/src/lesmianator/templates/lesmianator/poem.html @@ -0,0 +1,65 @@ +{% extends "catalogue/viewer_base.html" %} +{% load i18n %} + + +{% block title %}LeÅmianator{% endblock %} + + +{% block menu %} + <li><a href='{% url 'lesmianator' %}'><span class="label">Wolne Lektury przepuszczone przez mikser.</span></a></li> + {% if shelf or not books %} + {# shelf or global mixing #} + <li><a href=''><span class='label'>Twórzże siÄ jeszcze raz!</span></a></li> + {% else %}{% if book %} + <li><a href='{% url "poem_from_book" book.slug %}'><span class='label'>Twórzże siÄ jeszcze raz!</span></a></li> + {% endif %}{% endif %} +{% endblock menu %} + + + +{% block main-text %} + <div id="book-text"> + <h1> + <span class="author">LeÅmianator</span> + <span class="title">***</span> + </h1> + {{ poem.text|linebreaksbr }} + <div id="footnotes" > + <h3>O utworze</h3> + <div><p> + Aby pokazaÄ innym ten utwór, użyj linku:<br/> + <a class="permalink" href="{{ poem.get_absolute_url }}">http://www.wolnelektury.pl{{ poem.get_absolute_url }}</a> + </p></div> + <div> + {% if book %} + <p>Tekst powstaÅ przez zmiksowanie utworu + <a href="{{ book.get_absolute_url }}">{{ book.title }}</a>.<br/> + <a href="{% url 'poem_from_book' book.slug %}">Zmiksuj go ponownie</a> + albo <a href="{% url 'lesmianator' %}">zobacz</a>, co jeszcze możesz zamieszaÄ.</p> + {% else %}{% if books %} + <p>Tekst powstaÅ przez zmiksowanie utworów:</p> + <ul> + {% for book in books %} + <li><a href="{{ book.get_absolute_url }}">{{ book.title }}</a></li> + {% endfor %} + </ul> + {% if shelf %} + <p> + <a href="">Zmiksuj</a> + póÅkÄ <a href="{{ shelf.get_absolute_url }}">{{ shelf.name }}</a> + jeszcze raz, albo + <a href="{% url 'lesmianator' %}">zobacz</a>, co jeszcze możesz zamieszaÄ.</p> + {% else %} + <p><a href="{% url 'lesmianator' %}">Zobacz</a>, + jak Åatwo możesz stworzyÄ wÅasny wierszmiks.</p> + {% endif %} + {% else %} + <p>Wiersz powstaÅ przez zmiksowanie ze sobÄ caÅej liryki z Wolnych Lektur. + <a href="">Spróbuj jeszcze raz</a>, albo + <a href="{% url 'lesmianator' %}">zobacz</a>, co jeszcze możesz zamieszaÄ.</p> + {% endif %}{% endif %} + <div> + </div> + </div> + </div> +{% endblock main-text %} diff --git a/src/lesmianator/urls.py b/src/lesmianator/urls.py new file mode 100644 index 000000000..1770140b9 --- /dev/null +++ b/src/lesmianator/urls.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import url, patterns + +urlpatterns = patterns('lesmianator.views', + url(r'^$', 'main_page', name='lesmianator'), + url(r'^wiersz/$', 'new_poem', name='new_poem'), + url(r'^lektura/(?P<slug>[a-z0-9-]+)/$', 'poem_from_book', name='poem_from_book'), + url(r'^polka/(?P<shelf>[a-zA-Z0-9-]+)/$', 'poem_from_set', name='poem_from_set'), + url(r'^wiersz/(?P<poem>[a-zA-Z0-9-]+)/$', 'get_poem', name='get_poem'), +) + diff --git a/src/lesmianator/views.py b/src/lesmianator/views.py new file mode 100644 index 000000000..1ef4397b3 --- /dev/null +++ b/src/lesmianator/views.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.shortcuts import render_to_response, get_object_or_404 +from django.template import RequestContext +from django.views.decorators import cache + +from catalogue.utils import get_random_hash +from catalogue.models import Book, Tag +from lesmianator.models import Poem, Continuations + + +def main_page(request): + last = Poem.objects.all().order_by('-created_at')[:10] + shelves = Tag.objects.filter(user__username='lesmianator') + + return render_to_response('lesmianator/lesmianator.html', + {"last": last, "shelves": shelves}, + context_instance=RequestContext(request)) + + +@cache.never_cache +def new_poem(request): + user = request.user if request.user.is_authenticated() else None + text = Poem.write() + p = Poem(slug=get_random_hash(text), text=text, created_by=user) + p.save() + + return render_to_response('lesmianator/poem.html', + {"poem": p}, + context_instance=RequestContext(request)) + + +@cache.never_cache +def poem_from_book(request, slug): + book = get_object_or_404(Book, slug=slug) + user = request.user if request.user.is_authenticated() else None + text = Poem.write(Continuations.get(book)) + p = Poem(slug=get_random_hash(text), text=text, created_by=user) + p.created_from = [book.id] + p.save() + + return render_to_response('lesmianator/poem.html', + {"poem": p, "books": [book], "book": book}, + context_instance=RequestContext(request)) + + +@cache.never_cache +def poem_from_set(request, shelf): + user = request.user if request.user.is_authenticated() else None + tag = get_object_or_404(Tag, category='set', slug=shelf) + text = Poem.write(Continuations.get(tag)) + p = Poem(slug=get_random_hash(text), text=text, created_by=user) + books = Book.tagged.with_any((tag,)) + p.created_from = [b.id for b in books] + p.save() + + book = books[0] if len(books) == 1 else None + + return render_to_response('lesmianator/poem.html', + {"poem": p, "shelf": tag, "books": books, "book": book}, + context_instance=RequestContext(request)) + +def get_poem(request, poem): + p = get_object_or_404(Poem, slug=poem) + p.visit() + if p.created_from: + books = Book.objects.filter(id__in=p.created_from) + book = books[0] if len(books) == 1 else None + else: + books = book = None + + return render_to_response('lesmianator/poem.html', + {"poem": p, "books": books, "book": book}, + context_instance=RequestContext(request)) + + diff --git a/src/libraries/__init__.py b/src/libraries/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/libraries/admin.py b/src/libraries/admin.py new file mode 100644 index 000000000..5629e93a0 --- /dev/null +++ b/src/libraries/admin.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib import admin + +from libraries.models import Library, Catalog + + +admin.site.register(Catalog) +admin.site.register(Library) diff --git a/src/libraries/locale/pl/LC_MESSAGES/django.mo b/src/libraries/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..8772f1aae Binary files /dev/null and b/src/libraries/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/libraries/locale/pl/LC_MESSAGES/django.po b/src/libraries/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..58df7be76 --- /dev/null +++ b/src/libraries/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,60 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" + +#: models.py:8 models.py:26 +msgid "name" +msgstr "nazwa" + +#: models.py:9 models.py:27 +msgid "slug" +msgstr "" + +#: models.py:12 +msgid "catalog" +msgstr "katalog" + +#: models.py:13 +msgid "catalogs" +msgstr "katalogi" + +#: models.py:29 +msgid "url" +msgstr "url" + +#: models.py:30 +msgid "description" +msgstr "opis" + +#: models.py:33 +msgid "library" +msgstr "biblioteka" + +#: models.py:34 +msgid "libraries" +msgstr "biblioteki" + +#: templates/libraries/catalog_view.html:4 +msgid "Libraries directory" +msgstr "Katalog bibliotek" + +#: templates/libraries/main_view.html:4 templates/libraries/main_view.html:8 +msgid "Library directories" +msgstr "Katalogi bibliotek" diff --git a/src/libraries/migrations/0001_initial.py b/src/libraries/migrations/0001_initial.py new file mode 100644 index 000000000..4b210f8b7 --- /dev/null +++ b/src/libraries/migrations/0001_initial.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Catalog', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=120, verbose_name='name')), + ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), + ], + options={ + 'verbose_name': 'catalog', + 'verbose_name_plural': 'catalogs', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Library', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=120, verbose_name='name', blank=True)), + ('slug', models.SlugField(max_length=120, unique=True, null=True, verbose_name='Slug')), + ('url', models.CharField(max_length=120, verbose_name='url', blank=True)), + ('description', models.TextField(verbose_name='Description', blank=True)), + ('catalog', models.ForeignKey(related_name=b'libraries', on_delete=django.db.models.deletion.PROTECT, to='libraries.Catalog')), + ], + options={ + 'verbose_name': 'library', + 'verbose_name_plural': 'libraries', + }, + bases=(models.Model,), + ), + ] diff --git a/src/libraries/migrations/0002_auto_20151221_1225.py b/src/libraries/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..123580d91 --- /dev/null +++ b/src/libraries/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('libraries', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='catalog', + name='slug', + field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), + ), + migrations.AlterField( + model_name='library', + name='description', + field=models.TextField(verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='library', + name='slug', + field=models.SlugField(max_length=120, unique=True, null=True, verbose_name='slug'), + ), + ] diff --git a/src/libraries/migrations/__init__.py b/src/libraries/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/libraries/models.py b/src/libraries/models.py new file mode 100644 index 000000000..c83afbbba --- /dev/null +++ b/src/libraries/models.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.db import models +from django.utils.translation import ugettext_lazy as _ + + +class Catalog(models.Model): + """Represents a dictionary of libraries""" + + name = models.CharField(_('name'), max_length=120, null=False) + slug = models.SlugField(_('slug'), max_length=120, unique=True, db_index=True) + + class Meta: + verbose_name = _('catalog') + verbose_name_plural = _('catalogs') + + def __unicode__(self): + return self.name + + @models.permalink + def get_absolute_url(self): + return ('libraries_catalog_view', [self.slug]) + + +class Library(models.Model): + """Represent a single library in the libraries dictionary""" + + name = models.CharField(_('name'), max_length=120, blank=True) + slug = models.SlugField(_('slug'), max_length=120, unique=True, db_index=True, null=True) + catalog = models.ForeignKey(Catalog, null=False, related_name='libraries', on_delete=models.PROTECT) + url = models.CharField(_('url'), max_length=120, blank=True) + description = models.TextField(_('description'), blank=True) + + class Meta: + verbose_name = _('library') + verbose_name_plural = _('libraries') + + def __unicode__(self): + return self.name + + @models.permalink + def get_absolute_url(self): + return ('libraries_library_view', [self.catalog.slug, self.slug]) diff --git a/src/libraries/templates/libraries/catalog_view.html b/src/libraries/templates/libraries/catalog_view.html new file mode 100644 index 000000000..5d35fd973 --- /dev/null +++ b/src/libraries/templates/libraries/catalog_view.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block titleextra %}{% trans 'Libraries directory' %}{% endblock %} + + +{% block body %} + <h1>{{ catalog.name }}</h1> + <div class="left-column"> + <div class="normal-text"> + <ul> + {% for library in catalog.libraries.all %} + <li><a href="{{library.get_absolute_url}}">{{library.name}}</a></li> + {% endfor %} + </ul> + </div> + </div> + +{% endblock %} \ No newline at end of file diff --git a/src/libraries/templates/libraries/library_view.html b/src/libraries/templates/libraries/library_view.html new file mode 100644 index 000000000..a97282987 --- /dev/null +++ b/src/libraries/templates/libraries/library_view.html @@ -0,0 +1,13 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block titleextra %}{{ library.name }}{% endblock %} + + +{% block body %} + <h1>{{ library.name }}</h1> + <div class="normal-text"> + <p>Adres strony www: <a href="{{library.url}}">{{library.url}}</a></p> + {% autoescape off %}{{library.description}}{% endautoescape%} + </div> +{% endblock %} \ No newline at end of file diff --git a/src/libraries/templates/libraries/main_view.html b/src/libraries/templates/libraries/main_view.html new file mode 100644 index 000000000..55e5f0249 --- /dev/null +++ b/src/libraries/templates/libraries/main_view.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block titleextra %}{% trans 'Library directories' %}{% endblock %} + + +{% block body %} + <h1>{% trans 'Library directories' %}</h1> + <div class="left-column"> + <div class="normal-text"> + <ul> + {% for catalog in catalogs %} + <li><a href="{{catalog.get_absolute_url}}">{{catalog}}</a></li> + {% endfor %} + </ul> + </div> + </div> + +{% endblock %} \ No newline at end of file diff --git a/src/libraries/urls.py b/src/libraries/urls.py new file mode 100644 index 000000000..754b17e44 --- /dev/null +++ b/src/libraries/urls.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url + + +urlpatterns = patterns('libraries.views', + url(r'^$', 'main_view', name='libraries_main_view'), + url(r'^(?P<slug>[a-zA-Z0-9_-]+)$', 'catalog_view', name='libraries_catalog_view'), + url(r'^(?P<catalog_slug>[a-zA-Z0-9_-]+)/(?P<slug>[a-zA-Z0-9_-]+)$', 'library_view', name='libraries_library_view'), +) diff --git a/src/libraries/views.py b/src/libraries/views.py new file mode 100644 index 000000000..7e245adbd --- /dev/null +++ b/src/libraries/views.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.shortcuts import render_to_response, get_object_or_404 +from django.template import RequestContext + +from libraries.models import Catalog, Library + + +def main_view(request): + context = RequestContext(request) + context['catalogs'] = Catalog.objects.all() + return render_to_response('libraries/main_view.html', context_instance=context) + +def catalog_view(request, slug): + context = RequestContext(request) + context['catalog'] = get_object_or_404(Catalog.objects.filter(slug=slug).select_related()) + return render_to_response('libraries/catalog_view.html', context_instance=context) + +def library_view(request, catalog_slug, slug): + context = RequestContext(request) + context['library'] = get_object_or_404(Library.objects.filter(slug=slug).filter(catalog__slug=catalog_slug)) + return render_to_response('libraries/library_view.html', context_instance=context) diff --git a/src/manage.py b/src/manage.py new file mode 100755 index 000000000..c1c055b1e --- /dev/null +++ b/src/manage.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python +import os +import sys + +ROOT = os.path.dirname(os.path.abspath(__file__)) +sys.path = [ + os.path.join(ROOT, '../lib/librarian'), +] + sys.path + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "wolnelektury.settings") + + from django.core.management import execute_from_command_line + + execute_from_command_line(sys.argv) diff --git a/src/newtagging/__init__.py b/src/newtagging/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/newtagging/admin.py b/src/newtagging/admin.py new file mode 100644 index 000000000..57a76d5d4 --- /dev/null +++ b/src/newtagging/admin.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +from django.contrib import admin +from django import forms +from django.utils.safestring import mark_safe +from django.utils.translation import ugettext_lazy as _ + + +class FilteredSelectMultiple(forms.SelectMultiple): + """ + A SelectMultiple with a JavaScript filter interface. + + Note that the resulting JavaScript assumes that the SelectFilter2.js + library and its dependencies have been loaded in the HTML page. + """ + def _media(self): + from django.conf import settings + js = ['js/SelectBox.js' , 'js/SelectFilter2.js'] + return forms.Media(js=['%sadmin/%s' % (settings.STATIC_URL, url) for url in js]) + media = property(_media) + + def __init__(self, verbose_name, is_stacked, attrs=None, choices=()): + self.verbose_name = verbose_name + self.is_stacked = is_stacked + super(FilteredSelectMultiple, self).__init__(attrs, choices) + + def render(self, name, value, attrs=None, choices=()): + from django.conf import settings + output = [super(FilteredSelectMultiple, self).render(name, value, attrs, choices)] + output.append(u'<script type="text/javascript">addEvent(window, "load", function(e) {') + # TODO: "id_" is hard-coded here. This should instead use the correct + # API to determine the ID dynamically. + output.append(u'SelectFilter.init("id_%s", "%s", %s, "%s"); });</script>\n' % \ + (name, self.verbose_name.replace('"', '\\"'), int(self.is_stacked), settings.STATIC_URL + "admin/")) + return mark_safe(u''.join(output)) + + +class TaggableModelForm(forms.ModelForm): + tags = forms.MultipleChoiceField(label=_('tags').capitalize(), required=False, widget=FilteredSelectMultiple(_('tags'), False)) + + def __init__(self, *args, **kwargs): + if 'instance' in kwargs: + if 'initial' not in kwargs: + kwargs['initial'] = {} + kwargs['initial']['tags'] = [tag.id for tag in self.tag_model.objects.get_for_object(kwargs['instance'])] + super(TaggableModelForm, self).__init__(*args, **kwargs) + self.fields['tags'].choices = [(tag.id, tag.name) for tag in self.tag_model.objects.all()] + + def save(self, commit): + obj = super(TaggableModelForm, self).save() + tag_ids = self.cleaned_data['tags'] + tags = self.tag_model.objects.filter(pk__in=tag_ids) + self.tag_model.objects.update_tags(obj, tags) + return obj + + def save_m2m(self): + # TODO: Shouldn't be needed + pass + + +class TaggableModelAdmin(admin.ModelAdmin): + form = TaggableModelForm + + def get_form(self, request, obj=None): + form = super(TaggableModelAdmin, self).get_form(request, obj) + form.tag_model = self.tag_model + return form + diff --git a/src/newtagging/locale/de/LC_MESSAGES/django.mo b/src/newtagging/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..a3ba8feae Binary files /dev/null and b/src/newtagging/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/de/LC_MESSAGES/django.po b/src/newtagging/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..01dcf5fa3 --- /dev/null +++ b/src/newtagging/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-13 12:19+0100\n" +"Last-Translator: xxx <xxx>\n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.py:38 +msgid "tags" +msgstr "Tags" + +#: models.py:531 +msgid "tag" +msgstr "Tag" + +#: models.py:532 +msgid "content type" +msgstr "Inhaltstyp" + +#: models.py:533 +msgid "object id" +msgstr "Objekt-ID" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "tagged_object_list must be called with a queryset or a model." + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "tagged_object_list must be called with a tag model." + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "tagged_object_list must be called with a tag." + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "Keine entsprechende Tags zu \"%s\" gefunden" diff --git a/src/newtagging/locale/en/LC_MESSAGES/django.mo b/src/newtagging/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..571ac5d62 Binary files /dev/null and b/src/newtagging/locale/en/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/en/LC_MESSAGES/django.po b/src/newtagging/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..a2b36bea6 --- /dev/null +++ b/src/newtagging/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 20:05+0100\n" +"Last-Translator: xxx <xxx>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.py:38 +msgid "tags" +msgstr "tags" + +#: models.py:531 +msgid "tag" +msgstr "tag" + +#: models.py:532 +msgid "content type" +msgstr "content type" + +#: models.py:533 +msgid "object id" +msgstr "object id" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "tagged_object_list must be defined with a queryset or a model" + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "tagged_object_list must be defined with a tag model" + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "tagged_object_list must be defined with a tag" + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "No tag found matching \"%s\"." diff --git a/src/newtagging/locale/es/LC_MESSAGES/django.mo b/src/newtagging/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..0e3ceedeb Binary files /dev/null and b/src/newtagging/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/es/LC_MESSAGES/django.po b/src/newtagging/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..06accc8c0 --- /dev/null +++ b/src/newtagging/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-28 12:01+0100\n" +"Last-Translator: Aneta <afroneta@wp.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.py:38 +msgid "tags" +msgstr "tags" + +#: models.py:531 +msgid "tag" +msgstr "tag" + +#: models.py:532 +msgid "content type" +msgstr "tipo de contenido" + +#: models.py:533 +msgid "object id" +msgstr "id de objeto" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "" +"lista_de_objetos_agregados debe ser llamada con un queryset o un modelo." + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "lista_de_objetos_agregados debe ser nombrada con un modelo de tag." + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "lista_de_objetos_agregados debe ser nombrada con un tag." + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "No se han encontrado tags correspondientes \"%s\"." diff --git a/src/newtagging/locale/fr/LC_MESSAGES/django.mo b/src/newtagging/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..87ec8c5d3 Binary files /dev/null and b/src/newtagging/locale/fr/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/fr/LC_MESSAGES/django.po b/src/newtagging/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..9368f459a --- /dev/null +++ b/src/newtagging/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-23 17:28+0100\n" +"Last-Translator: Ela Janota <amarillis5@wp.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.py:38 +msgid "tags" +msgstr "étiquettes" + +#: models.py:531 +msgid "tag" +msgstr "étiquette" + +#: models.py:532 +msgid "content type" +msgstr "type du contenu" + +#: models.py:533 +msgid "object id" +msgstr "Identifiant de l'objet" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "tagged_object_list doit être appelé avec un queryset ou un modèle." + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "tagged_object_list doit être appelé avec un modèle d'étiquette." + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "tagged_object_list doit être appelé avec une étiquette." + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "Aucune étiquette correspondant à \"%s\" trouvée." diff --git a/src/newtagging/locale/it/LC_MESSAGES/django.mo b/src/newtagging/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..bc4994c9e Binary files /dev/null and b/src/newtagging/locale/it/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/it/LC_MESSAGES/django.po b/src/newtagging/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..fd1d8bc72 --- /dev/null +++ b/src/newtagging/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-18 13:41+0100\n" +"Last-Translator: xxx\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: admin.py:38 +msgid "tags" +msgstr "i tag" + +#: models.py:531 +msgid "tag" +msgstr "tag" + +#: models.py:532 +msgid "content type" +msgstr "tipo di contenuto" + +#: models.py:533 +msgid "object id" +msgstr "oggetto id" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "" +"Lâelenco degli oggetti taggati deve essere chiamato con un queryset oppure " +"un modello. " + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "Lâelenco degli oggetti taggati deve essere chiamato con un modello tag" + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "Lâelenco degli oggetti taggati deve essere chiamato con un tag." + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "Nessun tag corrispondente a \"%s\" è stato trovato." diff --git a/src/newtagging/locale/jp/LC_MESSAGES/django.mo b/src/newtagging/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c9739db34 Binary files /dev/null and b/src/newtagging/locale/jp/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/jp/LC_MESSAGES/django.po b/src/newtagging/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 000000000..7ea964955 --- /dev/null +++ b/src/newtagging/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.py:38 +msgid "tags" +msgstr "" + +#: models.py:531 +msgid "tag" +msgstr "" + +#: models.py:532 +msgid "content type" +msgstr "" + +#: models.py:533 +msgid "object id" +msgstr "" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "" + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "" + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "" + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "" diff --git a/src/newtagging/locale/lt/LC_MESSAGES/django.mo b/src/newtagging/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c10c450bd Binary files /dev/null and b/src/newtagging/locale/lt/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/lt/LC_MESSAGES/django.po b/src/newtagging/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..a98ffc79b --- /dev/null +++ b/src/newtagging/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-01 16:13+0100\n" +"Last-Translator: Aneta\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: admin.py:38 +msgid "tags" +msgstr "žymÄs" + +#: models.py:531 +msgid "tag" +msgstr "žymÄ" + +#: models.py:532 +msgid "content type" +msgstr "turinio tipas" + +#: models.py:533 +msgid "object id" +msgstr "objekto ID" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "tagged_object_list must be called with a queryset or a model." + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "tagged_object_ list must be called with a tag model." + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "tagged_object_ list turi must be called with a tag." + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "Nerasta atitinkanÄių žymių \"%s\"." diff --git a/src/newtagging/locale/pl/LC_MESSAGES/django.mo b/src/newtagging/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..e6610193e Binary files /dev/null and b/src/newtagging/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/pl/LC_MESSAGES/django.po b/src/newtagging/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..a2e61d98b --- /dev/null +++ b/src/newtagging/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2010-05-19 16:20\n" +"Last-Translator: <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: admin.py:38 +msgid "tags" +msgstr "tagi" + +#: models.py:531 +msgid "tag" +msgstr "tag" + +#: models.py:532 +msgid "content type" +msgstr "typ zawartoÅci" + +#: models.py:533 +msgid "object id" +msgstr "id obiektu" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "" + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "" + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "" + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "" diff --git a/src/newtagging/locale/ru/LC_MESSAGES/django.mo b/src/newtagging/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..6f5130fa2 Binary files /dev/null and b/src/newtagging/locale/ru/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/ru/LC_MESSAGES/django.po b/src/newtagging/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..5090f89e2 --- /dev/null +++ b/src/newtagging/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 22:11+0100\n" +"Last-Translator: xxx <xxx>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.py:38 +msgid "tags" +msgstr "Ñаги" + +#: models.py:531 +msgid "tag" +msgstr "Ñаг" + +#: models.py:532 +msgid "content type" +msgstr "Ñип ÑодеÑжаниÑ" + +#: models.py:533 +msgid "object id" +msgstr "ID обÑекÑа" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "" +"ÑпиÑок Ñаг-обÑекÑов должен ÑоÑеÑаÑÑÑÑ Ñ Ð½Ð°Ð±Ð¾Ñом вопÑоÑов или Ñ Ð¼Ð¾Ð´ÐµÐ»ÑÑ." + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "ÑпиÑок Ñаг-обÑекÑов дожен ÑоÑеÑаÑÑÑÑ Ñ Ñаг-моделÑÑ." + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "ÑпиÑок Ñаг-обÑекÑов должен ÑоÑеÑаÑÑÑÑ Ñ Ñагом." + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "Ðикакой Ñаг не ÑооÑвеÑÑÑвÑÐµÑ \"%s\"." diff --git a/src/newtagging/locale/uk/LC_MESSAGES/django.mo b/src/newtagging/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..fd066609c Binary files /dev/null and b/src/newtagging/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/newtagging/locale/uk/LC_MESSAGES/django.po b/src/newtagging/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..392d1bfab --- /dev/null +++ b/src/newtagging/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-29 23:08+0100\n" +"Last-Translator: Anna Vasiutynska <was_ania@op.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.py:38 +msgid "tags" +msgstr "ÑеÒи" + +#: models.py:531 +msgid "tag" +msgstr "ÑеÒ" + +#: models.py:532 +msgid "content type" +msgstr "Ñип змÑÑÑÑ" + +#: models.py:533 +msgid "object id" +msgstr "ID об'ÑкÑÑ" + +#: views.py:30 +msgid "tagged_object_list must be called with a queryset or a model." +msgstr "tagged_object_list must be called with a queryset or a model." + +#: views.py:32 +msgid "tagged_object_list must be called with a tag model." +msgstr "tagged_object_list must be called with a tag model." + +#: views.py:34 +msgid "tagged_object_list must be called with a tag." +msgstr "tagged_object_list must be called with a tag." + +#: views.py:38 +#, python-format +msgid "No tags found matching \"%s\"." +msgstr "Ðе знайдено ÑеÒÑв вÑдповÑдаÑÑÐ¸Ñ \"%s\"." diff --git a/src/newtagging/managers.py b/src/newtagging/managers.py new file mode 100644 index 000000000..0bfec5413 --- /dev/null +++ b/src/newtagging/managers.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- +""" +Custom managers for Django models registered with the tagging +application. +""" +from django.contrib.contenttypes.models import ContentType +from django.db import models + + +class ModelTagManager(models.Manager): + """ + A manager for retrieving tags for a particular model. + """ + def __init__(self, tag_model): + super(ModelTagManager, self).__init__() + self.tag_model = tag_model + + def get_queryset(self): + content_type = ContentType.objects.get_for_model(self.model) + return self.tag_model.objects.filter( + items__content_type__pk=content_type.pk).distinct() + + def related(self, tags, *args, **kwargs): + return self.tag_model.objects.related_for_model(tags, self.model, *args, **kwargs) + + def usage(self, *args, **kwargs): + return self.tag_model.objects.usage_for_model(self.model, *args, **kwargs) + + +class ModelTaggedItemManager(models.Manager): + """ + A manager for retrieving model instances based on their tags. + """ + def __init__(self, tag_model): + super(ModelTaggedItemManager, self).__init__() + self.intermediary_table_model = tag_model.objects.intermediary_table_model + + def related_to(self, obj, queryset=None): + if queryset is None: + return self.intermediary_table_model.objects.get_related( + obj, self.model) + else: + return self.intermediary_table_model.objects.get_related( + obj, queryset) + + def with_all(self, tags, queryset=None): + if queryset is None: + return self.intermediary_table_model.objects.get_by_model(self.model, tags) + else: + return self.intermediary_table_model.objects.get_by_model(queryset, tags) + + def with_any(self, tags, queryset=None): + if queryset is None: + return self.intermediary_table_model.objects.get_union_by_model(self.model, tags) + else: + return self.intermediary_table_model.objects.get_union_by_model(queryset, tags) + + +class TagDescriptor(object): + """ + A descriptor which provides access to a ``ModelTagManager`` for + model classes and simple retrieval, updating and deletion of tags + for model instances. + """ + def __init__(self, tag_model): + self.tag_model = tag_model + + def __get__(self, instance, owner): + if not instance: + tag_manager = ModelTagManager(self.tag_model) + tag_manager.model = owner + return tag_manager + else: + return self.tag_model.objects.get_for_object(instance) + + def __set__(self, instance, value): + self.tag_model.objects.update_tags(instance, value) + + def __del__(self, instance): + self.tag_model.objects.update_tags(instance, []) + diff --git a/src/newtagging/models.py b/src/newtagging/models.py new file mode 100644 index 000000000..694f5b868 --- /dev/null +++ b/src/newtagging/models.py @@ -0,0 +1,259 @@ +# -*- coding: utf-8 -*- +""" +Models and managers for generic tagging. +""" + +from django.contrib.contenttypes.fields import GenericForeignKey +from django.contrib.contenttypes.models import ContentType +from django.db import connection, models +from django.utils.translation import ugettext_lazy as _ +from django.db.models.base import ModelBase +from django.core.exceptions import ObjectDoesNotExist +from django.dispatch import Signal + +qn = connection.ops.quote_name + + +tags_updated = Signal(providing_args=["affected_tags"]) + +def get_queryset_and_model(queryset_or_model): + """ + Given a ``QuerySet`` or a ``Model``, returns a two-tuple of + (queryset, model). + + If a ``Model`` is given, the ``QuerySet`` returned will be created + using its default manager. + """ + try: + return queryset_or_model, queryset_or_model.model + except AttributeError: + return queryset_or_model._default_manager.all(), queryset_or_model + + +############ +# Managers # +############ +class TagManager(models.Manager): + def __init__(self, intermediary_table_model): + super(TagManager, self).__init__() + self.intermediary_table_model = intermediary_table_model + models.signals.pre_delete.connect(self.target_deleted) + + def target_deleted(self, instance, **kwargs): + """ clear tag relations before deleting an object """ + try: + int(instance.pk) + except ValueError: + return + + self.update_tags(instance, []) + + def update_tags(self, obj, tags): + """ + Update tags associated with an object. + """ + content_type = ContentType.objects.get_for_model(obj) + current_tags = list(self.filter(items__content_type__pk=content_type.pk, + items__object_id=obj.pk)) + updated_tags = self.model.get_tag_list(tags) + + # Remove tags which no longer apply + tags_for_removal = [tag for tag in current_tags \ + if tag not in updated_tags] + if len(tags_for_removal): + self.intermediary_table_model._default_manager.filter(content_type__pk=content_type.pk, + object_id=obj.pk, + tag__in=tags_for_removal).delete() + # Add new tags + tags_to_add = [tag for tag in updated_tags + if tag not in current_tags] + for tag in tags_to_add: + if tag not in current_tags: + self.intermediary_table_model._default_manager.create(tag=tag, content_object=obj) + + tags_updated.send(sender=type(obj), instance=obj, affected_tags=tags_to_add + tags_for_removal) + + def remove_tag(self, obj, tag): + """ + Remove tag from an object. + """ + content_type = ContentType.objects.get_for_model(obj) + self.intermediary_table_model._default_manager.filter(content_type__pk=content_type.pk, + object_id=obj.pk, tag=tag).delete() + + def get_for_object(self, obj): + """ + Create a queryset matching all tags associated with the given + object. + """ + ctype = ContentType.objects.get_for_model(obj) + return self.filter(items__content_type__pk=ctype.pk, + items__object_id=obj.pk) + + def usage_for_model(self, model, counts=False, filters=None): + """ + Obtain a list of tags associated with instances of the given + Model class. + + If ``counts`` is True, a ``count`` attribute will be added to + each tag, indicating how many times it has been used against + the Model class in question. + + To limit the tags (and counts, if specified) returned to those + used by a subset of the Model's instances, pass a dictionary + of field lookups to be applied to the given Model as the + ``filters`` argument. + """ + # TODO: Do we really need this filters stuff? + if filters is None: filters = {} + + queryset = model._default_manager.filter() + for f in filters.items(): + queryset.query.add_filter(f) + usage = self.usage_for_queryset(queryset, counts) + return usage + + def usage_for_queryset(self, queryset, counts=False): + """ + Obtain a list of tags associated with instances of a model + contained in the given queryset. + + If ``counts`` is True, a ``count`` attribute will be added to + each tag, indicating how many times it has been used against + the Model class in question. + """ + usage = self.model._default_manager.filter( + items__content_type=ContentType.objects.get_for_model(queryset.model), + items__object_id__in=queryset + ) + if counts: + usage = usage.annotate(count=models.Count('id')) + else: + usage = usage.distinct() + return usage + + def related_for_model(self, tags, model, counts=False): + """ + Obtain a list of tags related to a given list of tags - that + is, other tags used by items which have all the given tags. + + If ``counts`` is True, a ``count`` attribute will be added to + each tag, indicating the number of items which have it in + addition to the given list of tags. + """ + objs = self.model.intermediary_table_model.objects.get_by_model(model, tags) + qs = self.usage_for_queryset(objs, counts) + qs = qs.exclude(pk__in=[tag.pk for tag in tags]) + return qs + + +class TaggedItemManager(models.Manager): + def __init__(self, tag_model): + super(TaggedItemManager, self).__init__() + self.tag_model = tag_model + + def get_by_model(self, queryset_or_model, tags): + """ + Create a ``QuerySet`` containing instances of the specified + model associated with a given tag or list of tags. + """ + queryset, model = get_queryset_and_model(queryset_or_model) + tags = self.tag_model.get_tag_list(tags) + if not tags: + # No existing tags were given + return queryset.none() + + # TODO: presumes reverse generic relation + # Multiple joins are WAY faster than having-count, at least on Postgres 9.1. + for tag in tags: + queryset = queryset.filter(tag_relations__tag=tag) + return queryset + + def get_union_by_model(self, queryset_or_model, tags): + """ + Create a ``QuerySet`` containing instances of the specified + model associated with *any* of the given list of tags. + """ + queryset, model = get_queryset_and_model(queryset_or_model) + tags = self.tag_model.get_tag_list(tags) + if not tags: + return queryset.none() + # TODO: presumes reverse generic relation + return queryset.filter(tag_relations__tag__in=tags).distinct() + + def get_related(self, obj, queryset_or_model): + """ + Retrieve a list of instances of the specified model which share + tags with the model instance ``obj``, ordered by the number of + shared tags in descending order. + """ + queryset, model = get_queryset_and_model(queryset_or_model) + # TODO: presumes reverse generic relation. + # Do we know it's 'tags'? + return queryset.filter(tag_relations__tag__in=obj.tags).annotate( + count=models.Count('pk')).order_by('-count').exclude(pk=obj.pk) + + +########## +# Models # +########## +def create_intermediary_table_model(model): + """Create an intermediary table model for the specific tag model""" + name = model.__name__ + 'Relation' + + class Meta: + db_table = '%s_relation' % model._meta.db_table + unique_together = (('tag', 'content_type', 'object_id'),) + app_label = model._meta.app_label + + def obj_unicode(self): + try: + return u'%s [%s]' % (self.content_type.get_object_for_this_type(pk=self.object_id), self.tag) + except ObjectDoesNotExist: + return u'<deleted> [%s]' % self.tag + + # Set up a dictionary to simulate declarations within a class + attrs = { + '__module__': model.__module__, + 'Meta': Meta, + 'tag': models.ForeignKey(model, verbose_name=_('tag'), related_name='items'), + 'content_type': models.ForeignKey(ContentType, verbose_name=_('content type')), + 'object_id': models.PositiveIntegerField(_('object id'), db_index=True), + 'content_object': GenericForeignKey('content_type', 'object_id'), + '__unicode__': obj_unicode, + } + + return type(name, (models.Model,), attrs) + + +class TagMeta(ModelBase): + "Metaclass for tag models (models inheriting from TagBase)." + def __new__(mcs, name, bases, attrs): + model = super(TagMeta, mcs).__new__(mcs, name, bases, attrs) + if not model._meta.abstract: + # Create an intermediary table and register custom managers for concrete models + model.intermediary_table_model = create_intermediary_table_model(model) + TagManager(model.intermediary_table_model).contribute_to_class(model, 'objects') + TaggedItemManager(model).contribute_to_class(model.intermediary_table_model, 'objects') + return model + + +class TagBase(models.Model): + """Abstract class to be inherited by model classes.""" + __metaclass__ = TagMeta + + class Meta: + abstract = True + + @staticmethod + def get_tag_list(tag_list): + """ + Utility function for accepting tag input in a flexible manner. + + You should probably override this method in your subclass. + """ + if isinstance(tag_list, TagBase): + return [tag_list] + else: + return tag_list + diff --git a/src/newtagging/views.py b/src/newtagging/views.py new file mode 100644 index 000000000..867686d3c --- /dev/null +++ b/src/newtagging/views.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +""" +Tagging related views. +""" +from django.http import Http404 +from django.utils.translation import ugettext as _ +from django.views.generic import ListView + + +def tagged_object_list(request, queryset_or_model=None, tag_model=None, tags=None, + related_tags=False, related_tag_counts=True, **kwargs): + """ + A thin wrapper around + ``django.views.generic.list_detail.object_list`` which creates a + ``QuerySet`` containing instances of the given queryset or model + tagged with the given tag. + + In addition to the context variables set up by ``object_list``, a + ``tag`` context variable will contain the ``Tag`` instance for the + tag. + + If ``related_tags`` is ``True``, a ``related_tags`` context variable + will contain tags related to the given tag for the given model. + Additionally, if ``related_tag_counts`` is ``True``, each related + tag will have a ``count`` attribute indicating the number of items + which have it in addition to the given tag. + """ + # Check attributes + if queryset_or_model is None: + raise AttributeError(_('tagged_object_list must be called with a queryset or a model.')) + if tag_model is None: + raise AttributeError(_('tagged_object_list must be called with a tag model.')) + if tags is None: + raise AttributeError(_('tagged_object_list must be called with a tag.')) + + tag_instances = tag_model.get_tag_list(tags) + if tag_instances is None: + raise Http404(_('No tags found matching "%s".') % tags) + queryset = tag_model.intermediary_table_model.objects.get_by_model(queryset_or_model, tag_instances) + if not kwargs.has_key('extra_context'): + kwargs['extra_context'] = {} + kwargs['extra_context']['tags'] = tag_instances + if related_tags: + kwargs['extra_context']['related_tags'] = \ + tag_model.objects.related_for_model(tag_instances, queryset_or_model, + counts=related_tag_counts) + return ListView.as_view(queryset=queryset)(request, **kwargs) + diff --git a/src/oai/__init__.py b/src/oai/__init__.py new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/src/oai/__init__.py @@ -0,0 +1 @@ + diff --git a/src/oai/handlers.py b/src/oai/handlers.py new file mode 100644 index 000000000..d9699f9fe --- /dev/null +++ b/src/oai/handlers.py @@ -0,0 +1,238 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from oaipmh import server, common, metadata, error +from catalogue.models import Book, Tag +from api.models import Deleted +from api.handlers import WL_BASE +from librarian import WLURI +from django.contrib.contenttypes.models import ContentType +from datetime import datetime +from lxml import etree +from django.conf import settings +from django.contrib.sites.models import Site +from django.utils import timezone + + +make_time_naive = lambda d: timezone.localtime(d).replace(tzinfo=None) + +WL_DC_READER_XPATH = '(.|*)/rdf:RDF/rdf:Description/%s/text()' +wl_dc_reader = metadata.MetadataReader( + fields={ + 'title': ('textList', WL_DC_READER_XPATH % 'dc:title'), + 'creator': ('textList', WL_DC_READER_XPATH % 'dc:creator'), + 'subject': ('textList', (WL_DC_READER_XPATH + ' | ' + WL_DC_READER_XPATH + ' | ' + WL_DC_READER_XPATH) % + ('dc:subject.period', 'dc:subject.type', 'dc:subject.genre')), + 'description': ('textList', WL_DC_READER_XPATH % 'dc:description'), + 'publisher': ('textList', WL_DC_READER_XPATH % 'dc:publisher'), + 'contributor': ('textList', (WL_DC_READER_XPATH + ' | ' + WL_DC_READER_XPATH + ' | ' + WL_DC_READER_XPATH) % + ('dc:contributor.editor', 'dc:contributor.translator', 'dc:contributor.technical_editor')), + 'date': ('textList', WL_DC_READER_XPATH % 'dc:date'), + 'type': ('textList', WL_DC_READER_XPATH % 'dc:type'), + 'format': ('textList', WL_DC_READER_XPATH % 'dc:format'), + 'identifier': ('textList', WL_DC_READER_XPATH % 'dc:identifier.url'), + 'source': ('textList', WL_DC_READER_XPATH % 'dc:source'), + 'language': ('textList', WL_DC_READER_XPATH % 'dc:language'), + #'isPartOf': ('textList', 'rdf:RDF/rdf:Description/dc:relation.isPartOf/text()'), + 'hasPart': ('textList', WL_DC_READER_XPATH % 'dc:relation.hasPart'), + # 'relation': ('textList', 'rdf:RDF/rdf:Description/dc:relation/text()'), + # 'coverage': ('textList', 'rdf:RDF/rdf:Description/dc:coverage/text()'), + 'rights': ('textList', WL_DC_READER_XPATH % 'dc:rights') + }, + namespaces={ + 'dc': 'http://purl.org/dc/elements/1.1/', + 'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'} + ) + + +NS_DCTERMS = "http://purl.org/dc/terms/" + + +def nsdcterms(name): + return '{%s}%s' % (NS_DCTERMS, name) + + +class Catalogue(common.ResumptionOAIPMH): + TAG_CATEGORIES = ['author', 'epoch', 'kind', 'genre'] + + def __init__(self, metadata_registry): + super(Catalogue, self).__init__() + self.metadata_registry = metadata_registry + + self.oai_id = "oai:" + Site.objects.get_current().domain + ":%s" + + # earliest change + year_zero = timezone.make_aware(datetime(1990, 1, 1, 0, 0, 0), timezone.utc) + + try: + earliest_change = \ + Book.objects.order_by('changed_at')[0].changed_at + except: earliest_change = year_zero + + try: + earliest_delete = \ + Deleted.objects.exclude(slug__exact=u'').ordery_by('deleted_at')[0].deleted_at + except: earliest_delete = year_zero + + self.earliest_datestamp = earliest_change <= earliest_delete and \ + earliest_change or earliest_delete + + def metadata(self, book): + try: + xml = etree.parse(book.xml_file) + finally: + book.xml_file.close() + md = wl_dc_reader(xml) + m = md.getMap() + if book.parent: + m['isPartOf'] = [str(WLURI.from_slug(book.parent.slug))] + return m + + def record_for_book(self, book, headers_only=False): + meta = None + identifier = self.slug_to_identifier(book.slug) + if isinstance(book, Book): + # setSpec = map(self.tag_to_setspec, book.tags.filter(category__in=self.TAG_CATEGORIES)) + header = common.Header(identifier, make_time_naive(book.changed_at), [], False) + if not headers_only: + meta = common.Metadata(self.metadata(book)) + about = None + elif isinstance(book, Deleted): + header = common.Header(identifier, make_time_naive(book.deleted_at), [], True) + if not headers_only: + meta = common.Metadata({}) + about = None + if headers_only: + return header + return header, meta, about + + def identify(self, **kw): + ident = common.Identify( + 'Wolne Lektury', # generate + '%s/oaipmh' % unicode(WL_BASE), # generate + '2.0', # version + [m[1] for m in settings.MANAGERS], # adminEmails + make_time_naive(self.earliest_datestamp), # earliest datestamp of any change + 'persistent', # deletedRecord + 'YYYY-MM-DDThh:mm:ssZ', # granularity + ['identity'], # compression + [] # descriptions + ) + return ident + + def books(self, tag, from_, until): + if tag: + # we do not support sets, since they are problematic for deleted books. + raise error.NoSetHierarchyError("Wolne Lektury does not support sets.") + # books = Book.tagged.with_all([tag]) + else: + books = Book.objects.all() + deleted = Deleted.objects.exclude(slug__exact=u'') + + books = books.order_by('changed_at') + deleted = deleted.order_by('deleted_at') + if from_: + books = books.filter(changed_at__gte=from_) + deleted = deleted.filter(deleted_at__gte=from_) + if until: + books = books.filter(changed_at__lte=until) + deleted = deleted.filter(deleted_at__lte=until) + return list(books) + list(deleted) + + @staticmethod + def tag_to_setspec(tag): + return "%s:%s" % (tag.category, tag.slug) + + @staticmethod + def setspec_to_tag(s): + if not s: return None + cs = s.split(':') + if len(cs) == 2: + if not cs[0] in Catalogue.TAG_CATEGORIES: + raise error.NoSetHierarchyError("No category part in set") + tag = Tag.objects.get(slug=cs[1], category=cs[0]) + return tag + raise error.NoSetHierarchyError("Setspec should have two components: category:slug") + + def getRecord(self, **kw): + """ +Returns (header, metadata, about) for given record. + """ + slug = self.identifier_to_slug(kw['identifier']) + try: + book = Book.objects.get(slug=slug) + return self.record_for_book(book) + except Book.DoesNotExist: + book_type = ContentType.objects.get_for_model(Book) + try: + deleted_book = Deleted.objects.get(content_type=book_type, + slug=slug) + except: + raise error.IdDoesNotExistError("No item for this identifier") + return self.record_for_book(deleted_book) + + def validate_kw(self, kw): + if 'resumptionToken' in kw: + raise error.BadResumptionTokenError("No resumption token support at this point") + if 'metadataPrefix' in kw and not self.metadata_registry.hasWriter(kw['metadataPrefix']): + raise error.CannotDisseminateFormatError("This format is not supported") + + def identifier_to_slug(self, ident): + return ident.split(':')[-1] + + def slug_to_identifier(self, slug): + return self.oai_id % slug + + def listIdentifiers(self, **kw): + self.validate_kw(kw) + records = [self.record_for_book(book, headers_only=True) for + book in self.books(None, + kw.get('from_', None), + kw.get('until', None))] + return records, None + + def listRecords(self, **kw): + """ +can get a resumptionToken kw. +returns result, token + """ + self.validate_kw(kw) + records = [self.record_for_book(book) for + book in self.books(None, + kw.get('from_', None), + kw.get('until', None))] + + return records, None + + def listMetadataFormats(self, **kw): + formats = [ + ('oai_dc', + 'http://www.openarchives.org/OAI/2.0/oai_dc.xsd', + server.NS_OAIDC), + ('qdc', + 'http://dublincore.org/schemas/xmls/qdc/2006/01/06/dcterms.xsd', + NS_DCTERMS)] + if 'identifier' in kw: + slug = self.identifier_to_slug(kw['identifier']) + try: + b = Book.objects.get(slug=slug) + return formats + except: + try: + d = Deleted.objects.get(slug=slug) + return [] + except: + raise error.IdDoesNotExistError("This id does not exist") + else: + return formats + + def listSets(self, **kw): + raise error.NoSetHierarchyError("Wolne Lektury does not support sets.") + # tags = [] + # for category in Catalogue.TAG_CATEGORIES: + # for tag in Tag.objects.filter(category=category): + # tags.append(("%s:%s" % (tag.category, tag.slug), + # tag.name, + # tag.description)) + # return tags, None diff --git a/src/oai/tests/__init__.py b/src/oai/tests/__init__.py new file mode 100644 index 000000000..561ef604a --- /dev/null +++ b/src/oai/tests/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from oai.tests.oaipmhapi import * diff --git a/src/oai/tests/files/antygona.xml b/src/oai/tests/files/antygona.xml new file mode 100755 index 000000000..f5244c4b4 --- /dev/null +++ b/src/oai/tests/files/antygona.xml @@ -0,0 +1,2981 @@ +<utwor> + +<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> +<rdf:Description rdf:about="http://redakcja.wolnelektury.pl/documents/book/antygona/"> +<dc:creator xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Sofokles</dc:creator> +<dc:title xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Antygona</dc:title> +<dc:contributor.editor xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">SekuÅa, Aleksandra</dc:contributor.editor> +<dc:contributor.translator xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Morawski, Kazimierz</dc:contributor.translator> +<dc:contributor.technical_editor xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">GaÅecki, Dariusz</dc:contributor.technical_editor> +<dc:publisher xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Fundacja Nowoczesna Polska</dc:publisher> +<dc:subject.period xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">StarożytnoÅÄ</dc:subject.period> +<dc:subject.type xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Dramat</dc:subject.type> +<dc:subject.genre xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Tragedia</dc:subject.genre> +<dc:description xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez BibliotekÄ NarodowÄ z egzemplarza pochodzÄ cego ze zbiorów BN.</dc:description> +<dc:identifier.url xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">http://wolnelektury.pl/katalog/lektura/antygona</dc:identifier.url> +<dc:source.URL xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">http://www.polona.pl/Content/3768</dc:source.URL> +<dc:source xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Sofokles, Antygona, tÅum. Kazimierz Morawski, wyd. 7, Wydawnictwo ZakÅadu Narodowego imienia OssoliÅskich, Lwów 1939</dc:source> +<dc:rights xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Domena publiczna - tÅumacz Kazimierz Morawski zm. 1925</dc:rights> +<dc:date.pd xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">1925</dc:date.pd> +<dc:format xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">xml</dc:format> +<dc:type xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">text</dc:type> +<dc:type xml:lang="en" xmlns:dc="http://purl.org/dc/elements/1.1/">text</dc:type> +<dc:date xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">2007-08-30</dc:date> +<dc:audience xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">G</dc:audience> +<dc:language xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">pol</dc:language> +</rdf:Description> +</rdf:RDF> + + +<dramat_wierszowany_l> + + +<extra><!--<elementy_poczatkowe>--></extra> + +<autor_utworu>Sofokles</autor_utworu> + +<nazwa_utworu>Antygona</nazwa_utworu> + + +<lista_osob> +<naglowek_listy>OSOBY DRAMATU</naglowek_listy> +<lista_osoba>ANTYGONA, córka Edypa</lista_osoba> +<lista_osoba>ISMENA, jej siostra<pe><slowo_obce>synowica</slowo_obce> --- bratanica, córka brata.</pe></lista_osoba> +<lista_osoba>CHÃR TEBANSKICH STARCÃW</lista_osoba> +<lista_osoba>KREON, król Teb</lista_osoba> +<lista_osoba>STRAÅ»NIK</lista_osoba> +<lista_osoba>HAJMON, syn Kreona</lista_osoba> +<lista_osoba>TYREZJASZ, wróżbita</lista_osoba> +<lista_osoba>POSÅANIEC.</lista_osoba> +<lista_osoba>EURYDYKA, żona Kreona</lista_osoba> +<lista_osoba>POSÅANIEC drugi</lista_osoba> +</lista_osob> + +<miejsce_czas>Rzecz dzieje siÄ przed dworcem królewskim w Tebach</miejsce_czas> + +<extra><!--</elementy_poczatkowe>--></extra> + + + +<extra><!--<tekst_glowny>--></extra> + + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +O ukochana siostro ma, Ismeno,/ +Czy ty nie widzisz, że z klÄsk Edypowych/ +Å»adnej za życia los nam nie oszczÄdza?/ +Bo nie ma cierpieÅ i nie ma ohydy,/ +Nie ma niesÅawy i haÅby, które by/ +Nas poÅród nieszczÄÅÄ pasma nie dotknÄÅy./ +Cóż bo za rozkaz znów obwieÅciÅ miastu/ +Ten, który teraz wÅadzÄ w rÄku dzierży?/ +CzyÅ zasÅyszaÅa? Czy uszÅo twej wiedzy,/ +Å»e znów wrogowie godzÄ w naszych miÅych? +</strofa> +</kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia> +<strofa> +O Antygono, żadna wieÅÄ nie doszÅa/ +Do mnie, ni sÅodka, ni goryczy peÅna,/ +Od dnia, gdy braci straciÅyÅmy obu,/ +W bratnim zabitych razem pojedynku./ +OdkÄ d tej nocy odeszÅy Argiwów/ +Hufce<pr><slowo_obce>Argiwów hufce</slowo_obce> --- Polinik zebraÅ swe zastÄpy w Argolidzie, czyli w Argosie.</pr>, niczego wiÄcej nie zaznaÅam/ +Ni ku pociesze, ni ku wiÄkszej trosce. +</strofa> +</kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +Lecz mnie wieÅÄ doszÅa, i dlatego z domu/ +CiÄ wywoÅaÅam, by rzecz ci powierzyÄ. +</strofa> +</kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia><strofa>Cóż to? Ty jakieÅ ciÄżkie ważysz sÅowa.</strofa></kwestia> + + +<begin id="b1188565612339"/><motyw id="m1188565612339">ObowiÄ zek, Rodzina</motyw><naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +O tak! Czyż nie wiesz, że z polegÅych braci/ +Kreon jednemu wrÄcz odmówiÅ grobu?/ +Å»e Eteokla, jak czyniÄ przystoi,/ +PogrzebaÅ w ziemi wÅród umarÅych rzeszy,/ +A zaÅ obwieÅciÅ, aby Polinika/ +NieszczÄsne zwÅoki bez czci pozostaÅy,/ +By nikt ich pÅakaÄ, nikt grzeÅÄ siÄ nie ważyÅ;/ +MajÄ wiec leżeÄ bez Åez i bez grobu,/ +Na pastwÄ ptakom żarÅocznym i strawÄ./ +SÅychaÄ, że Kreon czcigodny dla ciebie,/ +Co mówiÄ, dla mnie też wydaÅ ten ukaz/ +I że tu przyjdzie, by tym go ogÅosiÄ,/ +Co go nie znajÄ , nie na wiatr zaiste/ +Rzecz tÄ stanowiÄ c, lecz groÅ¼Ä c zarazem/ +Kamienowaniem ukazu przestÄpcom./ +Tak siÄ ma sprawa, teraz wraz ukażesz,/ +CzyÅ godnÄ rodu, czy wyrodnÄ córÄ . +</strofa> +</kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia> +<strofa> +Gdy taka dola, to cóż, o nieszczÄsna,/ +PrujÄ c czy snujÄ c bym mogÅa tu przydaÄ? +</strofa> +</kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>Patrz, byÅ wspomogÅa i poparÅa siostrÄ.</strofa></kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia><strofa>W jakimże dziele? DokÄ d myÅl twa mierzy?</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>Ze mnÄ masz zwÅoki opatrzyÄ braterskie.</strofa></kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia><strofa>WiÄc ty zamierzasz grzebaÄ wbrew ukazom?</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +Tak! brata mego, a dodam... i twego;/ +Bo wiaroÅomstwem nie myÅlÄ siÄ kalaÄ. +</strofa> +</kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia><strofa>Niczym dla ciebie wiÄc zakaz Kreona?</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>Niczym, on nie ma nad moimi prawa.</strofa></kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia> +<strofa> +Biada! o rozważ, siostro, jak nam ojciec/ +ZginÄ Å wÅród sromu i poÅród niesÅawy,/ +Kiedy siÄ jemu bÅÄdy ujawniÅy,/ +A on siÄ targnÄ Å na wÅasne swe oczy;/ +Å»ona i matka<pr><slowo_obce>Å»ona i matka</slowo_obce> --- odnosi siÄ do Jokasty, matki i żony Edypa, która po odkryciu swego poÅożenia z rozpaczy siÄ powiesiÅa.</pr> --- dwuznaczne to miano ---/ +Splecionym wÄzÅem swe życie ukróca;/ +Wreszcie i bracia przy jednym dnia sÅoÅcu/ +GodzÄ na siebie i morderczÄ rÄkÄ / +Jeden drugiemu ÅmierÄ srogÄ zadaje./ +<begin id="b1188559408957"/><motyw id="m1188559408957">BezsilnoÅÄ</motyw>Zważ wiÄc, że teraz i my pozostaÅe/ +Zginiemy marnie, jeżeli wbrew prawu/ +ZÅamiemy wolÄ i rozkaz tyrana./ +BaczyÄ to trzeba, że my przecie sÅabe,/ +Do walk z mÄżczyznÄ niezdolne niewiasty;/ +Å»e nam ulegaÄ silniejszym należy,/ +Tych sÅuchaÄ, nawet i sroższych rozkazów;/ +Ja wiÄc, bÅagajÄ c o wyrozumienie/ +ZmarÅych, że muszÄ tak ulec przemocy,/ +PosÅuszna bÄdÄ wÅadcom tego Åwiata,/ +Bo próżny opór urÄ ga rozwadze.<end id="e1188559408957"/> +</strofa> +</kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +<begin id="b1188559489751"/><motyw id="m1188559489751">MiÅoÅÄ silniejsza niż ÅmierÄ</motyw>Ja ci nie kaÅ¼Ä niczego, ni, choÄbyÅ/ +Pomóc mi chciaÅa, wdziÄczne by mi byÅo,/ +Lecz stój przy twojej myÅli, a ja tego/ +PogrzebiÄ sama, potem zginÄ z chlubÄ ./ +Niechaj siÄ zbratam z mym kochanym w Åmierci/ +Po ÅwiÄtej zbrodni; a dÅużej mi zmarÅym/ +MiÅÄ byÄ trzeba, niż ziemi mieszkaÅcom,/ +Bo tam zostanÄ na wieki<end id="e1188559489751"/>; tymczasem/ +Ty tu znieważaj ÅwiÄte prawa bogów. +</strofa> +</kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia> +<strofa> +Ja nie znieważam ich, nie bÄdÄ c w mocy/ +DziaÅaÄ na przekór stanowieniom wÅadców. +</strofa> +</kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +Rób po twej myÅli; ja zaÅ wnet podÄ Å¼Ä,/ +By kochanemu bratu grób usypaÄ. +</strofa> +</kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia><strofa>O ty nieszczÄsna! serce drży o ciebie.</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>Nie troszcz siÄ o mnie; nad twoim radź losem.</strofa></kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia> +<strofa> +Ale nie zdradzaj twej myÅli nikomu,/ +Kryj twe zamiary, ja też je zatajÄ. +</strofa> +</kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +O nie! mów gÅoÅno, bo ciÄżkie ty kaźnie/ +ÅciÄ gnÄ Ä byÅ mogÅa milczeniem na siebie. +</strofa> +</kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia><strofa>Z żarów twej duszy mroźne mieciesz sÅowa.</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>Lecz miÅa jestem tym, o których stojÄ.</strofa></kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia><strofa>JeÅli podoÅasz w trudnych mar poÅcigu.</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>Jak nie podoÅam, to zaniecham dzieÅa.</strofa></kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia><strofa>Nie trza siÄ z góry porywaÄ na mary.</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +Kiedy tak mówisz, wstrÄt budzisz w mym sercu/ +I sÅusznie zmierzisz siÄ także zmarÅemu;/ +<begin id="b1188560333104"/><motyw id="m1188560333104">ÅmierÄ bohaterska</motyw>Pozwól, bym ja wraz z moim zaÅlepieniem/ +SpojrzaÅa w oczy grozie; bo ta groza/ +Chlubnej mi Åmierci przenigdy nie wydrze.<end id="e1188560333104"/> +</strofa> +</kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia> +<strofa> +JeÅli tak mniemasz, idź, lecz wiedz zarazem,/ +Å»eÅ nierozważna, choÄ miÅym tyÅ miÅa. +</strofa> +</kwestia><end id="e1188565612339"/> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +O sÅoÅca grocie, coÅ jasno znów Tebom<pr>Wersy 99-160: liczba wierszy w ten sposób podana odnosi siÄ do wierszy tekstu oryginalnego.</pr>/ +<wers_wciety typ="2">BÅysnÄ Å po trudach i znoju,</wers_wciety>/ +ZÅote dnia oko, przyÅwiecasz ty niebom/ +<wers_wciety typ="2">I w Dirki<pr>Dirke --- źródÅo na póÅnocny zachód od Teb.</pr> nurzasz siÄ zdroju.</wers_wciety>/ +Witaj! TyÅ sprawiÅ, że wrogów mych krocie/ +<wers_wciety typ="2">W dzikim pierzchnÄÅy odwrocie.</wers_wciety> +</strofa> + +<strofa> +<wers_wciety typ="2">Bo Polinika gniewny spór</wers_wciety>/ +<wers_wciety typ="2">Krwawy zażegÅ w ziemi bój,</wers_wciety>/ +<wers_wciety typ="2">Z chrzÄstem zapadÅ, z szumem piór</wers_wciety>/ +<wers_wciety typ="2">Ånieżnych orÅów lotny rój,</wers_wciety>/ +<wers_wciety typ="2">I zbroice liczne bÅysÅy,</wers_wciety>/ +<wers_wciety typ="2">I z szyszaków pióra trysÅy.</wers_wciety> +</strofa> + +<strofa> +I wróg już wieÅcem dzid groźnych otoczyÅ/ +<wers_wciety>Siedmiu bram miasta gardziele,</wers_wciety>/ +Lecz pierzchÅ, nim w mojej krwi strugach siÄ zbroczyÅ,/ +<wers_wciety>Zanim Hefajstos<pr>Hefajstos --- bóg ognia, tu w znaczeniu: pożar.</pr> ognisty w popiele</wers_wciety>/ +PogrÄ Å¼yÅ mury, bo z tyÅu nawaÅem/ +<wers_wciety>RunÄ Å na smoka<pr><slowo_obce>na smoka</slowo_obce> --- bo Adrastos, najprzedniejszy wÅród najeźdźców, miaÅ smoka wyrzeźbionego na tarczy.</pr> Ares z wojny szaÅem.</wers_wciety> +</strofa> + +<strofa> +<wers_wciety typ="2">Bo Zeus nie cierpi dumnych gÅów,</wers_wciety>/ +<wers_wciety typ="3">A widzÄ c ich wyniosÅy lot</wers_wciety>/ +<wers_wciety typ="2">I zÅota chrzÄst, i pychÄ sÅów,</wers_wciety>/ +<wers_wciety typ="3">WypuÅciÅ swój piorunny grot<pr><slowo_obce>piorunny grot</slowo_obce> --- jeden z siedmiu ksiÄ Å¼Ä t, którzy najechali Teby, olbrzymi Kapaneus, runÄ Å rażony od gromu Zeusa.</pr></wers_wciety>/ +<wers_wciety typ="2">I w zwyciÄstwa samym progu</wers_wciety>/ +<wers_wciety typ="3">SkarciÅ butÄ w dumnym wrogu.</wers_wciety> +</strofa> + +<strofa> +A ugodzony wznak na ziemiÄ runie/ +<wers_wciety>Ten, który w namiÄtnym gniewie</wers_wciety>/ +Miasto pogrzebaÄ chciaÅ w ognia caÅunie/ +<wers_wciety>I jak wicher dÄ Å w zarzewie.</wers_wciety>/ +LegÅ on od Zeusa gromu powalony,/ +Innym znów Ares inne znaczy zgony. +</strofa> + +<strofa> +<wers_wciety typ="2">Bo siedmiu --- siedmiu strzegÅo wrót,</wers_wciety>/ +<wers_wciety typ="3">Na mÄża mÄ Å¼ wymierzyÅ dÅoÅ,</wers_wciety>/ +<wers_wciety typ="2">DziÅ w stosach lÅni za zwyciÄstw trud</wers_wciety>/ +<wers_wciety typ="3">Ku Zeusa czci pobitych broÅ.</wers_wciety>/ +<wers_wciety typ="2">Ale przy jednej miasta bramie</wers_wciety>/ +<wers_wciety typ="3">Nie bÅyszczy żaden chwaÅy Åup,</wers_wciety>/ +<wers_wciety typ="2">Gdzie brat na brata podniósÅ ramiÄ,</wers_wciety>/ +<wers_wciety typ="3">Tam obok trupa polegÅ trup.</wers_wciety> +</strofa> + +<strofa> +WiÄc teraz Nike,<pe>Nike --- bogini zwyciÄstwa, także: samo zwyciÄstwo.</pe> czci syta i sÅawy,/ +<wers_wciety>Zwraca ku Tebom radosne swe oczy,</wers_wciety>/ +Po twardym znoju i po walce krwawej/ +<wers_wciety>Rzezi wspomnienie niech serca nie mroczy;</wers_wciety>/ +Idźmy do ÅwiÄ tyÅ, a niechaj na przedzie/ +Teb skoczny Bakchus<pr>Bakchus urodziÅ siÄ rzekomo w Tebach z matki Semeli, dlatego nazywano go <wyroznienie>tebaÅskim</wyroznienie> bogiem.</pr> korowody wiedzie. +</strofa> + +<strofa> +<wers_wciety typ="2">Lecz otóż widzÄ, jak do nas tu zdÄ Å¼a</wers_wciety>/ +<wers_wciety typ="3">Kreon, co ziemiÄ tÄ wÅada,</wers_wciety>/ +<wers_wciety typ="2">Nowy bóstw wyrok go w myÅlach pogrÄ Å¼a,</wers_wciety>/ +<wers_wciety typ="3">Ważne on plany waży i ukÅada.</wers_wciety>/ +<wers_wciety typ="2">Widno, że zbadaÄ chciaÅby nasze zdanie,</wers_wciety>/ +<wers_wciety typ="2">Skoro tu starców wezwaÅ na zebranie.</wers_wciety> +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +O TebaÅczycy, nareszcie bogowie/ +Z burzy i wstrzÄ ÅnieÅ wyrwali to miasto;/ +A jam was zwoÅaÅ tutaj przed innymi,/ +BoÅcie wy byli podporami tronu/ +Za Laiosa i Edypa rzÄ dów,/ +I po Edypa zgonie mÅodzieniaszkom/ +PewnÄ swÄ radÄ sÅużyliÅcie chÄtnie./ +Kiedy zaÅ oni za losu wyrokiem/ +Polegli obaj w bratobójczej walce,/ +KrwiÄ pokajawszy braterskie prawice,/ +Wtedy ja wÅadzÄ i tron ten objÄ Åem,/ +Który mi z prawa po zmarÅych przypada./ +<begin id="b1188560798082"/><motyw id="m1188560798082">WÅadza</motyw>Trudno jest duszÄ przeniknÄ Ä czÅowieka,/ +Jego zamysÅy i pragnienia, zanim/ +On ich na szerszym nie odsÅoni polu./ +Ja tedy wÅadcÄ, co by, rzÄ dzÄ c miastem,/ +Wnet siÄ najlepszych nie imaÅ zamysÅów/ +I ÅmiaÅo woli swej nie ÅmiaÅ ujawniÄ,/ +Za najgorszego uważaÅbym pana./ +A gdyby wyżej nad dobro publiczne/ +KÅadÅ zysk przyjacióÅ, za nic bym go ważyÅ./ +I nie milczaÅbym, klnÄ siÄ na Jowisza/ +WszechwidzÄ cego, gdybym spostrzegÅ zgubÄ/ +Zamiast zbawienia kroczÄ cÄ ku miastu./ +Nigdy też wroga nie chciaÅbym ojczyzny/ +MieÄ przyjacielem, o tym przeÅwiadczony,/ +Å»e nasze szczÄÅcie w szczÄÅciu miasta leży,/ +I jego dobro przyjacióŠma raiÄ./ +Przez te zasady podnoszÄ to miasto/ +I tym zasadom wierny obwieÅciÅem/ +Ukaz ostatni na Edypa synów./ +Aby dzielnego w walce Eteokla./ +Który w obronie polegÅ tego miasta,/ +W grobie pochowaÄ i uczciÄ ofiarÄ ,/ +Która w kraj zmarÅych za zacnymi idzie;/ +Brata zaÅ jego, Polinika mniemam,/ +Który to bogów i ziemiÄ ojczystÄ / +NaszedÅ z wygnania i ognia pożogÄ / +ZamierzaÅ zniszczyÄ, i swoich rodaków/ +KrwiÄ siÄ napoiÄ, a w pÄta wziÄ Ä drugich,/ +WydaÅem rozkaz, by chowaÄ ni pÅakaÄ/ +Nikt siÄ nie ważyÅ, lecz zostawiÅ ciaÅo/ +Przez psy i ptaki w polu poszarpane./ +Taka ma wola, a nie ÅcierpiÄ nigdy,/ +By źli w nagrodzie wyprzedzili prawych./ +Kto za to miastu temu dobrze życzy,/ +W zgonie i w życiu dozna mej opieki.<end id="e1188560798082"/> +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +Tak wiÄc, Kreonie, raczysz rozporzÄ dzaÄ/ +Ty co do wrogów i przyjacióŠgrodu,/ +A wszelka wÅadza zaprawdÄ ci sÅuży,/ +I nad zmarÅymi, i nami, co żyjem. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>A wiÄc czuwajcie nad mymi rozkazy.</strofa></kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia><strofa>PoleÄ mÅodszemu straż nad tym i pieczÄ.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Przecież tam stojÄ straże w pogotowiu.</strofa></kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia><strofa>Czegóż byÅ tedy od nas jeszcze Å¼Ä daÅ?</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>ByÅcie niesfornym stanÄli oporem.</strofa></kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia><strofa>GÅupi ten, kto by na ÅmierÄ siÄ narażaÅ.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +Tak, ÅmierÄ go czeka! Lecz wielu do zguby/ +PopchnÄÅa Å¼Ä dza i zysku rachuby. +</strofa> +</kwestia> + + +<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> + +<kwestia> +<strofa> +O najjaÅniejszy, nie powiem, że w biegu/ +SpieszÄ c ja tutaj tak siÄ zadyszaÅem,/ +Bom ja raz po raz przystawaÅ po drodze/ +I chciaÅem na zad zawróciÄ z powrotem,/ +A dusza tak mi mówiÅa co chwila:/ +Czemuż to, gÅupi, ty karku nadstawiasz?/ +Czemuż tak lecisz? przecież może inny/ +DonieÅÄ to ksiÄciu; na cóż ty masz skomleÄ?/ +Tak sobie myÅlÄ c, spieszyÅem powolnie,/ +A krótka droga wraz mi siÄ wzdÅużaÅa./ +Na koniec myÅlÄ: niech bÄdzie, co bÄdzie,/ +I stajÄ, ksiÄ Å¼Ä, przed tobÄ i powiem,/ +ChoÄ tak po prawdzie sam nie wiem zbyt wiele./ +A zresztÄ tuszÄ, że nic mnie nie czeka,/ +Chyba, co w górze byÅo mi pisane. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Cóż wiÄc nadmiernÄ przejmuje ciÄ trwogÄ ?</strofa></kwestia> + + +<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> + +<kwestia> +<strofa> +ZacznÄ od siebie, żem nie zrobiÅ tego,/ +Co siÄ zdarzyÅo, anim widziaÅ sprawcy,/ +Å»em wiÄc na żadnÄ nie zarobiÅ karÄ. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +Dzielnie warujesz i waÅujesz sprawÄ,/ +Lecz jasne, że coÅ przynosisz nowego. +</strofa> +</kwestia> + + +<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> + +<kwestia><strofa>Bo to niesporo na plac ze zÅÄ wieÅciÄ .</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Lecz mów już w koÅcu i wynoÅ siÄ potem.</strofa></kwestia> + + +<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> + +<kwestia> +<strofa> +A wiÄc już powiem. Trupa ktoÅ co tylko/ +PogrzebaÅ skrycie i wyniósÅ siÄ chyÅkiem,/ +RzuciÅ garÅÄ ziemi i uczciÅ to ciaÅo. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Co mówisz? Któż byÅ tak bardzo bezczelny?</strofa></kwestia> + + +<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> + +<kwestia> +<strofa> +Tego ja nie wiem, bo żadnego znaku/ +Ani topora, motyki nie byÅo./ +Ziemia wokoÅo byÅa gÅadka, zwarta,/ +Ani w niej stopy, ni żadnej kolei,/ +Lecz, krótko mówiÄ c, sprawca znikÅ bez Åladu./ +Skoro też jeden ze straży rzecz wskazaÅ,/ +Zaraz nam w myÅli, że w tym jakieÅ licho./ +Trup znikÅ, a leżaÅ nie pod grubÄ zaspÄ ,/ +Lecz przyprószony, jak czyniÄ , co winy/ +SiÄ wobec zmarÅych strachajÄ ; i zwierza/ +Lub psów szarpiÄ cych trupy ani Åladu./ +WiÄc zaczÄ Å jeden wyrzekaÄ na drugich,/ +Jeden drugiego winowaÄ, i byÅo/ +Blisko już bójki, bo któż by ich zgodziÅ?/ +W każdym ze straży wietrzyliÅmy sprawcÄ,/ +Lecz tak na oÅlep, bo nikt siÄ nie przyznaÅ./ +I my gotowi: i żary braÄ w rÄce,/ +I w ogieÅ skoczyÄ, i przysiÄ c na bogów,/ +Å»e nie my winni, ani byli w spóÅce/ +Z tym, co obmyÅliÅ tÄ rzecz i wykonaÅ./ +WiÄc koniec koÅcem, gdy dalej tak nie szÅo,/ +Jeden rzekÅ sÅowo, które wszystkim oczy/ +ZaryÅo w ziemiÄ; boÅmy nie wiedzieli,/ +Co na to odrzec, a strach nas zdjÄ Å wielki,/ +Co z tego bÄdzie. RzekÅ wiÄc na ten sposób,/ +Å»e tobie wszystko to donieÅÄ należy./ +I tak stanÄÅo, a mnie nieszczÄsnemu/ +Los kazaÅ zażyÄ tej przyjemnej sÅużby./ +WiÄc po niewoli sobie i wam stajÄ./ +Bo nikt nie lubi zÅych nowin zwiastuna. +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +O panie, mnie już od dawna siÄ roi,/ +Å»e siÄ bez bogów przy tym nie obeszÅo. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +Milcz, jeÅli nie chcesz wzbudziÄ mego gniewu,/ +I prócz staroÅci ukazaÄ gÅupoty./ +Bo brednie pleciesz, mówiÄ c, że bogowie/ +O tego trupa na ziemi siÄ troszczÄ ./ +Czyżby z szacunku, jako dobroczyÅcÄ,/ +Jego pogrzebli, jego, co tu wtargnÄ Å,/ +Aby ÅwiÄ tynie i ofiarne dary/ +ZburzyÄ, spustoszyÄ ich ziemiÄ i prawa?/ +Czyż, wedÅug ciebie, bóstwa czczÄ zbrodniarzy?/ +O nie, przenigdy! Lecz tego tu miasta/ +Ludzie już dawno przeciw mnie szemrajÄ c/ +GÅowÄ wstrzÄ sali i jarzmem ukrycie/ +Przeciw mym rzÄ dom i mojej osobie./ +Wiem ja to dobrze, że za ich pieniÄ dze/ +Straże siÄ tego dopuÅciÅy czynu./ +Bo nie ma gorszej dla ludzi potÄgi,/ +Jak pieniÄ dz: on to i miasta rozburzÄ ,/ +On to wypiera ze zagród i domu,/ +On prawe dusze krzywi i popycha/ +Do szpetnych kroków i nieprawych czynów./ +Zbrodni on wszelkiej ludzkoÅci jest mistrzem/ +I drogowskazem we wszelkiej sromocie./ +A ci, co czyn ten za pieniÄ dz speÅnili,/ +Wreszcie spóźnione wywoÅali kaźnie./ +Bo jeÅli dotÄ d Zeusowi hoÅd skÅadam,/ +Miarkuj to dobrze, a klnÄ siÄ przysiÄgÄ ,/ +JeÅli wy zaraz schwytanego sprawcy/ +Nie dostawicie przed moje oblicze,/ +To jednej Åmierci nie bÄdzie wam dosyÄ,/ +Lecz wprzódy wiszÄ c bÄdziecie zeznawaÄ,/ +ByÅcie w przyszÅoÅci wiedzieli, skÄ d grabiÄ/ +I ciÄ gnÄ Ä zyski, i mieli naukÄ,/ +Å»e nie na wszelki zysk godziÄ należy./ +Bo to jest pewne, że brudne dorobki/ +CzÄÅciej do zguby prowadzÄ , niż szczÄÅcia. +</strofa> +</kwestia> + + +<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> + +<kwestia><strofa>Wolnoż mi mówiÄ? czy pójÅÄ mam w milczeniu?</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Czyż nie wiesz jeszcze, jak gÅos twój mi wstrÄtny?</strofa></kwestia> + + +<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> + +<kwestia><strofa>Uszy ci rani, czy też duszÄ twojÄ ?</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Cóż to? chcesz badaÄ, skÄ d idÄ me gniewy?</strofa></kwestia> + + +<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> + +<kwestia><strofa>Sprawca ci duszÄ, a ja uszy trapiÄ.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Cóż to za urwisz z niego jest wierutny!</strofa></kwestia> + + +<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> + +<kwestia><strofa>A przecież nie ja czyn ten popeÅniÅem.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Ty! --- swojÄ duszÄ frymarczÄ c w dodatku.</strofa></kwestia> + + +<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> + +<kwestia> +<strofa> +O nie!/ +Próżne to myÅli, próżniejsze domysÅy. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +ZmyÅlne twe sÅowa, lecz jeżeli winnych/ +Mi nie stawicie, to wnet wam zaÅwita,/ +Å»e brudne zyski sprowadzajÄ kaźnie. +</strofa> +</kwestia> + + +<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> + +<kwestia> +<strofa> +O, niech go ujmÄ , owszem, lecz cokolwiek/ +Teraz siÄ stanie za dopustem losu;/ +Ty mnie już tutaj nie zobaczysz wiÄcej;/ +Bo już i teraz dziÄkujÄ ja bogom,/ +Å»em wbrew nadziei stÄ d wyszedÅ bez szwanku. +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +SiÅa jest dziwów, lecz nad wszystkie siÄga/ +<wers_wciety typ="2">Dziwy czÅowieka potÄga.</wers_wciety>/ +Bo on prze ÅmiaÅo poza sine morze,/ +<wers_wciety typ="2">Gdy toÅ siÄ wzdyma i kÅÄbi.</wers_wciety>/ +I z roku na rok swym lemieszem porze/ +<wers_wciety typ="2">MatkÄ-ziemicÄ do gÅÄbi.</wers_wciety> +</strofa> + +<strofa> +Lotny ród ptaków i stepu zwierzÄta/ +I dzieci fali usidla on w pÄta,/ +<wers_wciety typ="2">Wszystko rozumem zwyciÄży.</wers_wciety>/ +Dzikiego zwierza z gór ÅciÄ gnie na bÅonie,/ +KrnÄ brny kark tura i grzywiaste konie/ +<wers_wciety typ="2">Ujarzmi w swojej uprzÄży.</wers_wciety> +</strofa> + +<strofa> +WynalazÅ mowÄ i myÅli dal skrzydÅa/ +I życie ujÄ Å w porzÄ dku prawidÅa,/ +Od mroźnych wichrów na deszcze i gromy/ +ZbudowaÅ sobie schroniska i domy,/ +<wers_wciety typ="2">Na wszystko z radÄ on gotów.</wers_wciety>/ +Lecz choÄby ÅmiaÅo patrzaÅ w wiek daleki./ +ChoÄ ma na bóle i cierpienia leki./ +<wers_wciety typ="2">Åmierci nie ujdzie on grotów.</wers_wciety> +</strofa> + +<strofa> +A siÅ potÄgÄ, które w duszy tlejÄ ,/ +Popchnie on zbrodni lub cnoty kolejÄ ;/ +Jeżeli prawa i bogów czeÅÄ wyzna./ +<wers_wciety typ="2">To hoÅd mu odda ojczyzna;</wers_wciety>/ +A bÄdzie jej wrogiem ten, który nie z bogiem/ +<wers_wciety typ="2">Na czeÅÄ i prawoÅÄ siÄ ciska.</wers_wciety>/ +Niechajby on sromu mi nie wniósÅ do domu./ +<wers_wciety typ="2">Nie skalaÅ mego ogniska.</wers_wciety> +</strofa> + +<strofa> +Lecz jakiż widok uderza me oczy?/ +Czyż ja zdoÅaÅbym wbrew prawdzie zaprzeczyÄ,/ +Å»e to dzieweczka idzie Antygona?/ +O ty nieszczÄsna, równie nieszczÄsnego/ +Edypa córo!/ +Cóż-że siÄ staÅo? czy ciÄ na przestÄpstwie/ +Ukazu króla schwytano, i teraz/ +Wskutek tej zbrodni prowadzÄ jak brankÄ? +</strofa> +</kwestia> + + +<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> + +<kwestia> +<strofa> +Oto jest dziewka, co to popeÅniÅa./ +TÄ schwytaliÅmy. Lecz gdzieżeż jest Kreon? +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia><strofa>Wychodzi oto z domu w samÄ porÄ.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Cóż to? jakież tu zeszedÅem zdarzenie?</strofa></kwestia> + + +<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> + +<kwestia> +<strofa> +Niczego, panie, nie trza siÄ odrzekaÄ,/ +Bo myÅl późniejsza kÅam zada zamysÅom;/ +Ja bo dopiero klÄ Åem, że już nigdy/ +Nie stanÄ tutaj po groźbach, coÅ miotaÅ,/ +Ale ta nowa, wielka niespodzianka/ +Nie da siÄ zmierzyÄ z nijakÄ radoÅciÄ ;/ +IdÄ wiec, chociaż tak siÄ zaklinaÅem,/ +WiodÄ c tÄ dziewkÄ, którÄ przychwytano,/ +Gdy grób gÅadziÅa; żaden los tym razem/ +Mnie tu nie przywiódÅ, lecz wÅasne odkrycie./ +SÄ dź jÄ i badaj; jam sobie zasÅużyÅ,/ +Bym z tych opaÅów wydostaÅ siÄ wreszcie. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Jakim sposobem i gdzieżeÅ jÄ schwytaÅ?</strofa></kwestia> + + +<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> + +<kwestia><strofa>Trupa pogrzebiÄ c. W dwóch sÅowach masz wszystko.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Czy pewny jesteÅ tego, co tu gÅosisz?</strofa></kwestia> + + +<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> + +<kwestia> +<strofa> +Na wÅasne oczy przecież jÄ widziaÅem/ +GrzebiÄ cÄ trupa; chyba jasno mówiÄ. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>WiÄc na gorÄ cym zszedÅeÅ jÄ uczynku?</strofa></kwestia> + + +<naglowek_osoba>STRAÅ»NIK</naglowek_osoba> + +<kwestia> +<strofa> +Tak siÄ rzecz miaÅa: kiedyÅmy tam przyszli,/ +Groźbami twymi srodze przepÅoszeni,/ +ZmietliÅmy z trupa ziemiÄ i znów nagie/ +I już nadpsute zostawiwszy ciaÅo/ +Na bliskim wzgórzu siedliÅmy, to baczÄ c,/ +By nam wiatr nie niósÅ wstrÄtnego zaduchu./ +A jeden besztaÅ drugiego sÅowami,/ +By siÄ nie leniÄ i nie zaspaÄ sprawy./ +To trwaÅo chwilÄ; a potem na niebie/ +ZabÅysnÄ Å w Årodku ognisty krÄ g sÅoÅca/ +I grzaÄ poczÄÅo; aż nagle siÄ z ziemi/ +Wicher poderwaÅ i wÅród strasznej trÄ by/ +WyÅ po równinie, drÄ c liÅcie i korÄ/ +Z drzew, i zapeÅniÅ kurzawÄ powietrze;/ +PrzymknÄ wszy oczy, drżeliÅmy od strachu./ +A kiedy wreszcie ten szturm siÄ uciszyÅ,/ +Widzimy dziewkÄ, która tak boleÅnie/ +Jak ptak zawodzi, gdy znajdzie swe gniazdo/ +Obrane z pisklÄ t i opustoszaÅe./ +Tak ona, trupa dojrzawszy nagiego,/ +Zaczyna jÄczeÄ i przekleÅstwa miotaÄ/ +Na tych, co brata obnażyli ciaÅo./ +I wnet przynosi garÅÄ suchego piasku,/ +A potem z wiadra, co dźwiga na gÅowie,/ +Potrójnym pÅynem martwe skrapia zwÅoki<pr><slowo_obce>Potrójnym pÅynem martwe skrapia zwÅoki</slowo_obce> --- Antygona skropiÅa ciaÅo pÅynem zmieszanym z wina, mleka i oliwy.</pr>./ +My wiec rzucimy siÄ na niÄ i dziewkÄ/ +Chwytamy, ona zaÅ nic siÄ nie lÄka./ +Badamy dawne i Åwieże jej winy./ +Ona zaŠżadnej nie zaprzecza zbrodni,/ +Co dla mnie miÅe, lecz i przykre byÅo./ +Bo że z opaÅów sam siÄ wydostaÅem,/ +ByÅo mi sÅodkie, lecz żem w nie pogrÄ Å¼yÅ/ +Znajomych, przykre. Chociaż ostatecznie,/ +Skórom ja caÅy, resztÄ lekko ważÄ. +</strofa> +</kwestia> + + +<naglowek_osoba><begin id="b1188561690295"/><motyw id="m1188561690295">Konflikt</motyw>KREON</naglowek_osoba> + +<kwestia> +<strofa> +Lecz ty, co gÅowÄ tak skÅaniasz ku ziemi,/ +Mów, czy to prawda, czy donos kÅamliwy? +</strofa> +</kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>Jam to speÅniÅa, zaprzeczyÄ nie myÅlÄ.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +Ty wiÄc siÄ wynoÅ, gdzie ci siÄ podoba,/ +Wolny od winy i ciÄżkich podejrzeÅ./ +A ty odpowiedz mi teraz w dwóch sÅowach,/ +CzyżeÅ wiedziaÅa o moim zakazie? +</strofa> +</kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>WiedziaÅam dobrze. Wszakże nie byÅ tajny.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>I ÅmiaÅaÅ wbrew tym stanowieniom dziaÅaÄ?</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +Przecież nie Jowisz obwieÅciÅ to prawo,/ +Ni wola Diki<pr>Dike, bogini sprawiedliwoÅci, córka Jowisza, siedzÄ ca na tronie obok niego. Inne wyobrażenie wyznaczaÅo jej tron w podziemiach, tam, gdzie siÄ na ludzi wymierza sprawiedliwoÅÄ.</pr> podziemnych bóstw siostry,/ +Taka ród ludzki zwiÄ zaÅa ustawÄ ./ +A nie mniemaÅam, by ukaz twój ostry/ +Tyle miaÅ wagi i siÅy w czÅowieku,/ +Aby mógÅ ÅamaÄ ÅwiÄte prawa boże,/ +Które sÄ wieczne i trwajÄ od wieku,/ +Å»e ich poczÄ tku nikt zbadaÄ nie może./ +Ja wiÄc nie chciaÅam ulÄknÄ Ä siÄ czÅeka/ +I za zÅamanie praw tych kiedyÅ bogom/ +ZdawaÄ tam sprawÄ. Bom Åmierci ja pewna/ +Nawet bez twego ukazu; a jeÅli/ +WczeÅniej ÅmierÄ przyjdzie, za zysk to poczytam./ +Bo komu przyszÅo żyÄ wÅród nieszczÄÅÄ tylu,/ +Jakże by w Åmierci zysku nie dopatrzyÅ?/ +Tak wiÄc nie mierzi mnie Åmierci ta groźba,/ +Lecz mierziÅoby mnie braterskie ciaÅo/ +Niepogrzebane. Tak, ÅmierÄ mnie nie straszy,/ +A jeÅli gÅupio dziaÅaÄ ci siÄ zdajÄ,/ +Niech mój nierozum za nierozum staje. +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +KrnÄ brne po krnÄ brnym dziewczyna ma ojcu/ +ObejÅcie, grozie nie ustÄ pi Åatwo. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +Lecz wiedz, że czÄsto zamysÅy zbyÅ harde/ +SpadajÄ nisko, że czÄsto siÄ widzi./ +Jako żelazo najtwardsze wÅród ognia/ +Gnie siÄ i mimo swej twardoÅci pÄka;/ +Wiem też, że drobne wÄdzidÅo rumaki/ +Dzikie poskramia. Bo tym nieprzystojna/ +WyniosÅoÅÄ, którzy u innych w niewoli./ +Dziewka ta jednÄ splamiÅa siÄ winÄ / +Rozkazy dane obchodzÄ c i ÅamiÄ c,/ +Teraz przed drugim nie sroma siÄ gwaÅtem,/ +Z czynu siÄ cheÅpi i nadto urÄ ga./ +Lecz nie ja mÄżem, lecz ona by byÅa,/ +Gdyby postÄpek ten jej uszedÅ pÅazem./ +Ale czy z siostry, czy choÄby i bliższej/ +KrwiÄ mi istoty ona pochodziÅa,/ +Ona i siostra nie ujdÄ przenigdy/ +Åmierci straszliwej; bo i siostrÄ skarcÄ,/ +Å»e jej spólniczkÄ byÅa w tym pogrzebie./ +WoÅaÄ mi tamtÄ , którÄ co dopiero/ +WidziaÅem w domu zmieszanÄ , szalonÄ ./ +Tak duch zazwyczaj tych zdradza, co tajnie/ +SiÄ dopuÅcili jakiegoÅ wystÄpku./ +WstrÄt zaÅ ja czujÄ przeciw tym zÅoczyÅcom,/ +Którzy swe grzechy chcÄ polem upiÄkszaÄ. +</strofa> +</kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>Chceszli co wiÄcej, czyli ÅmierÄ mi zadaÄ?</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>O! nie! w tym jednym zawiera siÄ wszystko.</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +WiÄc na cóż zwlekaÄ?. Jako twoje sÅowa/ +MierÅ¼Ä , i oby zawsze mnie mierziÅy,/ +Tak wstrÄtne tobie wszelkie me postÄpki./ +A jednak, skÄ d bym piÄkniejszÄ ja sÅawÄ/ +UszczknÄÅa, jako z brata pogrzebania./ +I ci tu wszyscy rzecz by pochwalili,/ +Gdyby im trwoga nie zawarÅa mowy./ +Ale tyranów los ze wszech miar bÅogi,/ +Wolno im czyniÄ, co zechcÄ , i mówiÄ. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Sama tak sÄ dzisz poÅród Kadinejczyków.</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>I ci tak sÄ dzÄ , lecz stulajÄ wargi.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Nie wstyd ci, jeÅli od tych siÄ wyróżniasz?</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>CzciÄ swe rodzeÅstwo nie przynosi wstydu.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Nic byÅ ci bratem ten, co polegÅ drugi?</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>Z jednego ojca i matki zrodzonym.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Czemuż wiÄc niesiesz czeÅÄ, co jemu wstrÄtna?</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>ZmarÅy nie rzuci mi skargi tej w oczy.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>JeÅli na równi z nim uczcisz zÅoczyÅcÄ?</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>Nie jak niewolnik, lecz jak brat on zginÄ Å.</strofa></kwestia> + + +<naglowek_osoba>KKEON</naglowek_osoba> + +<kwestia><strofa>On, co pustoszyÅ kraj, gdy tamten broniÅ?</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>A jednak Hades poÅ¼Ä da praw równych.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Dzielnemu równoÅÄ ze zÅym nie przystoi.</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>Któż wie, czy takie wÅród zmarÅych sÄ prawa?</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Wróg i po Åmierci nie stanie siÄ miÅym.</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa><wers_cd>WspóÅkochaÄ przyszÅam, nie wspóÅnienawidziÄ.</wers_cd></strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +JeÅli chcesz kochaÄ, kochaj ich w Hadesie,/ +U mnie nie bÄdzie przewodziÄ kobieta.<end id="e1188561690295"/> +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +Lecz otóż wiodÄ IsmenÄ, o panie,/ +WidaÄ jej boleÅÄ i sÅychaÄ jej Åkanie./ +A jakaÅ chmura przesÅania jej oczy/ +<wers_wciety typ="2">I piÄknÄ dziewki twarz mroczy.</wers_wciety> +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +O ty, co w domu przypiÄÅaÅ siÄ do mnie/ +Jak wÄ Å¼ podstÄpnie, żem wiedzieÄ wrÄcz nie mógÅ./ +Iż na mÄ zgubÄ dwa wyrodki żywiÄ,/ +Nuże, mów teraz, czyÅ byÅa wspólniczkÄ / +W tym pogrzebaniu, lub wyprzyj siÄ winy. +</strofa> +</kwestia> + + +<begin id="b1188561970096"/><motyw id="m1188561970096">Siostra</motyw><naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia> +<strofa> +Winna ja jestem, jak stwierdzi to siostra,/ +I biorÄ na siÄ tej zbrodni poÅowÄ. +</strofa> +</kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +Lecz sprawiedliwoÅÄ przeczy twym twierdzeniom;/ +AniÅ ty chciaÅa, ni jaÄ przypuÅciÅam. +</strofa> +</kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia> +<strofa> +Jednak w niedoli twojej nie omieszkam/ +WziÄ Ä na siÄ czÄ stkÄ twych cierpieÅ i kaźni. +</strofa> +</kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +Hades i zmarli wiedzÄ , kto to zdziaÅaÅ./ +<begin id="b1188561798583"/><motyw id="m1188561798583">MiÅoÅÄ</motyw>SÅowami ÅwiadczyÄ miÅoÅÄ --- to nie miÅoÅÄ.<end id="e1188561798583"/> +</strofa> +</kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia> +<strofa> +O, nie zabraniaj mi, siostro, choÄ w Åmierci/ +Z tobÄ siÄ zÅÄ czyÄ i uczciÄ zmarÅego. +</strofa> +</kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +Nie chcÄ twej Åmierci, a nie zwij twym dzieÅem/ +CoÅ nie sprawiÅa; mój zgon starczy bratu. +</strofa> +</kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia><strofa>Lecz jakiż żywot mnie czeka bez ciebie?</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>Pytaj Kreona! ZwykÅaÅ naÅ ty baczyÄ.</strofa></kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia><strofa>Po cóż mnie drÄczysz bez żadnej potrzeby?</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>CierpiÄ ja, że mi ÅmiaÄ przyszÅo siÄ z ciebie.</strofa></kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia><strofa>W czym bym choÄ teraz ci przydaÄ siÄ mogÅa?</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>MyÅl o ratunku, ja go nie zawiszczÄ.</strofa></kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia><strofa>O, ja nieszczÄsna! wiÄc chcesz mnie porzuciÄ?</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>WybraÅaŠżycie --- ja życia ofiarÄ.</strofa></kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia><strofa>SkÄ d wiesz, co na dnie sÅów moich siÄ kryje?</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia><strofa>W sÅowach ty rady, ja szukaÅam w czynie.</strofa></kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia><strofa>A jednak wina ta sama nas ÅÄ czy.</strofa></kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +BÄ dź zdrowa, żyjesz, --- a moja już dusza/ +W krainie Åmierci... zmarÅym ÅwiadczyÄ może. +</strofa> +</kwestia><end id="e1188561970096"/> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +Z dziewczÄ t siÄ jednej teraz zwichnÄ Å rozum,/ +Druga od mÅodu wciÄ Å¼ byÅa szalona. +</strofa> +</kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia> +<strofa> +O wÅadco, w ludziach zgnÄbionych nieszczÄÅciem/ +UmysÅ siÄ chwieje pod ciosów obuchem. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>W tobie zaiste, co ÅÄ czysz siÄ z zbrodniÄ ,</strofa></kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia><strofa>Bo cóż mi życie warte bez mej siostry?</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Jej nie nazywaj --- bo ona już zmarÅa.</strofa></kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia><strofa>WiÄc narzeczonÄ chcesz zabiÄ ty syna?</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>SÄ inne Åany dla jego posiewu.</strofa></kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia><strofa>Lecz on byÅ dziwnie do niej dostrojony.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>ZÅymi dla synów niewiasty siÄ brzydzÄ.</strofa></kwestia> + + +<naglowek_osoba>ISMENA</naglowek_osoba> + +<kwestia><strofa>Drogi Hajmonie, jak ojciec ciÄ krzywdzi!</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Twój gÅos i swadźby zbyt mierÅ¼Ä mnie twoje.</strofa></kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia><strofa>A wiÄc chcesz wydrzeÄ kochankÄ synowi?</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Hades posÅaniem bÄdzie tej miÅoÅci.</strofa></kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia><strofa>Taka wiÄc wola, że ta umrzeÄ musi?</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +Twoja i moja; lecz dosyÄ tych zwlekaÅ;/ +Wiedźcie je, sÅugi, w dom, bo odtÄ d majÄ / +Å»yÄ jak niewiasty, nie wedÅug swej woli./ +ToÄ i zbyt ÅmiaÅe ulÄknÄ siÄ serca,/ +Gdy widmo Åmierci zaglÄ dnie im w oczy. +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +SzczÄÅliwy, kogo w życiu klÄski nie dosiÄgÅy,/ +Bo skoro bóg potrzÄ Ånie domowymi wÄgÅy,/ +<wers_wciety typ="2">Z jednego gromu caÅy szereg nieci,</wers_wciety>/ +<wers_wciety typ="2">Po ojcach godzi i w dzieci.</wers_wciety>/ +Tak jako fale na morzu siÄ piÄtrzÄ ,/ +Gdy wicher tracki<pr><slowo_obce>wicher tracki</slowo_obce> --- morze na wybrzeżach Tracji uchodziÅo za bardzo burzliwe.</pr> do gÅÄbiny wpadnie/ +I ryje iÅy drzemiÄ ce gdzieÅ na dnie,/ +Aż brzeżne skaÅy od burzy zajÄczÄ : --- +</strofa> + +<strofa> +Tak już od wieków w Labdakidów domy/ +Po dawnych gromach nowe godzÄ gromy,/ +<wers_wciety typ="2">Bóle minionych pokoleÅ</wers_wciety>/ +<wers_wciety typ="2">Nie niosÄ ulg i wyzwoleÅ.</wers_wciety>/ +I ledwie sÅoÅce promienie rozpostrze/ +Ponad ostatniÄ odnogÄ rodzeÅstwa,/ +A już bóstw krwawych podcina jÄ ostrze,/ +ObÅÄd i szaÅu przekleÅstwa. +</strofa> + +<strofa> +O Zeusie, któż siÄ z twÄ potÄgÄ zmierzy?/ +Ciebie ni czasu odwieczne miesiÄ ce,/ +Ni sen nie zmoże wÅród swoich obierzy./ +Ty, co Olimpu szczyty jaÅniejÄ ce/ +<wers_wciety typ="2">Przez wieki dzierżysz promienny,</wers_wciety>/ +<wers_wciety typ="2">Równy w swej sile, niezmienny.</wers_wciety>/ +A wieczne prawo gniecie ziemi syny,/ +Å»e nikt żywota nie przejdzie bez winy. +</strofa> + +<strofa> +Nadzieja zÅudna, bo jednym da skrzydÅa,/ +<wers_wciety typ="2">Drugich omota w swe sidÅa;</wers_wciety>/ +Å»Ä dz lotnych wzbudzi w nich ognie./ +<wers_wciety typ="2">Aż życie pióra te pognie.</wers_wciety>/ +A wiecznÄ prawda, że w przystÄpie dumy/ +MieniÄ dobrymi ci nieprawe czyny./ +Którym bóg zmieszaÅ rozumy!/ +Nikt siÄ na ziemi nie ustrzeże winy./ +</strofa> + +<strofa> +Lecz otóż Hajmon, z twojego potomstwa/ +Wiekiem najmÅodszy; widocznie boleje/ +Nad ciÄżkim losem swej umiÅowanej/ +<wers_wciety typ="2">I po swym szczÄÅciu Åzy leje.</wers_wciety> +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +Wkrótce przejrzymy jaÅniej od wróżbitów./ +O synu! czyż ty przybywasz tu gniewny/ +Wskutek wyroku na twÄ narzeczonÄ ,/ +Czy w każdej doli zachowasz mnie miÅoÅÄ? +</strofa> +</kwestia> + + +<naglowek_osoba>HAJMON</naglowek_osoba> + +<kwestia> +<strofa> +Twoim ja, ojcze! Skoro mÄ drze radzisz,/ +IdÄ ja chÄtnie za twoim przewodem;/ +I żaden zwiÄ zek nie bÄdzie mi droższy/ +Ponad wskazówki z ust twoich rozumnych. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +O! tak, mój synu, byÄ zawsze powinno,/ +Zdanie ojcowskie ponad wszystkim ważyÄ./ +Przecież dlatego bÅagajÄ ojcowie,/ +Aby powolnych synów dom im chowaÅ,/ +Którzy by krzywdy od wrogów pomÅcili,/ +A równo z ojcem uczcili przyjacióÅ./ +Kto by zaÅ pÅodziÅ potomstwo nic warte,/ +Cóż by on chowaÅ, jak troski dla siebie,/ +A wobec wrogów wstyd i poÅmiewisko?/ +Synu, nie folguj wiec Å¼Ä dzy, nie porzuÄ/ +Dla marnej dziewki rozsÄ dku, wiedz dobrze,/ +Å»e nie ma bardziej mroźnego uÅcisku,/ +Jak w zÅej kobiety ramionach; bo trudno/ +O wiÄkszÄ klÄskÄ, jako zÅy przyjaciel./ +Przeto ze wstrÄtem ty porzuÄ tÄ dziewkÄ,/ +Aby w Hadesie innemu siÄ daÅa./ +Bo skorom poznaÅ, że z caÅego miasta/ +Ona jedyna, oparÅa siÄ prawu,/ +Nie myÅlÄ stanÄ Ä wszem wobec jak kÅamca,/ +Ale jÄ stracÄ; rodzinnego Zeusa<pr><slowo_obce>Zeus rodzinny</slowo_obce> --- Zeus opiekuÅczy nad rodzinÄ .</pr>/ +Niechby bÅagaÅa; <begin id="b1188562576807"/><motyw id="m1188562576807">Dom, PaÅstwo</motyw>jeÅli wÅród rodziny/ +Nie bÄdzie Åadu, jak obcych poskromiÄ?/ +Bo kto w swym domu potrafi siÄ rzÄ dziÄ,/ +Ten sterem paÅstwa pokieruje dobrze;/ +Kto zaÅ zuchwale przeciw prawu dziaÅa/ +I tym, co rzÄ dzÄ , narzucaÄ chce wolÄ,/ +Ten nie doczeka siÄ mego uznania./ +WybraÅcom ludu posÅusznym byÄ trzeba/ +W dobrych i sÅusznych, nawet w innych sprawach./ +Takiego mÄża rzÄ dom bym zaufaÅ,/ +Po takim sÅużby wyglÄ daÅ ochotnej,/ +Taki by w starciu oszczepów i w walce/ +WytrwaÅ na miejscu jak dzielny towarzysz./ +Nie ma zaÅ wiÄkszej klÄski od nierzÄ du,/ +On gubi miasta, on domy rozburza,/ +On wÅród szeregów roznieca ucieczkÄ./ +ZaÅ poÅród mÄżów powolnych rozkazom/ +Za życia puklerz stanie posÅuszeÅstwo./ +Tak wiÄc wypada strzec prawa i wÅadzy/ +I nie ulegaÄ niewiast samowoli./ +Jeżeli upaÅÄ, to z rÄki paÅÄ mÄskiej,/ +Bo haÅba doznaÄ od niewiasty klÄski. +</strofa> +</kwestia><end id="e1188562576807"/> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +Nam, jeÅli staroÅÄ rozumu nie tÅumi,/ +Zdajesz siÄ mówiÄ o tym bardzo trafnie. +</strofa> +</kwestia> + + +<naglowek_osoba>HAJMON</naglowek_osoba> + +<kwestia> +<strofa> +Ojcze, najwyższym darem Åaski bogów/ +Jest niewÄ tpliwie u czÅowieka rozum./ +A ja sÅusznoÅci twoich sÅów zaprzeczyÄ/ +Ani bym umiaÅ, ani chciaÅbym zdoÅaÄ./ +Ale sÄ d zdrowy mógÅbym mieÄ też inny./ +Mam ja tÄ wyższoÅÄ nad tobÄ , że mogÄ/ +PoznaÄ, co ludzie mówiÄ , czyniÄ , ganiÄ ,/ +Bo na twój widok zdejmuje ich trwoga,/ +I sÅowo, ciebie raÅ¼Ä ce, zamiera./ +A wiÄc cichaczem przyszÅo mi wysÅuchaÄ,/ +Jak miasto nad tÄ siÄ Å¼ali dziewicÄ ,/ +Å»e ze wszech niewiast najmniej ona winna,/ +Po najzacniejszym czynie marnie koÅczy./ +Czyż bo ta, co w swym nie przeniosÅa sercu,/ +By brat jej leżaÅ martwy bez pogrzebu,/ +Psom na pożarcie i ptactwu dzikiemu,/ +Raczej nagrody nie godna jest zÅotej?/ +Takie siÄ gÅosy odzywajÄ z cicha./ +Ja zaÅ, o ojcze, niczego nie pragnÄ,/ +Jak by siÄ tobie dobrze powodziÅo./ +Bo jestli wiÄkszy skarb nad dobre imiÄ/ +Ojca dla dzieci, lub dzieci dla ojca?/ +Nie żyw wiÄc tego, ojcze, przeÅwiadczenia,/ +Å»e tylko twoje coÅ warte jest zdanie;/ +Bo kto jedynie sam sobie zawierzy,/ +Na swojej mowie polega i duszy,/ +Gdy go odsÅoniÄ , pustym siÄ okaże./ +ChoÄby byÅ mÄ dry, przystoi mÄżowi/ +CiÄ gle siÄ uczyÄ, a niezbyt upieraÄ./ +Widzisz przy rwÄ cych strumieniach, jak drzewo,/ +Które siÄ nagnie, zachowa konary,/ +A zbyt oporne z korzeniami runie./ +Także i żeglarz, który zbyt naciÄ gnie/ +Å»agle i folgi nie daje, przewróci/ +Åódź i osiÄ dzie bez Åawic na desce./ +UstÄ p ty przeto i zaniechaj gniewu,/ +Bo jeÅli wolno sÄ dziÄ mnie mÅodszemu,/ +Mniemam, że taki czÅowiek najprzedniejszy,/ +Który opÅywa w rozum z przyrodzenia;/ +JeÅli tak nie jest --- a i to siÄ zdarzy, ---/ +Niechaj rad dobrych zbyt lekko nie waży. +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +O panie, sÅuchaj, jeÅli w porÄ mówi,/ +A ty znów ojca; obaj mÄ drze prawiÄ . +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +A wiÄc w mym wieku mam mÄ droÅci szukaÄ/ +I braÄ nauki u tego mÅokosa? +</strofa> +</kwestia> + + +<naglowek_osoba>HAJMON</naglowek_osoba> + +<kwestia> +<strofa> +Nie w nieprawoÅci; a jeÅli ja mÅody,/ +To na rzecz raczej, niż wiek, baczyÄ trzeba. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Na rzecz, niesfornym która czeÅÄ oddaje?</strofa></kwestia> + + +<naglowek_osoba>HAJMON</naglowek_osoba> + +<kwestia><strofa>Ni sÅowem ÅmiaÅbym czeÅÄ takÄ zalecaÄ.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>A czyż nie w takie popadÅa ta bÅÄdy?</strofa></kwestia> + + +<naglowek_osoba>HAJMON</naglowek_osoba> + +<kwestia><strofa>Przeczy gÅos ludu, co mieszka w Teb grodzie.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>WiÄc lud mi wskaże, co ja mam zarzÄ dzaÄ?</strofa></kwestia> + + +<naglowek_osoba>HAJMON</naglowek_osoba> + +<kwestia><strofa>Niemal jak mÅodzian porywczy przemawiasz.</strofa></kwestia> + + +<begin id="b1188562762586"/><motyw id="m1188562762586">PaÅstwo, WÅadza</motyw><naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Sobie czy innym gwoli ja tu rzÄ dzÄ?</strofa></kwestia> + + +<naglowek_osoba>HAJMON</naglowek_osoba> + +<kwestia><strofa>Marne to paÅstwo, co li panu sÅuży.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Czyż nie do wÅadcy wiÄc paÅstwo należy?</strofa></kwestia> + + +<naglowek_osoba>HAJMON</naglowek_osoba> + +<kwestia><strofa>PiÄknie byÅ wtedy rzÄ dziÅ... na pustyni.</strofa></kwestia><end id="e1188562762586"/> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Ten, jak siÄ zdaje, z tamtÄ dziewkÄ trzyma.</strofa></kwestia> + + +<naglowek_osoba>HAJMON</naglowek_osoba> + +<kwestia><strofa>JeÅli ty dziewkÄ ; o ciebie siÄ troskam.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Z ojcem siÄ swarzÄ c, o przewrotny synu?</strofa></kwestia> + + +<naglowek_osoba>HAJMON</naglowek_osoba> + +<kwestia><strofa>Bo widzÄ, że ty z drogi zbaczasz prawej.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>BÅÄ dzÄż ja strzegÄ c godnoÅci mej wÅadzy?</strofa></kwestia> + + +<naglowek_osoba>HAJMON</naglowek_osoba> + +<kwestia><strofa>Nie strzeżesz --- wÅadzÄ pomiatajÄ c bogów.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>O niski duchu, na sÅużbie kobiety!</strofa></kwestia> + + +<naglowek_osoba>HAJMON</naglowek_osoba> + +<kwestia><strofa>Bo w sÅużbie zÅego nie znajdziesz minie nigdy.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>CaÅa twa mowa jej sprawy ma broniÄ.</strofa></kwestia> + + +<naglowek_osoba>HAJMON</naglowek_osoba> + +<kwestia><strofa>Twej sprawy, mojej i podziemnych bogów.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Nigdy już żywcem ty jej nie poÅlubisz.</strofa></kwestia> + + +<naglowek_osoba>HAJMON</naglowek_osoba> + +<kwestia><strofa>Zginie --- to ÅmierciÄ sprowadzi zgon inny.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>A wiÄc już groźbÄ Åmiesz we mnie ty godziÄ?</strofa></kwestia> + + +<naglowek_osoba>HAJMON</naglowek_osoba> + +<kwestia><strofa>Cóż warta groźba, gdzie puste zamysÅy?</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Wnet pożaÅujesz twych nauk, mÅokosie!</strofa></kwestia> + + +<naglowek_osoba>HAJMON</naglowek_osoba> + +<kwestia><strofa>Nie byÅbyÅ ojcem, rzekÅbym, żeÅ niemÄ dry.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Niewiast sÅużalcze, przestaÅ siÄ uprzykrzaÄ!</strofa></kwestia> + + +<naglowek_osoba>HAJMON</naglowek_osoba> + +<kwestia><strofa>Chcesz wiÄc ty mówiÄ, a drugich nie sÅuchaÄ?</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +Doprawdy? Ale, na Olimp, wiedz o tym,/ +Å»e ciÄ twe drwiny o zgubÄ przyprawiÄ ./ +Wiedźcie tu dziewkÄ; niechajże wyrodna/ +W oczach kochanka tu ginie natychmiast. +</strofa> +</kwestia> + + +<naglowek_osoba>HAJMON</naglowek_osoba> + +<kwestia> +<strofa> +Nie umrze ona przy mnie! nie marz o tym./ +Nie ujrzÄ tego! raczej ty nie ujrzysz/ +WiÄcej mojego oblicza, jeżeli/ +W szale na bliskich porywaÄ siÄ myÅlisz. +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +Uniesion gniewem wypadÅ on, o wÅadco./ +A w mÅodej gÅowie rozpacz zÅym doradcÄ . +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +Niech myÅli, czyny knuje on zuchwaÅe/ +Ale tych dziewek nie wyrwie on Åmierci, +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia><strofa>Jak to? czyż obie ty zgÅadziÄ zamyÅlasz?</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Niewinna ujdzie: sÅusznie mnie strofujesz.</strofa></kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia><strofa>A jakiż tamtej gotujesz ty koniec?</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +GdzieÅ na bezludnym zamknÄ jÄ pustkowiu./ +W skalistym lochu zostawiÄ Å¼yjÄ cÄ ,/ +Strawy przydajÄ c jej tyle, by kaźniÄ/ +PozbawiÄ grozy i klÄ twy nie ÅciÄ gnÄ Ä,/ +A tam jej Hades, którego jedynie/ +Z bogów uwielbia, może da zbawienie, ---/ +Lub pozna wreszcie, jeÅli marnie zginie,/ +Å»e próżnÄ sÅużbÄ czciÄ Hadesu cienie. +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +MiÅoÅci, któż siÄ wyrwie z twych obierzy,/ +MiÅoÅci, która runiesz na ofiary,/ +W gÅadkich dziew licach gdy rozniecisz czary./ +Kroczysz po morzu i wÅród chat pasterzy,/ +Ni bóg nie ujdzie przed twoim nawaÅem,/ +Ani Åmiertelny. Kim wÅadasz, wre szaÅem. +</strofa> + +<strofa> +Za twym podmuchem, do winy/ +Zboczy i prawy wraz czÅowiek;/ +Spory ty szerzysz wÅród jednej rodziny./ +Urok wystrzela zwyciÄsko spod powiek/ +Dziewicy, siÄgnie i praw majestatu/ +Moc Afrodyty, co przewodzi Åwiatu. +</strofa> + +<strofa> +A i ja nawet, chociaż wiernie sÅużÄ,/ +Prawie siÄ w duszy na ukazy burzÄ,/ +<wers_wciety typ="2">A boleÅÄ serce mi rani,</wers_wciety>/ +Bo straszny widok uderza me oczy:/ +Do wszechchÅonÄ cej Antygona kroczy/ +<wers_wciety typ="2">Ciemnej Hadesu przystani.</wers_wciety> +</strofa> +</kwestia> + + +<begin id="b1188563217251"/><motyw id="m1188563217251">MiÅoÅÄ, Rozpacz, ÅmierÄ</motyw><naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +Patrzcie, o patrzcie, wy ziemi tej dzieci,/ +Na mnie, kroczÄ cÄ w smutne Åmierci cienie,/ +OglÄ dajÄ cÄ ostatnie promienie/ +SÅoÅca, co nigdy już mi nie zaÅwieci,/ +Bo mnie Hadesa dziÅ rÄka Åmiertelna/ +Do Acherontu<pr>Acheront --- rzeka Tartaru.</pr> bladych wiedzie wÅoÅci./ +<wers_wciety typ="2">Ani zaznaÅam miÅoÅci,</wers_wciety>/ +Ani mi zabrzmi żadna pieÅÅ weselna;/ +Ale na zimne Acherontu Åoże/ +<wers_wciety typ="2">CiaÅo nieszczÄsne me zÅożÄ.</wers_wciety> +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba><uwaga>Czy to przypadkiem nie kwestia Przewodnika Chóru? Tak podejrzewam, trzeba by porównaÄ z innnymi wydaniami. DG</uwaga> + +<kwestia> +<strofa> +PieÅni ty godna, i w chwaÅy rozkwicie/ +W kraj Åmierci niesiesz twe życie./ +Ani ciÄ chorób przygnÄbiÅo brzemiÄ,/ +Ni miecza ostrze zwaliÅo na ziemiÄ,/ +Lecz wÅasnowolna, nie dobiegÅszy kresu,/ +<wers_wciety typ="2">Å»ywa w kraj stÄ pasz Hadesu.</wers_wciety> +</strofa> +</kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +SÅyszaÅam niegdyÅ o frygijskiej Niobie,/ +Córce Tantala, i jej strasznym zgonie./ +Å»e skamieniaÅa w swej niemej żaÅobie<pr>Niobe, która miaÅa szeÅciu synów i szeÅÄ córek, urÄ gaÅa Latonie, która miaÅa tylko Apollina i ArtemidÄ. Gniew tych bogów zabiÅ jej dzieci, a ona skamieniaÅa z boleÅci.</pr>/ +I odtÄ d ciÄ gle we Åzach bólu tonie./ +<wers_wciety typ="2">SkaÅa owiÅa jÄ jak bujne bluszcze.</wers_wciety>/ +A na jej szczytach Ånieg miecie, deszcz pluszcze;/ +<wers_wciety typ="2">Rozpaczy Åkaniem zroszone jej Åono, ---</wers_wciety>/ +Mnie też kamiennÄ poÅciel przeznaczono. +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +Lecz ona przecież z krwi bogów jest rodem,/ +My Åmiertelnego pokolenia pÅodem./ +HoÅd jednak temu, kto choÄ w Åmierci progu/ +<wers_wciety typ="2">Dorówna bogu.</wers_wciety> +</strofa> +</kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +UrÄ gasz biednej. Czemuż obelżywÄ / +MowÄ mnie ranisz, pókim jeszcze żywÄ ?/ +Miasto i mÄże, dzierÅ¼Ä cy te grody./ +Wzywam was, zwróÄcie litosne swe oczy,/ +I wy, Teb gaje i dirkejskie wody,/ +Na mnie, co idÄ ku ciemnej pomroczy,/ +Nie opÅakana przez przyjacióŠżale,/ +Do niezwykÅego grobowca gdzieÅ w skale./ +<wers_wciety typ="2">O, ja nieszczÄsna!</wers_wciety>/ +Anim ja zmarÅa, ani też przy życiu,/ +ÅmierÄ mnie już trzyma w swym mroźnym spowiciu. +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +W nadmiarze pychy zuchwaÅej/ +<wers_wciety typ="2">Z tronem siÄ Diki twe myÅli i mowy</wers_wciety>/ +ZderzyÅy w locie, zÅamaÅy./ +<wers_wciety typ="2">ZÅy duch ciÄ Åciga rodowy.</wers_wciety> +</strofa> +</kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +Mowa ta gÅÄbiÄ mego serca targa;/ +DotknÄ ÅeÅ ojca ty sromu,/ +I w sÅowach twoich rozbrzmiaÅa znów skarga/ +<wers_wciety typ="2">Nad nieszczÄÅciami Labdakidów domu.</wers_wciety>/ +Straszna ja pomnÄ ÅożnicÄ,/ +W której syn z matkÄ zdrożne Åluby wiÄ Å¼e./ +<wers_wciety typ="2">NieszczÄÅni moi rodzice!</wers_wciety>/ +KlÄ twÄ brzemienna dziÅ do was podÄ Å¼Ä,/ +DziewiczoÅÄ niosÄ c wam serca./ +O drogi bracie, zÅowrogie twe Åluby<pr><slowo_obce>zÅowrogie twe Åluby</slowo_obce> --- Åluby Polinika z córkÄ Adrastosa, które uÅatwiÅy wyprawÄ Siedmiu na Teby.</pr>/ +ByÅy poczÄ tkiem pogromu i zguby;/ +TyÅ --- choÄ zmarÅy --- mój morderca. +</strofa> +</kwestia> + + +<naglowek_osoba>CHOR</naglowek_osoba> + +<kwestia> +<strofa> +ZmarÅych czciÄ --- czcigodny czyn,/ +<wers_wciety typ="2">Ale godny kaźni bÅÄ d</wers_wciety>/ +<wers_wciety typ="2">ÅamaÄ prawo, waliÄ rzÄ d.</wers_wciety>/ +<wers_wciety typ="2">TyÅ zginÄÅa z wÅasnych win.</wers_wciety> +</strofa> +</kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +Bez Åez, przyjacióÅ, weselnego pienia/ +KroczÄ już, biedna, ku Åmiertelnej toni,/ +Wnet już nie ujrzÄ ni sÅoÅca promienia,/ +NikÅ Åzy nad mojÄ dolÄ nie uroni. +</strofa> +</kwestia><end id="e1188563217251"/> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +Czyżby kto ustaÅ w przedzgonnych tych skargach/ +Gdyby mu dano siÄ Å¼aliÄ bez koÅca?/ +Bierzcie stÄ d dziewkÄ i w ciemnym jÄ grobie/ +Zawrzyjcie zaraz, jak już nakazaÅem./ +Tam jÄ zostawcie samotnÄ , by zmarÅa,/ +Albo też żywa pÄdziÅa dni marne;/ +Tak wobec dziewki zostaniem bez winy,/ +A nie Åcierpimy, aby wÅród nas żyÅa. +</strofa> +</kwestia> + + +<begin id="b1188563989733"/><motyw id="m1188563989733">MiÅoÅÄ, Rozpacz, ÅmierÄ</motyw><naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +Grobie, ty mojej Åożnico miÅoÅci,/ +Mieszkanie wieczne, ciemnico sklepiona!/ +IdÄ do moich, których tylu goÅci/ +W pozgonnych domach boska Persefona<pr>Persefona --- maÅżonka Iladesa, pana podziemi.</pr>./ +Za wami idÄ ja, co w życia wioÅnie +ZginÄÅam, prawie nie zaznawszy Åwiata./ +A tuszÄ, że mnie tam przyjmÄ radoÅnie,/ +Ty, ojcze, matko, i miÅa dÅoÅ brata,/ +Bom tu z miÅosnÄ sÅużbÄ wasze ciaÅa/ +WÅasnÄ obmyÅa, namaÅciÅa rÄkÄ ;/ +Å»em bratnie zwÅoki uczciwie grzebaÅa,/ +<wers_wciety typ="2">TakÄ mnie darzÄ podziÄkÄ !</wers_wciety>/ +Mam u szlachetnych ludzi czeÅÄ i chwaÅÄ,/ +Lecz potÄpienie ze strony Kreona,/ +Bo on me czyny uznaÅ za zuchwaÅe./ +RÄkÄ wiÄc teraz jego uwiÄziona,/ +Ani zaznawszy sÅodyczy wesela,/ +Ni uczuÄ maiki, ni dziatek pieszczoty,/ +SchodzÄ tak sama i bez przyjaciela,/ +NieszczÄsna, żywa do grobowej groty./ +Jakież to bogów zÅamaÅam ustawy?/ +Jakże do bogów podnosiÄ mam modÅy,/ +WoÅaÄ o pomoc, jeżeli czyn prawy,/ +Który speÅniÅam, uznano za podÅy?/ +Lecz jeÅli z bogów to zrzÄ dzenia pÅynie,/ +Trzeba mi winnej znieÅÄ w ciszy cierpienia./ +JeÅli ci bÅÄ dzÄ , niech siÄgnie ich w winie/ +<wers_wciety typ="2">KaźŠrówna z bogów ramienia!</wers_wciety> +</strofa> +</kwestia><end id="e1188563989733"/> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +Te same burze i te same jeszcze/ +DuszÄ tej dziewki wciÄ Å¼ miotajÄ dreszcze. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +PachoÅki, którym wieÅÄ jÄ nakazaÅem,/ +SwojÄ powolnoÅÄ ciÄżko mi... odpÅaczÄ . +</strofa> +</kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +Biada! ta mowa groÅ¼Ä ca/ +Bliskiego wróżbÄ mi koÅca. +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +A ja odwagi nie ÅmiaÅbym dodawaÄ,/ +Å»e siÄ te srogie ukazy odwlokÄ . +</strofa> +</kwestia> + + +<naglowek_osoba>ANTYGONA</naglowek_osoba> + +<kwestia> +<strofa> +Ziemi tebaÅskiej ojczysty ty grodzie,/ +<wers_wciety typ="2">I wy bogowie rodowi,</wers_wciety>/ +Oto mnie wiodÄ w bezzwÅocznym pochodzie/ +<wers_wciety typ="2">Ku samotnemu grobowi.</wers_wciety>/ +Patrzcie na ksiÄżnÄ ostatniÄ z Teb królów,/ +<wers_wciety typ="2">W rÄce siepaczy ujÄtÄ ,</wers_wciety>/ +Ile mÄ k ona, ile zniosÅa bólów/ +<wers_wciety typ="2">Za wiernÄ sÅużbÄ i ÅwiÄtÄ .</wers_wciety> +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +Tak i Danae jasnego dnia zorze/ +ZmieniÄ musiaÅa na loch w miedź obity,/ +<wers_wciety typ="2">W grobowej skryta komorze<pr>Danae zostaÅa zamkniÄta przez ojca Akryzjosa w podziemnym lochu, by nie urodziÅa zÅowróżbnego syna. Tu jÄ jednak zapÅodniÅ zÅotym deszczem Zeus i urodziÅa sÅynnego Perseusza.</pr>.</wers_wciety>/ +A przecież ród jej zapewniaÅ zaszczyty/ +I Zeus deszcz zÅoty na Åono jej roni./ +<wers_wciety typ="2">Straszne przeznaczeÅ obierze!</wers_wciety>/ +PieniÄ dz, ni siÅa, ni warowne wieże,/ +<wers_wciety typ="2">Ni morski żagiel przed nimi nie chroni.</wers_wciety>/ +</strofa> + +<strofa> +Hedonów króla Likurga też bucie,/ +<wers_wciety typ="2">Å»e hardym sÅowem na boga siÄ miota,</wers_wciety>/ +Bakchus kamienne zgotowaÅ okucie,/ +<wers_wciety typ="2">Gdzie zÅa wykipi ochota<pr>Likurg, baÅniowy król Hedonów w Tracji, oparÅ siÄ kultowi Bakchusa, wyszydzaÅ jego towarzyszki, szalone bachantki i muzy; za to zamknÄ Å go bóg w skalnej czeluÅci.</pr>.</wers_wciety>/ +RozpoznaÅ on tam za późno swe zbrodnie/ +<wers_wciety typ="2">I pożaÅowaÅ sÅów gniewu.</wers_wciety>/ +ChciaÅ bo szaÅ boski tÅumiÄ i pochodnie,/ +<wers_wciety typ="2">UrÄ gaÅ muzom wÅród Åpiewu.</wers_wciety>/ +</strofa> + +<strofa> +Gdzie z mórz strzelajÄ kyanejskie progi<pr><slowo_obce>kyanejskie progi</slowo_obce> (Åac. Cyaneae) --- skaliste wyspy na Morzu Czarnym przy Bosforze.</pr>,/ +Kraj Salmidesu<pr>Salmy-dessus --- wybrzeże i miasto na trackim brzegu Morza Czarnego.</pr>, dla przybyszów wrogi,/ +Gdzie brzeg Bosforu baÅwany roztrÄ ca,/ +Tam widziaÅ Ares, jak dzikoÅciÄ wrÄ ca/ +Å»ona Fineusa pasierby swe nÄka./ +Nie mieczem srogim wymierza im ciÄgi,/ +Lecz krwawÄ rÄkÄ zaÅapiÄ w ócz krÄgi,/ +<wers_wciety typ="2">Ostrzem je Åupi czóÅenka<pr>Król Fineus ze Salmidesu ożeniÅ siÄ z KleopatrÄ , córkÄ Boreasza, ksiÄżniczkÄ z krwi attyckiej. Potem jÄ porzuciÅ, aby poÅlubiÄ nimfÄ nazwiskiem Idaea. Przewrotnej Idaei wydaÅ Fineus swe dzieci z Kleopatry; macocha je oÅlepiÅa i nastÄpnie zamknÄÅa żywcem w grobowcu. Także ich matka, Kleopatra, zawarta zostaÅa w kamiennej niewoli.</pr>.</wers_wciety>/ +</strofa> + +<strofa> +UjÄci oni kamiennÄ niewolÄ ,/ +PÅaczÄ nad matki i swojÄ niedolÄ ./ +Przecież jej przodki z Erechtydów<pr>Erechtydzi --- AteÅczycy; nazwa ta pochodzi od Erechteusa, bohatera ateÅskiego rodu.</pr>,/ +Ojcem Boreasz; poÅród skaÅ i gÅogów/ +I burz pÄdziÅa dni swoje od mÅodu,/ +Na chyżych koniach --- prawe dzieciÄ bogów./ +Jednak, choÄ w dali, i tu jej dosiÄga/ +<wers_wciety typ="2">Odwiecznej Mojry<pr>Mojra --- bogini przeznaczenia.</pr> potÄga.</wers_wciety> +</strofa> +</kwestia> + + +<naglowek_osoba>TYREZJASZ</naglowek_osoba> + +<didaskalia>[wiedziony przez chÅopca ukazuje siÄ na scenie]</didaskalia> + +<kwestia> +<strofa> +O, Teb starszyzno, wspólnym my tu krokiem/ +I wspólnym wzrokiem zdÄ Å¼amy, bo ciemnym/ +Za oko staje przewodnika rÄka. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Cóż tam nowego, Tyrezjaszu stary?</strofa></kwestia> + + +<naglowek_osoba>TYREZJASZ</naglowek_osoba> + +<kwestia><strofa>Ja rzeknÄ, ty zaÅ posÅuchaj wróżbiarza.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Nigdy twoimi nie wzgardziÅem sÅowy.</strofa></kwestia> + + +<naglowek_osoba>TYREZJASZ</naglowek_osoba> + +<kwestia><strofa>Przeto szczÄÅliwie sterujesz tÄ nawÄ .</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +PrzyÅwiadczyÄ mogÄ, doznawszy korzyÅci. + + +<naglowek_osoba>TYREZJASZ</naglowek_osoba> + +<kwestia><strofa>Zważ teraz, znowu stoisz na przeÅomie.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Co mówisz? trwogÄ przejmujÄ twe sÅowa.</strofa></kwestia> + + +<naglowek_osoba>TYREZJASZ</naglowek_osoba> + +<kwestia> +<strofa> +Poznasz ty prawdÄ, ze znaków mej sztuki./ +SiadÅem na starej wróżbity siedzibie,/ +Gdzie wszelkie ptactwo kieruje swe loty,/ +Aż naraz sÅyszÄ, jak niezwykÅe gÅosy/ +WydajÄ ptaki, szalone i dzikie;/ +I wnet poznaÅem, że szarpiÄ siÄ szpony,/ +Bo Åopot skrzydeÅ to stwierdzaÅ dobitnie./ +PrzejÄty trwogÄ , próbujÄ ofiary/ +Na pÅomienistym oÅtarzu, lecz ogieÅ/ +Nie chce wystrzelaÄ ku górze, a sÄ czy/ +Ciecz z miÄs ofiarnych, wsiÄ kajÄ c w popioÅy,/ +Kipi i syczy, żóÅÄ bryzga w powietrze,/ +I spoza tÅuszczu, co spÅynÄ Å stopiony,/ +Uda wyjrzaÅy na oÅtarzu nagie./ +Od tego chÅopca wnet siÄ dowiedziaÅem,/ +Å»e takie marne szÅy z ofiary znaki,/ +Bo on przewodzi mnie, a ja znów innym./ +Tak wiÄc chorzeje miasto z twojej winy./ +Bo wsze oÅtarze i ofiarne stoÅy/ +Psy pokalaÅy i ptactwo, co ciaÅem/ +Edypowego siÄ Å¼ywiÅo syna./ +WiÄc nie przyjmujÄ już ofiarnych modÅów/ +Bogowie od nas, ni ofiarnych dymów./ +A ptak, co żÅopaÅ krew trupa zastygÅÄ ,/ +Już nie wydaje gÅosów dobrej wróżby./ +Rozważ to synu: bo wszystkich jest ludzi/ +BÅÄ dziÄ udziaÅem i z prostej zejÅÄ drogi;/ +Lecz mÄ Å¼, co zbÅÄ dziÅ, nie jest pozbawiony/ +Czci i rozwagi, jeżeli wÅród nieszczÄÅÄ/ +Szuka lekarstwa i nie trwa w uporze./ +Upór jest zawsze nierozumu znakiem;/ +UstÄ p ty Åmierci i nie drażŠzmarÅego/ +Cóż bo za chwaÅa nad trupem siÄ znÄcaÄ?/ +Å»yczliwoÅÄ moja tÄ radÄ ci sÅuży,/ +Dobrze jej sÅuchaÄ, gdy korzyÅci wróży. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +Starcze, wy wszyscy jak Åucznik do celu/ +Mierzycie we mnie: teraz i wróżbiarstwo/ +SidÅa zastawia, a krewni mÄ myÅlÄ / +KupczÄ , frymarczÄ z dawna jak towarem;/ +Nuże, gromadźcie wy sardyjskie skarby,/ +Wskażcie mi górÄ indyjskiego zÅota<pr><slowo_obce>sardyjskie skarby... indyjskie zÅoto</slowo_obce> --- Sardes, stolica Lidii, sÅynÄÅa ze swych skarbów, Indie ze swego zÅota.</pr>,/ +Na pogrzeb tego jednak nie zezwolÄ./ +I choÄby orÅy Zeusowe porwaÅy/ +Trupa i przed tron Zeusowy zaniosÅy,/ +Ja siÄ takiego nie ulÄknÄ sromu,/ +GrzeÅÄ nie pozwolÄ; wiem bo ja zbyt dobrze:/ +Bogów zbezczeÅciÄ nie zdoÅa Åmiertelny./ +PotknÄ Ä siÄ mogÄ i ludzie przemÄ drzy,/ +Starcze, haniebnie, kiedy szpetne myÅli/ +UbiorÄ w sÅowa barwiste... dla zysku. +</strofa> +</kwestia> + + +<naglowek_osoba>TYREZJASZ</naglowek_osoba> + +<kwestia> +<strofa> +Biada!/ +Czyż wie to czÅowiek, czy rozważa sobie... +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Cóż, z jakim znowu na plac ogólnikiem?</strofa></kwestia> + + +<naglowek_osoba>TYREZJASZ</naglowek_osoba> + +<kwestia><strofa>Ile rozsÄ dek góruje nad skarby?</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>O ile klÄskÄ najwiÄkszÄ nierozum.</strofa></kwestia> + + +<naglowek_osoba>TYREZJASZ</naglowek_osoba> + +<kwestia><strofa>CiÄżko ty na tÄ zapadÅeÅ chorobÄ.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Nie chciaÅbym ciÄżkim obraziÄ ciÄ sÅowem.</strofa></kwestia> + + +<naglowek_osoba>TYREZJASZ</naglowek_osoba> + +<kwestia><strofa>Czynisz to, kiedy mi kÅamstwo zarzucasz.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Bo cech wasz caÅy Åapczywy na zyski.</strofa></kwestia> + + +<naglowek_osoba>TYREZJASZ</naglowek_osoba> + +<kwestia><strofa>A ród tyranów w mÄtach chciwie Åowi.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Wiesz, że ty pana twojego obrażasz?</strofa></kwestia> + + +<naglowek_osoba>TYREZJASZ</naglowek_osoba> + +<kwestia> +<strofa>Wiem, bo ja tobie gród ten zachowaÅem<pr>Tyrezjasz <wyroznienie>zachowaÅ</wyroznienie> Teby, gdy podczas najazdu Siedmiu na miasto poradziÅ Kreonowi, aby tenże wÅasnego syna (zapewne Megarcusa) poÅwiÄciÅ, a tÄ ÅmierciÄ okupiÅ wybawienie.</pr>.</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>MÄ dry ty wróżbiarz, lecz oddany zÅemu.</strofa></kwestia> + + +<naglowek_osoba>TYREZJASZ</naglowek_osoba> + +<kwestia><strofa>TyÅ gotów wydrzeÄ mi z wnÄtrza tajniki.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Wyrusz ty z nimi, byle nie dla zysku.</strofa></kwestia> + + +<naglowek_osoba>TYREZJASZ</naglowek_osoba> + +<kwestia><strofa>Å»e ty stÄ d zysku nie uszczkniesz, to myÅlÄ.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Bacz, że zamysÅów moich nie stargujesz.</strofa></kwestia> + + +<naglowek_osoba>TYREZJASZ</naglowek_osoba> + +<kwestia> +<strofa> +Wiedz wiÄc stanowczo, że nim sÅoÅce tobie/ +Wielu dokona koÅowych obrotów,/ +PÅód z twoich wÅasnych poczÄty wnÄtrznoÅci/ +Jak trupa oddasz w zamianÄ za trupy,/ +Za to, że z ÅwiatÅa strÄ ciÅeÅ do nocy,/ +ZamknÄ ÅeŠżycie haniebnie w grobowcu,/ +A tu na ziemi zmarÅe trzymasz ciaÅo,/ +Które siÄ bóstwom należy podziemnym./ +Nie masz żadnego ty nad zmarÅym prawa,/ +Ni ÅwiatÅa bogi, którym gwaÅt zadajesz./ +Za to czyhajÄ Hadesa i bogów/ +MÅciwe i zgubÄ groÅ¼Ä ce Erynie<pr>Erynie --- boginie podziemi, mszczÄ ce zbrodnie ludzi.</pr>,/ +By ciÄ w podobnym pogrÄ Å¼yÄ nieszczÄÅciu./ +Poznasz ty wkrótce, czy ja przekupiony/ +Tak mówiÄ, w krótkim pokaÅ¼Ä to czasie/ +MÄżczyzn i niewiast w twoim domu jÄki./ +A wszelkie miasto przeciw tobie stanie,/ +W którym psy strzÄpy zbezczeÅciÅy trupów,/ +ZwierzÄta dzikie i ptactwo, roznoszÄ c/ +WstrÄtne po ÅwiÄtych zaduchy ogniskach./ +Takimi strzaÅy ja, ciÄżko zelżony,/ +GodzÄ jak Åucznik z gniewem w twoje serce/ +I tak celujÄ, że ostrze poczujesz./ +O chÅopcze, wiedźże mnie teraz do domu,/ +By on na mÅodszych swe gniewy upuÅciÅ,/ +A lepiej odtÄ d miarkowaÅ siÄ w sÅowie/ +I myÅl mu lepsza zajaÅniaÅa w gÅowie. +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +O, wÅadco, poszedÅ on po wróżbie strasznej./ +A wiem to, odkÄ d mi czarne siwiznÄ / +StaroÅÄ na gÅowie posrebrzyÅa wÅosy:/ +FaÅszu on nigdy nie zwiastowaÅ miastu. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +Ja też wiem o tym, i trwoga mnÄ miota./ +UstÄ piÄ ciÄżko, a jeÅli siÄ oprÄ,/ +To Åatwo klÄska roztrÄ ci mÄ czelnoÅÄ. +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia><strofa>Synu Menojka, rozwagi ci trzeba.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Cóż tedy czyniÄ? Mów, pójdÄ za radÄ .</strofa></kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +Idź i wyprowadź dziewkÄ z ciemnej groty,/ +A grób przygotuj dla ciaÅa, co leży. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Radzisz i mniemasz, że ja mam ustÄ piÄ?</strofa></kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +O, jak najprÄdzej, mój ksiÄ Å¼Ä, bo chyżo/ +KaźŠbogów ludzki pochwyci nierozum. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +CiÄżkie to, ale kaÅ¼Ä milczeÄ sercu./ +CofnÄ siÄ, trudno z koniecznoÅciÄ walczyÄ. +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia><strofa>Idź, sam to uczyÅ, nie zwalaj na innych.</strofa></kwestia> + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +IdÄ sam zaraz, a wy, moi sÅudzy,/ +WziÄ wszy topory pospieszcie pospoÅem/ +Na miejsce widne, gdzie nagi trup leży./ +Ja, że zmieniÅem me dawne zamysÅy,/ +Com sam namotaÅ, sam teraz rozwiÄ Å¼Ä./ +Najlepiej może dziaÅa, kto do zgonu/ +Praw istniejÄ cych przestrzega zakonu. +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +Wieloimienny<pr>Wieloimiennym nazywa siÄ tu Bakchusa, bo w rozmaitych miejscach czciÄ siÄ cieszyÅ pod rozmaitymi przydomkami.</pr>, coÅ z Kadmosa domu/ +PrzysporzyÅ chwaÅy dziewczynie,/ +Synu ty Zeusa, pana burz i gromu!/ +W italskiej ziemi twoje imiÄ sÅynie<pr>W Italii, szczególnie poÅudniowej, w której winnic byÅo wiele, kult Bakchusa byÅ szczególnie popularny.</pr>,/ +<wers_wciety typ="2">A i w Eleuzys, o, synu Semeli,</wers_wciety>/ +<wers_wciety typ="2">Roje ciÄ sÅawiÄ czcicieli.</wers_wciety>/ +Bakchusie, w Tebach ty dzierżysz stolicÄ<pr>W poÅożonych nad rzekÄ Ismenem Tebach, zaÅożonych przez Kadmosa, z dawien dawna Bakchus wielkiej czci zażywaÅ. W jego otoczeniu sÄ szalejÄ ce dziewice, zwane bakchami, tyjadami, lub menadami. WystÄpujÄ one w szaÅem opanowanych obchodach i pochodach (<slowo_obce>thiasoi</slowo_obce>) Bakchusa, a Teby brzmiÄ wtedy pieÅniami.</pr>,/ +KÄdy Ismenos ciche wody toczy;/ +Szalem twym tchnÄ ce plÄ sajÄ dziewice,/ +<wers_wciety typ="2">Pienieni rozbrzmiewa gród smoczy<pr><slowo_obce>gród smoczy</slowo_obce> --- w Tebach Kadmos zabiÅ smoka, sÅuÅ¼Ä cego Aresowi.</pr>.</wers_wciety>/ +WidnyÅ ty w Åunie jarzÄ cych kagaÅców,/ +Gdzie Parnas<pr>Także i góra Parnassos w Focydzie byÅa sÅawna jako siedziba Bakchusa i jego orszaku.</pr> szczytem dwugÅowym wystrzela,/ +Gdzie zdrój Kastalii<pr>ŹródÅo Kastalia, przynoszÄ ce natchnienia poetom, znajdowaÅo siÄ w bliskoÅci.</pr> i swawolnych taÅców/ +Koryku<pr>Korykijska grota leżaÅa u poÅudniowego stoku Parnasu.</pr> nimfy zawodzÄ wesela./ +W górach nysejskiej Eubei<pr>Nysa, miejscowoÅÄ Eubei. W Nysie pono nimfy piastowaÅy mÅodziutkiego Bakchusa. StÄ d wyprowadzano jego drugÄ nazwÄ: Dionysos.</pr>/ +W spowitej bluszczem mkniesz kniei,/ +Potem z tych brzegów, gdzie bujne winnice,/ +PieÅni ciÄ chwaÅy wiodÄ przez ulice/ +I brzmiÄ radoÅnie ku niebom. +</strofa> + +<strofa> +Gród ten nad wszystkie czcisz grody na Åwiecie/ +Wraz z matkÄ twojÄ ciÄżarnÄ od gromu;/ +Kiedy wiÄc brzemiÄ nieszczÄÅcia nas gniecie/ +PeÅnego cierpieÅ i sromu,/ +PrzybÄ dź z Parnasu ku naszej obronie,/ +Lub przez wyjÄ ce mórz tonie. +</strofa> + +<strofa> +Ty, co przodujesz wÅród gwiazd korowodu<pr><slowo_obce>Ty, co przodujesz wÅród gwiazd...</slowo_obce> --- gwiazdy zdajÄ siÄ taÅczyÄ wÅród obchodów Bakchusa, które siÄ odbywajÄ nocnÄ porÄ .</pr>,/ +PieÅniom przewodzisz wÅród mroczy,/ +Zawitaj, synu Zeusowego rodu!/ +Niechaj ciÄ zastÄp naksyjskich<pr>Wyspa Naksos byÅa ogniskiem kultu Bakchusa. Legenda umieszczaÅa także i na niej urodzenie boga, a wiadomo, że miejsc roszczÄ cych sobie prawa do tego zaszczytu byÅo wiele.</pr> otoczy/ +Tyjad, co w szale od zmierzchu do rana/ +TaÅczÄ i w tobie czczÄ pana. +</strofa> +</kwestia> + + +<naglowek_osoba>POSÅANIEC</naglowek_osoba> + +<kwestia> +<strofa> +O, Kadma grodu, domów Amfiona<pr>Domy Amfiona znajdujÄ siÄ w Tebach. Amfion, bliźniak Zethosa, byÅ drugim zaÅożycielem Teb. Bo podczas gdy Kadmos zbudowaÅ fortecÄ miasta, KadmeÄ, on dźwiÄkami swej lutni uÅożyÅ mury gród okalajÄ ce.</pr>/ +MieszkaÅcy! życia czÅowieka nie ÅmiaÅbym/ +Ani wysÅawiaÄ, ni ganiÄ przenigdy,/ +Bo los podnosi i los znów pogrÄ Å¼a/ +Bez przerwy w szczÄÅcie ludzi i w nieszczÄÅcia,/ +A nikt przyszÅoÅci wywróżyÄ nie zdolny./ +Tak Kreon zdawaÅ siÄ godnym podziwu,/ +On, co wyzwoliÅ tÄ ziemiÄ od wrogów/ +I jako wÅadca jedyny nad krajem/ +RzÄ dziÅ, potomstwem cieszÄ c siÄ kwitnÄ cym/ +A dziÅ to wszystko --- stracone. Bo radoÅÄ/ +JeÅli W czÅowieku przygaÅnie, to trzymam,/ +Å»e on nie żyje, lecz żywym jest trupem;/ +Gromadź bogactwa do woli w twym domu,/ +ÅwieÄ jako tyran na zewnÄ trz: gdy cieszyÄ/ +Tym siÄ nie można, to reszty tych skarbów/ +Ja bym nie nabyÅ za dymu cieÅ marny. +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia><strofa>JakÄ Å¼ ty znowu wieÅÄ niesiesz zÅÄ ksiÄciu?</strofa></kwestia> + + +<naglowek_osoba>POSÅANIEC</naglowek_osoba> + +<kwestia><strofa>SkoÅczyli... Åmierci ich winni, co żyjÄ .</strofa></kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia><strofa>Któż to mordercÄ , któż polegÅ, o rzeknij!</strofa></kwestia> + + +<naglowek_osoba>POSÅANIEC</naglowek_osoba> + +<kwestia><strofa>Hajmon nie żyje, we wÅasnej krwi broczy.</strofa></kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia><strofa>Z ojca czy z wÅasnej zginÄ Åże on rÄki?</strofa></kwestia> + + +<naglowek_osoba>POSÅANIEC</naglowek_osoba> + +<kwestia><strofa>W gniewie na ojca mordy sam siÄ zabiÅ.</strofa></kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia><strofa>Wróżbito, jakżeÅ czyn trafnie okreÅliÅ!</strofa></kwestia> + + +<naglowek_osoba>POSÅANIEC</naglowek_osoba> + +<kwestia><strofa>W tym rzeczy stanie dalszej trza narady.</strofa></kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +Lecz otóż widzÄ biednÄ EurydykÄ,/ +Å»onÄ Kreona; albo siÄ przypadkiem/ +Pojawia, albo sÅyszaÅa o synu. +</strofa> +</kwestia> + + +<naglowek_osoba>EURYDYKA</naglowek_osoba> + +<kwestia> +<strofa> +Starcy, rozmowy waszej dosÅyszaÅam/ +WÅaÅnie, gdym z domu wybiec zamierzaÅa,/ +By do Pallady z modÅami siÄ zwróciÄ./ +I wÅaÅnie odrzwi odmykam zasuwki,/ +By je roztworzyÄ, gdy nagle nieszczÄsna/ +WieÅÄ uszy rani; wiÄc padÅam, zemdlona/ +Z trwogi, w objÄcia mych wiernych sÅużebnic./ +Powtórzcie tedy, co ta wieÅÄ przynosi;/ +W zÅym doÅwiadczona, wysÅucham sÅów waszych. +</strofa> +</kwestia> + + +<naglowek_osoba><begin id="b1188564649499"/><motyw id="m1188564649499">Samobójstwo</motyw>POSÅANIEC</naglowek_osoba> + +<kwestia> +<strofa> +Ja, miÅoÅciwa pani, byÅem przy tym,/ +Powiem wiÄc wszystko, jak siÄ wydarzyÅo;/ +Cóż bo ukrywaÄ, by potem na kÅamcÄ/ +WyjÅÄ; --- przecie prawda zawsze faÅsz przemoże./ +Ja tedy wiodÅem twojego maÅżonka/ +Na ten pagórek, gdzie biedne leżaÅo/ +Przez psy podarte ciaÅo Polinika./ +Wnet do Hekaty<pr>Hekate --- bóstwo podobne do Artemidy i Persefony; gÅównie czczona jako bogini podziemna lub straszÄ ca po drogach w otoczeniu dusz ludzi zmarÅych, a niepogrzebanych, lub przedwczeÅnie zgasÅych.</pr> zanieÅliÅmy modÅy/ +I do Plutona, by gniew ich zÅagodziÄ;/ +Obmywszy potem ciaÅo w ÅwiÄtej wodzie,/ +Palimy szczÄ tki na stosie z gaÅÄzi/ +I grób z ojczystej sypiemy im ziemi./ +To uczyniwszy, zaraz do kamiennej/ +Ålubnogrobowej Åożnicy dziewczyny/ +Spieszymy; z dala ktoÅ jÄki usÅyszaÅ,/ +Od strony lochu, co za grób miaÅ sÅużyÄ,/ +ChoÄ nie ÅwiÄciÅy go żadne obrzÄdy./ +Wraz wiÄc donosi panu, co zasÅyszaÅ./ +Tego dochodzÄ zaÅ, kiedy siÄ zbliżyÅ,/ +Åkania żaÅosne, a pierÅ mu wybucha/ +GÅosem rozpaczy: «O, ja nieszczÄÅliwy,/ +Czyż ja wróżbitÄ ? czyż nie kroczÄ teraz/ +DrogÄ najwiÄkszej w żywocie mym klÄski?/ +Syna woÅanie mnie mrozi. O, sÅudzy,/ +Spieszcie wy naprzód, zbliżcie siÄ do grobu,/ +I przez szczelinÄ gÅazem zawalonÄ / +WszedÅszy do wnÄtrza, baczcie, czy Hajmona/ +GÅosy ja sÅyszÄ, czy bogi mnie durzÄ Â». ---/ +PosÅuszni woli zwÄ tpiaÅego pana,/ +Idziem na zwiady, a w grobowca gÅÄbi/ +Dojrzym wnet dziewki, wiszÄ cej za gardÅo/ +ÅciÅniÄte wÄzÅem muÅlinowej chusty,/ +Podczas gdy mÅodzian uchwyciÅ jÄ wpoÅy,/ +BoleÅnie jÄczÄ c nad szczÄÅcia utratÄ ,/ +Nad czynem ojca, nieszczÄsnymi Åluby./ +Kreon, zoczywszy to, ciÄżko zajÄknÄ Å,/ +Rzuca siÄ naprzód i wÅród Åkania woÅa:/ +«O, ty nieszczÄsny! cóżeÅ ty uczyniÅ!/ +Czy szaÅ ciÄ jaki opÄtaÅ zÅowrogi?/ +Wychodź, o synu, bÅagalnie ciÄ proszÄ!»/ +Lecz syn na niego dzikim ÅysnÄ Å wzrokiem/ +I twarz przekrzywiÅ, a sÅowa nie rzekÅszy/ +Ima siÄ miecza; wraz ojciec ucieczkÄ / +UszedÅ zamachu; natenczas nieszczÄsny/ +W gniewie na siebie nad ostrzem siÄ schyla/ +I miecz w bok wraża; lecz jeszcze w konaniu/ +DrÄtwym ramieniem do zmarÅej siÄ tuli,/ +A z ust dyszÄ cych wytryska mu struga/ +Krwawa na blade kochanki policzki.<end id="e1188564649499"/> +</strofa> + +<didaskalia>[<osoba>Eurydyka</osoba> wybiega za scenÄ]</didaskalia> + +<strofa> +Trup dziÅ przy trupie, osiÄ gnÄ Å on Åluby,/ +W domu Hadesa zÅożony przy lubej./ +NieszczÄÅciem dowiódÅ, że wÅród ludzi tÅumu/ +NajwiÄksze klÄski pÅynÄ z nierozumu. +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +A cóż stÄ d wróżysz, że znikÅa niewiasta,/ +Nie rzekÅszy zÅego lub dobrego sÅowa? +</strofa> +</kwestia> + +<naglowek_osoba>POSÅANIEC</naglowek_osoba> + +<kwestia> +<strofa> +I ja siÄ dziwiÄ, lecz żywiÄ nadziejÄ,/ +Å»e posÅyszawszy o ciosie, nie chciaÅa/ +Å»aÅoÅci swojej pospólstwu okazaÄ,/ +Lecz siÄ cofnÄÅa do wnÄtrza domostwa,/ +By wÅród sÅug wiernych wylewaÄ Åzy gorzkie./ +ToÄ jej rozwaga nie dopuÅci zbrodni. +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +Nic nie wiem, ale milczenie uporne,/ +Jak i zbyt gÅoÅne jÄki, zÅo mi wrÃ³Å¼Ä . +</strofa> +</kwestia> + + +<naglowek_osoba>POSÅANIEC</naglowek_osoba> + +<kwestia> +<strofa> +Wnet siÄ dowiemy, czy w gÅÄbiach rozpaczy/ +Nie kryje ona tajnego zamysÅu./ +Idźmy do domu, bo dobrze ty mówisz:/ +Nadmierna cisza jest gÅosem zÅowrogim. +</strofa> +</kwestia> + + +<didaskalia>[Wchodzi <osoba>Kreon</osoba>, dźwigajÄ c ciaÅo syna]</didaskalia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +Lecz otóż ksiÄ Å¼Ä tu wÅaÅnie nadchodzi;/ +<wers_wciety typ="2">O! znak wymowny ujÄ Å on ramiony,</wers_wciety>/ +Nie cudzej zbrodni, jeÅli rzec siÄ godzi,/ +<wers_wciety typ="2">Lecz wÅasnej winy szalonej.</wers_wciety> +</strofa> +</kwestia> + + +<begin id="b1188564726535"/><motyw id="m1188564726535">Rozpacz, Wyrzuty sumienia</motyw><naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +KlnÄ moich myÅli Åmierciodajne winy,/ +<wers_wciety typ="2">Co zatwardziÅy mi serce!</wers_wciety>/ +Widzicie teraz wÅród jednej rodziny/ +<wers_wciety typ="2">Ofiary, ofiar mordercÄ.</wers_wciety>/ +SÅowo dziÅ moje me czyny przeklina;/ +<wers_wciety typ="2">W samym, o! życia rozkwicie</wers_wciety>/ +Przedwczesne losy porwaÅy mi syna,/ +Mój obÅÄd zmiażdżyÅ to życie. +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia><strofa>Późno siÄ zdajesz poznawaÄ, co sÅuszne.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +Biada mi!/ +PrzejrzaÅem biedny: jakiÅ bóg zÅowrogi/ +ZwaliÅ na gÅowÄ swe brzemiÄ,/ +Na szaÅu popeÅniaÅ mnie drogi,/ +SzczÄÅcie me zdeptaÅ, wbiÅ w ziemiÄ./ +O biada! do zguby/ +WiodÄ Åmiertelnych rachuby. +</strofa> +</kwestia><end id="e1188564726535"/> + + +<naglowek_osoba>POSÅANIEC DRUGI</naglowek_osoba> + +<kwestia> +<strofa> +Panie! Ty nieszczÄÅÄ masz wielkie zasoby./ +Bo jedne dźwigasz w twych rÄkach nieszczÄsnych/ +A drugie ujrzysz niebawem w twym domu. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Czyż ja nie na dnie już nieszczÄÅcia gÅÄbi?</strofa></kwestia> + + +<begin id="b1188564835221"/><motyw id="m1188564835221">Samobójstwo</motyw><naglowek_osoba>POSÅANIEC DRUGI</naglowek_osoba> + +<kwestia> +<strofa> +Nie masz już żony; syna twego matka/ +WÅaÅnie na swoje targnÄÅa siÄ Å¼ycie. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +NieubÅagana przystani, Hadesie,/ +Gdzież koniec moich boleÅci?/ +O! znowu nowe len niesie/ +GodzÄ ce w serce mi wieÅci./ +W mÄża, co legÅ już, wtórym godzisz ciosem,/ +ZÅowrogim sÅowami i gÅosem./ +Biada! NieszczÄÅcie z nieszczÄÅcia siÄ sÄ czy,/ +Z synem ÅmierÄ Å¼onÄ mi ÅÄ czy. +</strofa> +</kwestia> + + +<naglowek_osoba>CHOR</naglowek_osoba> + +<kwestia><strofa>WidzieÄ to możesz, dom stoi otworem.</strofa></kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +ZÅe siÄ jak burza nade mnÄ zerwaÅo,/ +Nie widzÄ koÅca mej mÄce:/ +Syna zmarÅego dźwigaÅem ja w rÄce,/ +A teraz żony martwe widzÄ ciaÅo./ +O biada! matczyna/ +Rozpacz dognaÅa już syna. +</strofa> +</kwestia> + + +<naglowek_osoba>POSÅANIEC DRUGI</naglowek_osoba> + +<kwestia> +<strofa> +Zranionej ciÄżko nocÄ zaszÅy oczy,/ +U stóp oÅtarza zajÄkÅa nad zgonem/ +NiegdyÅ chwalebnym syna Megareusa/ +I nad Hajmonem, a wreszcie przekleÅstwa/ +Tobie rzuciÅa ciÄżkie, dzieciobójcy. +</strofa> +</kwestia><end id="e1188564835221"/> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +Groza mnÄ trzÄsie. Przecz mieczem nikt w Åono/ +<wers_wciety typ="2">Ciosu mi Åmierci nie zada?</wers_wciety>/ +<wers_wciety typ="2">O, ja nieszczÄsny! O, biada mi! biada!</wers_wciety>/ +W toÅ nieszczÄÅÄ sunÄ spienionÄ . +</strofa> +</kwestia> + + +<naglowek_osoba>POSÅANIEC DRUGI</naglowek_osoba> + +<kwestia> +<strofa> +W konaniu jeszcze za te wszystkie zgony/ +Na twojÄ gÅowÄ miotaÅa przekleÅstwa. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Jakimże ona skoÅczyÅa sposobem?</strofa></kwestia> + + +<naglowek_osoba>POSÅANIEC DRUGI</naglowek_osoba> + +<kwestia> +<strofa> +Å»elazo w wÅasnej utopiÅa piersi,/ +SÅyszÄ c o syna opÅakanym koÅcu. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +O, biada! win mi nie ujmie nikt inny,/ +<wers_wciety typ="2">Nie ujmie mÄki ni kaźni.</wers_wciety>/ +Ja bo nieszczÄsny, ja twej Åmierci winny./ +<wers_wciety typ="2">Nuże, o sÅudzy, wiedźcie mnie co raźniej,</wers_wciety>/ +Uwodźcie mnie stad; niech moim obliczem/ +Nie mierżÄ, ja, co mniej jestem, jak niczym! +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +Zysku ty szukasz, jestli zysk w nieszczÄÅciu,/ +Bo lżejsza klÄska, co nie gnÄbi dÅugo. +</strofa> +</kwestia> + + +<begin id="b1188564945226"/><motyw id="m1188564945226">Rozpacz</motyw><naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +BÅogosÅawiony dzieŠów, który nÄdzy/ +Kres już ostatni poÅoży,/ +PrzybÄ dź, o przybÄ dź co prÄdzej,/ +Niechbym nie ujrzaÅ jutrzejszej ja zorzy! +</strofa> +</kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +To rzecz przyszÅoÅci, dla obecnej chwili/ +Trza dziaÅaÄ; tamto obmyÅliÄ --- rzecz bogów. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia><strofa>Wszystkie pragnienia w tym jednym zawarÅem</strofa></kwestia> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +O nic nie bÅagaj, bo próżne marzenia,/ +By czÅowiek uszedÅ swego przeznaczenia. +</strofa> +</kwestia> + + +<naglowek_osoba>KREON</naglowek_osoba> + +<kwestia> +<strofa> +Wiedźcie mnie, sÅugi, uchodźcie stÄ d ze mnÄ ,/ +Mnie, który syna zabiÅem wbrew woli/ +I tamtÄ . Biada! aż w oczach mi ciemno./ +DokÄ d siÄ zwróciÄ, gdzie spojrzeÄ w niedoli?/ +Wszystko mi Åamie siÄ w rÄku,/ +Los mnie powaliÅ, peÅen burz i lÄku. +</strofa> +</kwestia><end id="e1188564945226"/> + + +<naglowek_osoba>CHÃR</naglowek_osoba> + +<kwestia> +<strofa> +Nad szczÄÅcia bÅysk, co zÅudÄ mar,/ +Najwyższy skarb rozumu dar./ +A wyzwie ten niechybny sÄ d,/ +Kto bogów lży i wali rzÄ d./ +I zeÅlÄ oni swÄ zemstÄ i kary/ +Na pychÄ sÅowa w czÅowieku,/ +I w klÄsk odmÄcie rozumu i miary/ +W późnym nauczÄ go wieku. +</strofa> +</kwestia> + + + +<extra><!--</tekst_glowny>--></extra> + + +</dramat_wierszowany_l> + + +</utwor> \ No newline at end of file diff --git a/src/oai/tests/files/lubie-kiedy-kobieta.xml b/src/oai/tests/files/lubie-kiedy-kobieta.xml new file mode 100755 index 000000000..7ea6f44b0 --- /dev/null +++ b/src/oai/tests/files/lubie-kiedy-kobieta.xml @@ -0,0 +1,63 @@ +<utwor> +<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> +<rdf:Description rdf:about="http://redakcja.wolnelektury.pl/documents/book/przerwa_tetmajer__lubie_kiedy_kobieta/"> +<dc:creator xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Przerwa-Tetmajer, Kazimierz</dc:creator> +<dc:title xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">LubiÄ, kiedy kobieta...</dc:title> +<dc:contributor.editor xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">KozioÅ, PaweÅ</dc:contributor.editor> +<dc:contributor.technical_editor xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">NiedziaÅkowska, Marta</dc:contributor.technical_editor> +<dc:publisher xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Fundacja Nowoczesna Polska</dc:publisher> +<dc:subject.period xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Modernizm</dc:subject.period> +<dc:subject.type xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Liryka</dc:subject.type> +<dc:subject.genre xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Wiersz</dc:subject.genre> +<dc:description xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez BibliotekÄ ÅlÄ skÄ z egzemplarza pochodzÄ cego ze zbiorów BÅ.</dc:description> +<dc:identifier.url xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">http://wolnelektury.pl/katalog/lektura/lubie-kiedy-kobieta</dc:identifier.url> +<dc:source xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Kazimierz Przerwa-Tetmajer, Wybór poezji, nakÅ. Gebethnera i Wolffa, Warszawa-Kraków 1897</dc:source> +<dc:rights xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Domena publiczna - Kazimierz Przerwa-Tetmajer zm. 1940</dc:rights> +<dc:date.pd xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">1940</dc:date.pd> +<dc:format xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">xml</dc:format> +<dc:type xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">text</dc:type> +<dc:type xml:lang="en" xmlns:dc="http://purl.org/dc/elements/1.1/">text</dc:type> +<dc:date xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">2010-10-12</dc:date> +<dc:audience xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">L</dc:audience> +<dc:language xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">pol</dc:language></rdf:Description> +</rdf:RDF> + + +<liryka_l> +<autor_utworu>Kazimierz Przerwa-Tetmajer</autor_utworu> + +<nazwa_utworu>LubiÄ, kiedy kobieta...</nazwa_utworu> + +<strofa>LubiÄ, kiedy kobieta omdlewa w objÄciu,/ +Kiedy w lubieżnym zwisa przez ramiÄ przegiÄciu,/ +<begin id="b1288014720458-1717646767"/><motyw id="m1288014720458-1717646767">PoÅ¼Ä danie</motyw>Gdy jej oczy zachodzÄ mgÅÄ , twarz caÅa blednie,/ +I wargi siÄ wilgotne rozchylÄ bezwiednie.</strofa> + + +<strofa> +LubiÄ, kiedy jÄ rozkosz i Å¼Ä dza oniemi,/ +Gdy wpija siÄ w ramiona palcami drÅ¼Ä cemi,/ +Gdy krótkim, urywanym oddycha oddechem,/ +I oddaje siÄ caÅa z mdlejÄ cym uÅmiechem. +<end id="e1288014720458-1717646767"/></strofa> + + +<strofa><begin id="b1288014780333-48828945"/><motyw id="m1288014780333-48828945">Wstyd</motyw>I lubiÄ ten wstyd, co siÄ kobiecie zabrania/ +PrzyznaÄ, że czuje rozkosz, że moc poÅ¼Ä dania/ +Zwalcza jÄ , a sycenie Å¼Ä dzy oszalenia<pe><slowo_obce>oszaleniaÄ</slowo_obce> (neol.) --- czyniÄ szalonym.</pe>,/ +Gdy szuka ust, a lÄka siÄ sÅów i spojrzenia. +<end id="e1288014780333-48828945"/></strofa> + + +<strofa><begin id="b1288014533484-249140150"/><motyw id="m1288014533484-249140150">Poeta, Mizoginia</motyw>LubiÄ to --- i tÄ chwilÄ lubiÄ, gdy koÅo mnie/ +Wyczerpana, zmÄczona leży nieprzytomnie,/ +A myÅl moja już od niej wybiega skrzydlata/ +W nieskoÅczone przestrzenie nieziemskiego Åwiata. +<end id="e1288014533484-249140150"/></strofa> + + +</liryka_l> + + + +</utwor> \ No newline at end of file diff --git a/src/oai/tests/oaipmhapi.py b/src/oai/tests/oaipmhapi.py new file mode 100644 index 000000000..db57bc18b --- /dev/null +++ b/src/oai/tests/oaipmhapi.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from catalogue.test_utils import WLTestCase +from catalogue import models +from oai.handlers import * +from oaipmh.server import * +from os import path +from oaipmh.metadata import MetadataRegistry +from lxml import etree + + +class BookMetadataTest(WLTestCase): + def setUp(self): + super(BookMetadataTest, self).setUp() + xml = path.join(path.dirname(__file__), 'files/lubie-kiedy-kobieta.xml') + self.book = models.Book.from_xml_file(xml) + + xml = path.join(path.dirname(__file__), 'files/antygona.xml') + self.book2 = models.Book.from_xml_file(xml) + + mr = MetadataRegistry() + self.catalogue = Catalogue(mr) + + mr.registerWriter('oai_dc', oai_dc_writer) + nsmap = {'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI} + self.xml = XMLTreeServer(self.catalogue, mr, nsmap) + + def test_get_record(self): + self.xml.getRecord(identifier='lubie-kiedy-kobieta', + metadataPrefix='oai_dc') + self.xml.listRecords(metadataPrefix='oai_dc') + + def test_selecting(self): + records, token = self.catalogue.listRecords(**{'set': 'epoch:starozytnosc'}) diff --git a/src/oai/urls.py b/src/oai/urls.py new file mode 100644 index 000000000..13ea9f12a --- /dev/null +++ b/src/oai/urls.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url + +urlpatterns = patterns('oai.views', + url(r'^$', 'oaipmh', name='oaipmh')) diff --git a/src/oai/views.py b/src/oai/views.py new file mode 100644 index 000000000..5bb902508 --- /dev/null +++ b/src/oai/views.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from oai.handlers import Catalogue, NS_DCTERMS, nsdcterms +from oaipmh.server import ServerBase, NS_OAIDC, NS_DC, NS_XSI, nsoaidc, nsdc +from oaipmh.metadata import MetadataRegistry +from django.http import HttpResponse +from django.utils.functional import SimpleLazyObject +from lxml.etree import SubElement + + + +#ns_map = {'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI } + + +def fbc_oai_dc_writer(element, metadata): + """FBC notified us that original writer does not output all necessary namespace declarations. + """ + e_dc = SubElement(element, nsoaidc('dc'), + nsmap={'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI}) + e_dc.set('{%s}schemaLocation' % NS_XSI, + '%s http://www.openarchives.org/OAI/2.0/oai_dc.xsd' % NS_OAIDC) + map = metadata.getMap() + for name in [ + 'title', 'creator', 'subject', 'description', 'publisher', + 'contributor', 'date', 'type', 'format', 'identifier', + 'source', 'language', 'relation', 'coverage', 'rights', + ]: + for value in map.get(name, []): + e = SubElement(e_dc, nsdc(name)) + e.text = value + + +def qdc_writer(element, metadata): + """FBC notified us that original writer does not output all necessary namespace declarations. + """ + nsmap = {'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI, 'dcterms': NS_DCTERMS} + map = metadata.getMap() + for name in [ + 'title', 'creator', 'subject', 'description', 'publisher', + 'contributor', 'date', 'type', 'format', 'identifier', + 'source', 'language', 'relation', 'coverage', 'rights', + ]: + for value in map.get(name, []): + e = SubElement(element, nsdc(name), nsmap=nsmap) + e.text = value + + for name in ['hasPart', 'isPartOf']: + for value in map.get(name, []): + e = SubElement(element, nsdcterms(name), nsmap=nsmap) + e.text = value + + + +metadata_registry = MetadataRegistry() +metadata_registry.registerWriter('oai_dc', fbc_oai_dc_writer) +metadata_registry.registerWriter('qdc', qdc_writer) + + +server = SimpleLazyObject(lambda: + ServerBase(Catalogue(metadata_registry), metadata_registry, + {'topxsi': NS_XSI}) + ) + + +def oaipmh(request): + resp = server.handleRequest(request.GET) + return HttpResponse(resp, content_type='application/xml') diff --git a/src/opds/__init__.py b/src/opds/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/opds/tests/__init__.py b/src/opds/tests/__init__.py new file mode 100755 index 000000000..b1399aee7 --- /dev/null +++ b/src/opds/tests/__init__.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from unittest import skipIf +from lxml import etree +from django.conf import settings +from django.core.files.base import ContentFile +import catalogue +from catalogue.test_utils import (BookInfoStub, PersonStub, info_args, + WLTestCase, get_fixture) +from catalogue.models import Book +from librarian import WLURI, XMLNamespace +from search.index import Index, Search + +AtomNS = XMLNamespace("http://www.w3.org/2005/Atom") + + +@skipIf(getattr(settings, 'NO_SEARCH_INDEX', False), + u'Requires search server and NO_SEARCH_INDEX=False.') +class OpdsSearchTests(WLTestCase): + """Tests search feed in OPDS..""" + def setUp(self): + WLTestCase.setUp(self) + index = Index() + index.index.delete_all() + index.index.commit() + + self.do_doktora = Book.from_xml_file( + get_fixture('do-doktora.xml')) + self.do_anusie = Book.from_xml_file( + get_fixture('fraszka-do-anusie.xml', catalogue)) + + def assert_finds(self, query, books): + """Takes a query and tests against books expected to be found.""" + tree = etree.fromstring( + self.client.get('/opds/search/?%s' % query).content) + elem_ids = tree.findall('.//%s/%s' % (AtomNS('entry'), AtomNS('id'))) + slugs = [WLURI(elem.text).slug for elem in elem_ids] + self.assertEqual(set(slugs), set(b.slug for b in books), + u"OPDS search '%s' failed." % query) + + def test_opds_search_simple(self): + """Do a simple q= test, also emulate dumb OPDS clients.""" + both = set([self.do_doktora, self.do_anusie]) + self.assert_finds('q=fraszka', both) + self.assert_finds('q=fraszka&author={opds:author}', both) + + def test_opds_search_title(self): + """Search by title.""" + both = set([self.do_doktora, self.do_anusie]) + self.assert_finds('title=fraszka', both) + self.assert_finds('title=fraszka', both) + self.assert_finds('q=title:doktora', [self.do_doktora]) + + def test_opds_search_author(self): + """Search by author.""" + self.assert_finds('q=fraszka&author=Kochanowski', [self.do_doktora]) + self.assert_finds('q=fraszka+author:Kochanowski', [self.do_doktora]) + self.assert_finds('q=Kochanowski', [self.do_doktora]) + + def test_opds_search_translator(self): + """Search by translator.""" + self.assert_finds('q=fraszka&translator=Fikcyjny', [self.do_doktora]) + self.assert_finds('q=fraszka+translator:Fikcyjny', [self.do_doktora]) + self.assert_finds('q=Fikcyjny', [self.do_doktora]) diff --git a/src/opds/tests/files/do-doktora.xml b/src/opds/tests/files/do-doktora.xml new file mode 100644 index 000000000..53c172430 --- /dev/null +++ b/src/opds/tests/files/do-doktora.xml @@ -0,0 +1,56 @@ +<utwor> + <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> +<rdf:Description rdf:about="http://redakcja.wolnelektury.pl/documents/book/fraszki-ksiegi-trzecie-do-doktora-fraszka-a-doktor-to-sa-dwi/"> +<dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Kochanowski, Jan</dc:creator> +<dc:title xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Do doktora (Fraszka a doktor â to sÄ dwie rzeczy przeciwne...)</dc:title> +<dc:relation.isPartOf xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">http://wolnelektury.pl/lektura/fraszki-ksiegi-trzecie</dc:relation.isPartOf> +<dc:contributor.editor xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Krzyżanowski, Julian</dc:contributor.editor> +<dc:contributor.editor xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Otwinowska, Barbara</dc:contributor.editor> +<dc:contributor.editor xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">SekuÅa, Aleksandra</dc:contributor.editor> +<dc:contributor.technical_editor xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Sutkowska, Olga</dc:contributor.technical_editor> +<dc:contributor.technical_editor xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">GaÅecki, Dariusz</dc:contributor.technical_editor> +<dc:contributor.translator xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Fikcyjny, TÅumacz</dc:contributor.translator> +<dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Fundacja Nowoczesna Polska</dc:publisher> +<dc:subject.period xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Renesans</dc:subject.period> +<dc:subject.type xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Liryka</dc:subject.type> +<dc:subject.genre xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Fraszka</dc:subject.genre> +<dc:description xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez BibliotekÄ NarodowÄ z egzemplarza pochodzÄ cego ze zbiorów BN.</dc:description> +<dc:identifier.url xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">http://wolnelektury.pl/katalog/lektura/fraszki-ksiegi-trzecie-do-doktora-fraszka-a-doktor-to-sa-dwi</dc:identifier.url> +<dc:source.URL xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">http://www.polona.pl/dlibra/doccontent2?id=1499&from=editionindex&dirids=1</dc:source.URL> +<dc:source xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Jan Kochanowski, DzieÅa polskie, tom 1, PaÅstwowy Instytut Wydawniczy, wyd. 8, Warszawa, 1976</dc:source> +<dc:rights xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">Domena publiczna - Jan Kochanowski zm. 1584</dc:rights> +<dc:date.pd xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">1584</dc:date.pd> +<dc:format xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">xml</dc:format> +<dc:type xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">text</dc:type> +<dc:type xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">text</dc:type> +<dc:date xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">2007-09-07</dc:date> +<dc:audience xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">SP2</dc:audience> +<dc:audience xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">G</dc:audience> +<dc:audience xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">L</dc:audience> +<dc:language xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="pl">pol</dc:language> +<dc:relation.coverImage.url xmlns:dc="http://purl.org/dc/elements/1.1/">http://redakcja.wolnelektury.pl/media/dynamic/cover/image/607.jpg</dc:relation.coverImage.url> +<dc:relation.coverImage.attribution xmlns:dc="http://purl.org/dc/elements/1.1/">Artondra Hall@Flickr, CC BY 2.0</dc:relation.coverImage.attribution> +<dc:relation.coverImage.source xmlns:dc="http://purl.org/dc/elements/1.1/">http://redakcja.wolnelektury.pl/cover/image/607</dc:relation.coverImage.source> +</rdf:Description> +</rdf:RDF> + <liryka_l> + +<autor_utworu>Jan Kochanowski</autor_utworu> + +<dzielo_nadrzedne>Fraszki, KsiÄgi wtóre</dzielo_nadrzedne> + +<nazwa_utworu>Do doktora<pr>Å»artobliwy ton każe przypuszczaÄ, iż adresatem wierszyka jest Jakub Montanus (por. przyp. do fr. II 49).</pr></nazwa_utworu> + + + +<strofa>Fraszka a doktor --- to sÄ dwie rzeczy przeciwne;/ +Przeto u mnie, doktorze, twe Å¼Ä danie dziwne,/ +Å»e do mnie Ålesz po fraszki, tak daleko k'temu;/ +Ja jednak dosyÄ czyniÄ rozkazaniu twemu./ +Ty strzeż swojej powagi, nie baw siÄ fraszkami,/ +Ale mi je odeÅli prÄdkimi nogami,/ +A nie dziwuj siÄ, że je tak drogo szacujÄ,/ +Bo chocia fraszki, przedsiÄ w nich doktory czujÄ.</strofa> + +</liryka_l> +</utwor> \ No newline at end of file diff --git a/src/opds/urls.py b/src/opds/urls.py new file mode 100644 index 000000000..00831f0b3 --- /dev/null +++ b/src/opds/urls.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url +from opds.views import RootFeed, ByCategoryFeed, ByTagFeed, UserFeed, UserSetFeed, SearchFeed + + +urlpatterns = patterns('opds.views', + url(r'^$', RootFeed(), name="opds_authors"), + url(r'^search/$', SearchFeed(), name="opds_search"), + url(r'^user/$', UserFeed(), name="opds_user"), + url(r'^set/(?P<slug>[a-zA-Z0-9-]+)/$', UserSetFeed(), name="opds_user_set"), + url(r'^(?P<category>[a-zA-Z0-9-]+)/$', ByCategoryFeed(), name="opds_by_category"), + url(r'^(?P<category>[a-zA-Z0-9-]+)/(?P<slug>[a-zA-Z0-9-]+)/$', ByTagFeed(), name="opds_by_tag"), +) diff --git a/src/opds/views.py b/src/opds/views.py new file mode 100644 index 000000000..c529e0272 --- /dev/null +++ b/src/opds/views.py @@ -0,0 +1,436 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import os.path +from urlparse import urljoin + +from django.contrib.syndication.views import Feed +from django.core.urlresolvers import reverse +from django.shortcuts import get_object_or_404 +from django.utils.feedgenerator import Atom1Feed +from django.conf import settings +from django.http import Http404 +from django.contrib.sites.models import Site +from django.utils.functional import lazy + +from basicauth import logged_in_or_basicauth, factory_decorator +from catalogue.models import Book, Tag + +from search.views import Search +import operator +import logging +import re + +log = logging.getLogger('opds') + +from stats.utils import piwik_track + +_root_feeds = ( + { + u"category": u"", + u"link": u"opds_user", + u"link_args": [], + u"title": u"Moje póÅki", + u"description": u"PóÅki użytkownika dostÄpne po zalogowaniu" + }, + { + u"category": u"author", + u"link": u"opds_by_category", + u"link_args": [u"author"], + u"title": u"Autorzy", + u"description": u"Utwory wg autorów" + }, + { + u"category": u"kind", + u"link": u"opds_by_category", + u"link_args": [u"kind"], + u"title": u"Rodzaje", + u"description": u"Utwory wg rodzajów" + }, + { + u"category": u"genre", + u"link": u"opds_by_category", + u"link_args": [u"genre"], + u"title": u"Gatunki", + u"description": u"Utwory wg gatunków" + }, + { + u"category": u"epoch", + u"link": u"opds_by_category", + u"link_args": [u"epoch"], + u"title": u"Epoki", + u"description": u"Utwory wg epok" + }, +) + + +current_domain = lazy(lambda: Site.objects.get_current().domain, str)() +def full_url(url): + return urljoin("http://%s" % current_domain, url) + + +class OPDSFeed(Atom1Feed): + link_rel = u"subsection" + link_type = u"application/atom+xml" + + _book_parent_img = lazy(lambda: full_url(os.path.join(settings.STATIC_URL, "img/book-parent.png")), str)() + try: + _book_parent_img_size = unicode(os.path.getsize(os.path.join(settings.STATIC_ROOT, "img/book-parent.png"))) + except: + _book_parent_img_size = '' + + _book_img = lazy(lambda: full_url(os.path.join(settings.STATIC_URL, "img/book.png")), str)() + try: + _book_img_size = unicode(os.path.getsize(os.path.join(settings.STATIC_ROOT, "img/book.png"))) + except: + _book_img_size = '' + + + def add_root_elements(self, handler): + super(OPDSFeed, self).add_root_elements(handler) + handler.addQuickElement(u"link", None, + {u"href": reverse("opds_authors"), + u"rel": u"start", + u"type": u"application/atom+xml"}) + handler.addQuickElement(u"link", None, + {u"href": full_url(os.path.join(settings.STATIC_URL, "opensearch.xml")), + u"rel": u"search", + u"type": u"application/opensearchdescription+xml"}) + + + def add_item_elements(self, handler, item): + """ modified from Atom1Feed.add_item_elements """ + handler.addQuickElement(u"title", item['title']) + + # add a OPDS Navigation link if there's no enclosure + if item['enclosure'] is None: + handler.addQuickElement(u"link", u"", {u"href": item['link'], u"rel": u"subsection", u"type": u"application/atom+xml"}) + # add a "green book" icon + handler.addQuickElement(u"link", '', + {u"rel": u"http://opds-spec.org/thumbnail", + u"href": self._book_parent_img, + u"length": self._book_parent_img_size, + u"type": u"image/png"}) + if item['pubdate'] is not None: + # FIXME: rfc3339_date is undefined, is this ever run? + handler.addQuickElement(u"updated", rfc3339_date(item['pubdate']).decode('utf-8')) + + # Author information. + if item['author_name'] is not None: + handler.startElement(u"author", {}) + handler.addQuickElement(u"name", item['author_name']) + if item['author_email'] is not None: + handler.addQuickElement(u"email", item['author_email']) + if item['author_link'] is not None: + handler.addQuickElement(u"uri", item['author_link']) + handler.endElement(u"author") + + # Unique ID. + if item['unique_id'] is not None: + unique_id = item['unique_id'] + else: + # FIXME: get_tag_uri is undefined, is this ever run? + unique_id = get_tag_uri(item['link'], item['pubdate']) + handler.addQuickElement(u"id", unique_id) + + # Summary. + # OPDS needs type=text + if item['description'] is not None: + handler.addQuickElement(u"summary", item['description'], {u"type": u"text"}) + + # Enclosure as OPDS Acquisition Link + if item['enclosure'] is not None: + handler.addQuickElement(u"link", '', + {u"rel": u"http://opds-spec.org/acquisition", + u"href": item['enclosure'].url, + u"length": item['enclosure'].length, + u"type": item['enclosure'].mime_type}) + # add a "red book" icon + handler.addQuickElement(u"link", '', + {u"rel": u"http://opds-spec.org/thumbnail", + u"href": self._book_img, + u"length": self._book_img_size, + u"type": u"image/png"}) + + # Categories. + for cat in item['categories']: + handler.addQuickElement(u"category", u"", {u"term": cat}) + + # Rights. + if item['item_copyright'] is not None: + handler.addQuickElement(u"rights", item['item_copyright']) + + +class AcquisitionFeed(Feed): + feed_type = OPDSFeed + link = u'http://www.wolnelektury.pl/' + item_enclosure_mime_type = "application/epub+zip" + author_name = u"Wolne Lektury" + author_link = u"http://www.wolnelektury.pl/" + + def item_title(self, book): + return book.title + + def item_description(self): + return u'' + + def item_link(self, book): + return book.get_absolute_url() + + def item_author_name(self, book): + try: + return book.tags.filter(category='author')[0].name + except KeyError: + return u'' + + def item_author_link(self, book): + try: + return book.tags.filter(category='author')[0].get_absolute_url() + except KeyError: + return u'' + + def item_enclosure_url(self, book): + return full_url(book.epub_file.url) if book.epub_file else None + + def item_enclosure_length(self, book): + return book.epub_file.size if book.epub_file else None + +@piwik_track +class RootFeed(Feed): + feed_type = OPDSFeed + title = u'Wolne Lektury' + link = u'http://wolnelektury.pl/' + description = u"Spis utworów na stronie http://WolneLektury.pl" + author_name = u"Wolne Lektury" + author_link = u"http://wolnelektury.pl/" + + def items(self): + return _root_feeds + + def item_title(self, item): + return item['title'] + + def item_link(self, item): + return reverse(item['link'], args=item['link_args']) + + def item_description(self, item): + return item['description'] + +@piwik_track +class ByCategoryFeed(Feed): + feed_type = OPDSFeed + link = u'http://wolnelektury.pl/' + description = u"Spis utworów na stronie http://WolneLektury.pl" + author_name = u"Wolne Lektury" + author_link = u"http://wolnelektury.pl/" + + def get_object(self, request, category): + feed = [feed for feed in _root_feeds if feed['category'] == category] + if feed: + feed = feed[0] + else: + raise Http404 + + return feed + + def title(self, feed): + return feed['title'] + + def items(self, feed): + return Tag.objects.filter(category=feed['category']).exclude(items=None) + + def item_title(self, item): + return item.name + + def item_link(self, item): + return reverse("opds_by_tag", args=[item.category, item.slug]) + + def item_description(self): + return u'' + +@piwik_track +class ByTagFeed(AcquisitionFeed): + def link(self, tag): + return tag.get_absolute_url() + + def title(self, tag): + return tag.name + + def description(self, tag): + return u"Spis utworów na stronie http://WolneLektury.pl" + + def get_object(self, request, category, slug): + return get_object_or_404(Tag, category=category, slug=slug) + + def items(self, tag): + return Book.tagged_top_level([tag]) + + +@factory_decorator(logged_in_or_basicauth()) +@piwik_track +class UserFeed(Feed): + feed_type = OPDSFeed + link = u'http://www.wolnelektury.pl/' + description = u"PóÅki użytkownika na stronie http://WolneLektury.pl" + author_name = u"Wolne Lektury" + author_link = u"http://wolnelektury.pl/" + + def get_object(self, request): + return request.user + + def title(self, user): + return u"PóÅki użytkownika %s" % user.username + + def items(self, user): + return Tag.objects.filter(category='set', user=user).exclude(items=None) + + def item_title(self, item): + return item.name + + def item_link(self, item): + return reverse("opds_user_set", args=[item.slug]) + + def item_description(self): + return u'' + + +@factory_decorator(logged_in_or_basicauth()) +@piwik_track +class UserSetFeed(AcquisitionFeed): + def link(self, tag): + return tag.get_absolute_url() + + def title(self, tag): + return tag.name + + def description(self, tag): + return u"Spis utworów na stronie http://WolneLektury.pl" + + def get_object(self, request, slug): + return get_object_or_404(Tag, category='set', slug=slug, user=request.user) + + def items(self, tag): + return Book.tagged.with_any([tag]) + + +@piwik_track +class SearchFeed(AcquisitionFeed): + description = u"Wyniki wyszukiwania na stronie WolneLektury.pl" + title = u"Wyniki wyszukiwania" + + QUOTE_OR_NOT = r'(?:(?=["])"([^"]+)"|([^ ]+))' + INLINE_QUERY_RE = re.compile( + r"author:" + QUOTE_OR_NOT + + "|translator:" + QUOTE_OR_NOT + + "|title:" + QUOTE_OR_NOT + + "|categories:" + QUOTE_OR_NOT + + "|description:" + QUOTE_OR_NOT + + "|text:" + QUOTE_OR_NOT + ) + MATCHES = { + 'author': (0, 1), + 'translator': (2, 3), + 'title': (4, 5), + 'categories': (6, 7), + 'description': (8, 9), + 'text': (10, 11), + } + + PARAMS_TO_FIELDS = { + 'author': 'authors', + 'translator': 'translators', + # 'title': 'title', + 'categories': 'tag_name_pl', + 'description': 'text', + # 'text': 'text', + } + + ATOM_PLACEHOLDER = re.compile(r"^{(atom|opds):\w+}$") + + def get_object(self, request): + """ + For OPDS 1.1 We should handle a query for search terms + and criteria provided either as opensearch or 'inline' query. + OpenSearch defines fields: atom:author, atom:contributor (treated as translator), + atom:title. Inline query provides author, title, categories (treated as book tags), + description (treated as content search terms). + + if search terms are provided, we shall search for books + according to Hint information (from author & contributror & title). + + but if search terms are empty, we should do a different search + (perhaps for is_book=True) + + """ + + query = request.GET.get('q', '') + + inline_criteria = re.findall(self.INLINE_QUERY_RE, query) + if inline_criteria: + remains = re.sub(self.INLINE_QUERY_RE, '', query) + remains = re.sub(r'[ \t]+', ' ', remains) + + def get_criteria(criteria, name): + for c in criteria: + for p in self.MATCHES[name]: + if c[p]: + if p % 2 == 0: + return c[p].replace('+', ' ') + return c[p] + return None + + criteria = dict(map( + lambda cn: (cn, get_criteria(inline_criteria, cn)), + ['author', 'translator', 'title', 'categories', + 'description', 'text'])) + query = remains + # empty query and text set case? + log.debug("Inline query = [%s], criteria: %s" % (query, criteria)) + else: + def remove_dump_data(val): + """Some clients don't get opds placeholders and just send them.""" + if self.ATOM_PLACEHOLDER.match(val): + return '' + return val + + criteria = dict([(cn, remove_dump_data(request.GET.get(cn, ''))) + for cn in self.MATCHES.keys()]) + # query is set above. + log.debug("Inline query = [%s], criteria: %s" % (query, criteria)) + + srch = Search() + + book_hit_filter = srch.index.Q(book_id__any=True) + filters = [book_hit_filter] + [srch.index.Q( + **{self.PARAMS_TO_FIELDS.get(cn, cn): criteria[cn]} + ) for cn in self.MATCHES.keys() if cn in criteria + if criteria[cn]] + + if query: + q = srch.index.query( + reduce(operator.or_, + [srch.index.Q(**{self.PARAMS_TO_FIELDS.get(cn, cn): query}) + for cn in self.MATCHES.keys()], + srch.index.Q())) + else: + q = srch.index.query(srch.index.Q()) + + q = srch.apply_filters(q, filters).field_limit(score=True, fields=['book_id']) + results = q.execute() + + book_scores = dict([(r['book_id'], r['score']) for r in results]) + books = Book.objects.filter(id__in=set([r['book_id'] for r in results])) + books = list(books) + books.sort(reverse=True, key=lambda book: book_scores[book.id]) + return books + + def get_link(self, query): + return "%s?q=%s" % (reverse('search'), query) + + def items(self, books): + try: + return books + except ValueError: + # too short a query + return [] diff --git a/src/pdcounter/__init__.py b/src/pdcounter/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/pdcounter/admin.py b/src/pdcounter/admin.py new file mode 100644 index 000000000..e2e3fc310 --- /dev/null +++ b/src/pdcounter/admin.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib import admin + +from pdcounter.models import BookStub, Author + + +class BookStubAdmin(admin.ModelAdmin): + list_display = ('title', 'author', 'slug', 'pd') + search_fields = ('title', 'author') + ordering = ('title',) + + prepopulated_fields = {'slug': ('title',)} + +class AuthorAdmin(admin.ModelAdmin): + list_display = ('name', 'slug', 'death') + search_fields = ('name',) + ordering = ('sort_key', 'name') + + prepopulated_fields = {'slug': ('name',), 'sort_key': ('name',),} + + +admin.site.register(BookStub, BookStubAdmin) +admin.site.register(Author, AuthorAdmin) diff --git a/src/pdcounter/fixtures/lista.json b/src/pdcounter/fixtures/lista.json new file mode 100644 index 000000000..b73b5433e --- /dev/null +++ b/src/pdcounter/fixtures/lista.json @@ -0,0 +1,9699 @@ +[ + { + "pk": 1, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "amiel", + "slug": "irit-amiel", + "gazeta_link": "", + "name": "Irit Amiel" + } + }, + { + "pk": 2, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "anczyc", + "slug": "wladyslaw-anczyc", + "gazeta_link": "", + "name": "W\u0142adys\u0142aw Anczyc" + } + }, + { + "pk": 3, + "model": "pdcounter.author", + "fields": { + "death": 1944, + "description": "", + "wiki_link": "", + "sort_key": "baczynski", + "slug": "krzysztof-kamil-baczynski", + "gazeta_link": "", + "name": "Krzysztof Kamil Baczy\u0144ski" + } + }, + { + "pk": 4, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "balucki", + "slug": "michal-balucki", + "gazeta_link": "", + "name": "Micha\u0142 Ba\u0142ucki" + } + }, + { + "pk": 5, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "baranczak", + "slug": "stanislaw-baranczak", + "gazeta_link": "", + "name": "Stanis\u0142aw Bara\u0144czak" + } + }, + { + "pk": 6, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "bedier", + "slug": "joseph-bedier", + "gazeta_link": "", + "name": "Joseph B\u00e9dier" + } + }, + { + "pk": 7, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "belza", + "slug": "wladyslaw-belza", + "gazeta_link": "", + "name": "W\u0142adys\u0142aw Be\u0142za" + } + }, + { + "pk": 8, + "model": "pdcounter.author", + "fields": { + "death": 1983, + "description": "", + "wiki_link": "", + "sort_key": "bialoszewski", + "slug": "miron-bialoszewski", + "gazeta_link": "", + "name": "Miron Bia\u0142oszewski" + } + }, + { + "pk": 9, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "bielowski", + "slug": "august-bielowski", + "gazeta_link": "", + "name": "August Bielowski" + } + }, + { + "pk": 10, + "model": "pdcounter.author", + "fields": { + "death": 2009, + "description": "", + "wiki_link": "", + "sort_key": "blonski", + "slug": "jan-blonski", + "gazeta_link": "", + "name": "Jan B\u0142o\u0144ski" + } + }, + { + "pk": 11, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "bordkiewicz", + "slug": "stefan-bordkiewicz", + "gazeta_link": "", + "name": "Stefan Bordkiewicz" + } + }, + { + "pk": 12, + "model": "pdcounter.author", + "fields": { + "death": 1951, + "description": "", + "wiki_link": "", + "sort_key": "borowski", + "slug": "tadeusz-borowski", + "gazeta_link": "", + "name": "Tadeusz Borowski" + } + }, + { + "pk": 13, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "bracia", + "slug": "grimm-bracia", + "gazeta_link": "", + "name": "Grimm Bracia" + } + }, + { + "pk": 14, + "model": "pdcounter.author", + "fields": { + "death": 1966, + "description": "", + "wiki_link": "", + "sort_key": "brzechwa", + "slug": "jan-brzechwa", + "gazeta_link": "", + "name": "Jan Brzechwa" + } + }, + { + "pk": 15, + "model": "pdcounter.author", + "fields": { + "death": 1940, + "description": "", + "wiki_link": "", + "sort_key": "bulhakow", + "slug": "michal-bulhakow", + "gazeta_link": "", + "name": "Micha\u0142 Bu\u0142hakow" + } + }, + { + "pk": 16, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "burnett", + "slug": "frances-hodgson-burnett", + "gazeta_link": "", + "name": "Frances Hodgson Burnett" + } + }, + { + "pk": 17, + "model": "pdcounter.author", + "fields": { + "death": 1960, + "description": "", + "wiki_link": "", + "sort_key": "camus", + "slug": "albert-camus", + "gazeta_link": "", + "name": "Albert Camus" + } + }, + { + "pk": 18, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "cervantes", + "slug": "miguel-cervantes", + "gazeta_link": "", + "name": "Miguel Cervantes" + } + }, + { + "pk": 19, + "model": "pdcounter.author", + "fields": { + "death": 1976, + "description": "", + "wiki_link": "", + "sort_key": "christie", + "slug": "agatha-christie", + "gazeta_link": "", + "name": "Agatha Christie" + } + }, + { + "pk": 20, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "chwin", + "slug": "stefan-chwin", + "gazeta_link": "", + "name": "Stefan Chwin" + } + }, + { + "pk": 21, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "collodi", + "slug": "carlo-collodi", + "gazeta_link": "", + "name": "Carlo Collodi" + } + }, + { + "pk": 22, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "conrad", + "slug": "joseph-conrad", + "gazeta_link": "", + "name": "Joseph Conrad" + } + }, + { + "pk": 23, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "czechowicz", + "slug": "jozef-czechowicz", + "gazeta_link": "", + "name": "J\u00f3zef Czechowicz" + } + }, + { + "pk": 24, + "model": "pdcounter.author", + "fields": { + "death": 1965, + "description": "", + "wiki_link": "", + "sort_key": "dabrowska", + "slug": "maria-dabrowska", + "gazeta_link": "", + "name": "Maria D\u0105browska" + } + }, + { + "pk": 25, + "model": "pdcounter.author", + "fields": { + "death": 1990, + "description": "", + "wiki_link": "", + "sort_key": "dahl", + "slug": "ronald-dahl", + "gazeta_link": "", + "name": "Ronald Dahl" + } + }, + { + "pk": 26, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "dennhoff-czarnocki", + "slug": "waclaw-dennhoff-czarnocki", + "gazeta_link": "", + "name": "Wac\u0142aw Dennhoff-Czarnocki" + } + }, + { + "pk": 27, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "dmowski", + "slug": "roman-dmowski", + "gazeta_link": "", + "name": "Roman Dmowski" + } + }, + { + "pk": 28, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "dolega-mostowicz", + "slug": "tadeusz-dolega-mostowicz", + "gazeta_link": "", + "name": "Tadeusz Do\u0142\u0119ga-Mostowicz" + } + }, + { + "pk": 29, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "dostojewski", + "slug": "fiodor-dostojewski", + "gazeta_link": "", + "name": "Fiodor Dostojewski" + } + }, + { + "pk": 30, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "eco", + "slug": "umberto-eco", + "gazeta_link": "", + "name": "Umberto Eco" + } + }, + { + "pk": 31, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "erynbergh", + "slug": "gustawa-erynbergh", + "gazeta_link": "", + "name": "Gustawa Erynbergh" + } + }, + { + "pk": 32, + "model": "pdcounter.author", + "fields": { + "death": 1985, + "description": "", + "wiki_link": "", + "sort_key": "fiedler", + "slug": "arkady-fiedler", + "gazeta_link": "", + "name": "Arkady Fiedler" + } + }, + { + "pk": 33, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "fink", + "slug": "ida-fink", + "gazeta_link": "", + "name": "Ida Fink" + } + }, + { + "pk": 34, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "flaubert", + "slug": "gustaw-flaubert", + "gazeta_link": "", + "name": "Gustaw Flaubert" + } + }, + { + "pk": 35, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "fredro", + "slug": "aleksander-fredro", + "gazeta_link": "", + "name": "Aleksander Fredro" + } + }, + { + "pk": 36, + "model": "pdcounter.author", + "fields": { + "death": 1953, + "description": "", + "wiki_link": "", + "sort_key": "galczynski", + "slug": "konstanty-ildefons-galczynski", + "gazeta_link": "", + "name": "Konstanty Ildefons Ga\u0142czy\u0144ski" + } + }, + { + "pk": 37, + "model": "pdcounter.author", + "fields": { + "death": 1969, + "description": "", + "wiki_link": "", + "sort_key": "gombrowicz", + "slug": "witold-gombrowicz", + "gazeta_link": "", + "name": "Witold Gombrowicz" + } + }, + { + "pk": 38, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "gomulicki", + "slug": "wiktor-gomulicki", + "gazeta_link": "", + "name": "Wiktor Gomulicki" + } + }, + { + "pk": 39, + "model": "pdcounter.author", + "fields": { + "death": 1977, + "description": "", + "wiki_link": "", + "sort_key": "goscinny", + "slug": "rene-goscinny", + "gazeta_link": "", + "name": "Ren\u00e9 Goscinny" + } + }, + { + "pk": 40, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "grabinski", + "slug": "stefan-grabinski", + "gazeta_link": "", + "name": "Stefan Grabi\u0144ski" + } + }, + { + "pk": 41, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "grass", + "slug": "guenter-grass", + "gazeta_link": "", + "name": "G\u00fcnter Grass" + } + }, + { + "pk": 42, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "grynberg", + "slug": "henryk-grynberg", + "gazeta_link": "", + "name": "Henryk Grynberg" + } + }, + { + "pk": 43, + "model": "pdcounter.author", + "fields": { + "death": 1998, + "description": "", + "wiki_link": "", + "sort_key": "herbert", + "slug": "zbigniew-herbert", + "gazeta_link": "", + "name": "Zbigniew Herbert" + } + }, + { + "pk": 44, + "model": "pdcounter.author", + "fields": { + "death": 2000, + "description": "", + "wiki_link": "", + "sort_key": "herling-grudzinski", + "slug": "gustaw-herling-grudzinski", + "gazeta_link": "", + "name": "Gustaw Herling-Grudzi\u0144ski" + } + }, + { + "pk": 45, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "homer", + "slug": "homer", + "gazeta_link": "", + "name": "Homer" + } + }, + { + "pk": 46, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "horacy", + "slug": "horacy", + "gazeta_link": "", + "name": "Horacy" + } + }, + { + "pk": 47, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "huelle", + "slug": "pawel-huelle", + "gazeta_link": "", + "name": "Pawe\u0142 Huelle" + } + }, + { + "pk": 48, + "model": "pdcounter.author", + "fields": { + "death": 1980, + "description": "", + "wiki_link": "", + "sort_key": "iwaszkiewicz", + "slug": "jaroslaw-iwaszkiewicz", + "gazeta_link": "", + "name": "Jaros\u0142aw Iwaszkiewicz" + } + }, + { + "pk": 49, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "jachowicz", + "slug": "stanislaw-jachowicz", + "gazeta_link": "", + "name": "Stanis\u0142aw Jachowicz" + } + }, + { + "pk": 50, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "janion", + "slug": "maria-janion", + "gazeta_link": "", + "name": "Maria Janion" + } + }, + { + "pk": 51, + "model": "pdcounter.author", + "fields": { + "death": 1983, + "description": "", + "wiki_link": "", + "sort_key": "jastrun", + "slug": "mieczyslaw-jastrun", + "gazeta_link": "", + "name": "Mieczys\u0142aw Jastrun" + } + }, + { + "pk": 52, + "model": "pdcounter.author", + "fields": { + "death": 2003, + "description": "", + "wiki_link": "", + "sort_key": "jurgielewiczowa", + "slug": "irena-jurgielewiczowa", + "gazeta_link": "", + "name": "Irena Jurgielewiczowa" + } + }, + { + "pk": 53, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "kafka", + "slug": "franz-kafka", + "gazeta_link": "", + "name": "Franz Kafka" + } + }, + { + "pk": 54, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "kakolewski", + "slug": "krzysztof-kakolewski", + "gazeta_link": "", + "name": "Krzysztof K\u0105kolewski" + } + }, + { + "pk": 55, + "model": "pdcounter.author", + "fields": { + "death": 1978, + "description": "", + "wiki_link": "", + "sort_key": "kaminski", + "slug": "aleksander-kaminski", + "gazeta_link": "", + "name": "Aleksander Kami\u0144ski" + } + }, + { + "pk": 56, + "model": "pdcounter.author", + "fields": { + "death": 2007, + "description": "", + "wiki_link": "", + "sort_key": "kapuscinski", + "slug": "ryszard-kapuscinski", + "gazeta_link": "", + "name": "Ryszard Kapu\u015bci\u0144ski" + } + }, + { + "pk": 57, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "karpinski", + "slug": "franciszek-karpinski", + "gazeta_link": "", + "name": "Franciszek Karpi\u0144ski" + } + }, + { + "pk": 58, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "kasdepke", + "slug": "grzegorz-kasdepke", + "gazeta_link": "", + "name": "Grzegorz Kasdepke" + } + }, + { + "pk": 59, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "kasprowicz", + "slug": "jan-kasprowicz", + "gazeta_link": "", + "name": "Jan Kasprowicz" + } + }, + { + "pk": 60, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "kochanowski", + "slug": "jan-kochanowski", + "gazeta_link": "", + "name": "Jan Kochanowski" + } + }, + { + "pk": 61, + "model": "pdcounter.author", + "fields": { + "death": 2009, + "description": "", + "wiki_link": "", + "sort_key": "kolakowski", + "slug": "leszek-kolakowski", + "gazeta_link": "", + "name": "Leszek Ko\u0142akowski" + } + }, + { + "pk": 62, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "kolberg", + "slug": "oskar-kolberg", + "gazeta_link": "", + "name": "Oskar Kolberg" + } + }, + { + "pk": 63, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "konopnicka", + "slug": "maria-konopnicka", + "gazeta_link": "", + "name": "Maria Konopnicka" + } + }, + { + "pk": 64, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "konwicki", + "slug": "tadeusz-konwicki", + "gazeta_link": "", + "name": "Tadeusz Konwicki" + } + }, + { + "pk": 65, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "kowalski", + "slug": "franciszek-kowalski", + "gazeta_link": "", + "name": "Franciszek Kowalski" + } + }, + { + "pk": 66, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "kozakiewicz", + "slug": "jan-kozakiewicz", + "gazeta_link": "", + "name": "Jan Kozakiewicz" + } + }, + { + "pk": 67, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "krall", + "slug": "hanna-krall", + "gazeta_link": "", + "name": "Hanna Krall" + } + }, + { + "pk": 68, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "krasicki", + "slug": "ignacy-krasicki", + "gazeta_link": "", + "name": "Ignacy Krasicki" + } + }, + { + "pk": 69, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "krasinski", + "slug": "zygmunt-krasinski", + "gazeta_link": "", + "name": "Zygmunt Krasi\u0144ski" + } + }, + { + "pk": 70, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "kraszewski", + "slug": "ignacy-kraszewski", + "gazeta_link": "", + "name": "Ignacy Kraszewski" + } + }, + { + "pk": 71, + "model": "pdcounter.author", + "fields": { + "death": 2004, + "description": "", + "wiki_link": "", + "sort_key": "kubiak", + "slug": "zygmunt-kubiak", + "gazeta_link": "", + "name": "Zygmunt Kubiak" + } + }, + { + "pk": 72, + "model": "pdcounter.author", + "fields": { + "death": 1989, + "description": "", + "wiki_link": "", + "sort_key": "kuncewiczowa", + "slug": "maria-kuncewiczowa", + "gazeta_link": "", + "name": "Maria Kuncewiczowa" + } + }, + { + "pk": 73, + "model": "pdcounter.author", + "fields": { + "death": 1993, + "description": "", + "wiki_link": "", + "sort_key": "kusniewicz", + "slug": "andrzej-kusniewicz", + "gazeta_link": "", + "name": "Andrzej Ku\u015bniewicz" + } + }, + { + "pk": 74, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "le-guin", + "slug": "ursula-le-guin", + "gazeta_link": "", + "name": "Ursula Le Guin" + } + }, + { + "pk": 75, + "model": "pdcounter.author", + "fields": { + "death": 1956, + "description": "", + "wiki_link": "", + "sort_key": "lechon", + "slug": "jan-lechon", + "gazeta_link": "", + "name": "Jan Lecho\u0144" + } + }, + { + "pk": 76, + "model": "pdcounter.author", + "fields": { + "death": 2006, + "description": "", + "wiki_link": "", + "sort_key": "lem", + "slug": "stanislaw-lem", + "gazeta_link": "", + "name": "Stanis\u0142aw Lem" + } + }, + { + "pk": 77, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "lenartowicz", + "slug": "teofil-lenartowicz", + "gazeta_link": "", + "name": "Teofil Lenartowicz" + } + }, + { + "pk": 78, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "lesmian", + "slug": "boleslaw-lesmian", + "gazeta_link": "", + "name": "Boles\u0142aw Le\u015bmian" + } + }, + { + "pk": 79, + "model": "pdcounter.author", + "fields": { + "death": 1963, + "description": "", + "wiki_link": "", + "sort_key": "lewis", + "slug": "clive-staples-lewis", + "gazeta_link": "", + "name": "Clive Staples Lewis" + } + }, + { + "pk": 80, + "model": "pdcounter.author", + "fields": { + "death": 2002, + "description": "", + "wiki_link": "", + "sort_key": "lindgren", + "slug": "astrid-lindgren", + "gazeta_link": "", + "name": "Astrid Lindgren" + } + }, + { + "pk": 81, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "lipska", + "slug": "ewa-lipska", + "gazeta_link": "", + "name": "Ewa Lipska" + } + }, + { + "pk": 82, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "lubinski", + "slug": "ludwik-pomian-lubinski", + "gazeta_link": "", + "name": "Ludwik Pomian \u0141ubi\u0144ski" + } + }, + { + "pk": 83, + "model": "pdcounter.author", + "fields": { + "death": 1985, + "description": "", + "wiki_link": "", + "sort_key": "mackiewicz", + "slug": "jozef-mackiewicz", + "gazeta_link": "", + "name": "J\u00f3zef Mackiewicz" + } + }, + { + "pk": 84, + "model": "pdcounter.author", + "fields": { + "death": 1953, + "description": "", + "wiki_link": "", + "sort_key": "makuszynski", + "slug": "kornel-makuszynski", + "gazeta_link": "", + "name": "Kornel Makuszy\u0144ski" + } + }, + { + "pk": 85, + "model": "pdcounter.author", + "fields": { + "death": 1955, + "description": "", + "wiki_link": "", + "sort_key": "mann", + "slug": "thomas-mann", + "gazeta_link": "", + "name": "Thomas Mann" + } + }, + { + "pk": 86, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "marquez", + "slug": "gabriel-garcia-marquez", + "gazeta_link": "", + "name": "Gabriel Garcia Marquez" + } + }, + { + "pk": 87, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "mickiewicz", + "slug": "adam-mickiewicz", + "gazeta_link": "", + "name": "Adam Mickiewicz" + } + }, + { + "pk": 88, + "model": "pdcounter.author", + "fields": { + "death": 2004, + "description": "", + "wiki_link": "", + "sort_key": "milosz", + "slug": "czeslaw-milosz", + "gazeta_link": "", + "name": "Czes\u0142aw Mi\u0142osz" + } + }, + { + "pk": 89, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "minkowski", + "slug": "aleksander-minkowski", + "gazeta_link": "", + "name": "Aleksander Minkowski" + } + }, + { + "pk": 90, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "moliere", + "slug": "moliere", + "gazeta_link": "", + "name": "Moli\u00e8re" + } + }, + { + "pk": 91, + "model": "pdcounter.author", + "fields": { + "death": 1952, + "description": "", + "wiki_link": "", + "sort_key": "molnar", + "slug": "ferenc-molnar", + "gazeta_link": "", + "name": "Ferenc Moln\u00e1r" + } + }, + { + "pk": 92, + "model": "pdcounter.author", + "fields": { + "death": 1942, + "description": "", + "wiki_link": "", + "sort_key": "montgomery", + "slug": "lucy-maud-montgomery", + "gazeta_link": "", + "name": "Lucy Maud Montgomery" + } + }, + { + "pk": 93, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "morsztyn", + "slug": "jan-andrzej-morsztyn", + "gazeta_link": "", + "name": "Jan Andrzej Morsztyn" + } + }, + { + "pk": 94, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "morsztyn", + "slug": "zbigniew-morsztyn", + "gazeta_link": "", + "name": "Zbigniew Morsztyn" + } + }, + { + "pk": 95, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "mrozek", + "slug": "slawomir-mrozek", + "gazeta_link": "", + "name": "S\u0142awomir Mro\u017cek" + } + }, + { + "pk": 96, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "musierowicz", + "slug": "malgorzata-musierowicz", + "gazeta_link": "", + "name": "Ma\u0142gorzata Musierowicz" + } + }, + { + "pk": 97, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "mysliwski", + "slug": "wieslaw-mysliwski", + "gazeta_link": "", + "name": "Wies\u0142aw My\u015bliwski" + } + }, + { + "pk": 98, + "model": "pdcounter.author", + "fields": { + "death": 1977, + "description": "", + "wiki_link": "", + "sort_key": "nabokov", + "slug": "vladimir-nabokov", + "gazeta_link": "", + "name": "Vladimir Nabokov" + } + }, + { + "pk": 99, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "naborowski", + "slug": "daniel-naborowski", + "gazeta_link": "", + "name": "Daniel Naborowski" + } + }, + { + "pk": 100, + "model": "pdcounter.author", + "fields": { + "death": 1954, + "description": "", + "wiki_link": "", + "sort_key": "nalkowska", + "slug": "zofia-nalkowska", + "gazeta_link": "", + "name": "Zofia Na\u0142kowska" + } + }, + { + "pk": 101, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "niemcewicz", + "slug": "julian-ursyn-niemcewicz", + "gazeta_link": "", + "name": "Julian Ursyn Niemcewicz" + } + }, + { + "pk": 102, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "niziurski", + "slug": "edmund-niziurski", + "gazeta_link": "", + "name": "Edmund Niziurski" + } + }, + { + "pk": 103, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "norwid", + "slug": "cyprian-kamil-norwid", + "gazeta_link": "", + "name": "Cyprian Kamil Norwid" + } + }, + { + "pk": 104, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "nowakowski", + "slug": "marek-nowakowski", + "gazeta_link": "", + "name": "Marek Nowakowski" + } + }, + { + "pk": 105, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "olech", + "slug": "joanna-olech", + "gazeta_link": "", + "name": "Joanna Olech" + } + }, + { + "pk": 106, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "onichimowska", + "slug": "anna-onichimowska", + "gazeta_link": "", + "name": "Anna Onichimowska" + } + }, + { + "pk": 107, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "oppman", + "slug": "artur-oppman", + "gazeta_link": "", + "name": "Artur Oppman" + } + }, + { + "pk": 108, + "model": "pdcounter.author", + "fields": { + "death": 1950, + "description": "", + "wiki_link": "", + "sort_key": "orwell", + "slug": "george-orwell", + "gazeta_link": "", + "name": "George Orwell" + } + }, + { + "pk": 109, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "orzeszkowa", + "slug": "eliza-orzeszkowa", + "gazeta_link": "", + "name": "Eliza Orzeszkowa" + } + }, + { + "pk": 110, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "ostrowska", + "slug": "bronislawa-ostrowska", + "gazeta_link": "", + "name": "Bronis\u0142awa Ostrowska" + } + }, + { + "pk": 111, + "model": "pdcounter.author", + "fields": { + "death": 1978, + "description": "", + "wiki_link": "", + "sort_key": "parandowski", + "slug": "jan-parandowski", + "gazeta_link": "", + "name": "Jan Parandowski" + } + }, + { + "pk": 112, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "pasek", + "slug": "jan-chryzostom-pasek", + "gazeta_link": "", + "name": "Jan Chryzostom Pasek" + } + }, + { + "pk": 113, + "model": "pdcounter.author", + "fields": { + "death": 1945, + "description": "", + "wiki_link": "", + "sort_key": "pawlikowska-jasnorzewska", + "slug": "maria-pawlikowska-jasnorzewska", + "gazeta_link": "", + "name": "Maria Pawlikowska-Jasnorzewska" + } + }, + { + "pk": 114, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "pilch", + "slug": "jerzy-pilch", + "gazeta_link": "", + "name": "Jerzy Pilch" + } + }, + { + "pk": 115, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "platon", + "slug": "platon", + "gazeta_link": "", + "name": "Platon" + } + }, + { + "pk": 116, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "pol", + "slug": "wincenty-pol", + "gazeta_link": "", + "name": "Wincenty Pol" + } + }, + { + "pk": 117, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "potocki", + "slug": "waclaw-potocki", + "gazeta_link": "", + "name": "Wac\u0142aw Potocki" + } + }, + { + "pk": 118, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "prus", + "slug": "boleslaw-prus", + "gazeta_link": "", + "name": "Boles\u0142aw Prus" + } + }, + { + "pk": 119, + "model": "pdcounter.author", + "fields": { + "death": 1940, + "description": "", + "wiki_link": "", + "sort_key": "przerwa-tetmajer", + "slug": "kazimierz-przerwa-tetmajer", + "gazeta_link": "", + "name": "Kazimierz Przerwa-Tetmajer" + } + }, + { + "pk": 120, + "model": "pdcounter.author", + "fields": { + "death": 1970, + "description": "", + "wiki_link": "", + "sort_key": "przybos", + "slug": "julian-przybos", + "gazeta_link": "", + "name": "Julian Przybo\u015b" + } + }, + { + "pk": 121, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "rej", + "slug": "mikolaj-rej", + "gazeta_link": "", + "name": "Miko\u0142aj Rej" + } + }, + { + "pk": 122, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "reymont", + "slug": "wladyslaw-stanislaw-reymont", + "gazeta_link": "", + "name": "W\u0142adys\u0142aw Stanis\u0142aw Reymont" + } + }, + { + "pk": 123, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "rozewicz", + "slug": "tadeusz-rozewicz", + "gazeta_link": "", + "name": "Tadeusz R\u00f3\u017cewicz" + } + }, + { + "pk": 124, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "rymkiewicz", + "slug": "jaroslaw-rymkiewicz", + "gazeta_link": "", + "name": "Jaros\u0142aw Rymkiewicz" + } + }, + { + "pk": 125, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "rzewuski", + "slug": "henryk-rzewuski", + "gazeta_link": "", + "name": "Henryk Rzewuski" + } + }, + { + "pk": 126, + "model": "pdcounter.author", + "fields": { + "death": 1944, + "description": "", + "wiki_link": "", + "sort_key": "saint-exupery", + "slug": "antoine-de-saint-exupery", + "gazeta_link": "", + "name": "Antoine de Saint Exup\u00e9ry" + } + }, + { + "pk": 127, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "sapkowski", + "slug": "andrzej-sapkowski", + "gazeta_link": "", + "name": "Andrzej Sapkowski" + } + }, + { + "pk": 128, + "model": "pdcounter.author", + "fields": { + "death": 1942, + "description": "", + "wiki_link": "", + "sort_key": "schulz", + "slug": "bruno-schulz", + "gazeta_link": "", + "name": "Bruno Schulz" + } + }, + { + "pk": 129, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "sempe", + "slug": "jean-jacques-sempe", + "gazeta_link": "", + "name": "Jean-Jacques Semp\u00e9" + } + }, + { + "pk": 130, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "shakespeare", + "slug": "william-shakespeare", + "gazeta_link": "", + "name": "William Shakespeare" + } + }, + { + "pk": 131, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "sienkiewicz", + "slug": "henryk-sienkiewicz", + "gazeta_link": "", + "name": "Henryk Sienkiewicz" + } + }, + { + "pk": 132, + "model": "pdcounter.author", + "fields": { + "death": 1991, + "description": "", + "wiki_link": "", + "sort_key": "singer", + "slug": "isaac-bashevis-singer", + "gazeta_link": "", + "name": "Isaac Bashevis Singer" + } + }, + { + "pk": 133, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "skalkowski", + "slug": "marceli-skalkowski", + "gazeta_link": "", + "name": "Marceli Ska\u0142kowski" + } + }, + { + "pk": 134, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "skarga", + "slug": "piotr-skarga", + "gazeta_link": "", + "name": "Piotr Skarga" + } + }, + { + "pk": 135, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "slowacki", + "slug": "juliusz-slowacki", + "gazeta_link": "", + "name": "Juliusz S\u0142owacki" + } + }, + { + "pk": 136, + "model": "pdcounter.author", + "fields": { + "death": 1957, + "description": "", + "wiki_link": "", + "sort_key": "staff", + "slug": "leopold-staff", + "gazeta_link": "", + "name": "Leopold Staff" + } + }, + { + "pk": 137, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "staszic", + "slug": "stanislaw-staszic", + "gazeta_link": "", + "name": "Stanis\u0142aw Staszic" + } + }, + { + "pk": 138, + "model": "pdcounter.author", + "fields": { + "death": 1968, + "description": "", + "wiki_link": "", + "sort_key": "steinbeck", + "slug": "john-steinbeck", + "gazeta_link": "", + "name": "John Steinbeck" + } + }, + { + "pk": 139, + "model": "pdcounter.author", + "fields": { + "death": 1969, + "description": "", + "wiki_link": "", + "sort_key": "stempowski", + "slug": "jerzy-stempowski", + "gazeta_link": "", + "name": "Jerzy Stempowski" + } + }, + { + "pk": 140, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "stevenson", + "slug": "robert-louis-stevenson", + "gazeta_link": "", + "name": "Robert Louis Stevenson" + } + }, + { + "pk": 141, + "model": "pdcounter.author", + "fields": { + "death": 1966, + "description": "", + "wiki_link": "", + "sort_key": "stryjkowski", + "slug": "julian-stryjkowski", + "gazeta_link": "", + "name": "Julian Stryjkowski" + } + }, + { + "pk": 142, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "suchodolski", + "slug": "rajnold-suchodolski", + "gazeta_link": "", + "name": "Rajnold Suchodolski" + } + }, + { + "pk": 143, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "swietochowski", + "slug": "aleksander-swietochowski", + "gazeta_link": "", + "name": "Aleksander \u015awi\u0119tochowski" + } + }, + { + "pk": 144, + "model": "pdcounter.author", + "fields": { + "death": 1992, + "description": "", + "wiki_link": "", + "sort_key": "szklarski", + "slug": "alfred-szklarski", + "gazeta_link": "", + "name": "Alfred Szklarski" + } + }, + { + "pk": 145, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "szymborska", + "slug": "wislawa-szymborska", + "gazeta_link": "", + "name": "Wis\u0142awa Szymborska" + } + }, + { + "pk": 146, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "tarnowski", + "slug": "wladyslaw-tarnowski", + "gazeta_link": "", + "name": "W\u0142adys\u0142aw Tarnowski" + } + }, + { + "pk": 147, + "model": "pdcounter.author", + "fields": { + "death": 2004, + "description": "", + "wiki_link": "", + "sort_key": "terakowska", + "slug": "dorota-terakowska", + "gazeta_link": "", + "name": "Dorota Terakowska" + } + }, + { + "pk": 148, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "thackeray", + "slug": "william-makepeace-thackeray", + "gazeta_link": "", + "name": "William Makepeace Thackeray" + } + }, + { + "pk": 149, + "model": "pdcounter.author", + "fields": { + "death": 2000, + "description": "", + "wiki_link": "", + "sort_key": "tischner", + "slug": "jozef-tischner", + "gazeta_link": "", + "name": "J\u00f3zef Tischner" + } + }, + { + "pk": 150, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "tokarczuk", + "slug": "olga-tokarczuk", + "gazeta_link": "", + "name": "Olga Tokarczuk" + } + }, + { + "pk": 151, + "model": "pdcounter.author", + "fields": { + "death": 1973, + "description": "", + "wiki_link": "", + "sort_key": "tolkien", + "slug": "john-ronald-reuel-tolkien", + "gazeta_link": "", + "name": "John Ronald Reuel Tolkien" + } + }, + { + "pk": 152, + "model": "pdcounter.author", + "fields": { + "death": 1953, + "description": "", + "wiki_link": "", + "sort_key": "tuwim", + "slug": "julian-tuwim", + "gazeta_link": "", + "name": "Julian Tuwim" + } + }, + { + "pk": 153, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "twain", + "slug": "mark-twain", + "gazeta_link": "", + "name": "Mark Twain" + } + }, + { + "pk": 154, + "model": "pdcounter.author", + "fields": { + "death": 2006, + "description": "", + "wiki_link": "", + "sort_key": "twardowski", + "slug": "jan-twardowski", + "gazeta_link": "", + "name": "Jan Twardowski" + } + }, + { + "pk": 155, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "tyrtajos", + "slug": "tyrtajos", + "gazeta_link": "", + "name": "Tyrtajos" + } + }, + { + "pk": 156, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "verne", + "slug": "jules-gabriel-verne", + "gazeta_link": "", + "name": "Jules Gabriel Verne" + } + }, + { + "pk": 157, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "wasilewski", + "slug": "edmund-wasilewski", + "gazeta_link": "", + "name": "Edmund Wasilewski" + } + }, + { + "pk": 158, + "model": "pdcounter.author", + "fields": { + "death": 1969, + "description": "", + "wiki_link": "", + "sort_key": "wierzynski", + "slug": "kazimierz-wierzynski", + "gazeta_link": "", + "name": "Kazimierz Wierzy\u0144ski" + } + }, + { + "pk": 159, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "witcher", + "slug": "moony-witcher", + "gazeta_link": "", + "name": "Moony Witcher" + } + }, + { + "pk": 160, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "witkiewicz", + "slug": "stanislaw-ignacy-witkiewicz", + "gazeta_link": "", + "name": "Stanis\u0142aw Ignacy Witkiewicz" + } + }, + { + "pk": 161, + "model": "pdcounter.author", + "fields": { + "death": 1976, + "description": "", + "wiki_link": "", + "sort_key": "wittlin", + "slug": "jozef-wittlin", + "gazeta_link": "", + "name": "J\u00f3zef Wittlin" + } + }, + { + "pk": 162, + "model": "pdcounter.author", + "fields": { + "death": 2005, + "description": "", + "wiki_link": "", + "sort_key": "wojtyla", + "slug": "karol-wojtyla", + "gazeta_link": "", + "name": "Karol Wojty\u0142a" + } + }, + { + "pk": 163, + "model": "pdcounter.author", + "fields": { + "death": 1975, + "description": "", + "wiki_link": "", + "sort_key": "wyka", + "slug": "kazimierz-wyka", + "gazeta_link": "", + "name": "Kazimierz Wyka" + } + }, + { + "pk": 164, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "wyspianski", + "slug": "stanislaw-wyspianski", + "gazeta_link": "", + "name": "Stanis\u0142aw Wyspia\u0144ski" + } + }, + { + "pk": 165, + "model": "pdcounter.author", + "fields": { + "death": null, + "description": "", + "wiki_link": "", + "sort_key": "zagajewski", + "slug": "adam-zagajewski", + "gazeta_link": "", + "name": "Adam Zagajewski" + } + }, + { + "pk": 166, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "zeromski", + "slug": "stefan-zeromski", + "gazeta_link": "", + "name": "Stefan \u017beromski" + } + }, + { + "pk": 167, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "zola", + "slug": "emil-zola", + "gazeta_link": "", + "name": "Emil Zola" + } + }, + { + "pk": 168, + "model": "pdcounter.author", + "fields": { + "death": 0, + "description": "", + "wiki_link": "", + "sort_key": "zygmunt", + "slug": "gloger-zygmunt", + "gazeta_link": "", + "name": "Gloger Zygmunt" + } + }, + { + "pk": 622, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jules Gabriel Verne", + "slug": "20-000-mil-podmorskiej-zeglugi", + "pd": 0, + "title": "20 000 mil podmorskiej \u017ceglugi" + } + }, + { + "pk": 629, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "a-coz-z-ta-dziecina", + "pd": 0, + "title": "A c\u00f3\u017c z t\u0105 dziecin\u0105" + } + }, + { + "pk": 437, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "abc", + "pd": 0, + "title": "ABC" + } + }, + { + "pk": 356, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "ach-juz-w-mym-rodzicielskim-domu", + "pd": 0, + "title": "Ach, ju\u017c w mym rodzicielskim domu" + } + }, + { + "pk": 110, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jan Brzechwa", + "slug": "akademia-pana-kleksa", + "pd": 2037, + "title": "Akademia Pana Kleksa" + } + }, + { + "pk": 3, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "albatros", + "pd": 0, + "title": "Albatros" + } + }, + { + "pk": 388, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Lucy Maud Montgomery", + "slug": "ania-z-zielonego-wzgorza", + "pd": null, + "title": "Ania z Zielonego Wzg\u00f3rza" + } + }, + { + "pk": 528, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "aniol-ognisty-moj-aniol-lewy", + "pd": 0, + "title": "Anio\u0142 ognisty \u2014 m\u00f3j anio\u0142 lewy" + } + }, + { + "pk": 529, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "anioly-stoja-na-rodzinnych-polach", + "pd": 0, + "title": "Anio\u0142y stoj\u0105 na rodzinnych polach" + } + }, + { + "pk": 301, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ignacy Krasicki", + "slug": "antymonachomachia", + "pd": 0, + "title": "Antymonachomachia" + } + }, + { + "pk": 83, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "apokalipsa-sw-jana", + "pd": 0, + "title": "Apokalipsa \u015bw. Jana" + } + }, + { + "pk": 609, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Julian Stryjkowski", + "slug": "austeria", + "pd": 2037, + "title": "Austeria" + } + }, + { + "pk": 105, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "bajka-o-szesciu-slugach", + "pd": 0, + "title": "Bajka o sze\u015bciu s\u0142ugach" + } + }, + { + "pk": 309, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Lem", + "slug": "bajki-robotow", + "pd": 2077, + "title": "Bajki robot\u00f3w" + } + }, + { + "pk": 4, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "balkon", + "pd": 0, + "title": "Balkon" + } + }, + { + "pk": 649, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Marceli Ska\u0142kowski", + "slug": "bartoszu-bartoszu-czyli-krakowiak-kosciuszki", + "pd": 0, + "title": "Bartoszu, Bartoszu, czyli krakowiak Ko\u015bciuszki" + } + }, + { + "pk": 5, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "beatrycze", + "pd": 0, + "title": "Beatrycze" + } + }, + { + "pk": 530, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "beniowski", + "pd": 0, + "title": "Beniowski" + } + }, + { + "pk": 119, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "bieg-bez-nadziei", + "pd": 0, + "title": "Bieg bez nadziei" + } + }, + { + "pk": 120, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "bildur-baldur-i-czas", + "pd": 0, + "title": "Bildur, Baldur i czas" + } + }, + { + "pk": 189, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "G\u00fcnter Grass", + "slug": "blaszany-bebenek", + "pd": null, + "title": "Blaszany b\u0119benek" + } + }, + { + "pk": 106, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "blekitny-ognik", + "pd": 0, + "title": "B\u0142\u0119kitny ognik" + } + }, + { + "pk": 6, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "blogoslawienstwo", + "pd": 0, + "title": "B\u0142ogos\u0142awie\u0144stwo" + } + }, + { + "pk": 456, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Bronis\u0142awa Ostrowska", + "slug": "bohaterski-mis", + "pd": 0, + "title": "Bohaterski mi\u015b" + } + }, + { + "pk": 1, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Dante Alighieri", + "slug": "boska-komedia", + "pd": 0, + "title": "Boska komedia" + } + }, + { + "pk": 650, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Alojzy Feli\u0144ski, Antoni G\u00f3recki", + "slug": "boze-cos-polske", + "pd": 0, + "title": "Bo\u017ce, co\u015b Polsk\u0119" + } + }, + { + "pk": 313, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "boze-pelen-w-niebie-chwaly", + "pd": 0, + "title": "Bo\u017ce, pe\u0142en w niebie chwa\u0142y" + } + }, + { + "pk": 287, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Franciszek Karpi\u0144ski", + "slug": "bog-sie-rodzi", + "pd": 0, + "title": "B\u00f3g si\u0119 rodzi" + } + }, + { + "pk": 350, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Astrid Lindgren", + "slug": "bracia-lwie-serce", + "pd": 2081, + "title": "Bracia Lwie Serce" + } + }, + { + "pk": 630, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "bracia-patrzcie-jana", + "pd": 0, + "title": "Bracia, patrzcie Jana" + } + }, + { + "pk": 84, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "brat-i-siostra", + "pd": 0, + "title": "Brat i siostra" + } + }, + { + "pk": 397, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "brulion-bebe-b", + "pd": null, + "title": "Brulion Bebe B." + } + }, + { + "pk": 279, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jaros\u0142aw Iwaszkiewicz", + "slug": "brzezina", + "pd": 2051, + "title": "Brzezina" + } + }, + { + "pk": 488, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "burza", + "pd": 0, + "title": "Burza" + } + }, + { + "pk": 438, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "cham", + "pd": 0, + "title": "Cham" + } + }, + { + "pk": 172, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ronald Dahl", + "slug": "charlie-i-fabryka-czekolady", + "pd": null, + "title": "Charlie i fabryka czekolady" + } + }, + { + "pk": 611, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander \u015awi\u0119tochowski", + "slug": "chawa-rubin", + "pd": 0, + "title": "Chawa Rubin" + } + }, + { + "pk": 387, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ferenc Moln\u00e1r", + "slug": "chlopcy-z-placu-broni", + "pd": null, + "title": "Ch\u0142opcy z Placu Broni" + } + }, + { + "pk": 311, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Teofil Lenartowicz", + "slug": "chodzil-senek-i-drzemota", + "pd": 0, + "title": "Chodzi\u0142 Senek i Drzemota" + } + }, + { + "pk": 280, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Jachowicz", + "slug": "chory-kotek", + "pd": 0, + "title": "Chory kotek" + } + }, + { + "pk": 531, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "chor-duchow-izraelskich", + "pd": 0, + "title": "Ch\u00f3r duch\u00f3w izraelskich" + } + }, + { + "pk": 314, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "cialo-me-wyklete", + "pd": 0, + "title": "Cia\u0142o me, wykl\u0119te" + } + }, + { + "pk": 631, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "cicha-noc", + "pd": 0, + "title": "Cicha noc" + } + }, + { + "pk": 466, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "cienie", + "pd": 0, + "title": "Cienie" + } + }, + { + "pk": 7, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "co-powiesz-w-ten-zmierzch", + "pd": 0, + "title": "Co Powiesz W Ten Zmierzch" + } + }, + { + "pk": 532, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "corka-cerery", + "pd": 0, + "title": "C\u00f3rka Cerery" + } + }, + { + "pk": 402, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "corka-robrojka", + "pd": null, + "title": "C\u00f3rka Robrojka" + } + }, + { + "pk": 306, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Maria Kuncewiczowa", + "slug": "cudzoziemka", + "pd": 2060, + "title": "Cudzoziemka" + } + }, + { + "pk": 408, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "czarna-polewka", + "pd": null, + "title": "Czarna polewka" + } + }, + { + "pk": 353, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Thomas Mann", + "slug": "czarodziejska-gora", + "pd": 2026, + "title": "Czarodziejska g\u00f3ra" + } + }, + { + "pk": 357, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "czaty", + "pd": 0, + "title": "Czaty" + } + }, + { + "pk": 85, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "czerwony-kapturek", + "pd": 0, + "title": "Czerwony Kapturek" + } + }, + { + "pk": 8, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "czlowiek-i-morze", + "pd": 0, + "title": "Cz\u0142owiek I Morze" + } + }, + { + "pk": 432, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Anna Onichimowska", + "slug": "daleki-rejs", + "pd": null, + "title": "Daleki rejs" + } + }, + { + "pk": 612, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander \u015awi\u0119tochowski", + "slug": "damian-cepenko", + "pd": 0, + "title": "Damian Cepenko" + } + }, + { + "pk": 9, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "danse-macabre", + "pd": 0, + "title": "Danse Macabre" + } + }, + { + "pk": 10, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "de-profundis-clamavi", + "pd": 0, + "title": "De Profundis Clamavi" + } + }, + { + "pk": 205, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "djanie-i-apollinowi", + "pd": 0, + "title": "Djanie i Apollinowi" + } + }, + { + "pk": 578, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do", + "pd": 0, + "title": "Do ***" + } + }, + { + "pk": 206, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-albiusa-tibulla", + "pd": 0, + "title": "Do Albiusa Tibulla" + } + }, + { + "pk": 412, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Daniel Naborowski", + "slug": "do-anny", + "pd": 0, + "title": "Do Anny" + } + }, + { + "pk": 207, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-antoniusa", + "pd": 0, + "title": "Do Antoniusa" + } + }, + { + "pk": 208, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-apollina", + "pd": 0, + "title": "Do Apollina" + } + }, + { + "pk": 209, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-aristiusa-fuska", + "pd": 0, + "title": "Do Aristiusa Fuska" + } + }, + { + "pk": 210, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-asteryi", + "pd": 0, + "title": "Do Asteryi" + } + }, + { + "pk": 211, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-augusta", + "pd": 0, + "title": "Do Augusta" + } + }, + { + "pk": 212, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-bakchusa", + "pd": 0, + "title": "Do Bakchusa" + } + }, + { + "pk": 213, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-bariny", + "pd": 0, + "title": "Do Bariny" + } + }, + { + "pk": 214, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-cezara-augusta", + "pd": 0, + "title": "Do Cezara Augusta" + } + }, + { + "pk": 215, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-chciwych-na-pieniadz", + "pd": 0, + "title": "Do chciwych na pieni\u0105dz" + } + }, + { + "pk": 216, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-chloe", + "pd": 0, + "title": "Do Chloe" + } + }, + { + "pk": 217, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-chlorydy", + "pd": 0, + "title": "Do Chlorydy" + } + }, + { + "pk": 218, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-chorego-mecenasa", + "pd": 0, + "title": "Do chorego Mecenasa" + } + }, + { + "pk": 219, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-cilniusa-mecenasa", + "pd": 0, + "title": "Do Cilniusa Mecenasa" + } + }, + { + "pk": 33, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "do-czytelnika", + "pd": 0, + "title": "Do Czytelnika" + } + }, + { + "pk": 358, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "do-d-d", + "pd": 0, + "title": "Do D* D*" + } + }, + { + "pk": 276, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-djany", + "pd": 0, + "title": "Do Djany" + } + }, + { + "pk": 221, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-dzbanka", + "pd": 0, + "title": "Do dzbanka" + } + }, + { + "pk": 222, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-eliusa-lamii", + "pd": 0, + "title": "Do Eliusa Lamii" + } + }, + { + "pk": 220, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-elljusa", + "pd": 0, + "title": "Do Elljusa" + } + }, + { + "pk": 223, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-fauna", + "pd": 0, + "title": "Do Fauna" + } + }, + { + "pk": 224, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-festjusa", + "pd": 0, + "title": "Do Festjusa" + } + }, + { + "pk": 225, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-fihdyli", + "pd": 0, + "title": "Do Fihdyli" + } + }, + { + "pk": 226, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-fortuny", + "pd": 0, + "title": "Do Fortuny" + } + }, + { + "pk": 533, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do-franciszka-szemiotha", + "pd": 0, + "title": "Do Franciszka Szemiotha" + } + }, + { + "pk": 227, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-fyllidy", + "pd": 0, + "title": "Do Fyllidy" + } + }, + { + "pk": 228, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-galatei", + "pd": 0, + "title": "Do Galatei" + } + }, + { + "pk": 229, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-glycery", + "pd": 0, + "title": "Do Glycery" + } + }, + { + "pk": 534, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do-hrabiego-gustawa-podziekowanie", + "pd": 0, + "title": "Do hrabiego Gustawa podzi\u0119kowanie" + } + }, + { + "pk": 230, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-ikciusa", + "pd": 0, + "title": "Do Ikciusa" + } + }, + { + "pk": 231, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-kajusa-asiniusa-polliona", + "pd": 0, + "title": "Do Kajusa Asiniusa Polliona" + } + }, + { + "pk": 232, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-kalliopy", + "pd": 0, + "title": "Do Kalliopy" + } + }, + { + "pk": 194, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-kanidii-trucicielki", + "pd": 0, + "title": "Do Kanidii trucicielki" + } + }, + { + "pk": 233, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-kochanka-lalagi", + "pd": 0, + "title": "Do kochanka Lalagi" + } + }, + { + "pk": 11, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "do-kreolki", + "pd": 0, + "title": "Do Kreolki" + } + }, + { + "pk": 234, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-ksantiasa-focejczyka", + "pd": 0, + "title": "Do Ksantiasa Focejczyka" + } + }, + { + "pk": 235, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-kwinktiliusa-warusa", + "pd": 0, + "title": "Do Kwinktiliusa Warusa" + } + }, + { + "pk": 236, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-kwinktiusa-hirpina", + "pd": 0, + "title": "Do Kwinktiusa Hirpina" + } + }, + { + "pk": 568, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do-laury", + "pd": 0, + "title": "Do Laury" + } + }, + { + "pk": 237, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-leukonoe", + "pd": 0, + "title": "Do Leukonoe" + } + }, + { + "pk": 238, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-liciniusa-mureny", + "pd": 0, + "title": "Do Liciniusa Mureny" + } + }, + { + "pk": 239, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-ligurina", + "pd": 0, + "title": "Do Ligurina" + } + }, + { + "pk": 195, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-lubieznej-staruszki", + "pd": 0, + "title": "Do lubie\u017cnej staruszki" + } + }, + { + "pk": 196, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-ludu-rzymskiego", + "pd": 0, + "title": "Do ludu rzymskiego" + } + }, + { + "pk": 535, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do-ludwiki-bobrowny", + "pd": 0, + "title": "Do Ludwiki Bobr\u00f3wny" + } + }, + { + "pk": 240, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-lutni", + "pd": 0, + "title": "Do lutni" + } + }, + { + "pk": 241, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-lyce", + "pd": 0, + "title": "Do Lyce" + } + }, + { + "pk": 242, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-lyhdyi", + "pd": 0, + "title": "Do Lyhdyi" + } + }, + { + "pk": 12, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "do-madonny", + "pd": 0, + "title": "Do Madonny" + } + }, + { + "pk": 243, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-manliusa-torkwata", + "pd": 0, + "title": "Do Manliusa Torkwata" + } + }, + { + "pk": 244, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-marciusa-cenzorina", + "pd": 0, + "title": "Do Marciusa Cenzorina" + } + }, + { + "pk": 245, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-marka-lolljusa", + "pd": 0, + "title": "Do Marka Lolljusa" + } + }, + { + "pk": 246, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-marka-wipsaniusa-agrippy", + "pd": 0, + "title": "Do Marka Wipsaniusa Agrippy" + } + }, + { + "pk": 359, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "do-maryi-putkamerowej", + "pd": 0, + "title": "Do Maryi Putkamerowej" + } + }, + { + "pk": 536, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do-matki", + "pd": 0, + "title": "Do matki" + } + }, + { + "pk": 360, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "do-matki-polki", + "pd": 0, + "title": "Do Matki Polki" + } + }, + { + "pk": 197, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-mecenasa", + "pd": 0, + "title": "Do Mecenasa" + } + }, + { + "pk": 247, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-melpomeny", + "pd": 0, + "title": "Do Melpomeny" + } + }, + { + "pk": 248, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-merkuryusza", + "pd": 0, + "title": "Do Merkuryusza" + } + }, + { + "pk": 198, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-mewiusa-poety", + "pd": 0, + "title": "Do Mewiusa poety" + } + }, + { + "pk": 249, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-miasta-rzymu", + "pd": 0, + "title": "Do miasta Rzymu" + } + }, + { + "pk": 250, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-mlodego-slugi", + "pd": 0, + "title": "Do m\u0142odego s\u0142ugi" + } + }, + { + "pk": 251, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-mlodziezy", + "pd": 0, + "title": "Do m\u0142odzie\u017cy" + } + }, + { + "pk": 252, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-munaciusa-pianka", + "pd": 0, + "title": "Do Munaciusa Pianka" + } + }, + { + "pk": 199, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-neery", + "pd": 0, + "title": "Do Neery" + } + }, + { + "pk": 253, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-neobuli", + "pd": 0, + "title": "Do Neobuli" + } + }, + { + "pk": 361, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "do-niemna", + "pd": 0, + "title": "Do Niemna" + } + }, + { + "pk": 254, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-okretu-majacego-zawiesc-wirgiljusa-do-aten", + "pd": 0, + "title": "Do okr\u0119tu maj\u0105cego zawie\u015b\u0107 Wirgiljusa do Aten" + } + }, + { + "pk": 537, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do-pani-joanny-bobrowej", + "pd": 0, + "title": "Do pani Joanny Bobrowej" + } + }, + { + "pk": 538, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do-pastereczki", + "pd": 0, + "title": "Do pastereczki" + } + }, + { + "pk": 200, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-pettiusa", + "pd": 0, + "title": "Do Pettiusa" + } + }, + { + "pk": 256, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-pompejusa", + "pd": 0, + "title": "Do Pompejusa" + } + }, + { + "pk": 255, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-pompejusa-grosfa", + "pd": 0, + "title": "Do Pompejusa Grosfa" + } + }, + { + "pk": 257, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-postumiusa", + "pd": 0, + "title": "Do Postumiusa" + } + }, + { + "pk": 13, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "do-przechodzacej", + "pd": 0, + "title": "Do Przechodz\u0105cej" + } + }, + { + "pk": 201, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-przyjaciol", + "pd": 0, + "title": "Do przyjaci\u00f3\u0142" + } + }, + { + "pk": 258, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-przyjaciolki", + "pd": 0, + "title": "Do przyjaci\u00f3\u0142ki" + } + }, + { + "pk": 260, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-pyrry", + "pd": 0, + "title": "Do Pyrry" + } + }, + { + "pk": 261, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-rzeczypospolitej", + "pd": 0, + "title": "Do Rzeczypospolitej" + } + }, + { + "pk": 262, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-rzymian", + "pd": 0, + "title": "Do Rzymian" + } + }, + { + "pk": 263, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-sallustiusa-krispa", + "pd": 0, + "title": "Do Sallustiusa Krispa" + } + }, + { + "pk": 264, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-septimiusa", + "pd": 0, + "title": "Do Septimiusa" + } + }, + { + "pk": 265, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-siebie-samego", + "pd": 0, + "title": "Do siebie samego" + } + }, + { + "pk": 266, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-skapca", + "pd": 0, + "title": "Do sk\u0105pca" + } + }, + { + "pk": 202, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-starej-rozpustnicy", + "pd": 0, + "title": "Do starej rozpustnicy" + } + }, + { + "pk": 632, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "do-szopy-hej-pasterze", + "pd": 0, + "title": "Do szopy, hej pasterze" + } + }, + { + "pk": 267, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-taliarcha", + "pd": 0, + "title": "Do Taliarcha" + } + }, + { + "pk": 268, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-telefa", + "pd": 0, + "title": "Do Telefa" + } + }, + { + "pk": 539, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do-teofila-januszewskiego", + "pd": 0, + "title": "Do Teofila Januszewskiego" + } + }, + { + "pk": 269, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-tyndarydy", + "pd": 0, + "title": "Do Tyndarydy" + } + }, + { + "pk": 270, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-walgiusa-rufusa", + "pd": 0, + "title": "Do Walgiusa Rufusa" + } + }, + { + "pk": 271, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-wenery", + "pd": 0, + "title": "Do Wenery" + } + }, + { + "pk": 272, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-wergiliusa", + "pd": 0, + "title": "Do Wergiliusa" + } + }, + { + "pk": 273, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-wirgiliusa-marona", + "pd": 0, + "title": "Do Wirgiliusa Marona" + } + }, + { + "pk": 274, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-wspolbiesiadnikow", + "pd": 0, + "title": "Do wsp\u00f3\u0142biesiadnik\u00f3w" + } + }, + { + "pk": 203, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-zlosliwca", + "pd": 0, + "title": "Do z\u0142o\u015bliwca" + } + }, + { + "pk": 540, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "do-zygmunta", + "pd": 0, + "title": "Do Zygmunta" + } + }, + { + "pk": 275, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "do-zrodla-banduzyi", + "pd": 0, + "title": "Do \u017ar\u00f3d\u0142a Banduzyi" + } + }, + { + "pk": 439, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "dobra-pani", + "pd": 0, + "title": "Dobra Pani" + } + }, + { + "pk": 385, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander Minkowski", + "slug": "dolina-swiatla", + "pd": null, + "title": "Dolina \u015awiat\u0142a" + } + }, + { + "pk": 121, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "dom-swietego-kazimierza", + "pd": 0, + "title": "Dom \u015bwi\u0119tego Kazimierza" + } + }, + { + "pk": 14, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "don-juan-w-piekle", + "pd": 0, + "title": "Don Juan W Piekle" + } + }, + { + "pk": 114, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Miguel Cervantes", + "slug": "don-kichote", + "pd": 2045, + "title": "Don Kichote" + } + }, + { + "pk": 315, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "dreszcze-nasze-u-warg-sie-spotkaly", + "pd": 0, + "title": "Dreszcze nasze u warg si\u0119 spotka\u0142y" + } + }, + { + "pk": 351, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Mackiewicz", + "slug": "droga-donikad", + "pd": 2056, + "title": "Droga donik\u0105d" + } + }, + { + "pk": 431, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Anna Onichimowska", + "slug": "duch-starej-kamienicy", + "pd": null, + "title": "Duch starej kamienicy" + } + }, + { + "pk": 362, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "dudasz", + "pd": 0, + "title": "Dudasz" + } + }, + { + "pk": 541, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "duma-o-waclawie-rzewuskim", + "pd": 0, + "title": "Duma o Wac\u0142awie Rzewuskim" + } + }, + { + "pk": 613, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander \u015awi\u0119tochowski", + "slug": "dumania-pesymisty", + "pd": 0, + "title": "Dumania pesymisty" + } + }, + { + "pk": 542, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "dusza-sie-moja-zamysla-gleboko", + "pd": 0, + "title": "Dusza si\u0119 moja zamy\u015bla g\u0142\u0119boko" + } + }, + { + "pk": 15, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "dusza-wina", + "pd": 0, + "title": "Dusza Wina" + } + }, + { + "pk": 86, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "dwie-ksiezniczki", + "pd": 0, + "title": "Dwie ksi\u0119\u017cniczki" + } + }, + { + "pk": 430, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Joanna Olech", + "slug": "dynastia-miziolkow", + "pd": null, + "title": "Dynastia Mizio\u0142k\u00f3w" + } + }, + { + "pk": 180, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Arkady Fiedler", + "slug": "dywizjon-303", + "pd": 2056, + "title": "Dywizjon 303" + } + }, + { + "pk": 304, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ignacy Kraszewski", + "slug": "dziad-i-baba", + "pd": 0, + "title": "Dziad i baba" + } + }, + { + "pk": 400, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "dziecko-piatku", + "pd": null, + "title": "Dziecko pi\u0105tku" + } + }, + { + "pk": 316, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "dziejba-lesna", + "pd": 0, + "title": "Dziejba le\u015bna" + } + }, + { + "pk": 68, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Joseph B\u00e9dier", + "slug": "dzieje-tristana-i-izoldy", + "pd": 2012, + "title": "Dzieje Tristana i Izoldy" + } + }, + { + "pk": 625, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Moony Witcher", + "slug": "dziewczynka-z-szostego-ksiezyca", + "pd": null, + "title": "Dziewczynka z sz\u00f3stego ksi\u0119\u017cyca" + } + }, + { + "pk": 633, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "dzisiaj-w-betlejem", + "pd": 0, + "title": "Dzisiaj w Betlejem" + } + }, + { + "pk": 440, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "dziurdziowie", + "pd": 0, + "title": "Dziurdziowie" + } + }, + { + "pk": 489, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "dziwna-opowiesc", + "pd": 0, + "title": "Dziwna opowie\u015b\u0107" + } + }, + { + "pk": 113, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Albert Camus", + "slug": "dzuma", + "pd": 2080, + "title": "D\u017cuma" + } + }, + { + "pk": 480, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Kazimierz Przerwa-Tetmajer", + "slug": "e-viva-larte", + "pd": 2011, + "title": "E viva l'arte" + } + }, + { + "pk": 682, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stefan \u017beromski", + "slug": "echa-lesne", + "pd": 0, + "title": "Echa le\u015bne" + } + }, + { + "pk": 467, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "echa-muzyczne", + "pd": 0, + "title": "Echa muzyczne" + } + }, + { + "pk": 122, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "elegia-czwarta", + "pd": 0, + "title": "Elegia czwarta" + } + }, + { + "pk": 123, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "elegia-zalu", + "pd": 0, + "title": "Elegia \u017calu" + } + }, + { + "pk": 391, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Zbigniew Morsztyn", + "slug": "emblemata", + "pd": 0, + "title": "Emblemata" + } + }, + { + "pk": 193, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "epody", + "pd": 0, + "title": "Epody" + } + }, + { + "pk": 462, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Platon", + "slug": "fajdros", + "pd": 0, + "title": "Fajdros" + } + }, + { + "pk": 543, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "fantazy", + "pd": 0, + "title": "Fantazy" + } + }, + { + "pk": 363, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "farys", + "pd": 0, + "title": "Farys" + } + }, + { + "pk": 184, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Johann Goethe", + "slug": "faust", + "pd": 0, + "title": "Faust" + } + }, + { + "pk": 185, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Witold Gombrowicz", + "slug": "ferdydurke", + "pd": 2040, + "title": "Ferdydurke" + } + }, + { + "pk": 490, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "fermenty", + "pd": 0, + "title": "Fermenty" + } + }, + { + "pk": 468, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "filozof-i-prostak", + "pd": 0, + "title": "Filozof i prostak" + } + }, + { + "pk": 491, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "franek", + "pd": 0, + "title": "Franek" + } + }, + { + "pk": 124, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "front", + "pd": 0, + "title": "Front" + } + }, + { + "pk": 545, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "gdy-noc-gleboka-wszystko-uspi-i-oniemi", + "pd": 0, + "title": "Gdy noc g\u0142\u0119boka wszystko u\u015bpi i oniemi" + } + }, + { + "pk": 634, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "gdy-sie-chrystus-rodzi", + "pd": 0, + "title": "Gdy si\u0119 Chrystus rodzi" + } + }, + { + "pk": 635, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "gdy-sliczna-panna", + "pd": 0, + "title": "Gdy \u015bliczna panna" + } + }, + { + "pk": 364, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "gdy-tu-moj-trup", + "pd": 0, + "title": "Gdy tu m\u00f3j trup" + } + }, + { + "pk": 365, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "geby-za-lud-krzyczace", + "pd": 0, + "title": "G\u0119by za lud krzycz\u0105ce" + } + }, + { + "pk": 87, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "gesiareczka", + "pd": 0, + "title": "G\u0119siareczka" + } + }, + { + "pk": 16, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "glos", + "pd": 0, + "title": "G\u0142os" + } + }, + { + "pk": 546, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "godzina-mysli", + "pd": 0, + "title": "Godzina my\u015bli" + } + }, + { + "pk": 651, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Micha\u0142 Ba\u0142ucki", + "slug": "goralu-czy-ci-nie-zal", + "pd": 0, + "title": "G\u00f3ralu, czy ci nie \u017cal" + } + }, + { + "pk": 17, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "gra", + "pd": 0, + "title": "Gra" + } + }, + { + "pk": 416, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Zofia Na\u0142kowska", + "slug": "granica", + "pd": 2025, + "title": "Granica" + } + }, + { + "pk": 366, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "grazyna", + "pd": 0, + "title": "Gra\u017cyna" + } + }, + { + "pk": 522, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Henryk Sienkiewicz", + "slug": "hania", + "pd": 0, + "title": "Hania" + } + }, + { + "pk": 18, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "harmonia-wieczorna", + "pd": 0, + "title": "Harmonia Wieczorna" + } + }, + { + "pk": 19, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "heautonimoroumenos", + "pd": 0, + "title": "Heautonimoroumenos" + } + }, + { + "pk": 652, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "hej-hej-ulani", + "pd": 0, + "title": "Hej, hej, u\u0142ani" + } + }, + { + "pk": 653, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Anczyc", + "slug": "hej-strzelcy-w-las", + "pd": 0, + "title": "Hej, strzelcy w las" + } + }, + { + "pk": 636, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "hej-w-dzien-narodzenia", + "pd": 0, + "title": "Hej, w dzie\u0144 narodzenia" + } + }, + { + "pk": 619, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "John Ronald Reuel Tolkien", + "slug": "hobbit-czyli-tam-i-z-powrotem", + "pd": 2055, + "title": "Hobbit, czyli tam i z powrotem" + } + }, + { + "pk": 547, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "hymn-bogarodzico-dziewico", + "pd": 0, + "title": "Hymn (Bogarodzico, Dziewico!)" + } + }, + { + "pk": 654, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ignacy Krasicki", + "slug": "hymn-do-milosci-ojczyzny", + "pd": 0, + "title": "Hymn do mi\u0142o\u015bci ojczyzny" + } + }, + { + "pk": 481, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Kazimierz Przerwa-Tetmajer", + "slug": "hymn-do-nirwany", + "pd": 2011, + "title": "Hymn do nirwany" + } + }, + { + "pk": 656, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "hymn-narodowy", + "pd": 0, + "title": "Hymn narodowy" + } + }, + { + "pk": 71, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "hymn-sw-pawla-o-milosci", + "pd": 0, + "title": "Hymn \u015bw. Paw\u0142a o mi\u0142o\u015bci" + } + }, + { + "pk": 125, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "i-kompozycja", + "pd": 0, + "title": "I kompozycja" + } + }, + { + "pk": 126, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "i-wigilia-co-splywa-ku-nam", + "pd": 0, + "title": "I Wigilia co sp\u0142ywa ku nam" + } + }, + { + "pk": 395, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "ida-sierpniowa", + "pd": null, + "title": "Ida sierpniowa" + } + }, + { + "pk": 20, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "ideal", + "pd": 0, + "title": "Idea\u0142" + } + }, + { + "pk": 191, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Homer", + "slug": "iliada", + "pd": 0, + "title": "Iliada" + } + }, + { + "pk": 403, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "imieniny", + "pd": null, + "title": "Imieniny" + } + }, + { + "pk": 179, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Umberto Eco", + "slug": "imie-rozy", + "pd": null, + "title": "Imi\u0119 r\u00f3\u017cy" + } + }, + { + "pk": 190, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Gustaw Herling-Grudzi\u0144ski", + "slug": "inny-swiat", + "pd": 2071, + "title": "Inny \u015bwiat" + } + }, + { + "pk": 127, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "inwokacja", + "pd": 0, + "title": "Inwokacja" + } + }, + { + "pk": 128, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "jablko-zycia", + "pd": 0, + "title": "Jab\u0142ko \u017cycia" + } + }, + { + "pk": 317, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "jak-niewiele-ma-znakow", + "pd": 0, + "title": "Jak niewiele ma znak\u00f3w" + } + }, + { + "pk": 657, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Tarnowski", + "slug": "jak-to-na-wojence-ladnie", + "pd": 0, + "title": "Jak to na wojence \u0142adnie" + } + }, + { + "pk": 510, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "jak-wam-sie-podoba", + "pd": 0, + "title": "Jak wam sie podoba" + } + }, + { + "pk": 318, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "jam-nie-osjan", + "pd": 0, + "title": "Jam \u2014 nie osjan" + } + }, + { + "pk": 548, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "jan-bielecki", + "pd": 0, + "title": "Jan Bielecki" + } + }, + { + "pk": 88, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "jas-i-malgosia", + "pd": 0, + "title": "Ja\u015b i Ma\u0142gosia" + } + }, + { + "pk": 115, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Joseph Conrad", + "slug": "jadro-ciemnosci", + "pd": 2014, + "title": "J\u0105dro ciemno\u015bci" + } + }, + { + "pk": 129, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "je-le-sois", + "pd": 0, + "title": "Je le sois" + } + }, + { + "pk": 469, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "jeden-z-wielu", + "pd": 0, + "title": "Jeden z wielu" + } + }, + { + "pk": 130, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "jesienia", + "pd": 0, + "title": "Jesieni\u0105" + } + }, + { + "pk": 131, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "jeszcze-pejzaz-modlitwa-zalobna", + "pd": 0, + "title": "Jeszcze pejza\u017c modlitwa \u017ca\u0142obna" + } + }, + { + "pk": 637, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "jezus-malusienki", + "pd": 0, + "title": "Jezus malusie\u0144ki" + } + }, + { + "pk": 549, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "jezeli-ci-pan-nie-zbuduje-domu", + "pd": 0, + "title": "Je\u017celi ci Pan nie zbuduje domu" + } + }, + { + "pk": 550, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "jezeli-kiedy-w-tej-mojej-krainie", + "pd": 0, + "title": "Je\u017celi kiedy w tej mojej krainie" + } + }, + { + "pk": 406, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "jezyk-trolli", + "pd": null, + "title": "J\u0119zyk Trolli" + } + }, + { + "pk": 511, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "juliusz-cezar", + "pd": 0, + "title": "Juliusz Cezar" + } + }, + { + "pk": 405, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "kalamburka", + "pd": null, + "title": "Kalamburka" + } + }, + { + "pk": 285, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander Kami\u0144ski", + "slug": "kamienie-na-szaniec", + "pd": 2049, + "title": "Kamienie na szaniec" + } + }, + { + "pk": 173, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Tadeusz Do\u0142\u0119ga-Mostowicz", + "slug": "kariera-nikodema-dyzmy", + "pd": 0, + "title": "Kariera Nikodema Dyzmy" + } + }, + { + "pk": 312, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Teofil Lenartowicz", + "slug": "kasia", + "pd": 0, + "title": "Kasia" + } + }, + { + "pk": 69, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Be\u0142za", + "slug": "katechizm-polskiego-dziecka", + "pd": 0, + "title": "Katechizm polskiego dziecka" + } + }, + { + "pk": 526, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Piotr Skarga", + "slug": "kazania-sejmowe", + "pd": 0, + "title": "Kazania sejmowe" + } + }, + { + "pk": 551, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "kiedy-prawdziwie-polacy-powstana", + "pd": 0, + "title": "Kiedy prawdziwie Polacy powstan\u0105" + } + }, + { + "pk": 441, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "kilka-slow-o-kobietach", + "pd": 0, + "title": "Kilka s\u0142\u00f3w o kobietach" + } + }, + { + "pk": 442, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "kilka-uwag-nad-powiescia", + "pd": 0, + "title": "Kilka uwag nad powie\u015bci\u0105" + } + }, + { + "pk": 319, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "klechdy-polskie", + "pd": 0, + "title": "Klechdy polskie" + } + }, + { + "pk": 320, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "klechdy-sezamowe", + "pd": 0, + "title": "Klechdy sezamowe" + } + }, + { + "pk": 21, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "klejnoty", + "pd": 0, + "title": "Klejnoty" + } + }, + { + "pk": 420, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "kleopatra-i-cezar", + "pd": 0, + "title": "Kleopatra i Cezar" + } + }, + { + "pk": 614, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander \u015awi\u0119tochowski", + "slug": "klub-szachistow", + "pd": 0, + "title": "Klub szachist\u00f3w" + } + }, + { + "pk": 393, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "klamczucha", + "pd": null, + "title": "K\u0142amczucha" + } + }, + { + "pk": 132, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "knajpa", + "pd": 0, + "title": "Knajpa" + } + }, + { + "pk": 187, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stefan Grabi\u0144ski", + "slug": "kochanka-szamoty", + "pd": 0, + "title": "Kochanka Szamoty" + } + }, + { + "pk": 117, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "kolysanki", + "pd": 0, + "title": "Ko\u0142ysanki" + } + }, + { + "pk": 133, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "kolysanki-pedem", + "pd": 0, + "title": "Ko\u0142ysanki p\u0119dem" + } + }, + { + "pk": 421, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "komedia", + "pd": 0, + "title": "Komedia" + } + }, + { + "pk": 492, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "komediantka", + "pd": 0, + "title": "Komediantka" + } + }, + { + "pk": 493, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "komurasaki", + "pd": 0, + "title": "Komurasaki" + } + }, + { + "pk": 134, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "koniec-rewolucji", + "pd": 0, + "title": "Koniec rewolucji" + } + }, + { + "pk": 482, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Kazimierz Przerwa-Tetmajer", + "slug": "koniec-wieku", + "pd": 2011, + "title": "Koniec wieku" + } + }, + { + "pk": 107, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "kopciuszek", + "pd": 0, + "title": "Kopciuszek" + } + }, + { + "pk": 89, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "kot-w-butach", + "pd": 0, + "title": "Kot w butach" + } + }, + { + "pk": 22, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "koty", + "pd": 0, + "title": "Koty" + } + }, + { + "pk": 321, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "krajobraz-utracony", + "pd": 0, + "title": "Krajobraz utracony" + } + }, + { + "pk": 681, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Gloger Zygmunt", + "slug": "krakowiaczek-jeden", + "pd": 0, + "title": "Krakowiaczek jeden" + } + }, + { + "pk": 658, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jan Kozakiewicz", + "slug": "krew-nasza-dlugo-leja-katy", + "pd": 0, + "title": "Krew nasz\u0105 d\u0142ugo lej\u0105 katy" + } + }, + { + "pk": 299, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Tadeusz Konwicki", + "slug": "kronika-wypadkow-milosnych", + "pd": null, + "title": "Kronika wypadk\u00f3w mi\u0142osnych" + } + }, + { + "pk": 90, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "krol-drozdobrody", + "pd": 0, + "title": "Kr\u00f3l Drozdobrody" + } + }, + { + "pk": 512, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "krol-lear", + "pd": 0, + "title": "Kr\u00f3l Lear" + } + }, + { + "pk": 91, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "krolewna-sniezka", + "pd": 0, + "title": "Kr\u00f3lewna \u015anie\u017cka" + } + }, + { + "pk": 486, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Miko\u0142aj Rej", + "slug": "krotka-rozprawa-miedzy-panem-wojtem-i-plebanem", + "pd": 0, + "title": "Kr\u00f3tka rozprawa mi\u0119dzy panem, w\u00f3jtem i plebanem" + } + }, + { + "pk": 413, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Daniel Naborowski", + "slug": "krotkosc-zywota", + "pd": 0, + "title": "Kr\u00f3tko\u015b\u0107 \u017cywota" + } + }, + { + "pk": 108, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "krysztalowa-kula", + "pd": 0, + "title": "Kryszta\u0142owa kula" + } + }, + { + "pk": 494, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "krzyk", + "pd": 0, + "title": "Krzyk" + } + }, + { + "pk": 322, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "krzywda", + "pd": 0, + "title": "Krzywda" + } + }, + { + "pk": 521, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Henryk Sienkiewicz", + "slug": "krzyzacy", + "pd": 0, + "title": "Krzy\u017cacy" + } + }, + { + "pk": 82, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "ksiega-hioba", + "pd": 0, + "title": "Ksi\u0119ga Hioba" + } + }, + { + "pk": 73, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "ksiega-rodzaju", + "pd": 0, + "title": "Ksi\u0119ga Rodzaju" + } + }, + { + "pk": 291, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jan Kasprowicz", + "slug": "ksiega-ubogich", + "pd": 0, + "title": "Ksi\u0119ga ubogich" + } + }, + { + "pk": 552, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "ksiezyc", + "pd": 0, + "title": "Ksi\u0119\u017cyc" + } + }, + { + "pk": 464, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Wac\u0142aw Potocki", + "slug": "kto-mocniejszy-ten-lepszy", + "pd": 0, + "title": "Kto mocniejszy, ten lepszy" + } + }, + { + "pk": 553, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "kulik", + "pd": 0, + "title": "Kulik" + } + }, + { + "pk": 394, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "kwiat-kalafiora", + "pd": null, + "title": "Kwiat kalafiora" + } + }, + { + "pk": 135, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "kwiecien-tych-co-bez-troski", + "pd": 0, + "title": "Kwiecie\u0144 tych co bez troski" + } + }, + { + "pk": 554, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "lambro", + "pd": 0, + "title": "Lambro" + } + }, + { + "pk": 308, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "lament-swietokrzyski", + "pd": 0, + "title": "Lament \u015bwi\u0119tokrzyski" + } + }, + { + "pk": 659, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Wincenty Pol", + "slug": "lecieliscie-z-drzewa", + "pd": 0, + "title": "Lecieli\u015bcie z drzewa" + } + }, + { + "pk": 136, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "legie-der-trauer", + "pd": 0, + "title": "Legie der Trauer" + } + }, + { + "pk": 660, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "legun-na-wojence", + "pd": 0, + "title": "Legun na wojence" + } + }, + { + "pk": 23, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "leta", + "pd": 0, + "title": "Leta" + } + }, + { + "pk": 349, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Clive Staples Lewis", + "slug": "lew-czarownica-i-stara-szafa", + "pd": null, + "title": "Lew, czarownica i stara szafa" + } + }, + { + "pk": 544, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "lilia-weneda", + "pd": 0, + "title": "Lilia Weneda" + } + }, + { + "pk": 137, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "liryka", + "pd": 0, + "title": "Liryka" + } + }, + { + "pk": 435, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Artur Oppman", + "slug": "lis-i-kurka", + "pd": 0, + "title": "Lis i kurka" + } + }, + { + "pk": 204, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "listy", + "pd": 0, + "title": "Listy" + } + }, + { + "pk": 303, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Zygmunt Krasi\u0144ski", + "slug": "krasinski-listy", + "pd": 0, + "title": "Listy" + } + }, + { + "pk": 24, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "litanie-do-szatana", + "pd": 0, + "title": "Litanie Do Szatana" + } + }, + { + "pk": 25, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "lola-de-valence", + "pd": 0, + "title": "Lola De Valence" + } + }, + { + "pk": 411, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Vladimir Nabokov", + "slug": "lolita", + "pd": null, + "title": "Lolita" + } + }, + { + "pk": 555, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "los-mie-juz-zaden-nie-moze-zatrwozyc", + "pd": 0, + "title": "Los mi\u0119 ju\u017c \u017caden nie mo\u017ce zatrwo\u017cy\u0107" + } + }, + { + "pk": 483, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Kazimierz Przerwa-Tetmajer", + "slug": "ludzie-miotaja-sie", + "pd": 2011, + "title": "Ludzie miotaj\u0105 si\u0119" + } + }, + { + "pk": 638, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "lulajze-jezuniu", + "pd": 0, + "title": "Lulaj\u017ce Jezuniu" + } + }, + { + "pk": 26, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "labedz", + "pd": 0, + "title": "\u0141ab\u0119d\u017a" + } + }, + { + "pk": 177, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Fiodor Dostojewski", + "slug": "lagodna", + "pd": 2049, + "title": "\u0141agodna" + } + }, + { + "pk": 513, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "makbet", + "pd": 0, + "title": "Makbet" + } + }, + { + "pk": 182, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander Fredro", + "slug": "malpa-w-kapieli", + "pd": 0, + "title": "Ma\u0142pa w k\u0105pieli" + } + }, + { + "pk": 509, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Antoine de Saint Exup\u00e9ry", + "slug": "maly-ksiaze", + "pd": null, + "title": "Ma\u0142y ksi\u0105\u017c\u0119" + } + }, + { + "pk": 290, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grzegorz Kasdepke", + "slug": "mam-prawo-czyli-nieomal-wszystko-co-powinniscie-wiedziec-o-prawach-dziecka-a-nie-macie-kogo-zapytac", + "pd": null, + "title": "Mam prawo! Czyli nieomal wszystko, co powinni\u015bcie wiedzie\u0107 o prawach dziecka, a nie macie kogo zapyta\u0107" + } + }, + { + "pk": 443, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "maria", + "pd": 0, + "title": "Maria" + } + }, + { + "pk": 414, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Daniel Naborowski", + "slug": "marnosc", + "pd": 0, + "title": "Marno\u015b\u0107" + } + }, + { + "pk": 444, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "marta", + "pd": 0, + "title": "Marta" + } + }, + { + "pk": 27, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "marzenie-ciekawego", + "pd": 0, + "title": "Marzenie Ciekawego" + } + }, + { + "pk": 626, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Ignacy Witkiewicz", + "slug": "matka", + "pd": 0, + "title": "Matka" + } + }, + { + "pk": 661, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Wincenty Pol", + "slug": "mazur", + "pd": 0, + "title": "Mazur" + } + }, + { + "pk": 655, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "mazurek-dabrowskiego", + "pd": 0, + "title": "Mazurek D\u0105browskiego" + } + }, + { + "pk": 445, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "meir-ezofowicz", + "pd": 0, + "title": "Meir Ezofowicz" + } + }, + { + "pk": 639, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stefan Bordkiewicz", + "slug": "medrcy-swiata", + "pd": 0, + "title": "M\u0119drcy \u015bwiata" + } + }, + { + "pk": 433, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ren\u00e9 Goscinny, Jean-Jacques Semp\u00e9", + "slug": "mikolajek", + "pd": null, + "title": "Miko\u0142ajek" + } + }, + { + "pk": 470, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "milknace-glosy", + "pd": 0, + "title": "Milkn\u0105ce g\u0142osy" + } + }, + { + "pk": 323, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "milosc-stroskana", + "pd": 0, + "title": "Milo\u015b\u0107 stroskana" + } + }, + { + "pk": 297, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Maria Konopnicka", + "slug": "milosierdzie-gminy", + "pd": 0, + "title": "Mi\u0142osierdzie gminy" + } + }, + { + "pk": 28, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "milosc-klamstwa", + "pd": 0, + "title": "Mi\u0142o\u015b\u0107 K\u0142amstwa" + } + }, + { + "pk": 446, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "mirtala", + "pd": 0, + "title": "Mirtala" + } + }, + { + "pk": 111, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Micha\u0142 Bu\u0142hakow", + "slug": "mistrz-i-malgorzata", + "pd": null, + "title": "Mistrz i Ma\u0142gorzata" + } + }, + { + "pk": 640, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Teofil Lenartowicz", + "slug": "mizerna-cicha", + "pd": 0, + "title": "Mizerna, cicha" + } + }, + { + "pk": 29, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "modlitwa-do-szatana", + "pd": 0, + "title": "Modlitwa Do Szatana" + } + }, + { + "pk": 30, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "moesta-et-errabunda", + "pd": 0, + "title": "Moesta Et Errabunda" + } + }, + { + "pk": 422, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "moja-ojczyzna", + "pd": 0, + "title": "Moja ojczyzna" + } + }, + { + "pk": 138, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "moje-zaduszki", + "pd": 0, + "title": "Moje Zaduszki" + } + }, + { + "pk": 302, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ignacy Krasicki", + "slug": "monachomachia", + "pd": 0, + "title": "Monachomachia" + } + }, + { + "pk": 556, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "moj-adamito-widzisz-jak-to-trudne", + "pd": 0, + "title": "M\u00f3j Adamito \u2014 widzisz, jak to trudne" + } + }, + { + "pk": 31, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "muzyka", + "pd": 0, + "title": "Muzyka" + } + }, + { + "pk": 92, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "muzykanci-z-bremy", + "pd": 0, + "title": "Muzykanci z Bremy" + } + }, + { + "pk": 457, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Bronis\u0142awa Ostrowska", + "slug": "myszka", + "pd": 0, + "title": "Myszka" + } + }, + { + "pk": 507, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Roman Dmowski", + "slug": "mysli-nowoczesnego-polaka", + "pd": 0, + "title": "My\u015bli nowoczesnego Polaka" + } + }, + { + "pk": 557, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "na-drzewie-zawisl-waz", + "pd": 0, + "title": "Na drzewie zawis\u0142 w\u0105\u017c" + } + }, + { + "pk": 615, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander \u015awi\u0119tochowski", + "slug": "na-pogrzebie", + "pd": 0, + "title": "Na pogrzebie" + } + }, + { + "pk": 558, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "na-sprowadzenie-prochow-napoleona", + "pd": 0, + "title": "Na sprowadzenie proch\u00f3w Napoleona" + } + }, + { + "pk": 471, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "na-wakacjach", + "pd": 0, + "title": "Na wakacjach" + } + }, + { + "pk": 662, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Edmund Wasilewski", + "slug": "na-wawel-na-wawel", + "pd": 0, + "title": "Na Wawel, na Wawel" + } + }, + { + "pk": 607, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "John Steinbeck", + "slug": "na-wschod-od-edenu", + "pd": 2056, + "title": "Na wsch\u00f3d od Edenu" + } + }, + { + "pk": 139, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "na-wsi", + "pd": 0, + "title": "Na wsi" + } + }, + { + "pk": 367, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "nad-woda-wielka-i-czysta", + "pd": 0, + "title": "Nad wod\u0105 wielk\u0105 i czyst\u0105" + } + }, + { + "pk": 389, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jan Andrzej Morsztyn", + "slug": "nagrobek-kusiowi", + "pd": 0, + "title": "Nagrobek Kusiowi" + } + }, + { + "pk": 680, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Emil Zola", + "slug": "nana", + "pd": 2046, + "title": "Nana" + } + }, + { + "pk": 627, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Ignacy Witkiewicz", + "slug": "narkotyki", + "pd": 0, + "title": "Narkotyki" + } + }, + { + "pk": 559, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "narodzie-moj", + "pd": 0, + "title": "Narodzie m\u00f3j" + } + }, + { + "pk": 560, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "nastal-moj-mily-wiek-eschylesowy", + "pd": 0, + "title": "Nasta\u0142, m\u00f3j mi\u0142y, wiek Eschylesowy" + } + }, + { + "pk": 472, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "nawrocony", + "pd": 0, + "title": "Nawr\u00f3cony" + } + }, + { + "pk": 140, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "nic-wiecej", + "pd": 0, + "title": "Nic wi\u0119cej" + } + }, + { + "pk": 561, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "nie-wiadomo-co-czyli-romantycznosc", + "pd": 0, + "title": "Nie wiadomo co, czyli Romantyczno\u015b\u0107" + } + }, + { + "pk": 484, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Kazimierz Przerwa-Tetmajer", + "slug": "nie-wierze-w-nic", + "pd": 2011, + "title": "Nie wierz\u0119 w nic" + } + }, + { + "pk": 562, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "niedawno-jeszcze-kiedym-spoczywal-uspiony", + "pd": 0, + "title": "Niedawno jeszcze \u2014 kiedym spoczywa\u0142 u\u015bpiony" + } + }, + { + "pk": 563, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "niedawno-jeszcze-wasze-mogily", + "pd": 0, + "title": "Niedawno jeszcze wasze mogi\u0142y" + } + }, + { + "pk": 324, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "niegdys-dom-moj-ochoczy", + "pd": 0, + "title": "Niegdy\u015b dom m\u00f3j ochoczy" + } + }, + { + "pk": 281, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Jachowicz", + "slug": "niegrzeczna-andzia", + "pd": 0, + "title": "Niegrzeczna Andzia" + } + }, + { + "pk": 141, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "nienazwane-niejasne", + "pd": 0, + "title": "Nienazwane niejasne" + } + }, + { + "pk": 368, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "niepewnosc", + "pd": 0, + "title": "Niepewno\u015b\u0107" + } + }, + { + "pk": 32, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "niepowodzenie", + "pd": 0, + "title": "Niepowodzenie" + } + }, + { + "pk": 465, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Wac\u0142aw Potocki", + "slug": "nierzadem-polska-stoi", + "pd": 0, + "title": "Nierz\u0105dem Polska stoi" + } + }, + { + "pk": 418, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Edmund Niziurski", + "slug": "niewiarygodne-przygody-marka-piegusa", + "pd": null, + "title": "Niewiarygodne przygody Marka Piegusa" + } + }, + { + "pk": 485, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Kazimierz Przerwa-Tetmajer", + "slug": "niewierny", + "pd": 2011, + "title": "Niewierny" + } + }, + { + "pk": 458, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Bronis\u0142awa Ostrowska", + "slug": "niezapominajka", + "pd": 0, + "title": "Niezapominajka" + } + }, + { + "pk": 307, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Milan Kundera", + "slug": "nieznosna-lekkosc-bytu", + "pd": null, + "title": "Niezno\u015bna lekko\u015b\u0107 bytu" + } + }, + { + "pk": 676, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Wyspia\u0144ski", + "slug": "noc-listopadowa", + "pd": 0, + "title": "Noc listopadowa" + } + }, + { + "pk": 423, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "noc-tysiaczna-druga", + "pd": 0, + "title": "Noc tysi\u0105czna druga" + } + }, + { + "pk": 398, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "noelka", + "pd": null, + "title": "Noelka" + } + }, + { + "pk": 142, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "nuta-na-dzwony", + "pd": 0, + "title": "Nuta na dzwony" + } + }, + { + "pk": 401, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "nutria-i-nerwus", + "pd": null, + "title": "Nutria i Nerwus" + } + }, + { + "pk": 93, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "o-diable-z-trzema-zlotymi-wlosami", + "pd": 0, + "title": "O Diable z trzema z\u0142otymi w\u0142osami" + } + }, + { + "pk": 94, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "o-dzielnym-krawczyku", + "pd": 0, + "title": "O dzielnym krawczyku" + } + }, + { + "pk": 298, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Maria Konopnicka", + "slug": "o-krasnoludkach-i-sierotce-marysi", + "pd": 0, + "title": "O krasnoludkach i sierotce Marysi" + } + }, + { + "pk": 95, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "o-mlodziencu-ktory-nie-znal-strachu", + "pd": 0, + "title": "O m\u0142odzie\u0144cu, kt\u00f3ry nie zna\u0142 strachu" + } + }, + { + "pk": 355, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "o-morze-zjawisk", + "pd": 0, + "title": "O morze zjawisk" + } + }, + { + "pk": 663, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Wac\u0142aw Dennhoff-Czarnocki", + "slug": "o-moj-rozmarynie", + "pd": 0, + "title": "O m\u00f3j rozmarynie" + } + }, + { + "pk": 144, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "o-niebie", + "pd": 0, + "title": "O niebie" + } + }, + { + "pk": 447, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "o-powiesciach-t-t-jeza", + "pd": 0, + "title": "O powie\u015bciach T. T. Je\u017ca" + } + }, + { + "pk": 143, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "o-swierszczach", + "pd": 0, + "title": "O \u015bwierszczach" + } + }, + { + "pk": 434, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Artur Oppman", + "slug": "o-warsie-i-sawie", + "pd": 0, + "title": "O Warsie i Sawie" + } + }, + { + "pk": 96, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "o-wilku-i-siedmiu-kozlatkach", + "pd": 0, + "title": "O wilku i siedmiu ko\u017al\u0105tkach" + } + }, + { + "pk": 325, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "o-zmierzchu", + "pd": 0, + "title": "O zmierzchu" + } + }, + { + "pk": 564, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "o-nieszczesliwa-o-uciemiezona", + "pd": 0, + "title": "O! nieszcz\u0119\u015bliwa! o! uciemi\u0119\u017cona" + } + }, + { + "pk": 145, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "obloki", + "pd": 0, + "title": "Ob\u0142oki" + } + }, + { + "pk": 463, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Platon", + "slug": "obrona-sokratesa", + "pd": 0, + "title": "Obrona Sokratesa" + } + }, + { + "pk": 146, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "od-dnia-do-dna", + "pd": 0, + "title": "Od dnia do dna" + } + }, + { + "pk": 565, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "oda-do-wolnosci", + "pd": 0, + "title": "Oda do wolno\u015bci" + } + }, + { + "pk": 34, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "oddzwieki", + "pd": 0, + "title": "Odd\u017awi\u0119ki" + } + }, + { + "pk": 147, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "odpowiedz", + "pd": 0, + "title": "Odpowied\u017a" + } + }, + { + "pk": 192, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Homer", + "slug": "odyseja", + "pd": 0, + "title": "Odyseja" + } + }, + { + "pk": 641, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "oj-maluski-maluski", + "pd": 0, + "title": "Oj, maluski, malu\u015bki" + } + }, + { + "pk": 566, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "ojciec-zadzumionych", + "pd": 0, + "title": "Ojciec zad\u017cumionych" + } + }, + { + "pk": 35, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "olbrzymka", + "pd": 0, + "title": "Olbrzymka" + } + }, + { + "pk": 36, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "opetanie", + "pd": 0, + "title": "Op\u0119tanie" + } + }, + { + "pk": 72, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "opis-stworzenia-swiata-i-czlowieka", + "pd": 0, + "title": "Opis stworzenia \u015bwiata i cz\u0142owieka" + } + }, + { + "pk": 396, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "opium-w-rosole", + "pd": null, + "title": "Opium w rosole" + } + }, + { + "pk": 148, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "opowiadanie", + "pd": 0, + "title": "Opowiadanie" + } + }, + { + "pk": 2, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Irit Amiel", + "slug": "osmaleni", + "pd": null, + "title": "Osmaleni" + } + }, + { + "pk": 664, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ludwik Pomian \u0141ubi\u0144ski", + "slug": "ostatni-mazur", + "pd": 0, + "title": "Ostatni mazur" + } + }, + { + "pk": 567, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "ostatnie-wspomnienie", + "pd": 0, + "title": "Ostatnie wspomnienie" + } + }, + { + "pk": 37, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "otchlan", + "pd": 0, + "title": "Otch\u0142a\u0144" + } + }, + { + "pk": 514, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "otello", + "pd": 0, + "title": "Otello" + } + }, + { + "pk": 569, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "oto-bog-ktory-lona-tajemnic-odmyka", + "pd": 0, + "title": "Oto B\u00f3g, kt\u00f3ry \u0142ona tajemnic odmyka" + } + }, + { + "pk": 508, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Henryk Rzewuski", + "slug": "pamiatki-soplicy", + "pd": 0, + "title": "Pami\u0105tki Soplicy" + } + }, + { + "pk": 70, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Miron Bia\u0142oszewski", + "slug": "pamietnik-z-powstania-warszawskiego", + "pd": 2054, + "title": "Pami\u0119tnik z powstania warszawskiego" + } + }, + { + "pk": 460, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jan Chryzostom Pasek", + "slug": "pamietniki", + "pd": 0, + "title": "Pami\u0119tniki" + } + }, + { + "pk": 181, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Gustaw Flaubert", + "slug": "pani-bovary", + "pd": 2062, + "title": "Pani Bovary" + } + }, + { + "pk": 369, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "pani-czy-dziewczyna", + "pd": 0, + "title": "Pani czy dziewczyna" + } + }, + { + "pk": 448, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "pani-luiza", + "pd": 0, + "title": "Pani Luiza" + } + }, + { + "pk": 449, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "panna-antonina", + "pd": 0, + "title": "Panna Antonina" + } + }, + { + "pk": 450, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "panna-roza", + "pd": 0, + "title": "Panna R\u00f3\u017ca" + } + }, + { + "pk": 278, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jaros\u0142aw Iwaszkiewicz", + "slug": "panny-z-wilka", + "pd": 2051, + "title": "Panny z Wilka" + } + }, + { + "pk": 570, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "paryz", + "pd": 0, + "title": "Pary\u017c" + } + }, + { + "pk": 293, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jan Kochanowski", + "slug": "paslterz-dawidow", + "pd": 0, + "title": "Pas\u0142terz Dawid\u00f3w" + } + }, + { + "pk": 183, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander Fredro", + "slug": "pawel-i-gawel", + "pd": 0, + "title": "Pawe\u0142 i Gawe\u0142" + } + }, + { + "pk": 149, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "paysage-nocturne", + "pd": 0, + "title": "Paysage nocturne" + } + }, + { + "pk": 38, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "pekniety-dzwon", + "pd": 0, + "title": "P\u0119kni\u0119ty Dzwon" + } + }, + { + "pk": 618, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Makepeace Thackeray", + "slug": "pierscien-i-roza", + "pd": 0, + "title": "Pier\u015bcie\u0144 i r\u00f3\u017ca" + } + }, + { + "pk": 424, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "pierscien-wielkiej-damy-czyli-ex-machina-durejko", + "pd": 0, + "title": "Pier\u015bcie\u0144 Wielkiej Damy, czyli Ex-machina Durejko" + } + }, + { + "pk": 81, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "piesn-nad-piesniami", + "pd": 0, + "title": "Pie\u015b\u0144 nad pie\u015bniami" + } + }, + { + "pk": 150, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "piesn-o-niedobrej-burzy", + "pd": 0, + "title": "Pie\u015b\u0144 o niedobrej burzy" + } + }, + { + "pk": 461, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "piesn-o-rolandzie", + "pd": 2012, + "title": "Pie\u015b\u0144 o Rolandzie" + } + }, + { + "pk": 288, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Franciszek Karpi\u0144ski", + "slug": "piesn-poranna", + "pd": 0, + "title": "Pie\u015b\u0144 poranna" + } + }, + { + "pk": 390, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jan Andrzej Morsztyn", + "slug": "piesn-w-obozie-wojskowym-pod-zwancem", + "pd": 0, + "title": "Pie\u015b\u0144 w obozie wojskowym pod \u017bwa\u0144cem" + } + }, + { + "pk": 289, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Franciszek Karpi\u0144ski", + "slug": "piesn-wieczorna", + "pd": 0, + "title": "Pie\u015b\u0144 wieczorna" + } + }, + { + "pk": 39, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "piekno", + "pd": 0, + "title": "Pi\u0119kno" + } + }, + { + "pk": 40, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "piekny-statek", + "pd": 0, + "title": "Pi\u0119kny Statek" + } + }, + { + "pk": 116, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Carlo Collodi", + "slug": "pinokio", + "pd": null, + "title": "Pinokio" + } + }, + { + "pk": 151, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "piosenka-czeski-domek", + "pd": 0, + "title": "Piosenka czeski domek" + } + }, + { + "pk": 152, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "plan-akacji", + "pd": 0, + "title": "Plan akacji" + } + }, + { + "pk": 473, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "plesn-swiata", + "pd": 0, + "title": "Ple\u015b\u0144 \u015bwiata" + } + }, + { + "pk": 624, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Edmund Wasilewski", + "slug": "plynie-wisla-plynie", + "pd": 0, + "title": "P\u0142ynie Wis\u0142a, p\u0142ynie" + } + }, + { + "pk": 259, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "po-pyrrusa", + "pd": 0, + "title": "Po Pyrrusa" + } + }, + { + "pk": 665, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Wincenty Pol", + "slug": "pobudka", + "pd": 0, + "title": "Pobudka" + } + }, + { + "pk": 153, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "pod-dworcem-glownym-w-warszawie", + "pd": 0, + "title": "Pod Dworcem G\u0142\u00f3wnym w Warszawie" + } + }, + { + "pk": 41, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "podroz", + "pd": 0, + "title": "Podr\u00f3\u017c" + } + }, + { + "pk": 42, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "podroz-na-cytere", + "pd": 0, + "title": "Podr\u00f3\u017c Na Cyter\u0119" + } + }, + { + "pk": 286, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ryszard Kapu\u015bci\u0144ski", + "slug": "podroze-z-herodotem", + "pd": 2078, + "title": "Podr\u00f3\u017ce z Herodotem" + } + }, + { + "pk": 571, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "poeta-i-natchnienie", + "pd": 0, + "title": "Poeta i Natchnienie" + } + }, + { + "pk": 326, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "pogrzeb", + "pd": 0, + "title": "Pogrzeb" + } + }, + { + "pk": 327, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "pogrzeb-don-zuana", + "pd": 0, + "title": "Pogrzeb don \u017cuana" + } + }, + { + "pk": 572, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "pogrzeb-kapitana-meyznera", + "pd": 0, + "title": "Pogrzeb kapitana Meyznera" + } + }, + { + "pk": 154, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "polacy", + "pd": 0, + "title": "Polacy" + } + }, + { + "pk": 370, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "polaly-sie-lzy", + "pd": 0, + "title": "Pola\u0142y si\u0119 \u0142zy" + } + }, + { + "pk": 573, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "polska-polska-o-krolowa", + "pd": 0, + "title": "Polska! Polska! o! kr\u00f3lowa" + } + }, + { + "pk": 574, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "polsko-moja-tys-pierwsza-swiatu", + "pd": 0, + "title": "Polsko moja! ty\u015b pierwsza \u015bwiatu" + } + }, + { + "pk": 328, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "poludnie", + "pd": 0, + "title": "Po\u0142udnie" + } + }, + { + "pk": 371, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "popas-w-upicie", + "pd": 0, + "title": "Popas w Upicie" + } + }, + { + "pk": 451, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "porcelanka", + "pd": 0, + "title": "Porcelanka" + } + }, + { + "pk": 515, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "poskromienie-zlosnicy", + "pd": 0, + "title": "Poskromienie z\u0142o\u015bnicy" + } + }, + { + "pk": 43, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "poswiecam-ci-te-wiersze", + "pd": 0, + "title": "Po\u015bwi\u0119cam Ci Te Wiersze" + } + }, + { + "pk": 329, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "powrot", + "pd": 0, + "title": "Powr\u00f3t" + } + }, + { + "pk": 417, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Julian Ursyn Niemcewicz", + "slug": "powrot-posla", + "pd": 0, + "title": "Powr\u00f3t pos\u0142a" + } + }, + { + "pk": 666, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "pozegnanie", + "pd": 0, + "title": "Po\u017cegnanie" + } + }, + { + "pk": 628, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Ignacy Witkiewicz", + "slug": "pozegnanie-jesieni", + "pd": 0, + "title": "Po\u017cegnanie jesieni" + } + }, + { + "pk": 642, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "pojdzmy-wszyscy-do-stajenki", + "pd": 0, + "title": "P\u00f3jd\u017amy wszyscy do stajenki" + } + }, + { + "pk": 643, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "polnoc", + "pd": 0, + "title": "P\u00f3\u0142noc" + } + }, + { + "pk": 425, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "praca", + "pd": 0, + "title": "Praca" + } + }, + { + "pk": 284, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Franz Kafka", + "slug": "proces", + "pd": 2013, + "title": "Proces" + } + }, + { + "pk": 174, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Tadeusz Do\u0142\u0119ga-Mostowicz", + "slug": "profesor-wilczur", + "pd": 0, + "title": "Profesor Wilczur" + } + }, + { + "pk": 575, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "proroctwo", + "pd": 0, + "title": "Proroctwo" + } + }, + { + "pk": 330, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "prosba", + "pd": 0, + "title": "Pro\u015bba" + } + }, + { + "pk": 576, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "prowadzil-mnie-na-bardzo-ciemne-wezowisko", + "pd": 0, + "title": "Prowadzi\u0142 mnie na bardzo ciemne w\u0119\u017cowisko" + } + }, + { + "pk": 474, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "przed-kopernikiem", + "pd": 0, + "title": "Przed Kopernikiem" + } + }, + { + "pk": 495, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "przed-switem", + "pd": 0, + "title": "Przed \u015bwitem" + } + }, + { + "pk": 155, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "przedswit", + "pd": 0, + "title": "Przed\u015bwit" + } + }, + { + "pk": 577, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "przeklestwo", + "pd": 0, + "title": "Przekl\u0119stwo" + } + }, + { + "pk": 606, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Staszic", + "slug": "przestrogi-dla-polski", + "pd": 0, + "title": "Przestrogi dla Polski" + } + }, + { + "pk": 156, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "przez-kresy", + "pd": 0, + "title": "Przez kresy" + } + }, + { + "pk": 644, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "przybiezeli-do-betlejem", + "pd": 0, + "title": "Przybie\u017celi do Betlejem" + } + }, + { + "pk": 459, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jan Parandowski", + "slug": "przygody-odyseusza", + "pd": 2049, + "title": "Przygody Odyseusza" + } + }, + { + "pk": 331, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "przygody-sindbada-zeglarza", + "pd": 0, + "title": "Przygody Sindbada \u017beglarza" + } + }, + { + "pk": 620, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Mark Twain", + "slug": "przygody-tomka-sawyera", + "pd": 2054, + "title": "Przygody Tomka Sawyera" + } + }, + { + "pk": 74, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "przypowiesc-o-milosiernym-samarytaninie", + "pd": 0, + "title": "Przypowie\u015b\u0107 o mi\u0142osiernym Samarytaninie" + } + }, + { + "pk": 75, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "przypowiesc-o-pannach-roztropnych", + "pd": 0, + "title": "Przypowie\u015b\u0107 o pannach roztropnych" + } + }, + { + "pk": 76, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "przypowiesc-o-robotnikach-w-winnicy", + "pd": 0, + "title": "Przypowie\u015b\u0107 o robotnikach w winnicy" + } + }, + { + "pk": 77, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "przypowiesc-o-siewcy", + "pd": 0, + "title": "Przypowie\u015b\u0107 o siewcy" + } + }, + { + "pk": 78, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "przypowiesc-o-synu-marnotrawnym", + "pd": 0, + "title": "Przypowie\u015b\u0107 o synu marnotrawnym" + } + }, + { + "pk": 79, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "przypowiesc-o-talentach", + "pd": 0, + "title": "Przypowie\u015b\u0107 o talentach" + } + }, + { + "pk": 80, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "przypowiesc-o-ziarnku-gorczycy", + "pd": 0, + "title": "Przypowie\u015b\u0107 o ziarnku gorczycy" + } + }, + { + "pk": 399, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "pulpecja", + "pd": null, + "title": "Pulpecja" + } + }, + { + "pk": 332, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "puscila-po-stole-swawolacy-wianek", + "pd": 0, + "title": "Pu\u015bci\u0142a po stole swawol\u0105cy wianek" + } + }, + { + "pk": 372, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "renegat-ballada-turecka", + "pd": 0, + "title": "Renegat (ballada turecka)" + } + }, + { + "pk": 415, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Daniel Naborowski", + "slug": "respons-niespodziewany", + "pd": 0, + "title": "Respons niespodziewany" + } + }, + { + "pk": 436, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "George Orwell", + "slug": "rok-1984", + "pd": 2074, + "title": "Rok 1984" + } + }, + { + "pk": 44, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "romantyczny-zachod-slonca", + "pd": 0, + "title": "Romantyczny Zach\u00f3d S\u0142o\u0144ca" + } + }, + { + "pk": 109, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "roszpunka", + "pd": 0, + "title": "Roszpunka" + } + }, + { + "pk": 667, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Maria Konopnicka", + "slug": "rota", + "pd": 0, + "title": "Rota" + } + }, + { + "pk": 579, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "rozlaczenie", + "pd": 0, + "title": "Roz\u0142\u0105czenie" + } + }, + { + "pk": 668, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "August Bielowski", + "slug": "bielowski-rozlaczenie", + "pd": 0, + "title": "Roz\u0142\u0105czenie" + } + }, + { + "pk": 527, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "rozmowa-z-piramidami", + "pd": 0, + "title": "Rozmowa z piramidami" + } + }, + { + "pk": 157, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "rymy-pobozne", + "pd": 0, + "title": "Rymy pobo\u017cne" + } + }, + { + "pk": 516, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "ryszard-ii", + "pd": 0, + "title": "Ryszard II" + } + }, + { + "pk": 621, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Tyrtajos", + "slug": "rzecz-to-piekna", + "pd": 0, + "title": "Rzecz to pi\u0119kna" + } + }, + { + "pk": 580, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "rzym", + "pd": 0, + "title": "Rzym" + } + }, + { + "pk": 277, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Horacy", + "slug": "satyry", + "pd": 0, + "title": "Satyry" + } + }, + { + "pk": 496, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "seans", + "pd": 0, + "title": "Seans" + } + }, + { + "pk": 45, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "sed-non-satiata", + "pd": 0, + "title": "Sed Non Satiata" + } + }, + { + "pk": 523, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Henryk Sienkiewicz", + "slug": "selim-mirza", + "pd": 0, + "title": "Selim Mirza" + } + }, + { + "pk": 158, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "sen", + "pd": 0, + "title": "Sen" + } + }, + { + "pk": 475, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "prus-sen", + "pd": 0, + "title": "Sen" + } + }, + { + "pk": 517, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "sen-nocy-letniej", + "pd": 0, + "title": "Sen nocy letniej" + } + }, + { + "pk": 159, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "sen-sielski", + "pd": 0, + "title": "Sen sielski" + } + }, + { + "pk": 333, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "sen-wiejski", + "pd": 0, + "title": "Sen wiejski" + } + }, + { + "pk": 497, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "senne-dzieje", + "pd": 0, + "title": "Senne dzieje" + } + }, + { + "pk": 677, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Wyspia\u0144ski", + "slug": "sedziowie", + "pd": 0, + "title": "S\u0119dziowie" + } + }, + { + "pk": 46, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "skargi-jakiegos-ikara", + "pd": 0, + "title": "Skargi Jakiego\u015b Ikara" + } + }, + { + "pk": 386, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Moli\u00e8re", + "slug": "skapiec", + "pd": 0, + "title": "Sk\u0105piec" + } + }, + { + "pk": 520, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Bruno Schulz", + "slug": "sklepy-cynamonowe", + "pd": 2013, + "title": "Sklepy cynamonowe" + } + }, + { + "pk": 334, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "skonczonosc", + "pd": 0, + "title": "Sko\u0144czono\u015b\u0107" + } + }, + { + "pk": 335, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "skrzeble", + "pd": 0, + "title": "Skrzeble" + } + }, + { + "pk": 373, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "slowiczku-moj", + "pd": 0, + "title": "S\u0142owiczku m\u00f3j" + } + }, + { + "pk": 374, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "snuc-milosc", + "pd": 0, + "title": "Snu\u0107 mi\u0142o\u015b\u0107" + } + }, + { + "pk": 582, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "snycerz-byl-zatrudniony-dyjany-lepieniem", + "pd": 0, + "title": "Snycerz by\u0142 zatrudniony Dyjany lepieniem" + } + }, + { + "pk": 426, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "socjalizm", + "pd": 0, + "title": "Socjalizm" + } + }, + { + "pk": 310, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Lem", + "slug": "solaris", + "pd": 2077, + "title": "Solaris" + } + }, + { + "pk": 519, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "sonety", + "pd": 0, + "title": "Sonety" + } + }, + { + "pk": 375, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "sonety-odeskie", + "pd": 0, + "title": "Sonety odeskie" + } + }, + { + "pk": 583, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "sowinski-w-okopach-woli", + "pd": 0, + "title": "Sowi\u0144ski w okopach Woli" + } + }, + { + "pk": 47, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "spleen-i", + "pd": 0, + "title": "Spleen I" + } + }, + { + "pk": 48, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "spleen-ii", + "pd": 0, + "title": "Spleen II" + } + }, + { + "pk": 419, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Edmund Niziurski", + "slug": "sposob-na-alcybiadesa", + "pd": null, + "title": "Spos\u00f3b na Alcybiadesa" + } + }, + { + "pk": 336, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "spotykam-go-codziennie", + "pd": 0, + "title": "Spotykam go codziennie" + } + }, + { + "pk": 498, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "sprawiedliwie", + "pd": 0, + "title": "Sprawiedliwie" + } + }, + { + "pk": 409, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "sprezyna", + "pd": null, + "title": "Spr\u0119\u017cyna" + } + }, + { + "pk": 118, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "srebrne-nitki", + "pd": 0, + "title": "Srebrne nitki" + } + }, + { + "pk": 605, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "sroczka-kaszke-wazyla", + "pd": null, + "title": "Sroczka kaszk\u0119 wa\u017cy\u0142a" + } + }, + { + "pk": 305, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ignacy Kraszewski", + "slug": "stara-basn", + "pd": 0, + "title": "Stara Ba\u015b\u0144" + } + }, + { + "pk": 49, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "staruszeczki", + "pd": 0, + "title": "Staruszeczki" + } + }, + { + "pk": 294, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Oskar Kolberg", + "slug": "stary-niedzwiedz", + "pd": 0, + "title": "Stary nied\u017awied\u017a" + } + }, + { + "pk": 524, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Henryk Sienkiewicz", + "slug": "stary-sluga", + "pd": 0, + "title": "Stary s\u0142uga" + } + }, + { + "pk": 354, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Gabriel Garcia Marquez", + "slug": "sto-lat-samotnosci", + "pd": null, + "title": "Sto lat samotno\u015bci" + } + }, + { + "pk": 97, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "stoliczku-nakryj-sie", + "pd": 0, + "title": "Stoliczku nakryj si\u0119" + } + }, + { + "pk": 499, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "suka", + "pd": 0, + "title": "Suka" + } + }, + { + "pk": 50, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "sygnaly", + "pd": 0, + "title": "Sygna\u0142y" + } + }, + { + "pk": 160, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "synteza", + "pd": 0, + "title": "Synteza" + } + }, + { + "pk": 683, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stefan \u017beromski", + "slug": "syzyfowe-prace", + "pd": 0, + "title": "Syzyfowe prace" + } + }, + { + "pk": 352, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Kornel Makuszy\u0144ski", + "slug": "szatan-z-siodmej-klasy", + "pd": 2024, + "title": "Szatan z si\u00f3dmej klasy" + } + }, + { + "pk": 337, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "szczescie", + "pd": 0, + "title": "Szcz\u0119\u015bcie" + } + }, + { + "pk": 98, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "szesc-labedzi", + "pd": 0, + "title": "Sze\u015b\u0107 \u0142ab\u0119dzi" + } + }, + { + "pk": 669, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Gustawa Erynbergh", + "slug": "szlachta-w-roku-1831", + "pd": 0, + "title": "Szlachta w roku 1831" + } + }, + { + "pk": 392, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "szosta-klepka", + "pd": null, + "title": "Sz\u00f3sta klepka" + } + }, + { + "pk": 525, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Isaac Bashevis Singer", + "slug": "sztukmistrz-z-lublina", + "pd": null, + "title": "Sztukmistrz z Lublina" + } + }, + { + "pk": 161, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "smierc", + "pd": 0, + "title": "\u015amier\u0107" + } + }, + { + "pk": 500, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "reymont-smierc", + "pd": 0, + "title": "\u015amier\u0107" + } + }, + { + "pk": 338, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "smierc-buddy", + "pd": 0, + "title": "\u015amier\u0107 buddy" + } + }, + { + "pk": 51, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "smierc-kochankow", + "pd": 0, + "title": "\u015amier\u0107 Kochank\u00f3w" + } + }, + { + "pk": 52, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "smierc-nedzarzy", + "pd": 0, + "title": "\u015amier\u0107 N\u0119dzarzy" + } + }, + { + "pk": 339, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "smierc-wtora", + "pd": 0, + "title": "\u015amier\u0107 wt\u00f3ra" + } + }, + { + "pk": 584, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "smierc-co-trzynascie-lat-stala-kolo-mnie", + "pd": 0, + "title": "\u015amier\u0107, co trzyna\u015bcie \u0142at sta\u0142a ko\u0142o mnie" + } + }, + { + "pk": 581, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "sni-mi-sie-jakas-wielka-a-przez-wieki-idaca", + "pd": 0, + "title": "\u015ani mi si\u0119 jaka\u015b wielka a przez wieki id\u0105ca" + } + }, + { + "pk": 376, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "snila-sie-zima", + "pd": 0, + "title": "\u015ani\u0142a si\u0119 zima" + } + }, + { + "pk": 99, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "spiaca-krolewna", + "pd": 0, + "title": "\u015api\u0105ca kr\u00f3lewna" + } + }, + { + "pk": 670, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Rajnold Suchodolski", + "slug": "spiew", + "pd": 0, + "title": "\u015apiew" + } + }, + { + "pk": 162, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "spiewny-pocalunek", + "pd": 0, + "title": "\u015apiewny poca\u0142unek" + } + }, + { + "pk": 452, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "swiatlo-w-ruinach", + "pd": 0, + "title": "\u015awiat\u0142o w ruinach" + } + }, + { + "pk": 53, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "swit", + "pd": 0, + "title": "\u015awit" + } + }, + { + "pk": 163, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "ta-chwila", + "pd": 0, + "title": "Ta chwila" + } + }, + { + "pk": 178, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Artur Conan Doyle", + "slug": "tajemnica-baskervilleow", + "pd": 0, + "title": "Tajemnica Baskerville'\u00f3w" + } + }, + { + "pk": 112, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Frances Hodgson Burnett", + "slug": "tajemniczy-ogrod", + "pd": 2014, + "title": "Tajemniczy ogr\u00f3d" + } + }, + { + "pk": 585, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "tak-mi-boze-dopomoz", + "pd": 0, + "title": "Tak mi, Bo\u017ce, dopom\u00f3\u017c" + } + }, + { + "pk": 340, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "tango", + "pd": 0, + "title": "Tango" + } + }, + { + "pk": 283, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Irena Jurgielewiczowa", + "slug": "ten-obcy", + "pd": 2074, + "title": "Ten obcy" + } + }, + { + "pk": 586, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "ten-sam-duchowi-plomienny-szlak", + "pd": 0, + "title": "Ten sam duchowi p\u0142omienny szlak" + } + }, + { + "pk": 100, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "titelitury", + "pd": 0, + "title": "Titelitury" + } + }, + { + "pk": 164, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "to-wiem", + "pd": 0, + "title": "To wiem" + } + }, + { + "pk": 101, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "tomcio-paluszek", + "pd": 0, + "title": "Tomcio paluszek" + } + }, + { + "pk": 610, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Alfred Szklarski", + "slug": "tomek-w-krainie-kangurow", + "pd": 2063, + "title": "Tomek w krainie kangur\u00f3w" + } + }, + { + "pk": 165, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "torun", + "pd": 0, + "title": "Toru\u0144" + } + }, + { + "pk": 410, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Wies\u0142aw My\u015bliwski", + "slug": "traktat-o-luskaniu-fasoli", + "pd": null, + "title": "Traktat o \u0142uskaniu fasoli" + } + }, + { + "pk": 645, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "triumfy-krola-niebieskiego", + "pd": 0, + "title": "Triumfy Kr\u00f3la Niebieskiego" + } + }, + { + "pk": 282, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Karol Wojty\u0142a", + "slug": "tryptyk-rzymski", + "pd": 2076, + "title": "Tryptyk Rzymski" + } + }, + { + "pk": 377, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "trzech-budrysow", + "pd": 0, + "title": "Trzech Budrys\u00f3w" + } + }, + { + "pk": 671, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "trzeci-maj-litwina", + "pd": 0, + "title": "Trzeci Maj Litwina" + } + }, + { + "pk": 341, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "tu-jestem", + "pd": 0, + "title": "Tu jestem" + } + }, + { + "pk": 378, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "tukaj", + "pd": 0, + "title": "Tukaj" + } + }, + { + "pk": 616, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Aleksander \u015awi\u0119tochowski", + "slug": "twingo", + "pd": 0, + "title": "Twingo" + } + }, + { + "pk": 342, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "twoj-portret", + "pd": 0, + "title": "Tw\u00f3j portret" + } + }, + { + "pk": 587, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "ty-glos-cierpiacy-podnies-i-niech-w-tobie", + "pd": 0, + "title": "Ty g\u0142os cierpi\u0105cy podnie\u015b \u2014 i niech w tobie" + } + }, + { + "pk": 404, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "tygrys-i-roza", + "pd": null, + "title": "Tygrys i R\u00f3\u017ca" + } + }, + { + "pk": 379, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "uciec-z-dusza-na-listek", + "pd": 0, + "title": "Uciec z dusz\u0105 na listek" + } + }, + { + "pk": 380, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "ucieczka", + "pd": 0, + "title": "Ucieczka" + } + }, + { + "pk": 672, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Franciszek Kowalski", + "slug": "ulan-i-dziewczyna", + "pd": 0, + "title": "U\u0142an i dziewczyna" + } + }, + { + "pk": 588, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "uspokojenie", + "pd": 0, + "title": "Uspokojenie" + } + }, + { + "pk": 343, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "usta-i-oczy", + "pd": 0, + "title": "Usta i oczy" + } + }, + { + "pk": 623, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jules Gabriel Verne", + "slug": "w-80-dni-dokola-swiata", + "pd": 0, + "title": "W 80 dni doko\u0142a \u015bwiata" + } + }, + { + "pk": 590, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "w-albumie-e-hr-krasinskiej", + "pd": 0, + "title": "W albumie E. hr. Krasi\u0144skiej" + } + }, + { + "pk": 166, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "w-boju", + "pd": 0, + "title": "W boju" + } + }, + { + "pk": 188, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stefan Grabi\u0144ski", + "slug": "w-domu-sary", + "pd": 0, + "title": "W domu Sary" + } + }, + { + "pk": 591, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "w-dziecinne-moje-cudne-lata", + "pd": 0, + "title": "W dziecinne moje cudne lata" + } + }, + { + "pk": 381, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "w-imienniku-celiny-szymanowskiej", + "pd": 0, + "title": "W imienniku Celiny Szymanowskiej" + } + }, + { + "pk": 476, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "w-ogrodzie-saskim", + "pd": 0, + "title": "W Ogrodzie Saskim" + } + }, + { + "pk": 592, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "w-ostatni-dzien-w-ostatni-dzien", + "pd": 0, + "title": "W ostatni dzie\u0144 \u2014 w ostatni dzie\u0144" + } + }, + { + "pk": 501, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "w-palarni-opium", + "pd": 0, + "title": "W palarni opium" + } + }, + { + "pk": 593, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "w-pamietniku-zofii-bobrowny", + "pd": 0, + "title": "W pami\u0119tniku Zofii Bobr\u00f3wny" + } + }, + { + "pk": 594, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "w-sztambuchu-marii-wodzinskiej", + "pd": 0, + "title": "W sztambuchu Marii Wodzi\u0144skiej" + } + }, + { + "pk": 589, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "w-szwajcarii", + "pd": 0, + "title": "W Szwajcarii" + } + }, + { + "pk": 428, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "w-weronie", + "pd": 0, + "title": "W Weronie" + } + }, + { + "pk": 453, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "w-zimowy-wieczor", + "pd": 0, + "title": "W zimowy wiecz\u00f3r" + } + }, + { + "pk": 646, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Piotr Skarga", + "slug": "w-zlobie-lezy", + "pd": 0, + "title": "W \u017c\u0142obie le\u017cy" + } + }, + { + "pk": 595, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "waclaw", + "pd": 0, + "title": "Wac\u0142aw" + } + }, + { + "pk": 502, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "wampir", + "pd": 0, + "title": "Wampir" + } + }, + { + "pk": 427, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "wanda", + "pd": 0, + "title": "Wanda" + } + }, + { + "pk": 673, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "warszawianka", + "pd": 0, + "title": "Warszawianka" + } + }, + { + "pk": 678, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Wyspia\u0144ski", + "slug": "wyspianski-warszawianka", + "pd": 0, + "title": "Warszawianka" + } + }, + { + "pk": 674, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "warszawianka-1831", + "pd": 0, + "title": "Warszawianka 1831" + } + }, + { + "pk": 675, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "warszawianka-1905", + "pd": 0, + "title": "Warszawianka 1905" + } + }, + { + "pk": 344, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "wczesnym-rankiem", + "pd": 0, + "title": "Wczesnym rankiem" + } + }, + { + "pk": 503, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "we-mglach", + "pd": 0, + "title": "We mg\u0142ach" + } + }, + { + "pk": 518, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "William Shakespeare", + "slug": "wesole-kumoszki-z-windsoru", + "pd": 0, + "title": "Weso\u0142e kumoszki z Windsoru" + } + }, + { + "pk": 54, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "wesoly-zmarly", + "pd": 0, + "title": "Weso\u0142y Zmar\u0142y" + } + }, + { + "pk": 167, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "westchnienie", + "pd": 0, + "title": "Westchnienie" + } + }, + { + "pk": 55, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "widmo", + "pd": 0, + "title": "Widmo" + } + }, + { + "pk": 168, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "widzenie", + "pd": 0, + "title": "Widzenie" + } + }, + { + "pk": 477, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "widziadla", + "pd": 0, + "title": "Widziad\u0142a" + } + }, + { + "pk": 596, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "wielcysmy-byli-i-smiesznismy-byli", + "pd": 0, + "title": "Wielcy\u015bmy byli i \u015bmieszni\u015bmy byli" + } + }, + { + "pk": 102, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "wierny-jan", + "pd": 0, + "title": "Wierny Jan" + } + }, + { + "pk": 345, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "wiersz-konny", + "pd": 0, + "title": "Wiersz konny" + } + }, + { + "pk": 169, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "wiersz-o-smierci", + "pd": 0, + "title": "Wiersz o \u015bmierci" + } + }, + { + "pk": 597, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "wierze", + "pd": 0, + "title": "Wierz\u0119" + } + }, + { + "pk": 598, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "wiesz-panie-i-zem-zbiegal-swiat-szeroki", + "pd": 0, + "title": "Wiesz, Panie, i \u017cem zbiega\u0142 \u015bwiat szeroki" + } + }, + { + "pk": 170, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "wiezien-milosci", + "pd": 0, + "title": "Wi\u0119zie\u0144 mi\u0142o\u015bci" + } + }, + { + "pk": 56, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "wino-galganiarzy", + "pd": 0, + "title": "Wino Ga\u0142ganiarzy" + } + }, + { + "pk": 57, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "wino-mordercy", + "pd": 0, + "title": "Wino Mordercy" + } + }, + { + "pk": 58, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "wino-samotnika", + "pd": 0, + "title": "Wino Samotnika" + } + }, + { + "pk": 295, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Oskar Kolberg", + "slug": "wlazl-kotek-na-plotek", + "pd": 0, + "title": "Wlaz\u0142 kotek na p\u0142otek" + } + }, + { + "pk": 617, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Dorota Terakowska", + "slug": "wladca-lewawu", + "pd": 2075, + "title": "W\u0142adca Lewawu" + } + }, + { + "pk": 59, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "wrog", + "pd": 0, + "title": "Wr\u00f3g" + } + }, + { + "pk": 186, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Wiktor Gomulicki", + "slug": "wspomnienia-niebieskiego-mundurka", + "pd": 0, + "title": "Wspomnienia niebieskiego mundurka" + } + }, + { + "pk": 599, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "wspomnienie-pani-de-st-marcel-z-domu-chauveaux", + "pd": 0, + "title": "Wspomnienie pani de St Marcel z domu Chauveaux" + } + }, + { + "pk": 600, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "wstal-anhelli-z-grobu-za-nim-wszystkie-duchy", + "pd": 0, + "title": "Wsta\u0142 Anhelli z grobu \u2014 za nim wszystkie duchy" + } + }, + { + "pk": 647, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "wsrod-nocnej-ciszy", + "pd": 0, + "title": "W\u015br\u00f3d nocnej ciszy" + } + }, + { + "pk": 601, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "wyjdzie-stu-robotnikow", + "pd": 0, + "title": "Wyjdzie stu robotnik\u00f3w" + } + }, + { + "pk": 346, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "wyruszyla-dusza-w-droge", + "pd": 0, + "title": "Wyruszy\u0142a dusza w drog\u0119" + } + }, + { + "pk": 60, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "wyrzut-posmiertny", + "pd": 0, + "title": "Wyrzut Po\u015bmiertny" + } + }, + { + "pk": 608, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Robert Louis Stevenson", + "slug": "wyspa-skarbow", + "pd": 0, + "title": "Wyspa skarb\u00f3w" + } + }, + { + "pk": 679, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Stanis\u0142aw Wyspia\u0144ski", + "slug": "wyzwolenie", + "pd": 0, + "title": "Wyzwolenie" + } + }, + { + "pk": 61, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "wzlot", + "pd": 0, + "title": "Wzlot" + } + }, + { + "pk": 478, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "z-bielan", + "pd": 0, + "title": "Z Bielan" + } + }, + { + "pk": 292, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Jan Kasprowicz", + "slug": "z-chalupy", + "pd": 0, + "title": "Z cha\u0142upy" + } + }, + { + "pk": 602, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "z-listu-do-ksiegarza", + "pd": 0, + "title": "Z listu do ksi\u0119garza" + } + }, + { + "pk": 648, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "autor nieznany", + "slug": "z-narodzenia-pana", + "pd": 0, + "title": "Z narodzenia Pana" + } + }, + { + "pk": 504, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "z-pamietnika", + "pd": 0, + "title": "Z pami\u0119tnika" + } + }, + { + "pk": 505, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "z-wedrowek-haruna-al-reszyda", + "pd": 0, + "title": "Z w\u0119dr\u00f3wek Haruna al Reszyda" + } + }, + { + "pk": 479, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Prus", + "slug": "z-wypracowan-malego-frania", + "pd": 0, + "title": "Z wypracowa\u0144 ma\u0142ego Frania" + } + }, + { + "pk": 429, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Cyprian Kamil Norwid", + "slug": "za-kulisami", + "pd": 0, + "title": "Za kulisami" + } + }, + { + "pk": 506, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "W\u0142adys\u0142aw Stanis\u0142aw Reymont", + "slug": "zabilem", + "pd": 0, + "title": "Zabi\u0142em" + } + }, + { + "pk": 347, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "zachod", + "pd": 0, + "title": "Zach\u00f3d" + } + }, + { + "pk": 603, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "zachwycenie", + "pd": 0, + "title": "Zachwycenie" + } + }, + { + "pk": 62, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "zapach-egzotyczny", + "pd": 0, + "title": "Zapach Egzotyczny" + } + }, + { + "pk": 63, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "zaproszenie-do-podrozy", + "pd": 0, + "title": "Zaproszenie Do Podr\u00f3\u017cy" + } + }, + { + "pk": 296, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Oskar Kolberg", + "slug": "zasiali-gorale", + "pd": 0, + "title": "Zasiali g\u00f3rale" + } + }, + { + "pk": 348, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Boles\u0142aw Le\u015bmian", + "slug": "zboj", + "pd": 0, + "title": "Zb\u00f3j" + } + }, + { + "pk": 176, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Fiodor Dostojewski", + "slug": "zbrodnia-i-kara", + "pd": 2027, + "title": "Zbrodnia i kara" + } + }, + { + "pk": 382, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "zdania-i-uwagi", + "pd": 0, + "title": "Zdania i uwagi" + } + }, + { + "pk": 300, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Hanna Krall", + "slug": "zdazyc-przed-panem-bogiem", + "pd": null, + "title": "Zd\u0105\u017cy\u0107 przed Panem Bogiem" + } + }, + { + "pk": 454, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "zefirek", + "pd": 0, + "title": "Zefirek" + } + }, + { + "pk": 64, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "zegar", + "pd": 0, + "title": "Zegar" + } + }, + { + "pk": 383, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "zima-w-miescie", + "pd": 0, + "title": "Zima w mie\u015bcie" + } + }, + { + "pk": 103, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "zlodziej-nad-zlodziejami", + "pd": 0, + "title": "Z\u0142odziej nad z\u0142odziejami" + } + }, + { + "pk": 455, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Eliza Orzeszkowa", + "slug": "zlota-nitka", + "pd": 0, + "title": "Z\u0142ota nitka" + } + }, + { + "pk": 175, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Tadeusz Do\u0142\u0119ga-Mostowicz", + "slug": "znachor", + "pd": 0, + "title": "Znachor" + } + }, + { + "pk": 65, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "zniszczenie", + "pd": 0, + "title": "Zniszczenie" + } + }, + { + "pk": 66, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "zwloki", + "pd": 0, + "title": "Zw\u0142oki" + } + }, + { + "pk": 407, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Ma\u0142gorzata Musierowicz", + "slug": "zaba", + "pd": null, + "title": "\u017baba" + } + }, + { + "pk": 104, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Grimm Bracia", + "slug": "zabi-krol", + "pd": 0, + "title": "\u017babi kr\u00f3l" + } + }, + { + "pk": 171, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "J\u00f3zef Czechowicz", + "slug": "zal", + "pd": 0, + "title": "\u017bal" + } + }, + { + "pk": 384, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Adam Mickiewicz", + "slug": "zeglarz", + "pd": 0, + "title": "\u017beglarz" + } + }, + { + "pk": 604, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Juliusz S\u0142owacki", + "slug": "zmija", + "pd": 0, + "title": "\u017bmija" + } + }, + { + "pk": 67, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Charles Baudleaire", + "slug": "zywa-pochodnia", + "pd": 0, + "title": "\u017bywa Pochodnia" + } + }, + { + "pk": 487, + "model": "pdcounter.bookstub", + "fields": { + "translator": "", + "author": "Miko\u0142aj Rej", + "slug": "zywot-czlowieka-poczciwego", + "pd": 0, + "title": "\u017bywot cz\u0142owieka poczciwego" + } + } +] \ No newline at end of file diff --git a/src/pdcounter/locale/de/LC_MESSAGES/django.mo b/src/pdcounter/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..690e38b09 Binary files /dev/null and b/src/pdcounter/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/de/LC_MESSAGES/django.po b/src/pdcounter/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..89dcf4e0a --- /dev/null +++ b/src/pdcounter/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,144 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-04-15 13:43+0100\n" +"Last-Translator: Kamil <kjaklukowski@gmail.com>\n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" + +#: models.py:13 +msgid "name" +msgstr "Name" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "Slug" + +#: models.py:15 +msgid "sort key" +msgstr "Sortierschlüssel" + +#: models.py:16 models.py:42 +msgid "description" +msgstr "Beschreibung" + +#: models.py:17 +msgid "year of death" +msgstr "Todesjahr" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "Autor" + +#: models.py:24 +#, fuzzy +msgid "authors" +msgstr "Autoren" + +#: models.py:62 +msgid "title" +msgstr "Titel" + +#: models.py:64 +msgid "goes to public domain" +msgstr "Gehe zu Public Domain" + +#: models.py:66 +msgid "translator" +msgstr "Ãbersetzer" + +#: models.py:70 +msgid "book stub" +msgstr "Buchvorschau" + +#: models.py:71 +msgid "book stubs" +msgstr "Buchvorschauen" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "Lesen Sie mehr über diesem Werk bei Lektury.Gazeta.pl" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "Lesen Sie einen Artikel über diesem Autor in Wikipedia" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "Die Urheberrechte für dieses Werk werden geschützt." + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this author's works." +msgstr "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Erfahren " +"Sie</a> warum Internetbibliotheken die Werke dieses Autors nicht publizieren " +"dürfen." + +#: templates/pdcounter/author_detail.html:40 +#, fuzzy +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" +"Die Werke dieses Autors sind in Public Domain und werden in Internet-" +"Schulbibliothek von Wolne Lektury bald publiziert." + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" +"Die Werke des Autors werden in Public Domain sein und werden unbegrenzt " +"publeziert werden dürfen in" + +#: templates/pdcounter/book_stub_detail.html:17 +#, fuzzy +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" +"Dieses Werk ist in Public Domain und wird in Internet Schulbibliothek von " +"Wolne Lektury bald publiziert." + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" +"Die Werke des Autors werden in Public Domain sein und werden unbegrenzt " +"publeziert werden dürfen in" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this work." +msgstr "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Erfahren " +"Sie</a> warum Internetbibliotheken dieses Werk nicht publizieren dürfen." + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "Dieses Werk wird durch das Urheberrecht geschützt." + +#~ msgid "year of translator's death" +#~ msgstr "Todesjahr des Ãbersetzers" diff --git a/src/pdcounter/locale/en/LC_MESSAGES/django.mo b/src/pdcounter/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..18f7c61b7 Binary files /dev/null and b/src/pdcounter/locale/en/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/en/LC_MESSAGES/django.po b/src/pdcounter/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..7190a6c56 --- /dev/null +++ b/src/pdcounter/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,130 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 20:05+0100\n" +"Last-Translator: xxx <xxx>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" +"Plural-Forms: nplurals=2; plural=n != 1\n" + +#: models.py:13 +msgid "name" +msgstr "name" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "Slug" + +#: models.py:15 +msgid "sort key" +msgstr "Sort key" + +#: models.py:16 models.py:42 +msgid "description" +msgstr "Description" + +#: models.py:17 +msgid "year of death" +msgstr "Year of death" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "author" + +#: models.py:24 +#, fuzzy +msgid "authors" +msgstr "author" + +#: models.py:62 +msgid "title" +msgstr "Title" + +#: models.py:64 +msgid "goes to public domain" +msgstr "Goes to public domain" + +#: models.py:66 +msgid "translator" +msgstr "Translator" + +#: models.py:70 +msgid "book stub" +msgstr "Book stub" + +#: models.py:71 +msgid "book stubs" +msgstr "Book stubs" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "" + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this author's works." +msgstr "" + +#: templates/pdcounter/author_detail.html:40 +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:17 +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this work." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "" + +#~ msgid "year of translator's death" +#~ msgstr "Year of translator's death" diff --git a/src/pdcounter/locale/es/LC_MESSAGES/django.mo b/src/pdcounter/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..21f9745a7 Binary files /dev/null and b/src/pdcounter/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/es/LC_MESSAGES/django.po b/src/pdcounter/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..a04dc78b7 --- /dev/null +++ b/src/pdcounter/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,143 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-05-17 22:05+0100\n" +"Last-Translator: KG <kamila.gawron87@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" + +#: models.py:13 +msgid "name" +msgstr "nombre" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "slug" + +#: models.py:15 +msgid "sort key" +msgstr "clave de clasificación" + +#: models.py:16 models.py:42 +msgid "description" +msgstr "descripción" + +#: models.py:17 +msgid "year of death" +msgstr "año de muerte" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "autor" + +#: models.py:24 +msgid "authors" +msgstr "autores" + +#: models.py:62 +msgid "title" +msgstr "tÃtulo" + +#: models.py:64 +msgid "goes to public domain" +msgstr "pasa al dominio público" + +#: models.py:66 +msgid "translator" +msgstr "traductor" + +#: models.py:70 +msgid "book stub" +msgstr "vista previa del libro" + +#: models.py:71 +msgid "book stubs" +msgstr "vista previa de libros" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "Lea el estudio sobre las obras de este autor en Lektury.Gazeta.pl" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "Lea el artÃculo sobre este autor en Wikipedia" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "Las obras de este autor tienen todos los derechos de autor reservados." + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this author's works." +msgstr "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> el porqué las bibliotecas virtuales no pueden publicar las obras de este " +"autor." + +#: templates/pdcounter/author_detail.html:40 +#, fuzzy +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" +"Las obras de este autor son de dominio público y pronto serán publicadas en " +"Biblioteca virtual de Wolne Lektury." + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" +"Las obras de este autor van a ser parte de dominio público y pronto serán " +"publicadas sin restricciones en" + +#: templates/pdcounter/book_stub_detail.html:17 +#, fuzzy +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" +"Esta obra es de dominio público y pronto será publicada en Biblioteca " +"virtual de Wolne Lektury." + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" +"Esta obra va a ser parte de dominio público y pronto será publicada sin " +"restricciones en" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this work." +msgstr "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> el porqué las bibliotecas virtuales no pueden publicar esta obra." + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "Esta obra tiene todos los derechos de autor reservados." + +#~ msgid "year of translator's death" +#~ msgstr "año de la muerte del traductor" diff --git a/src/pdcounter/locale/fr/LC_MESSAGES/django.mo b/src/pdcounter/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c6e982cc8 Binary files /dev/null and b/src/pdcounter/locale/fr/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/fr/LC_MESSAGES/django.po b/src/pdcounter/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..6171e494f --- /dev/null +++ b/src/pdcounter/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,127 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-22 20:58+0100\n" +"Last-Translator: Ela Janota <amarillis5@wp.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:13 +msgid "name" +msgstr "nom" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "ébauche" + +#: models.py:15 +msgid "sort key" +msgstr "critère de tri" + +#: models.py:16 models.py:42 +msgid "description" +msgstr "description" + +#: models.py:17 +msgid "year of death" +msgstr "année de la mort" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "auteur" + +#: models.py:24 +msgid "authors" +msgstr "auteurs" + +#: models.py:62 +msgid "title" +msgstr "titre" + +#: models.py:64 +msgid "goes to public domain" +msgstr "entre dans le domaine public" + +#: models.py:66 +msgid "translator" +msgstr "traducteur" + +#: models.py:70 +msgid "book stub" +msgstr "ébauche du livre" + +#: models.py:71 +msgid "book stubs" +msgstr "ébauches des livres" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "" + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this author's works." +msgstr "" + +#: templates/pdcounter/author_detail.html:40 +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:17 +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this work." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "" + +#~ msgid "year of translator's death" +#~ msgstr "année de la mort du traducteur" diff --git a/src/pdcounter/locale/it/LC_MESSAGES/django.mo b/src/pdcounter/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..fc0347069 Binary files /dev/null and b/src/pdcounter/locale/it/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/it/LC_MESSAGES/django.po b/src/pdcounter/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..e7a083ee4 --- /dev/null +++ b/src/pdcounter/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,152 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-21 17:06+0100\n" +"Last-Translator: xxx\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: models.py:13 +msgid "name" +msgstr "" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "" + +#: models.py:15 +msgid "sort key" +msgstr "" + +#: models.py:16 models.py:42 +msgid "description" +msgstr "" + +#: models.py:17 +msgid "year of death" +msgstr "" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "" + +#: models.py:24 +msgid "authors" +msgstr "" + +#: models.py:62 +msgid "title" +msgstr "" + +#: models.py:64 +msgid "goes to public domain" +msgstr "" + +#: models.py:66 +msgid "translator" +msgstr "" + +#: models.py:70 +msgid "book stub" +msgstr "" + +#: models.py:71 +msgid "book stubs" +msgstr "" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "" + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this author's works." +msgstr "" + +#: templates/pdcounter/author_detail.html:40 +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:17 +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this work." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "" + +#~ msgid "tags" +#~ msgstr "i tag" + +#~ msgid "tag" +#~ msgstr "tag" + +#~ msgid "content type" +#~ msgstr "tipo di contenuto" + +#~ msgid "object id" +#~ msgstr "oggetto id" + +#~ msgid "tagged_object_list must be called with a queryset or a model." +#~ msgstr "" +#~ "L'elenco degli oggetti taggati deve essere chiamato con un queryset o un " +#~ "modello." + +#~ msgid "tagged_object_list must be called with a tag model." +#~ msgstr "" +#~ "Lâelenco degli oggetti taggati deve essere chiamato con un modello tag." + +#~ msgid "tagged_object_list must be called with a tag." +#~ msgstr "Lâelenco degli oggetti taggati deve essere chiamato con un tag." + +#~ msgid "No tags found matching \"%s\"." +#~ msgstr "Non sono stati trovati tag corrispondenti \"%s\"." diff --git a/src/pdcounter/locale/jp/LC_MESSAGES/django.mo b/src/pdcounter/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c9739db34 Binary files /dev/null and b/src/pdcounter/locale/jp/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/jp/LC_MESSAGES/django.po b/src/pdcounter/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 000000000..358d71aa2 --- /dev/null +++ b/src/pdcounter/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:13 +msgid "name" +msgstr "" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "" + +#: models.py:15 +msgid "sort key" +msgstr "" + +#: models.py:16 models.py:42 +msgid "description" +msgstr "" + +#: models.py:17 +msgid "year of death" +msgstr "" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "" + +#: models.py:24 +msgid "authors" +msgstr "" + +#: models.py:62 +msgid "title" +msgstr "" + +#: models.py:64 +msgid "goes to public domain" +msgstr "" + +#: models.py:66 +msgid "translator" +msgstr "" + +#: models.py:70 +msgid "book stub" +msgstr "" + +#: models.py:71 +msgid "book stubs" +msgstr "" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "" + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this author's works." +msgstr "" + +#: templates/pdcounter/author_detail.html:40 +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:17 +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this work." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "" diff --git a/src/pdcounter/locale/lt/LC_MESSAGES/django.mo b/src/pdcounter/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..dc721cf69 Binary files /dev/null and b/src/pdcounter/locale/lt/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/lt/LC_MESSAGES/django.po b/src/pdcounter/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..cedd34657 --- /dev/null +++ b/src/pdcounter/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,146 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-04-03 18:01+0100\n" +"Last-Translator: Karolina Zuber <suomija@o2.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: models.py:13 +msgid "name" +msgstr "pavadinimas" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "slug" + +#: models.py:15 +msgid "sort key" +msgstr "rikiavimo raktas" + +#: models.py:16 models.py:42 +msgid "description" +msgstr "apraÅ¡as" + +#: models.py:17 +msgid "year of death" +msgstr "mirties metai" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "autorius" + +#: models.py:24 +msgid "authors" +msgstr "autoriai" + +#: models.py:62 +msgid "title" +msgstr "pavadinimas" + +#: models.py:64 +msgid "goes to public domain" +msgstr "į vieÅ¡Ä jÄ sritį" + +#: models.py:66 +msgid "translator" +msgstr "vertÄjas" + +#: models.py:70 +msgid "book stub" +msgstr "book stub" + +#: models.py:71 +msgid "book stubs" +msgstr "book stubs" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "" +"Skaitykite Å¡io autoriaus kÅ«rinio apraÅ¡ymÄ interneto svetainÄje Lektury." +"Gazeta.pl" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "Skaitykite straipsnį apie šį autorių Vikipedijoje" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "Å io autoriaus kÅ«riniai yra autorinių teisių saugomi." + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this author's works." +msgstr "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-" +"publiczna/'>Sužinokite</a> kodÄl Å¡io autoriaus kÅ«riniai negali bÅ«ti " +"publikuojami internetinÄje bibliotekoje." + +#: templates/pdcounter/author_detail.html:40 +#, fuzzy +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" +"Å io autoriaus kÅ«riniai yra vieÅ¡ai prieinami ir netrukus bus publikuoti " +"interneto svetainÄs Wolne Lektury internetinÄje bibliotekoje. " + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" +"Å io autoriaus kÅ«riniai netrukus bus vieÅ¡ai prieinami ir galÄs bÅ«ti " +"publikuojami be apribojimų" + +#: templates/pdcounter/book_stub_detail.html:17 +#, fuzzy +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" +"Å is kÅ«rinys yra vieÅ¡ai prieinamas ir netrukus bus publikuotas interneto " +"svetainÄs Wolne Lektury internetinÄje bibliotekoje." + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" +"Å is kÅ«rinys netrukus bus vieÅ¡ai prieinamas ir galÄs bÅ«ti publikuojamas be " +"apribojimų" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this work." +msgstr "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-" +"publiczna/'>Sužinokite</a> kodÄl Å¡is kÅ«rinys negali bÅ«ti publikuojamas " +"internetinÄje bibliotekoje." + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "Å is kÅ«rinis yra autorinių teisių saugomas." + +#~ msgid "year of translator's death" +#~ msgstr "vertÄjo mirimo metai" diff --git a/src/pdcounter/locale/pl/LC_MESSAGES/django.mo b/src/pdcounter/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..8716191fe Binary files /dev/null and b/src/pdcounter/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/pl/LC_MESSAGES/django.po b/src/pdcounter/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..18cd84d7a --- /dev/null +++ b/src/pdcounter/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,142 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-06-11 15:47+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" +"X-Generator: Poedit 1.5.4\n" + +#: models.py:13 +msgid "name" +msgstr "nazwa" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "slug" + +#: models.py:15 +msgid "sort key" +msgstr "klucz sortowania" + +#: models.py:16 models.py:42 +msgid "description" +msgstr "opis" + +#: models.py:17 +msgid "year of death" +msgstr "rok Åmierci" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "autor" + +#: models.py:24 +msgid "authors" +msgstr "autorzy" + +#: models.py:62 +msgid "title" +msgstr "tytuÅ" + +#: models.py:64 +msgid "goes to public domain" +msgstr "trafia do domeny publicznej" + +#: models.py:66 +msgid "translator" +msgstr "tÅumacz" + +#: models.py:70 +msgid "book stub" +msgstr "zapowiedź ksiÄ Å¼ki" + +#: models.py:71 +msgid "book stubs" +msgstr "zapowiedzi ksiÄ Å¼ek" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "Licznik domeny publicznej" + +#: templates/pdcounter/author_detail.html:26 +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/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "Przeczytaj artykuÅ o autorze w Wikipedii" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "DzieÅa tego autora objÄte sÄ prawem autorskim." + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this author's works." +msgstr "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Dowiedz " +"siÄ</a>, dlaczego biblioteki internetowe nie mogÄ udostÄpniaÄ dzieÅ tego " +"autora." + +#: templates/pdcounter/author_detail.html:40 +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" +"DzieÅa tego autora znajdujÄ siÄ w domenie publicznej i niedÅugo zostanÄ " +"opublikowane w bibliotece internetowej Wolne Lektury." + +#: templates/pdcounter/author_detail.html:43 +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:17 +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" +"Ten utwór znajduje siÄ w domenie publicznej i niedÅugo zostanie opublikowany " +"w bibliotece internetowej Wolne Lektury." + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" +"Ten utwór przejdzie do zasobów domeny publicznej i bÄdzie mógÅ byÄ " +"publikowany bez żadnych ograniczeÅ za" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this work." +msgstr "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Dowiedz " +"siÄ</a>, dlaczego biblioteki internetowe nie mogÄ udostÄpniaÄ tego utworu." + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "Ten utwór objÄty jest prawem autorskim." + +#~ msgid "year of translator's death" +#~ msgstr "rok Åmierci tÅumacza" diff --git a/src/pdcounter/locale/ru/LC_MESSAGES/django.mo b/src/pdcounter/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..9e6a2e2a4 Binary files /dev/null and b/src/pdcounter/locale/ru/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/ru/LC_MESSAGES/django.po b/src/pdcounter/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..e6ed8e13b --- /dev/null +++ b/src/pdcounter/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,128 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 22:11+0100\n" +"Last-Translator: xxx <xxx>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" + +#: models.py:13 +msgid "name" +msgstr "название" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "slug" + +#: models.py:15 +msgid "sort key" +msgstr "клÑÑ ÑоÑÑиÑовки " + +#: models.py:16 models.py:42 +msgid "description" +msgstr "опиÑание" + +#: models.py:17 +msgid "year of death" +msgstr "год ÑмеÑÑи" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "авÑоÑ" + +#: models.py:24 +msgid "authors" +msgstr "авÑоÑÑ" + +#: models.py:62 +msgid "title" +msgstr "заглавие" + +#: models.py:64 +msgid "goes to public domain" +msgstr "идÑÑ Ðº пÑблиÑной домене" + +#: models.py:66 +msgid "translator" +msgstr "пеÑеводÑик" + +#: models.py:70 +msgid "book stub" +msgstr "Ð°Ð½Ð¾Ð½Ñ ÐºÐ½Ð¸Ð³Ð¸" + +#: models.py:71 +msgid "book stubs" +msgstr "анонÑÑ ÐºÐ½Ð¸Ð³Ð¸" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "" + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this author's works." +msgstr "" + +#: templates/pdcounter/author_detail.html:40 +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:17 +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this work." +msgstr "" + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "" + +#~ msgid "year of translator's death" +#~ msgstr "год ÑмеÑÑи пеÑеводÑика" diff --git a/src/pdcounter/locale/uk/LC_MESSAGES/django.mo b/src/pdcounter/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..539ff49a7 Binary files /dev/null and b/src/pdcounter/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/pdcounter/locale/uk/LC_MESSAGES/django.po b/src/pdcounter/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..bb7bd4f6c --- /dev/null +++ b/src/pdcounter/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,143 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-05-28 14:18+0100\n" +"Last-Translator: Natalia Kertyczak <natalczyk@o2.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:13 +msgid "name" +msgstr "назва" + +#: models.py:14 models.py:65 +msgid "slug" +msgstr "slug" + +#: models.py:15 +msgid "sort key" +msgstr "клÑÑ ÑоÑÑÑваннÑ" + +#: models.py:16 models.py:42 +msgid "description" +msgstr "опиÑ" + +#: models.py:17 +msgid "year of death" +msgstr "даÑа ÑмеÑÑÑ" + +#: models.py:23 models.py:63 +msgid "author" +msgstr "авÑоÑ" + +#: models.py:24 +msgid "authors" +msgstr "авÑоÑи" + +#: models.py:62 +msgid "title" +msgstr "заголовок" + +#: models.py:64 +msgid "goes to public domain" +msgstr "Ð²Ñ Ð¾Ð´Ð¸ÑÑ Ñ ÑÑÑпÑлÑне надбаннÑ" + +#: models.py:66 +msgid "translator" +msgstr "пеÑекладаÑ" + +#: models.py:70 +msgid "book stub" +msgstr "загоÑовка книжки" + +#: models.py:71 +msgid "book stubs" +msgstr "загоÑовки книжок" + +#: templates/pdcounter/author_detail.html:7 +#: templates/pdcounter/book_stub_detail.html:7 +msgid "Public domain counter" +msgstr "" + +#: templates/pdcounter/author_detail.html:26 +msgid "Read work's study of this author on Lektury.Gazeta.pl" +msgstr "ÐÑоÑиÑаÑи обговоÑÐµÐ½Ð½Ñ ÑвоÑÑ Ð°Ð²ÑоÑа на Lektury.Gazeta.pl" + +#: templates/pdcounter/author_detail.html:31 +msgid "Read article about this author on Wikipedia" +msgstr "ÐÑоÑиÑаÑи ÑÑаÑÑÑ Ð¿Ñо авÑоÑа Ñ ÐÑкÑпедÑÑ" + +#: templates/pdcounter/author_detail.html:36 +msgid "This author's works are copyrighted." +msgstr "ТвоÑи ÑÑого авÑоÑа Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом." + +#: templates/pdcounter/author_detail.html:37 +#: templates/pdcounter/author_detail.html:45 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this author's works." +msgstr "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-" +"publiczna/'>ÐÑзнайÑеÑÑ</a>, ÑÐ¾Ð¼Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ñ Ð±ÑблÑоÑеки не можÑÑÑ " +"опÑблÑкÑваÑи ÑвоÑÑв ÑÑого авÑоÑа." + +#: templates/pdcounter/author_detail.html:40 +#, fuzzy +msgid "" +"This author's works are in public domain and will be published on Internet " +"library of Wolne Lektury soon." +msgstr "" +"ТвоÑи ÑÑого авÑоÑа Ñ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного Ð½Ð°Ð´Ð±Ð°Ð½Ð½Ñ Ñ ÑкоÑо бÑдÑÑÑ " +"опÑблÑÐºÐ¾Ð²Ð°Ð½Ñ Ñ ÑкÑлÑнÑй елекÑÑоннÑй бÑблÑоÑеÑÑ Wolne Lektury." + +#: templates/pdcounter/author_detail.html:43 +msgid "" +"This author's works will become part of public domain and will be allowed to " +"be published without restrictions in" +msgstr "" +"ТвоÑи ÑÑого авÑоÑа ÑÑанÑÑÑ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного Ð½Ð°Ð´Ð±Ð°Ð½Ð½Ñ Ñ Ð¼Ð¾Ð¶Ð½Ð° бÑде ÑÑ " +"вÑлÑно пÑблÑкÑваÑи Ñ" + +#: templates/pdcounter/book_stub_detail.html:17 +#, fuzzy +msgid "" +"This work is in public domain and will be published on Internet library of " +"Wolne Lektury soon." +msgstr "" +"Цей ÑвÑÑ Ñ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного Ð½Ð°Ð´Ð±Ð°Ð½Ð½Ñ Ñ ÑкоÑо бÑде опÑблÑкований Ñ " +"ÑкÑлÑнÑй елекÑÑоннÑй бÑблÑоÑеÑÑ Wolne Lektury." + +#: templates/pdcounter/book_stub_detail.html:20 +msgid "" +"This work will become part of public domain and will be allowed to be " +"published without restrictions in" +msgstr "" +"Цей ÑвÑÑ ÑÑане ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного Ð½Ð°Ð´Ð±Ð°Ð½Ð½Ñ Ñ Ð¼Ð¾Ð¶Ð½Ð° бÑде його вÑлÑно " +"пÑблÑкÑваÑи Ñ" + +#: templates/pdcounter/book_stub_detail.html:22 +#: templates/pdcounter/book_stub_detail.html:25 +msgid "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</" +"a> why Internet libraries can't publish this work." +msgstr "" +"<a href='http://domenapubliczna.org/co-to-jest-domena-" +"publiczna/'>ÐÑзнайÑеÑÑ</a>, ÑÐ¾Ð¼Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ñ Ð±ÑблÑоÑеки не можÑÑÑ " +"опÑблÑкÑваÑи ÑÑого ÑвоÑÑ." + +#: templates/pdcounter/book_stub_detail.html:24 +msgid "This work is copyrighted." +msgstr "Цей ÑвÑÑ Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом." + +#~ msgid "year of translator's death" +#~ msgstr "ÑÑк ÑмеÑÑÑ Ð¿ÐµÑекладаÑа" diff --git a/src/pdcounter/migrations/0001_initial.py b/src/pdcounter/migrations/0001_initial.py new file mode 100644 index 000000000..fdd0a8e9b --- /dev/null +++ b/src/pdcounter/migrations/0001_initial.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Author', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=50, verbose_name='name', db_index=True)), + ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), + ('sort_key', models.CharField(max_length=120, verbose_name='Sort key', db_index=True)), + ('description', models.TextField(verbose_name='Description', blank=True)), + ('death', models.IntegerField(null=True, verbose_name='Year of death', blank=True)), + ('gazeta_link', models.CharField(max_length=240, blank=True)), + ('wiki_link', models.CharField(max_length=240, blank=True)), + ], + options={ + 'ordering': ('sort_key',), + 'verbose_name': 'author', + 'verbose_name_plural': 'authors', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='BookStub', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('title', models.CharField(max_length=120, verbose_name='Title')), + ('author', models.CharField(max_length=120, verbose_name='author')), + ('pd', models.IntegerField(null=True, verbose_name='Goes to public domain', blank=True)), + ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), + ('translator', models.TextField(verbose_name='Translator', blank=True)), + ], + options={ + 'ordering': ('title',), + 'verbose_name': 'Book stub', + 'verbose_name_plural': 'Book stubs', + }, + bases=(models.Model,), + ), + ] diff --git a/src/pdcounter/migrations/0002_auto_20151221_1225.py b/src/pdcounter/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..6447cc1d4 --- /dev/null +++ b/src/pdcounter/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pdcounter', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='bookstub', + options={'ordering': ('title',), 'verbose_name': 'book stub', 'verbose_name_plural': 'book stubs'}, + ), + migrations.AlterField( + model_name='author', + name='death', + field=models.IntegerField(null=True, verbose_name='year of death', blank=True), + ), + migrations.AlterField( + model_name='author', + name='description', + field=models.TextField(verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='author', + name='slug', + field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), + ), + migrations.AlterField( + model_name='author', + name='sort_key', + field=models.CharField(max_length=120, verbose_name='sort key', db_index=True), + ), + migrations.AlterField( + model_name='bookstub', + name='pd', + field=models.IntegerField(null=True, verbose_name='goes to public domain', blank=True), + ), + migrations.AlterField( + model_name='bookstub', + name='slug', + field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), + ), + migrations.AlterField( + model_name='bookstub', + name='title', + field=models.CharField(max_length=120, verbose_name='title'), + ), + migrations.AlterField( + model_name='bookstub', + name='translator', + field=models.TextField(verbose_name='translator', blank=True), + ), + ] diff --git a/src/pdcounter/migrations/__init__.py b/src/pdcounter/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/pdcounter/models.py b/src/pdcounter/models.py new file mode 100644 index 000000000..7c10f1e59 --- /dev/null +++ b/src/pdcounter/models.py @@ -0,0 +1,100 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from django.db import models +from django.db.models import permalink +from django.utils.translation import ugettext_lazy as _ +from datetime import datetime +from django.db.models.signals import post_save, post_delete + +class Author(models.Model): + name = models.CharField(_('name'), max_length=50, db_index=True) + slug = models.SlugField(_('slug'), max_length=120, db_index=True, unique=True) + sort_key = models.CharField(_('sort key'), max_length=120, db_index=True) + description = models.TextField(_('description'), blank=True) + death = models.IntegerField(_(u'year of death'), blank=True, null=True) + gazeta_link = models.CharField(blank=True, max_length=240) + wiki_link = models.CharField(blank=True, max_length=240) + + class Meta: + ordering = ('sort_key',) + verbose_name = _('author') + verbose_name_plural = _('authors') + + @property + def category(self): + return "author" + + def __unicode__(self): + return self.name + + def __repr__(self): + return "Author(slug=%r)" % self.slug + + @permalink + def get_absolute_url(self): + return ('catalogue.views.tagged_object_list', [self.url_chunk]) + + def has_description(self): + return len(self.description) > 0 + has_description.short_description = _('description') + has_description.boolean = True + + def alive(self): + return self.death is None + + def in_pd(self): + """ tests whether an author is in public domain """ + return self.death is not None and self.goes_to_pd() <= datetime.now().year + + def goes_to_pd(self): + """ calculates the year of public domain entry for an author """ + return self.death + 71 if self.death is not None else None + + @property + def url_chunk(self): + return '/'.join(('autor', self.slug)) + + +class BookStub(models.Model): + title = models.CharField(_('title'), max_length=120) + author = models.CharField(_('author'), max_length=120) + pd = models.IntegerField(_('goes to public domain'), null=True, blank=True) + slug = models.SlugField(_('slug'), max_length=120, unique=True, db_index=True) + translator = models.TextField(_('translator'), blank=True) + + class Meta: + ordering = ('title',) + verbose_name = _('book stub') + verbose_name_plural = _('book stubs') + + def __unicode__(self): + return self.title + + @permalink + def get_absolute_url(self): + return ('catalogue.views.book_detail', [self.slug]) + + def in_pd(self): + return self.pd is not None and self.pd <= datetime.now().year + + @property + def name(self): + return self.title + + def pretty_title(self, html_links=False): + return ', '.join((self.author, self.title)) + + +if not settings.NO_SEARCH_INDEX: + def update_index(sender, instance, **kwargs): + from search.index import Index + idx = Index() + idx.index_tags(instance, remove_only=not 'created' in kwargs) + + post_delete.connect(update_index, Author) + post_delete.connect(update_index, BookStub) + post_save.connect(update_index, Author) + post_save.connect(update_index, BookStub) diff --git a/src/pdcounter/static/pdcounter/pdcounter.js b/src/pdcounter/static/pdcounter/pdcounter.js new file mode 100755 index 000000000..a1ff53736 --- /dev/null +++ b/src/pdcounter/static/pdcounter/pdcounter.js @@ -0,0 +1,41 @@ +(function($) { + $(function() { + + $('.countdown').each(function() { + var $this = $(this); + + var serverTime = function() { + var time = null; + $.ajax({url: '/zegar/', + async: false, dataType: 'text', + success: function(text) { + time = new Date(text); + }, error: function(http, message, exc) { + time = new Date(); + }}); + return time; + } + + if (LANGUAGE_CODE != 'en') { + $.countdown.setDefaults($.countdown.regional[LANGUAGE_CODE]); + } + else { + $.countdown.setDefaults($.countdown.regional['']); + } + + var options = { + until: new Date($this.attr('data-until')), + format: 'ydHMS', + serverSync: serverTime, + onExpiry: function(){location.reload()}, // TODO: no reload + }; + if ($this.hasClass('inline')) { + options.layout = '{d<}{dn} {dl} {d>}{hnn}{sep}{mnn}{sep}{snn}'; + } + + $this.countdown(options); + }); + + + }); +})(jQuery); diff --git a/src/pdcounter/templates/pdcounter/author_detail.html b/src/pdcounter/templates/pdcounter/author_detail.html new file mode 100644 index 000000000..50eef63fb --- /dev/null +++ b/src/pdcounter/templates/pdcounter/author_detail.html @@ -0,0 +1,56 @@ +{% extends "base.html" %} +{% load i18n %} +{% load time_tags %} + +{% block titleextra %}{{ author.name }}{% endblock %} + +{% block metadescription %}{% trans "Public domain counter" %}: {{author.name}}.{% endblock %} + +{% block bodyid %}author-detail{% endblock %} + +{% block body %} + + <div class="left-column"> + <h1>{{ author.name }}</h1> + <div class="normal-text white-box"> + {% if author.has_description %} + <div id="description"> + <div id='description-long'>{{ author.description|safe }}</div> + <div id='description-short'>{{ author.description|safe|truncatewords_html:30 }}</div> + </div> + <div class="clearboth"></div> + <div id="toggle-description"><p></p></div> + {% endif %} + {% if author.gazeta_link %} + <p><a href="{{ author.gazeta_link }}"> + {% trans "Read work's study of this author on Lektury.Gazeta.pl" %} + </a></p> + {% endif %} + {% if author.wiki_link %} + <p><a href="{{ author.wiki_link }}"> + {% trans "Read article about this author on Wikipedia" %} + </a></p> + {% endif %} + + {% if author.alive %} + <p>{% trans "This author's works are copyrighted." %} + {% trans "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</a> why Internet libraries can't publish this author's works." %}</p> + {% else %} + {% if author.in_pd %} + <p>{% trans "This author's works are in public domain and will be published on Internet library of Wolne Lektury soon." %}</p> + {% else %} + <div> + <p>{% trans "This author's works will become part of public domain and will be allowed to be published without restrictions in" %}</p> + <div class='countdown' data-until='{{ pd_counter|date_to_utc|utc_for_js }}'></div> + <p>{% trans "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</a> why Internet libraries can't publish this author's works." %}</p> + </div> + {% endif %} + {% endif %} + {% include "info/join_us.html" %} + </div> + </div> + + <div class="right-column block-form"> + {% include "publishing_suggest.html" %} + </div> +{% endblock %} diff --git a/src/pdcounter/templates/pdcounter/book_stub_detail.html b/src/pdcounter/templates/pdcounter/book_stub_detail.html new file mode 100644 index 000000000..640d68ebe --- /dev/null +++ b/src/pdcounter/templates/pdcounter/book_stub_detail.html @@ -0,0 +1,35 @@ +{% extends "base.html" %} +{% load i18n %} +{% load time_tags %} + +{% block titleextra %}{{ book.title }}{% endblock %} + +{% block metadescription %}{% trans "Public domain counter" %}: {{ book.title }}.{% endblock %} + +{% block bodyid %}book-stub-detail{% endblock %} + +{% block body %} + <div class="left-column"> + <h1>{{ book.author }}, {{ book.title }}</h1> + <div class="normal-text white-box"> + + {% if book.in_pd %} + <p>{% trans "This work is in public domain and will be published on Internet library of Wolne Lektury soon." %}</p> + {% else %} + {% if book.pd %} + <p>{% trans "This work will become part of public domain and will be allowed to be published without restrictions in" %}</p> + <div class='countdown' data-until='{{ pd_counter|date_to_utc|utc_for_js }}'></div> + <p>{% trans "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</a> why Internet libraries can't publish this work." %}</p> + {% else %} + <p>{% trans "This work is copyrighted." %} + {% trans "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</a> why Internet libraries can't publish this work." %}</p> + {% endif %} + {% endif %} + {% include "info/join_us.html" %} + </div> + </div> + + <div class="right-column block-form"> + {% include "publishing_suggest.html" %} + </div> +{% endblock %} diff --git a/src/pdcounter/templatetags/__init__.py b/src/pdcounter/templatetags/__init__.py new file mode 100755 index 000000000..e69de29bb diff --git a/src/pdcounter/templatetags/time_tags.py b/src/pdcounter/templatetags/time_tags.py new file mode 100755 index 000000000..7ea5c6055 --- /dev/null +++ b/src/pdcounter/templatetags/time_tags.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import datetime +import pytz +from django.conf import settings +from django import template +from django.utils import timezone + + +register = template.Library() + +@register.filter +def date_to_utc(date, day_end=False): + """ Converts a datetime.date to UTC datetime. + + The datetime represents the start (or end) of the given day in + the server's timezone. + """ + if day_end: + date += datetime.timedelta(1) + localtime = datetime.datetime.combine(date, datetime.time(0, 0)) + return timezone.utc.normalize( + pytz.timezone(settings.TIME_ZONE).localize(localtime) + ) + + +@register.filter +def utc_for_js(dt): + return dt.strftime('%Y/%m/%d %H:%M:%S UTC') diff --git a/src/pdcounter/views.py b/src/pdcounter/views.py new file mode 100644 index 000000000..e5b4421ce --- /dev/null +++ b/src/pdcounter/views.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from datetime import datetime +from django.template import RequestContext +from django.shortcuts import render_to_response, get_object_or_404 +from django.views.decorators import cache +from suggest.forms import PublishingSuggestForm +from . import models + + +@cache.never_cache +def book_stub_detail(request, slug): + book = get_object_or_404(models.BookStub, slug=slug) + if book.pd and not book.in_pd(): + pd_counter = datetime(book.pd, 1, 1) + + form = PublishingSuggestForm( + initial={"books": u"%s â %s, \n" % (book.author, book.title)}) + + return render_to_response('pdcounter/book_stub_detail.html', locals(), + context_instance=RequestContext(request)) + + +@cache.never_cache +def author_detail(request, slug): + author = get_object_or_404(models.Author, slug=slug) + if not author.alive(): + pd_counter = datetime(author.goes_to_pd(), 1, 1) + + form = PublishingSuggestForm(initial={"books": author.name + ", \n"}) + + return render_to_response('pdcounter/author_detail.html', locals(), + context_instance=RequestContext(request)) diff --git a/src/picture/__init__.py b/src/picture/__init__.py new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/src/picture/__init__.py @@ -0,0 +1 @@ + diff --git a/src/picture/admin.py b/src/picture/admin.py new file mode 100644 index 000000000..f107d3196 --- /dev/null +++ b/src/picture/admin.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib import admin +from picture.models import Picture +from sorl.thumbnail.admin import AdminImageMixin + +class PictureAdmin(AdminImageMixin, admin.ModelAdmin): + pass + +admin.site.register(Picture, PictureAdmin) diff --git a/src/picture/engine.py b/src/picture/engine.py new file mode 100644 index 000000000..574e5a889 --- /dev/null +++ b/src/picture/engine.py @@ -0,0 +1,57 @@ +from sorl.thumbnail.engines import pil_engine +from sorl.thumbnail import parsers + +# +# Class developed by +# http://timmyomahony.com/blog/custom-cropping-engine-sorl-thumbnail/ +# +class CustomCroppingEngine(pil_engine.Engine): + """ + A custom sorl.thumbnail engine (using PIL) that first crops an image + according to 4 pixel/percentage values in the source image, then scales + that crop down to the size specified in the geometry. This is in contrast + to sorl.thumbnails default engine which first scales the image down to the + specified geometry and applies the crop afterward. + """ + def create(self, image, geometry, options): + image = self.orientation(image, geometry, options) + image = self.colorspace(image, geometry, options) + image = self.crop(image, geometry, options) + image = self.scale(image, geometry, options) + return image + + def _crop_parse(self, crop, xy_image, xy_window): + """ + Conver the crop string passed by the user to accurate cropping values + (This is adapter from the default sorl.thumbnail.parsers.parse_crop) + """ + crops = crop.split(' ') + if len(crops) != 4: + raise parsers.ThumbnailParseError('Unrecognized crop option: %s' % crop) + x1, y1, x2, y2 = crops + + def get_offset(crop, epsilon): + m = parsers.bgpos_pat.match(crop) + if not m: + raise parsers.ThumbnailParseError('Unrecognized crop option: %s' % crop) + value = int(m.group('value')) # we only take ints in the regexp + unit = m.group('unit') + if unit == '%': + value = epsilon * value / 100.0 + return int(max(0, min(value, epsilon))) + x1 = get_offset(x1, xy_image[0]) + y1 = get_offset(y1, xy_image[1]) + x2 = get_offset(x2, xy_image[0]) + y2 = get_offset(y2, xy_image[1]) + return x1, y1, x2, y2 + + def crop(self, image, geometry, options): + crop = options['crop'] + if not crop or crop == 'noop': + return image + x_image, y_image = self.get_image_size(image) + x1,y1,x2,y2 = self._crop_parse(crop, (x_image, y_image), geometry) + return self._crop(image, x1, y1, x2, y2) + + def _crop(self, image, x1, y1, x2, y2): + return image.crop((x1, y1, x2, y2)) diff --git a/src/picture/forms.py b/src/picture/forms.py new file mode 100644 index 000000000..2ad47b0b8 --- /dev/null +++ b/src/picture/forms.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import forms +from django.utils.translation import ugettext_lazy as _ +from picture.models import Picture + + +class PictureImportForm(forms.Form): + picture_xml_file = forms.FileField(required=False) + picture_xml = forms.CharField(required=False) + picture_image_file = forms.FileField(required=False) + picture_image_data = forms.CharField(required=False) + + def clean(self): + from base64 import b64decode + from django.core.files.base import ContentFile + + if not self.cleaned_data['picture_xml_file']: + if self.cleaned_data['picture_xml']: + self.cleaned_data['picture_xml_file'] = \ + ContentFile(self.cleaned_data['picture_xml'].encode('utf-8')) + else: + raise forms.ValidationError(_("Please supply an XML.")) + + if not self.cleaned_data['picture_image_file']: + if self.cleaned_data['picture_image_data']: + self.cleaned_data['picture_image_file'] = \ + ContentFile(b64decode( + self.cleaned_data['picture_image_data'])) + else: + raise forms.ValidationError(_("Please supply an image.")) + + return super(PictureImportForm, self).clean() + + def save(self, commit=True, **kwargs): + return Picture.from_xml_file(self.cleaned_data['picture_xml_file'], image_file=self.cleaned_data['picture_image_file'], + overwrite=True, **kwargs) diff --git a/src/picture/locale/de/LC_MESSAGES/django.mo b/src/picture/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..2ac6a07fc Binary files /dev/null and b/src/picture/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/de/LC_MESSAGES/django.po b/src/picture/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..7ed1f2669 --- /dev/null +++ b/src/picture/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,205 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: forms.py:21 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:29 +msgid "Please supply an image." +msgstr "" + +#: models.py:37 +msgid "area" +msgstr "" + +#: models.py:38 +msgid "kind" +msgstr "" + +#: models.py:40 +msgid "thing" +msgstr "" + +#: models.py:41 +msgid "theme" +msgstr "" + +#: models.py:66 +msgid "title" +msgstr "" + +#: models.py:67 +msgid "slug" +msgstr "" + +#: models.py:68 +msgid "sort key" +msgstr "" + +#: models.py:69 models.py:70 +msgid "creation date" +msgstr "" + +#: models.py:72 +msgid "image_file" +msgstr "" + +#: models.py:74 +msgid "picture areas JSON" +msgstr "" + +#: models.py:75 +msgid "extra information" +msgstr "" + +#: models.py:92 +msgid "picture" +msgstr "" + +#: models.py:93 +msgid "pictures" +msgstr "" + +#: views.py:79 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:80 +msgid "Picture imported successfully" +msgstr "" + +#: views.py:82 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:7 +msgid "Image" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Import picture" +msgstr "" + +#: templates/picture/picture_list_thumb.html:10 +#: templates/picture/picture_list_thumb.html:14 +msgid "Listing of all pictures" +msgstr "" + +#: templates/picture/picture_short.html:31 +msgid "Epoch" +msgstr "" + +#: templates/picture/picture_short.html:38 +msgid "Kind" +msgstr "" + +#: templates/picture/picture_short.html:45 +msgid "Genre" +msgstr "" + +#: templates/picture/picture_short.html:57 +msgid "View online" +msgstr "" + +#: templates/picture/picture_short.html:60 +msgid "download original" +msgstr "" + +#: templates/picture/picture_short.html:63 +#: templates/picture/picture_viewer.html:30 +msgid "Download" +msgstr "" + +#: templates/picture/picture_short.html:66 +msgid "original" +msgstr "" + +#: templates/picture/picture_viewer.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/picture/picture_viewer.html:23 +#: templates/picture/picture_viewer.html:50 +msgid "Themes" +msgstr "" + +#: templates/picture/picture_viewer.html:24 +#: templates/picture/picture_viewer.html:49 +#: templates/picture/picture_wide.html:31 +msgid "Objects" +msgstr "" + +#: templates/picture/picture_viewer.html:26 +msgid "Edit. note" +msgstr "" + +#: templates/picture/picture_viewer.html:27 +msgid "Infobox" +msgstr "" + +#: templates/picture/picture_viewer.html:28 +msgid "Picture's page" +msgstr "" + +#: templates/picture/picture_wide.html:20 +msgid "Motifs, themes and objects" +msgstr "" + +#: templates/picture/picture_wide.html:23 +msgid "Motifs and themes" +msgstr "" + +#: templates/picture/picture_wide.html:49 +msgid "See" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "Source" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "of the picture" +msgstr "" + +#: templates/picture/picture_wide.html:54 +msgid "Source XML file" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Picture on" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Editor's Platform" +msgstr "" + +#: templates/picture/picture_wide.html:59 +msgid "Picture description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/picture/picture_wide.html:62 +msgid "Picture description on Wikipedia" +msgstr "" diff --git a/src/picture/locale/en/LC_MESSAGES/django.mo b/src/picture/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c9739db34 Binary files /dev/null and b/src/picture/locale/en/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/en/LC_MESSAGES/django.po b/src/picture/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..b62ffd4bb --- /dev/null +++ b/src/picture/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,204 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:21 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:29 +msgid "Please supply an image." +msgstr "" + +#: models.py:37 +msgid "area" +msgstr "" + +#: models.py:38 +msgid "kind" +msgstr "" + +#: models.py:40 +msgid "thing" +msgstr "" + +#: models.py:41 +msgid "theme" +msgstr "" + +#: models.py:66 +msgid "title" +msgstr "" + +#: models.py:67 +msgid "slug" +msgstr "" + +#: models.py:68 +msgid "sort key" +msgstr "" + +#: models.py:69 models.py:70 +msgid "creation date" +msgstr "" + +#: models.py:72 +msgid "image_file" +msgstr "" + +#: models.py:74 +msgid "picture areas JSON" +msgstr "" + +#: models.py:75 +msgid "extra information" +msgstr "" + +#: models.py:92 +msgid "picture" +msgstr "" + +#: models.py:93 +msgid "pictures" +msgstr "" + +#: views.py:79 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:80 +msgid "Picture imported successfully" +msgstr "" + +#: views.py:82 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:7 +msgid "Image" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Import picture" +msgstr "" + +#: templates/picture/picture_list_thumb.html:10 +#: templates/picture/picture_list_thumb.html:14 +msgid "Listing of all pictures" +msgstr "" + +#: templates/picture/picture_short.html:31 +msgid "Epoch" +msgstr "" + +#: templates/picture/picture_short.html:38 +msgid "Kind" +msgstr "" + +#: templates/picture/picture_short.html:45 +msgid "Genre" +msgstr "" + +#: templates/picture/picture_short.html:57 +msgid "View online" +msgstr "" + +#: templates/picture/picture_short.html:60 +msgid "download original" +msgstr "" + +#: templates/picture/picture_short.html:63 +#: templates/picture/picture_viewer.html:30 +msgid "Download" +msgstr "" + +#: templates/picture/picture_short.html:66 +msgid "original" +msgstr "" + +#: templates/picture/picture_viewer.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/picture/picture_viewer.html:23 +#: templates/picture/picture_viewer.html:50 +msgid "Themes" +msgstr "" + +#: templates/picture/picture_viewer.html:24 +#: templates/picture/picture_viewer.html:49 +#: templates/picture/picture_wide.html:31 +msgid "Objects" +msgstr "" + +#: templates/picture/picture_viewer.html:26 +msgid "Edit. note" +msgstr "" + +#: templates/picture/picture_viewer.html:27 +msgid "Infobox" +msgstr "" + +#: templates/picture/picture_viewer.html:28 +msgid "Picture's page" +msgstr "" + +#: templates/picture/picture_wide.html:20 +msgid "Motifs, themes and objects" +msgstr "" + +#: templates/picture/picture_wide.html:23 +msgid "Motifs and themes" +msgstr "" + +#: templates/picture/picture_wide.html:49 +msgid "See" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "Source" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "of the picture" +msgstr "" + +#: templates/picture/picture_wide.html:54 +msgid "Source XML file" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Picture on" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Editor's Platform" +msgstr "" + +#: templates/picture/picture_wide.html:59 +msgid "Picture description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/picture/picture_wide.html:62 +msgid "Picture description on Wikipedia" +msgstr "" diff --git a/src/picture/locale/es/LC_MESSAGES/django.mo b/src/picture/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..2ac6a07fc Binary files /dev/null and b/src/picture/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/es/LC_MESSAGES/django.po b/src/picture/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..7ed1f2669 --- /dev/null +++ b/src/picture/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,205 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: forms.py:21 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:29 +msgid "Please supply an image." +msgstr "" + +#: models.py:37 +msgid "area" +msgstr "" + +#: models.py:38 +msgid "kind" +msgstr "" + +#: models.py:40 +msgid "thing" +msgstr "" + +#: models.py:41 +msgid "theme" +msgstr "" + +#: models.py:66 +msgid "title" +msgstr "" + +#: models.py:67 +msgid "slug" +msgstr "" + +#: models.py:68 +msgid "sort key" +msgstr "" + +#: models.py:69 models.py:70 +msgid "creation date" +msgstr "" + +#: models.py:72 +msgid "image_file" +msgstr "" + +#: models.py:74 +msgid "picture areas JSON" +msgstr "" + +#: models.py:75 +msgid "extra information" +msgstr "" + +#: models.py:92 +msgid "picture" +msgstr "" + +#: models.py:93 +msgid "pictures" +msgstr "" + +#: views.py:79 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:80 +msgid "Picture imported successfully" +msgstr "" + +#: views.py:82 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:7 +msgid "Image" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Import picture" +msgstr "" + +#: templates/picture/picture_list_thumb.html:10 +#: templates/picture/picture_list_thumb.html:14 +msgid "Listing of all pictures" +msgstr "" + +#: templates/picture/picture_short.html:31 +msgid "Epoch" +msgstr "" + +#: templates/picture/picture_short.html:38 +msgid "Kind" +msgstr "" + +#: templates/picture/picture_short.html:45 +msgid "Genre" +msgstr "" + +#: templates/picture/picture_short.html:57 +msgid "View online" +msgstr "" + +#: templates/picture/picture_short.html:60 +msgid "download original" +msgstr "" + +#: templates/picture/picture_short.html:63 +#: templates/picture/picture_viewer.html:30 +msgid "Download" +msgstr "" + +#: templates/picture/picture_short.html:66 +msgid "original" +msgstr "" + +#: templates/picture/picture_viewer.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/picture/picture_viewer.html:23 +#: templates/picture/picture_viewer.html:50 +msgid "Themes" +msgstr "" + +#: templates/picture/picture_viewer.html:24 +#: templates/picture/picture_viewer.html:49 +#: templates/picture/picture_wide.html:31 +msgid "Objects" +msgstr "" + +#: templates/picture/picture_viewer.html:26 +msgid "Edit. note" +msgstr "" + +#: templates/picture/picture_viewer.html:27 +msgid "Infobox" +msgstr "" + +#: templates/picture/picture_viewer.html:28 +msgid "Picture's page" +msgstr "" + +#: templates/picture/picture_wide.html:20 +msgid "Motifs, themes and objects" +msgstr "" + +#: templates/picture/picture_wide.html:23 +msgid "Motifs and themes" +msgstr "" + +#: templates/picture/picture_wide.html:49 +msgid "See" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "Source" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "of the picture" +msgstr "" + +#: templates/picture/picture_wide.html:54 +msgid "Source XML file" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Picture on" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Editor's Platform" +msgstr "" + +#: templates/picture/picture_wide.html:59 +msgid "Picture description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/picture/picture_wide.html:62 +msgid "Picture description on Wikipedia" +msgstr "" diff --git a/src/picture/locale/fr/LC_MESSAGES/django.mo b/src/picture/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..147f51a44 Binary files /dev/null and b/src/picture/locale/fr/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/fr/LC_MESSAGES/django.po b/src/picture/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..d196b01da --- /dev/null +++ b/src/picture/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,205 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: forms.py:21 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:29 +msgid "Please supply an image." +msgstr "" + +#: models.py:37 +msgid "area" +msgstr "" + +#: models.py:38 +msgid "kind" +msgstr "" + +#: models.py:40 +msgid "thing" +msgstr "" + +#: models.py:41 +msgid "theme" +msgstr "" + +#: models.py:66 +msgid "title" +msgstr "" + +#: models.py:67 +msgid "slug" +msgstr "" + +#: models.py:68 +msgid "sort key" +msgstr "" + +#: models.py:69 models.py:70 +msgid "creation date" +msgstr "" + +#: models.py:72 +msgid "image_file" +msgstr "" + +#: models.py:74 +msgid "picture areas JSON" +msgstr "" + +#: models.py:75 +msgid "extra information" +msgstr "" + +#: models.py:92 +msgid "picture" +msgstr "" + +#: models.py:93 +msgid "pictures" +msgstr "" + +#: views.py:79 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:80 +msgid "Picture imported successfully" +msgstr "" + +#: views.py:82 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:7 +msgid "Image" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Import picture" +msgstr "" + +#: templates/picture/picture_list_thumb.html:10 +#: templates/picture/picture_list_thumb.html:14 +msgid "Listing of all pictures" +msgstr "" + +#: templates/picture/picture_short.html:31 +msgid "Epoch" +msgstr "" + +#: templates/picture/picture_short.html:38 +msgid "Kind" +msgstr "" + +#: templates/picture/picture_short.html:45 +msgid "Genre" +msgstr "" + +#: templates/picture/picture_short.html:57 +msgid "View online" +msgstr "" + +#: templates/picture/picture_short.html:60 +msgid "download original" +msgstr "" + +#: templates/picture/picture_short.html:63 +#: templates/picture/picture_viewer.html:30 +msgid "Download" +msgstr "" + +#: templates/picture/picture_short.html:66 +msgid "original" +msgstr "" + +#: templates/picture/picture_viewer.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/picture/picture_viewer.html:23 +#: templates/picture/picture_viewer.html:50 +msgid "Themes" +msgstr "" + +#: templates/picture/picture_viewer.html:24 +#: templates/picture/picture_viewer.html:49 +#: templates/picture/picture_wide.html:31 +msgid "Objects" +msgstr "" + +#: templates/picture/picture_viewer.html:26 +msgid "Edit. note" +msgstr "" + +#: templates/picture/picture_viewer.html:27 +msgid "Infobox" +msgstr "" + +#: templates/picture/picture_viewer.html:28 +msgid "Picture's page" +msgstr "" + +#: templates/picture/picture_wide.html:20 +msgid "Motifs, themes and objects" +msgstr "" + +#: templates/picture/picture_wide.html:23 +msgid "Motifs and themes" +msgstr "" + +#: templates/picture/picture_wide.html:49 +msgid "See" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "Source" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "of the picture" +msgstr "" + +#: templates/picture/picture_wide.html:54 +msgid "Source XML file" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Picture on" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Editor's Platform" +msgstr "" + +#: templates/picture/picture_wide.html:59 +msgid "Picture description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/picture/picture_wide.html:62 +msgid "Picture description on Wikipedia" +msgstr "" diff --git a/src/picture/locale/it/LC_MESSAGES/django.mo b/src/picture/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..2ac6a07fc Binary files /dev/null and b/src/picture/locale/it/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/it/LC_MESSAGES/django.po b/src/picture/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..7ed1f2669 --- /dev/null +++ b/src/picture/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,205 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: forms.py:21 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:29 +msgid "Please supply an image." +msgstr "" + +#: models.py:37 +msgid "area" +msgstr "" + +#: models.py:38 +msgid "kind" +msgstr "" + +#: models.py:40 +msgid "thing" +msgstr "" + +#: models.py:41 +msgid "theme" +msgstr "" + +#: models.py:66 +msgid "title" +msgstr "" + +#: models.py:67 +msgid "slug" +msgstr "" + +#: models.py:68 +msgid "sort key" +msgstr "" + +#: models.py:69 models.py:70 +msgid "creation date" +msgstr "" + +#: models.py:72 +msgid "image_file" +msgstr "" + +#: models.py:74 +msgid "picture areas JSON" +msgstr "" + +#: models.py:75 +msgid "extra information" +msgstr "" + +#: models.py:92 +msgid "picture" +msgstr "" + +#: models.py:93 +msgid "pictures" +msgstr "" + +#: views.py:79 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:80 +msgid "Picture imported successfully" +msgstr "" + +#: views.py:82 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:7 +msgid "Image" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Import picture" +msgstr "" + +#: templates/picture/picture_list_thumb.html:10 +#: templates/picture/picture_list_thumb.html:14 +msgid "Listing of all pictures" +msgstr "" + +#: templates/picture/picture_short.html:31 +msgid "Epoch" +msgstr "" + +#: templates/picture/picture_short.html:38 +msgid "Kind" +msgstr "" + +#: templates/picture/picture_short.html:45 +msgid "Genre" +msgstr "" + +#: templates/picture/picture_short.html:57 +msgid "View online" +msgstr "" + +#: templates/picture/picture_short.html:60 +msgid "download original" +msgstr "" + +#: templates/picture/picture_short.html:63 +#: templates/picture/picture_viewer.html:30 +msgid "Download" +msgstr "" + +#: templates/picture/picture_short.html:66 +msgid "original" +msgstr "" + +#: templates/picture/picture_viewer.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/picture/picture_viewer.html:23 +#: templates/picture/picture_viewer.html:50 +msgid "Themes" +msgstr "" + +#: templates/picture/picture_viewer.html:24 +#: templates/picture/picture_viewer.html:49 +#: templates/picture/picture_wide.html:31 +msgid "Objects" +msgstr "" + +#: templates/picture/picture_viewer.html:26 +msgid "Edit. note" +msgstr "" + +#: templates/picture/picture_viewer.html:27 +msgid "Infobox" +msgstr "" + +#: templates/picture/picture_viewer.html:28 +msgid "Picture's page" +msgstr "" + +#: templates/picture/picture_wide.html:20 +msgid "Motifs, themes and objects" +msgstr "" + +#: templates/picture/picture_wide.html:23 +msgid "Motifs and themes" +msgstr "" + +#: templates/picture/picture_wide.html:49 +msgid "See" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "Source" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "of the picture" +msgstr "" + +#: templates/picture/picture_wide.html:54 +msgid "Source XML file" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Picture on" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Editor's Platform" +msgstr "" + +#: templates/picture/picture_wide.html:59 +msgid "Picture description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/picture/picture_wide.html:62 +msgid "Picture description on Wikipedia" +msgstr "" diff --git a/src/picture/locale/jp/LC_MESSAGES/django.mo b/src/picture/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c9739db34 Binary files /dev/null and b/src/picture/locale/jp/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/jp/LC_MESSAGES/django.po b/src/picture/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 000000000..b62ffd4bb --- /dev/null +++ b/src/picture/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,204 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:21 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:29 +msgid "Please supply an image." +msgstr "" + +#: models.py:37 +msgid "area" +msgstr "" + +#: models.py:38 +msgid "kind" +msgstr "" + +#: models.py:40 +msgid "thing" +msgstr "" + +#: models.py:41 +msgid "theme" +msgstr "" + +#: models.py:66 +msgid "title" +msgstr "" + +#: models.py:67 +msgid "slug" +msgstr "" + +#: models.py:68 +msgid "sort key" +msgstr "" + +#: models.py:69 models.py:70 +msgid "creation date" +msgstr "" + +#: models.py:72 +msgid "image_file" +msgstr "" + +#: models.py:74 +msgid "picture areas JSON" +msgstr "" + +#: models.py:75 +msgid "extra information" +msgstr "" + +#: models.py:92 +msgid "picture" +msgstr "" + +#: models.py:93 +msgid "pictures" +msgstr "" + +#: views.py:79 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:80 +msgid "Picture imported successfully" +msgstr "" + +#: views.py:82 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:7 +msgid "Image" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Import picture" +msgstr "" + +#: templates/picture/picture_list_thumb.html:10 +#: templates/picture/picture_list_thumb.html:14 +msgid "Listing of all pictures" +msgstr "" + +#: templates/picture/picture_short.html:31 +msgid "Epoch" +msgstr "" + +#: templates/picture/picture_short.html:38 +msgid "Kind" +msgstr "" + +#: templates/picture/picture_short.html:45 +msgid "Genre" +msgstr "" + +#: templates/picture/picture_short.html:57 +msgid "View online" +msgstr "" + +#: templates/picture/picture_short.html:60 +msgid "download original" +msgstr "" + +#: templates/picture/picture_short.html:63 +#: templates/picture/picture_viewer.html:30 +msgid "Download" +msgstr "" + +#: templates/picture/picture_short.html:66 +msgid "original" +msgstr "" + +#: templates/picture/picture_viewer.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/picture/picture_viewer.html:23 +#: templates/picture/picture_viewer.html:50 +msgid "Themes" +msgstr "" + +#: templates/picture/picture_viewer.html:24 +#: templates/picture/picture_viewer.html:49 +#: templates/picture/picture_wide.html:31 +msgid "Objects" +msgstr "" + +#: templates/picture/picture_viewer.html:26 +msgid "Edit. note" +msgstr "" + +#: templates/picture/picture_viewer.html:27 +msgid "Infobox" +msgstr "" + +#: templates/picture/picture_viewer.html:28 +msgid "Picture's page" +msgstr "" + +#: templates/picture/picture_wide.html:20 +msgid "Motifs, themes and objects" +msgstr "" + +#: templates/picture/picture_wide.html:23 +msgid "Motifs and themes" +msgstr "" + +#: templates/picture/picture_wide.html:49 +msgid "See" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "Source" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "of the picture" +msgstr "" + +#: templates/picture/picture_wide.html:54 +msgid "Source XML file" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Picture on" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Editor's Platform" +msgstr "" + +#: templates/picture/picture_wide.html:59 +msgid "Picture description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/picture/picture_wide.html:62 +msgid "Picture description on Wikipedia" +msgstr "" diff --git a/src/picture/locale/lt/LC_MESSAGES/django.mo b/src/picture/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..0be4a8ced Binary files /dev/null and b/src/picture/locale/lt/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/lt/LC_MESSAGES/django.po b/src/picture/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..4ef094735 --- /dev/null +++ b/src/picture/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,206 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" +"%100<10 || n%100>=20) ? 1 : 2);\n" + +#: forms.py:21 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:29 +msgid "Please supply an image." +msgstr "" + +#: models.py:37 +msgid "area" +msgstr "" + +#: models.py:38 +msgid "kind" +msgstr "" + +#: models.py:40 +msgid "thing" +msgstr "" + +#: models.py:41 +msgid "theme" +msgstr "" + +#: models.py:66 +msgid "title" +msgstr "" + +#: models.py:67 +msgid "slug" +msgstr "" + +#: models.py:68 +msgid "sort key" +msgstr "" + +#: models.py:69 models.py:70 +msgid "creation date" +msgstr "" + +#: models.py:72 +msgid "image_file" +msgstr "" + +#: models.py:74 +msgid "picture areas JSON" +msgstr "" + +#: models.py:75 +msgid "extra information" +msgstr "" + +#: models.py:92 +msgid "picture" +msgstr "" + +#: models.py:93 +msgid "pictures" +msgstr "" + +#: views.py:79 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:80 +msgid "Picture imported successfully" +msgstr "" + +#: views.py:82 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:7 +msgid "Image" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Import picture" +msgstr "" + +#: templates/picture/picture_list_thumb.html:10 +#: templates/picture/picture_list_thumb.html:14 +msgid "Listing of all pictures" +msgstr "" + +#: templates/picture/picture_short.html:31 +msgid "Epoch" +msgstr "" + +#: templates/picture/picture_short.html:38 +msgid "Kind" +msgstr "" + +#: templates/picture/picture_short.html:45 +msgid "Genre" +msgstr "" + +#: templates/picture/picture_short.html:57 +msgid "View online" +msgstr "" + +#: templates/picture/picture_short.html:60 +msgid "download original" +msgstr "" + +#: templates/picture/picture_short.html:63 +#: templates/picture/picture_viewer.html:30 +msgid "Download" +msgstr "" + +#: templates/picture/picture_short.html:66 +msgid "original" +msgstr "" + +#: templates/picture/picture_viewer.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/picture/picture_viewer.html:23 +#: templates/picture/picture_viewer.html:50 +msgid "Themes" +msgstr "" + +#: templates/picture/picture_viewer.html:24 +#: templates/picture/picture_viewer.html:49 +#: templates/picture/picture_wide.html:31 +msgid "Objects" +msgstr "" + +#: templates/picture/picture_viewer.html:26 +msgid "Edit. note" +msgstr "" + +#: templates/picture/picture_viewer.html:27 +msgid "Infobox" +msgstr "" + +#: templates/picture/picture_viewer.html:28 +msgid "Picture's page" +msgstr "" + +#: templates/picture/picture_wide.html:20 +msgid "Motifs, themes and objects" +msgstr "" + +#: templates/picture/picture_wide.html:23 +msgid "Motifs and themes" +msgstr "" + +#: templates/picture/picture_wide.html:49 +msgid "See" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "Source" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "of the picture" +msgstr "" + +#: templates/picture/picture_wide.html:54 +msgid "Source XML file" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Picture on" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Editor's Platform" +msgstr "" + +#: templates/picture/picture_wide.html:59 +msgid "Picture description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/picture/picture_wide.html:62 +msgid "Picture description on Wikipedia" +msgstr "" diff --git a/src/picture/locale/pl/LC_MESSAGES/django.mo b/src/picture/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..f3bc162ca Binary files /dev/null and b/src/picture/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/pl/LC_MESSAGES/django.po b/src/picture/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..63546c20d --- /dev/null +++ b/src/picture/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,219 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-10-24 11:44+0200\n" +"PO-Revision-Date: 2014-10-24 11:48+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 1.5.4\n" + +#: forms.py:25 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:33 +msgid "Please supply an image." +msgstr "" + +#: models.py:35 +msgid "area" +msgstr "obszar" + +#: models.py:36 +msgid "kind" +msgstr "typ" + +#: models.py:38 +msgid "thing" +msgstr "przedmiot" + +#: models.py:39 +msgid "theme" +msgstr "motyw" + +#: models.py:75 +msgid "title" +msgstr "tytuÅ" + +#: models.py:76 +msgid "slug" +msgstr "slug" + +#: models.py:77 +msgid "sort key" +msgstr "klucz sortowania" + +#: models.py:78 +#, fuzzy +msgid "sort key by author" +msgstr "klucz sortowania" + +#: models.py:79 models.py:80 +msgid "creation date" +msgstr "data stworzenia" + +#: models.py:82 +msgid "image_file" +msgstr "" + +#: models.py:84 +msgid "picture areas JSON" +msgstr "obszary w JSON" + +#: models.py:85 +msgid "extra information" +msgstr "dodatkowa informacja" + +#: models.py:105 +msgid "picture" +msgstr "obraz" + +#: models.py:106 +msgid "pictures" +msgstr "obrazy" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Image" +msgstr "Obraz" + +#: templates/admin/picture/picture/change_list.html:9 +msgid "Import picture" +msgstr "Importuj obraz" + +#: templates/picture/picture_detail.html:21 +msgid "See also" +msgstr "Zobacz też" + +#: templates/picture/picture_list_thumb.html:9 +#: templates/picture/picture_list_thumb.html:13 +msgctxt "gallery" +msgid "Listing of all works" +msgstr "Spis wszystkich dzieÅ" + +#: templates/picture/picture_short.html:40 +msgid "Epoch" +msgstr "Rodzaj" + +#: templates/picture/picture_short.html:48 +msgid "Kind" +msgstr "Typ" + +#: templates/picture/picture_short.html:56 +msgid "Genre" +msgstr "Gatunek" + +#: templates/picture/picture_short.html:71 +msgid "View online" +msgstr "Zobacz online" + +#: templates/picture/picture_short.html:74 +msgid "download original" +msgstr "pobierz oryginaÅ" + +#: templates/picture/picture_viewer.html:36 +#: templates/picture/picture_wide.html:64 +msgid "Objects" +msgstr "Obiekty" + +#: templates/picture/picture_viewer.html:37 +msgid "Themes" +msgstr "Motywy" + +#: templates/picture/picture_viewer.html:41 +msgid "Infobox" +msgstr "Informacja" + +#: templates/picture/picture_wide.html:19 +msgid "Style" +msgstr "Styl" + +#: templates/picture/picture_wide.html:29 +msgid "Medium" +msgstr "Technika" + +#: templates/picture/picture_wide.html:36 +msgid "Dimensions" +msgstr "Wymiary pracy" + +#: templates/picture/picture_wide.html:42 +msgid "Date" +msgstr "Czas powstania" + +#: templates/picture/picture_wide.html:53 +msgid "Motifs, themes and objects" +msgstr "Motywy i obiekty" + +#: templates/picture/picture_wide.html:56 +msgid "Motifs and themes" +msgstr "Motywy" + +#: templates/picture/picture_wide.html:82 +msgid "See" +msgstr "Zobacz" + +#: templates/picture/picture_wide.html:85 +msgid "Source" +msgstr "ŹródÅo" + +#: templates/picture/picture_wide.html:85 +msgid "of the picture" +msgstr "obrazu" + +#: templates/picture/picture_wide.html:87 +msgid "Source XML file" +msgstr "ŹródÅo XML" + +#: templates/picture/picture_wide.html:89 +msgid "Picture on" +msgstr "Obraz na" + +#: templates/picture/picture_wide.html:89 +msgid "Editor's Platform" +msgstr "platformie edytorskiej" + +#: templates/picture/picture_wide.html:92 +msgid "Picture description on Wikipedia" +msgstr "Opis w Wikipedii" + +#: views.py:91 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:92 +msgid "Picture imported successfully" +msgstr "Obraz zostaÅ zimportowany" + +#: views.py:94 +#, python-format +msgid "Error importing file: %r" +msgstr "BÅÄ d importu pliku: %r" + +#~ msgid "Download" +#~ msgstr "Pobierz" + +#~ msgid "original" +#~ msgstr "oryginaÅ" + +#~ msgid "Edit. note" +#~ msgstr "Nota edytorska" + +#~ msgid "Picture's page" +#~ msgstr "Strona obrazu" + +#~ msgid "Picture description on Lektury.Gazeta.pl" +#~ msgstr "Opis na Lektury.Gazeta.pl" diff --git a/src/picture/locale/ru/LC_MESSAGES/django.mo b/src/picture/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..714a042c1 Binary files /dev/null and b/src/picture/locale/ru/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/ru/LC_MESSAGES/django.po b/src/picture/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..0bb775710 --- /dev/null +++ b/src/picture/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,206 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: forms.py:21 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:29 +msgid "Please supply an image." +msgstr "" + +#: models.py:37 +msgid "area" +msgstr "" + +#: models.py:38 +msgid "kind" +msgstr "" + +#: models.py:40 +msgid "thing" +msgstr "" + +#: models.py:41 +msgid "theme" +msgstr "" + +#: models.py:66 +msgid "title" +msgstr "" + +#: models.py:67 +msgid "slug" +msgstr "" + +#: models.py:68 +msgid "sort key" +msgstr "" + +#: models.py:69 models.py:70 +msgid "creation date" +msgstr "" + +#: models.py:72 +msgid "image_file" +msgstr "" + +#: models.py:74 +msgid "picture areas JSON" +msgstr "" + +#: models.py:75 +msgid "extra information" +msgstr "" + +#: models.py:92 +msgid "picture" +msgstr "" + +#: models.py:93 +msgid "pictures" +msgstr "" + +#: views.py:79 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:80 +msgid "Picture imported successfully" +msgstr "" + +#: views.py:82 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:7 +msgid "Image" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Import picture" +msgstr "" + +#: templates/picture/picture_list_thumb.html:10 +#: templates/picture/picture_list_thumb.html:14 +msgid "Listing of all pictures" +msgstr "" + +#: templates/picture/picture_short.html:31 +msgid "Epoch" +msgstr "" + +#: templates/picture/picture_short.html:38 +msgid "Kind" +msgstr "" + +#: templates/picture/picture_short.html:45 +msgid "Genre" +msgstr "" + +#: templates/picture/picture_short.html:57 +msgid "View online" +msgstr "" + +#: templates/picture/picture_short.html:60 +msgid "download original" +msgstr "" + +#: templates/picture/picture_short.html:63 +#: templates/picture/picture_viewer.html:30 +msgid "Download" +msgstr "" + +#: templates/picture/picture_short.html:66 +msgid "original" +msgstr "" + +#: templates/picture/picture_viewer.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/picture/picture_viewer.html:23 +#: templates/picture/picture_viewer.html:50 +msgid "Themes" +msgstr "" + +#: templates/picture/picture_viewer.html:24 +#: templates/picture/picture_viewer.html:49 +#: templates/picture/picture_wide.html:31 +msgid "Objects" +msgstr "" + +#: templates/picture/picture_viewer.html:26 +msgid "Edit. note" +msgstr "" + +#: templates/picture/picture_viewer.html:27 +msgid "Infobox" +msgstr "" + +#: templates/picture/picture_viewer.html:28 +msgid "Picture's page" +msgstr "" + +#: templates/picture/picture_wide.html:20 +msgid "Motifs, themes and objects" +msgstr "" + +#: templates/picture/picture_wide.html:23 +msgid "Motifs and themes" +msgstr "" + +#: templates/picture/picture_wide.html:49 +msgid "See" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "Source" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "of the picture" +msgstr "" + +#: templates/picture/picture_wide.html:54 +msgid "Source XML file" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Picture on" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Editor's Platform" +msgstr "" + +#: templates/picture/picture_wide.html:59 +msgid "Picture description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/picture/picture_wide.html:62 +msgid "Picture description on Wikipedia" +msgstr "" diff --git a/src/picture/locale/uk/LC_MESSAGES/django.mo b/src/picture/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..714a042c1 Binary files /dev/null and b/src/picture/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/picture/locale/uk/LC_MESSAGES/django.po b/src/picture/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..0bb775710 --- /dev/null +++ b/src/picture/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,206 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: forms.py:21 +msgid "Please supply an XML." +msgstr "" + +#: forms.py:29 +msgid "Please supply an image." +msgstr "" + +#: models.py:37 +msgid "area" +msgstr "" + +#: models.py:38 +msgid "kind" +msgstr "" + +#: models.py:40 +msgid "thing" +msgstr "" + +#: models.py:41 +msgid "theme" +msgstr "" + +#: models.py:66 +msgid "title" +msgstr "" + +#: models.py:67 +msgid "slug" +msgstr "" + +#: models.py:68 +msgid "sort key" +msgstr "" + +#: models.py:69 models.py:70 +msgid "creation date" +msgstr "" + +#: models.py:72 +msgid "image_file" +msgstr "" + +#: models.py:74 +msgid "picture areas JSON" +msgstr "" + +#: models.py:75 +msgid "extra information" +msgstr "" + +#: models.py:92 +msgid "picture" +msgstr "" + +#: models.py:93 +msgid "pictures" +msgstr "" + +#: views.py:79 +#, python-format +msgid "" +"An error occurred: %(exception)s\n" +"\n" +"%(tb)s" +msgstr "" + +#: views.py:80 +msgid "Picture imported successfully" +msgstr "" + +#: views.py:82 +#, python-format +msgid "Error importing file: %r" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:7 +msgid "Image" +msgstr "" + +#: templates/admin/picture/picture/change_list.html:8 +msgid "Import picture" +msgstr "" + +#: templates/picture/picture_list_thumb.html:10 +#: templates/picture/picture_list_thumb.html:14 +msgid "Listing of all pictures" +msgstr "" + +#: templates/picture/picture_short.html:31 +msgid "Epoch" +msgstr "" + +#: templates/picture/picture_short.html:38 +msgid "Kind" +msgstr "" + +#: templates/picture/picture_short.html:45 +msgid "Genre" +msgstr "" + +#: templates/picture/picture_short.html:57 +msgid "View online" +msgstr "" + +#: templates/picture/picture_short.html:60 +msgid "download original" +msgstr "" + +#: templates/picture/picture_short.html:63 +#: templates/picture/picture_viewer.html:30 +msgid "Download" +msgstr "" + +#: templates/picture/picture_short.html:66 +msgid "original" +msgstr "" + +#: templates/picture/picture_viewer.html:11 +msgid "Wolne Lektury" +msgstr "" + +#: templates/picture/picture_viewer.html:23 +#: templates/picture/picture_viewer.html:50 +msgid "Themes" +msgstr "" + +#: templates/picture/picture_viewer.html:24 +#: templates/picture/picture_viewer.html:49 +#: templates/picture/picture_wide.html:31 +msgid "Objects" +msgstr "" + +#: templates/picture/picture_viewer.html:26 +msgid "Edit. note" +msgstr "" + +#: templates/picture/picture_viewer.html:27 +msgid "Infobox" +msgstr "" + +#: templates/picture/picture_viewer.html:28 +msgid "Picture's page" +msgstr "" + +#: templates/picture/picture_wide.html:20 +msgid "Motifs, themes and objects" +msgstr "" + +#: templates/picture/picture_wide.html:23 +msgid "Motifs and themes" +msgstr "" + +#: templates/picture/picture_wide.html:49 +msgid "See" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "Source" +msgstr "" + +#: templates/picture/picture_wide.html:52 +msgid "of the picture" +msgstr "" + +#: templates/picture/picture_wide.html:54 +msgid "Source XML file" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Picture on" +msgstr "" + +#: templates/picture/picture_wide.html:56 +msgid "Editor's Platform" +msgstr "" + +#: templates/picture/picture_wide.html:59 +msgid "Picture description on Lektury.Gazeta.pl" +msgstr "" + +#: templates/picture/picture_wide.html:62 +msgid "Picture description on Wikipedia" +msgstr "" diff --git a/src/picture/migrations/0001_initial.py b/src/picture/migrations/0001_initial.py new file mode 100644 index 000000000..59dbff64f --- /dev/null +++ b/src/picture/migrations/0001_initial.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from os.path import join +from django.conf import settings +from django.db import models, migrations +import sorl.thumbnail.fields +import jsonfield.fields +import django.core.files.storage +from django.utils.encoding import force_bytes + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Picture', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('title', models.CharField(max_length=120, verbose_name='Title')), + ('slug', models.SlugField(unique=True, max_length=120, verbose_name='Slug')), + ('sort_key', models.CharField(verbose_name='Sort key', max_length=120, editable=False, db_index=True)), + ('sort_key_author', models.CharField(default='', verbose_name='sort key by author', max_length=120, editable=False, db_index=True)), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date', db_index=True)), + ('changed_at', models.DateTimeField(auto_now=True, verbose_name='creation date', db_index=True)), + ('xml_file', models.FileField(upload_to=b'xml', storage=django.core.files.storage.FileSystemStorage(base_url=b'/media/pictures/', location=join(force_bytes(settings.MEDIA_ROOT), b'pictures')), verbose_name=b'xml_file')), + ('image_file', sorl.thumbnail.fields.ImageField(upload_to=b'images', storage=django.core.files.storage.FileSystemStorage(base_url=b'/media/pictures/', location=join(force_bytes(settings.MEDIA_ROOT), b'pictures')), verbose_name='image_file')), + ('html_file', models.FileField(upload_to=b'html', storage=django.core.files.storage.FileSystemStorage(base_url=b'/media/pictures/', location=join(force_bytes(settings.MEDIA_ROOT), b'pictures')), verbose_name=b'html_file')), + ('areas_json', jsonfield.fields.JSONField(default={}, verbose_name='picture areas JSON', editable=False)), + ('extra_info', jsonfield.fields.JSONField(default={}, verbose_name='Additional information')), + ('culturepl_link', models.CharField(max_length=240, blank=True)), + ('wiki_link', models.CharField(max_length=240, blank=True)), + ('_related_info', jsonfield.fields.JSONField(null=True, editable=False, blank=True)), + ('width', models.IntegerField(null=True)), + ('height', models.IntegerField(null=True)), + ], + options={ + 'ordering': ('sort_key',), + 'verbose_name': 'picture', + 'verbose_name_plural': 'pictures', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='PictureArea', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('area', jsonfield.fields.JSONField(default={}, verbose_name='area', editable=False)), + ('kind', models.CharField(db_index=True, max_length=10, verbose_name='form', choices=[(b'thing', 'thing'), (b'theme', 'motif')])), + ('picture', models.ForeignKey(related_name=b'areas', to='picture.Picture')), + ], + options={ + }, + bases=(models.Model,), + ), + ] diff --git a/src/picture/migrations/0002_remove_picture__related_info.py b/src/picture/migrations/0002_remove_picture__related_info.py new file mode 100644 index 000000000..10542c85b --- /dev/null +++ b/src/picture/migrations/0002_remove_picture__related_info.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('picture', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='picture', + name='_related_info', + ), + ] diff --git a/src/picture/migrations/0003_auto_20140924_1559.py b/src/picture/migrations/0003_auto_20140924_1559.py new file mode 100644 index 000000000..4e257d809 --- /dev/null +++ b/src/picture/migrations/0003_auto_20140924_1559.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('picture', '0002_remove_picture__related_info'), + ] + + operations = [ + migrations.AlterField( + model_name='picture', + name='title', + field=models.CharField(max_length=255, verbose_name='Title'), + ), + ] diff --git a/src/picture/migrations/0004_auto_20141016_1337.py b/src/picture/migrations/0004_auto_20141016_1337.py new file mode 100644 index 000000000..88d124934 --- /dev/null +++ b/src/picture/migrations/0004_auto_20141016_1337.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('picture', '0003_auto_20140924_1559'), + ] + + operations = [ + migrations.AlterField( + model_name='picture', + name='title', + field=models.CharField(max_length=32767, verbose_name='Title'), + ), + ] diff --git a/src/picture/migrations/0005_auto_20141022_1001.py b/src/picture/migrations/0005_auto_20141022_1001.py new file mode 100644 index 000000000..677877eae --- /dev/null +++ b/src/picture/migrations/0005_auto_20141022_1001.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.core.files.base import ContentFile +from django.db import models, migrations +from django.template.loader import render_to_string + + +def rebuild_extra_info(apps, schema_editor): + Picture = apps.get_model("picture", "Picture") + from librarian.picture import PictureInfo + from librarian import dcparser + for pic in Picture.objects.all(): + info = dcparser.parse(pic.xml_file.path, PictureInfo) + pic.extra_info = info.to_dict() + areas_json = pic.areas_json + for field in areas_json[u'things'].values(): + field[u'object'] = field[u'object'].capitalize() + pic.areas_json = areas_json + html_text = unicode(render_to_string('picture/picture_info.html', { + 'things': pic.areas_json['things'], + 'themes': pic.areas_json['themes'], + })) + pic.html_file.save("%s.html" % pic.slug, ContentFile(html_text)) + pic.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('picture', '0004_auto_20141016_1337'), + ] + + operations = [ + migrations.RunPython(rebuild_extra_info), + ] diff --git a/src/picture/migrations/0006_auto_20151221_1225.py b/src/picture/migrations/0006_auto_20151221_1225.py new file mode 100644 index 000000000..2f03ce591 --- /dev/null +++ b/src/picture/migrations/0006_auto_20151221_1225.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import jsonfield.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('picture', '0005_auto_20141022_1001'), + ] + + operations = [ + migrations.AlterField( + model_name='picture', + name='extra_info', + field=jsonfield.fields.JSONField(default={}, verbose_name='extra information'), + ), + migrations.AlterField( + model_name='picture', + name='slug', + field=models.SlugField(unique=True, max_length=120, verbose_name='slug'), + ), + migrations.AlterField( + model_name='picture', + name='sort_key', + field=models.CharField(verbose_name='sort key', max_length=120, editable=False, db_index=True), + ), + migrations.AlterField( + model_name='picture', + name='title', + field=models.CharField(max_length=32767, verbose_name='title'), + ), + migrations.AlterField( + model_name='picturearea', + name='kind', + field=models.CharField(db_index=True, max_length=10, verbose_name='kind', choices=[(b'thing', 'thing'), (b'theme', 'theme')]), + ), + ] diff --git a/src/picture/migrations/__init__.py b/src/picture/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/picture/models.py b/src/picture/models.py new file mode 100644 index 000000000..5aabe3c89 --- /dev/null +++ b/src/picture/models.py @@ -0,0 +1,342 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.db import models, transaction +import catalogue.models +from django.db.models import permalink +from sorl.thumbnail import ImageField +from django.conf import settings +from django.contrib.contenttypes.fields import GenericRelation +from django.core.files.storage import FileSystemStorage +from django.utils.datastructures import SortedDict +from fnpdjango.utils.text.slughifi import slughifi +from ssify import flush_ssi_includes +from picture import tasks +from StringIO import StringIO +import jsonfield +import itertools +import logging + +from PIL import Image + +from django.utils.translation import ugettext_lazy as _ +from newtagging import managers +from os import path + + +picture_storage = FileSystemStorage(location=path.join( + settings.MEDIA_ROOT, 'pictures'), + base_url=settings.MEDIA_URL + "pictures/") + + +class PictureArea(models.Model): + picture = models.ForeignKey('picture.Picture', related_name='areas') + area = jsonfield.JSONField(_('area'), default={}, editable=False) + kind = models.CharField(_('kind'), max_length=10, blank=False, + null=False, db_index=True, + choices=(('thing', _('thing')), + ('theme', _('theme')))) + + objects = models.Manager() + tagged = managers.ModelTaggedItemManager(catalogue.models.Tag) + tags = managers.TagDescriptor(catalogue.models.Tag) + tag_relations = GenericRelation(catalogue.models.Tag.intermediary_table_model) + + short_html_url_name = 'picture_area_short' + + @classmethod + def rectangle(cls, picture, kind, coords): + pa = PictureArea() + pa.picture = picture + pa.kind = kind + pa.area = coords + return pa + + def flush_includes(self, languages=True): + if not languages: + return + if languages is True: + languages = [lc for (lc, _ln) in settings.LANGUAGES] + flush_ssi_includes([ + template % (self.pk, lang) + for template in [ + '/katalog/pa/%d/short.%s.html', + ] + for lang in languages + ]) + + +class Picture(models.Model): + """ + Picture resource. + + """ + title = models.CharField(_('title'), max_length=32767) + slug = models.SlugField(_('slug'), max_length=120, db_index=True, unique=True) + sort_key = models.CharField(_('sort key'), max_length=120, db_index=True, editable=False) + sort_key_author = models.CharField(_('sort key by author'), max_length=120, db_index=True, editable=False, default=u'') + created_at = models.DateTimeField(_('creation date'), auto_now_add=True, db_index=True) + changed_at = models.DateTimeField(_('creation date'), auto_now=True, db_index=True) + xml_file = models.FileField('xml_file', upload_to="xml", storage=picture_storage) + image_file = ImageField(_('image_file'), upload_to="images", storage=picture_storage) + html_file = models.FileField('html_file', upload_to="html", storage=picture_storage) + areas_json = jsonfield.JSONField(_('picture areas JSON'), default={}, editable=False) + extra_info = jsonfield.JSONField(_('extra information'), default={}) + culturepl_link = models.CharField(blank=True, max_length=240) + wiki_link = models.CharField(blank=True, max_length=240) + + width = models.IntegerField(null=True) + height = models.IntegerField(null=True) + + objects = models.Manager() + tagged = managers.ModelTaggedItemManager(catalogue.models.Tag) + tags = managers.TagDescriptor(catalogue.models.Tag) + tag_relations = GenericRelation(catalogue.models.Tag.intermediary_table_model) + + short_html_url_name = 'picture_short' + + class AlreadyExists(Exception): + pass + + class Meta: + ordering = ('sort_key',) + + verbose_name = _('picture') + verbose_name_plural = _('pictures') + + def save(self, force_insert=False, force_update=False, **kwargs): + from sortify import sortify + + self.sort_key = sortify(self.title)[:120] + + try: + author = self.tags.filter(category='author')[0].sort_key + except IndexError: + author = u'' + self.sort_key_author = author + + ret = super(Picture, self).save(force_insert, force_update) + + return ret + + def __unicode__(self): + return self.title + + @permalink + def get_absolute_url(self): + return ('picture.views.picture_detail', [self.slug]) + + @classmethod + def from_xml_file(cls, xml_file, image_file=None, image_store=None, overwrite=False): + """ + Import xml and it's accompanying image file. + If image file is missing, it will be fetched by librarian.picture.ImageStore + which looks for an image file in the same directory the xml is, with extension matching + its mime type. + """ + from sortify import sortify + from django.core.files import File + from librarian.picture import WLPicture, ImageStore + close_xml_file = False + close_image_file = False + + + if image_file is not None and not isinstance(image_file, File): + image_file = File(open(image_file)) + close_image_file = True + + if not isinstance(xml_file, File): + xml_file = File(open(xml_file)) + close_xml_file = True + + with transaction.atomic(): + # use librarian to parse meta-data + if image_store is None: + image_store = ImageStore(picture_storage.path('images')) + picture_xml = WLPicture.from_file(xml_file, image_store=image_store) + + picture, created = Picture.objects.get_or_create(slug=picture_xml.slug[:120]) + if not created and not overwrite: + raise Picture.AlreadyExists('Picture %s already exists' % picture_xml.slug) + + picture.areas.all().delete() + picture.title = unicode(picture_xml.picture_info.title) + picture.extra_info = picture_xml.picture_info.to_dict() + + picture_tags = set(catalogue.models.Tag.tags_from_info(picture_xml.picture_info)) + motif_tags = set() + thing_tags = set() + + area_data = {'themes':{}, 'things':{}} + + # Treat all names in picture XML as in default language. + lang = settings.LANGUAGE_CODE + + for part in picture_xml.partiter(): + if picture_xml.frame: + c = picture_xml.frame[0] + part['coords'] = [[p[0] - c[0], p[1] - c[1]] for p in part['coords']] + if part.get('object', None) is not None: + _tags = set() + for objname in part['object'].split(','): + objname = objname.strip().capitalize() + tag, created = catalogue.models.Tag.objects.get_or_create(slug=slughifi(objname), category='thing') + if created: + tag.name = objname + setattr(tag, 'name_%s' % lang, tag.name) + tag.sort_key = sortify(tag.name) + tag.save() + #thing_tags.add(tag) + area_data['things'][tag.slug] = { + 'object': objname, + 'coords': part['coords'], + } + + _tags.add(tag) + area = PictureArea.rectangle(picture, 'thing', part['coords']) + area.save() + area.tags = _tags + else: + _tags = set() + for motifs in part['themes']: + for motif in motifs.split(','): + tag, created = catalogue.models.Tag.objects.get_or_create(slug=slughifi(motif), category='theme') + if created: + tag.name = motif + tag.sort_key = sortify(tag.name) + tag.save() + #motif_tags.add(tag) + _tags.add(tag) + area_data['themes'][tag.slug] = { + 'theme': motif, + 'coords': part['coords'] + } + + logging.debug("coords for theme: %s" % part['coords']) + area = PictureArea.rectangle(picture, 'theme', part['coords']) + area.save() + area.tags = _tags.union(picture_tags) + + picture.tags = picture_tags.union(motif_tags).union(thing_tags) + picture.areas_json = area_data + + if image_file is not None: + img = image_file + else: + img = picture_xml.image_file() + + modified = cls.crop_to_frame(picture_xml, img) + modified = cls.add_source_note(picture_xml, modified) + + picture.width, picture.height = modified.size + + modified_file = StringIO() + modified.save(modified_file, format='JPEG', quality=95) + # FIXME: hardcoded extension - detect from DC format or orginal filename + picture.image_file.save(path.basename(picture_xml.image_path), File(modified_file)) + + picture.xml_file.save("%s.xml" % picture.slug, File(xml_file)) + picture.save() + tasks.generate_picture_html(picture.id) + + if close_xml_file: + xml_file.close() + if close_image_file: + image_file.close() + + return picture + + @classmethod + def crop_to_frame(cls, wlpic, image_file): + img = Image.open(image_file) + if wlpic.frame is None or wlpic.frame == [[0, 0], [-1, -1]]: + return img + img = img.crop(itertools.chain(*wlpic.frame)) + return img + + @staticmethod + def add_source_note(wlpic, img): + from PIL import ImageDraw, ImageFont + from librarian import get_resource + + annotated = Image.new(img.mode, + (img.size[0], img.size[1] + 40), + (255, 255, 255) + ) + annotated.paste(img, (0, 0)) + annotation = Image.new('RGB', (img.size[0] * 3, 120), (255, 255, 255)) + ImageDraw.Draw(annotation).text( + (30, 15), + wlpic.picture_info.source_name, + (0, 0, 0), + font=ImageFont.truetype(get_resource("fonts/DejaVuSerif.ttf"), 75) + ) + annotated.paste(annotation.resize((img.size[0], 40), Image.ANTIALIAS), (0, img.size[1])) + return annotated + + @classmethod + def picture_list(cls, filter=None): + """Generates a hierarchical listing of all pictures + Pictures are optionally filtered with a test function. + """ + + pics = cls.objects.all().order_by('sort_key')\ + .only('title', 'slug', 'image_file') + + if filter: + pics = pics.filter(filter).distinct() + + pics_by_author = SortedDict() + orphans = [] + for tag in catalogue.models.Tag.objects.filter(category='author'): + pics_by_author[tag] = [] + + for pic in pics.iterator(): + authors = list(pic.tags.filter(category='author')) + if authors: + for author in authors: + pics_by_author[author].append(pic) + else: + orphans.append(pic) + + return pics_by_author, orphans + + @property + def info(self): + if not hasattr(self, '_info'): + from librarian import dcparser + from librarian import picture + info = dcparser.parse(self.xml_file.path, picture.PictureInfo) + self._info = info + return self._info + + def pretty_title(self, html_links=False): + picture = self + names = [(tag.name, tag.get_absolute_url()) + for tag in self.tags.filter(category='author')] + names.append((self.title, self.get_absolute_url())) + + if html_links: + names = ['<a href="%s">%s</a>' % (tag[1], tag[0]) for tag in names] + else: + names = [tag[0] for tag in names] + return ', '.join(names) + + def related_themes(self): + return catalogue.models.Tag.objects.usage_for_queryset( + self.areas.all(), counts=True).filter(category__in=('theme', 'thing')) + + def flush_includes(self, languages=True): + if not languages: + return + if languages is True: + languages = [lc for (lc, _ln) in settings.LANGUAGES] + flush_ssi_includes([ + template % (self.pk, lang) + for template in [ + '/katalog/p/%d/short.%s.html', + '/katalog/p/%d/mini.%s.html', + ] + for lang in languages + ]) diff --git a/src/picture/tasks.py b/src/picture/tasks.py new file mode 100644 index 000000000..fc9eafa7a --- /dev/null +++ b/src/picture/tasks.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from celery.task import task +from django.core.files.base import ContentFile +from django.template.loader import render_to_string + + +@task +def generate_picture_html(picture_id): + import picture.models + pic = picture.models.Picture.objects.get(pk=picture_id) + + html_text = unicode(render_to_string('picture/picture_info.html', { + 'things': pic.areas_json['things'], + 'themes': pic.areas_json['themes'], + })) + pic.html_file.save("%s.html" % pic.slug, ContentFile(html_text)) + diff --git a/src/picture/templates/admin/picture/picture/change_list.html b/src/picture/templates/admin/picture/picture/change_list.html new file mode 100755 index 000000000..05566c0ab --- /dev/null +++ b/src/picture/templates/admin/picture/picture/change_list.html @@ -0,0 +1,12 @@ +{% extends "admin/change_list.html" %} +{% load i18n %} + +{% block content %} + <form action="{% url 'import_picture' %}" method="post" enctype="multipart/form-data"> + {% csrf_token %} + <p>XML: <input type="file" id="id_picture_xml_file" name="picture_xml_file" /><br/> + {% trans "Image" %}: <input type="file" id="id_picture_image_file" name="picture_image_file" /><br/> + <input type="submit" value="{% trans "Import picture" %}"/></p> + </form> + {{ block.super }} +{% endblock content %} diff --git a/src/picture/templates/picture/collection.html b/src/picture/templates/picture/collection.html new file mode 100644 index 000000000..f794fbfeb --- /dev/null +++ b/src/picture/templates/picture/collection.html @@ -0,0 +1,10 @@ +{% extends "picture/picture_list_thumb.html" %} +{% load i18n %} + +{% block titleextra %}{{ context.collection.title }}{% endblock %} + +{% block book_list_header %}{{ context.collection.title }}{% endblock %} + +{% block book_list_info %} +{{ context.collection.description|safe }} +{% endblock %} diff --git a/src/picture/templates/picture/picture_detail.html b/src/picture/templates/picture/picture_detail.html new file mode 100644 index 000000000..514f8c3e8 --- /dev/null +++ b/src/picture/templates/picture/picture_detail.html @@ -0,0 +1,26 @@ +{% extends "base.html" %} +{% load i18n %} +{% load picture_tags catalogue_tags pagination_tags %} +{% load thumbnail %} +{% load build_absolute_uri from fnp_common %} + + +{% block ogimage %}{% thumbnail picture.image_file "535" upscale="false" as thumb %}{{ thumb.url|build_absolute_uri:request }}{% endthumbnail %}{% endblock %} + + +{% block titleextra %}{{ picture.title }}{% endblock %} + +{% block bodyid %}picture-detail{% endblock %} + +{% block body %} + {% picture_wide picture %} + +{% spaceless %} + +<section class="see-also" style="display: inline-block;"> +<h1>{% trans "See also" %}:</h1> +{% related_books picture %} +</section> +{% endspaceless %} + +{% endblock %} diff --git a/src/picture/templates/picture/picture_info.html b/src/picture/templates/picture/picture_info.html new file mode 100644 index 000000000..c2d2c9aaa --- /dev/null +++ b/src/picture/templates/picture/picture_info.html @@ -0,0 +1,17 @@ + +<div id="picture-themes" class="dropdown-body"> + <ul> +{% for slug, theme in themes.items %} +<li><a href="#theme-{{slug}}" data-coords="{{theme.coords}}">{{theme.theme}}</a></li> +{% endfor %} + </ul> +</div> + +<div id="picture-objects" class="dropdown-body"> + <ul> +{% for slug, thing in things.items %} +<li><a href="#object-{{slug}}" data-coords="{{thing.coords}}">{{thing.object}}</a></li> +{% endfor %} + </ul> +</div> + diff --git a/src/picture/templates/picture/picture_list_thumb.html b/src/picture/templates/picture/picture_list_thumb.html new file mode 100644 index 000000000..adfc25eb5 --- /dev/null +++ b/src/picture/templates/picture/picture_list_thumb.html @@ -0,0 +1,30 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} +{% load static %} +{% load ssi_include from ssify %} + +{% block bodyid %}picture-list{% endblock %} + +{% block titleextra %}{% trans "Listing of all works" context "gallery" %}{% endblock %} + + +{% block body %} + <h1>{% block book_list_header %}{% trans "Listing of all works" context "gallery" %}{% endblock %}</h1> + + <div class="left-column"><div class="normal-text"> + {% block book_list_info %} + {% ssi_include 'chunk' key='picture-list' %} + {% endblock %} + </div></div> + + <div class='clearboth'></div> + + + +{% work_list book_list %} + + + + +{% endblock %} diff --git a/src/picture/templates/picture/picture_mini_box.html b/src/picture/templates/picture/picture_mini_box.html new file mode 100644 index 000000000..d8ebbf77b --- /dev/null +++ b/src/picture/templates/picture/picture_mini_box.html @@ -0,0 +1,23 @@ +{% spaceless %} + +{% load thumbnail %} +<div class="book-mini-box"> + <div class="book-mini-box-inner"> + {% if with_link %} + <a href="{{ picture.get_absolute_url }}"> + {% endif %} + {% if picture.image_file %} + <img src="{% thumbnail picture.image_file "139x193" crop="center" as thumb %}{{ thumb.url }}{% empty %}{{ picture.image_file.url }}{% endthumbnail %}" alt="{{ author_str }} â {{ picture.title }}" class="cover" /> + {% endif %} + <div class="desc"> + <span class="mono author">{{ author_str }}</span> + <span class="title">{{ picture.title }}</span> + </div> + {% if with_link %} + </a> + {% endif %} + </div> +</div> + + +{% endspaceless %} \ No newline at end of file diff --git a/src/picture/templates/picture/picture_short.html b/src/picture/templates/picture/picture_short.html new file mode 100644 index 000000000..1bd70a11b --- /dev/null +++ b/src/picture/templates/picture/picture_short.html @@ -0,0 +1,84 @@ +{% load i18n %} +{% load thumbnail %} +{% load catalogue_tags social_tags %} +{% load picture_tags %} +<div class="{% block box-class %}book-box{% endblock %} picture"> +<div class="book-box-inner"> + +<div class="book-box-body"> + + <div class="book-box-head"> + <div class="author"> + {% for tag in tags.author %} + <a href="{{ tag.get_absolute_url }}">{{ tag }}</a>{% if not forloop.last %}, + {% endif %}{% endfor %} + </div> + <div class="title"> + {% if main_link %}<a href="{{ main_link }}">{% endif %} + {{ picture.title }} + {% if main_link %}</a>{% endif %} + </div> + </div> + + + + <div class="cover-area"> + {% block picture-view %} + {% if main_link %}<a href="{{ main_link }}">{% endif %} + {% thumbnail picture.image_file "216x288" crop="center" as thumb %} + <img class="cover" src="{{thumb.url}}"/> + {% endthumbnail %} + {% if main_link %}</a>{% endif %} + {% endblock %} + {# what about licensing icons here #} + </div> + + <div class="tags"> + {% spaceless %} + + <span class="category"> + <span class="mono"> {% trans "Epoch" %}:</span> <span class="book-box-tag"> + {% for tag in tags.epoch %} + <a href="{{ tag.get_absolute_url }}">{{ tag }}</a> + {% if not forloop.last %}<span>, </span>{% endif %} + {% endfor %} + </span></span> + + <span class="category"> + <span class="mono"> {% trans "Kind" %}:</span> <span class="book-box-tag"> + {% for tag in tags.kind %} + <a href="{{ tag.get_absolute_url }}">{{ tag }}</a> + {% if not forloop.last %}<span>, </span>{% endif %} + {% endfor %} + </span></span> + + <span class="category"> + <span class="mono"> {% trans "Genre" %}:</span> <span class="book-box-tag"> + {% for tag in tags.genre %} + <a href="{{ tag.get_absolute_url }}">{{ tag }}</a> + {% if not forloop.last %}<span>, </span>{% endif %} + {% endfor %} + </span></span> + + {% block extra_categories %} + {% endblock %} + + {% endspaceless %} + </div> + </div> + <ul class="book-box-tools"> + <li class="book-box-read"> + <a href="{% url 'picture_viewer' picture.slug %}" class="downarrow">{% trans "View online" %}</a> + </li> + <li class="book-box-download"> + <a href="{{picture.image_file.url}}" class="downarrow">{% trans "download original" %}</a> + </li> + </ul> + {% block book-box-extra-info %}{% endblock %} + {% block box-append %} + {% endblock %} + {% block right-column %} + {% endblock %} + <div class="clearboth"></div> +</div> +</div> diff --git a/src/picture/templates/picture/picture_viewer.html b/src/picture/templates/picture/picture_viewer.html new file mode 100644 index 000000000..e169dbe0f --- /dev/null +++ b/src/picture/templates/picture/picture_viewer.html @@ -0,0 +1,88 @@ +{% extends "catalogue/viewer_base.html" %} +{% load i18n %} +{% load static from staticfiles %} +{% load catalogue_tags %} +{% load thumbnail %} + + +{% block title %}{{ picture.pretty_title }}{% endblock %} + + +{% block body-id %}picture-viewer{% endblock %} + + +{% block js-dependencies %} + <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script> +{% endblock %} + + +{% block no-menu-extra %} +<li><a class="square button plus inactive" href="#">+<!--➕--><!-- heavy plus sign --></a></li><li><a class="square button minus inactive" href="#">-<!-- ➖--><!-- heavy minus sign --></a></li> +{% endblock %} + + +{% block menu %} +<li><a style="width: 50%;display: inline-block;" class="square button plus inactive" href="#">+<!--➕--><!-- heavy plus sign --></a><a style="width: 50%;display: inline-block;" class="square button minus inactive" href="#">-<!-- ➖--><!-- heavy minus sign --></a></li> + + +<li><a href="{{ picture.get_absolute_url }}" id="menu-book" data-box="book-short"> + <img src="{% thumbnail picture.image_file '80x200' as thumb %}{{ thumb.url }}{% empty %}{{ picture.image_file.url }}{% endthumbnail %}" + width="80" + alt="{{ picture.pretty_title }}" + title="{{ picture.pretty_title }}"> +</a></li> + + +<li><a href="#picture-objects" class="dropdown"><span class="label">{% trans "Objects" %}</span></a></li> +<li><a href="#picture-themes" class="dropdown"><span class="label">{% trans "Themes" %}</span></a></li> + + +<li id="menu-info"><a href="#info" data-box="info"> + <span class="label">{% trans "Infobox" %}</span> +</a></li> + +<li id="sponsors"> + {% for sponsor in sponsors %} + {% thumbnail sponsor.logo "80x200" as logo %} + <a href="{{ sponsor.url }}" target="_blank"><img src="{{ logo.url }}" alt="{{ sponsor.name }}" /></a> + {% endthumbnail %} + {% endfor %} +</li> + +{% endblock %} + +{% block main %} + <div id="picture-view"> + {% thumbnail picture.image_file "700x500" as pic %} + <div class="picture-wrap {% if picture.image_file|is_portrait %}portrait{% endif %}" + data-original-width="{{picture.width}}" data-original-height="{{picture.height}}" + data-original-url="{{ picture.image_file.url }}" + data-width="{{pic.width}}" data-height="{{pic.height}}" style="background-image: url('{{pic.url}}'); width: {{pic.width}}px; height: {{pic.height}}px;"> + </div> + {% endthumbnail %} + </div> +{% endblock %} + + +{% block footer %} +{{ picture.html_file.read|safe }} + +<div id="info" class="box"> + <div class="sponsors"> + <a href="/"><img src="{% static "img/logo-220.png" %}" alt="Wolne Lektury" ></img> + </a> + {% for sponsor in sponsors %} + {% thumbnail sponsor.logo "220x220" as logo %} + <a href="{{ sponsor.url }}" target="_blank"><img src="{{ logo.url }}" alt="{{ sponsor.name }}" /></a> + {% endthumbnail %} + {% endfor %} + </div> + + {% book_info picture %} +</div> + +<div class="box Picture-item" id="book-short"> + {{ picture.short_html }} +</div> + +{% endblock %} diff --git a/src/picture/templates/picture/picture_wide.html b/src/picture/templates/picture/picture_wide.html new file mode 100644 index 000000000..9f47c7baa --- /dev/null +++ b/src/picture/templates/picture/picture_wide.html @@ -0,0 +1,112 @@ +{% extends "picture/picture_short.html" %} +{% load i18n %} +{% load picture_tags thumbnail %} + + +{% block box-class %}book-wide-box{% endblock %} + +{% block picture-view %} +<a href="{{ main_link }}"> +{% thumbnail picture.image_file "535" upscale=0 as thumb %} +<img class="cover" src="{{thumb.url}}"/></a> +{% endthumbnail %} +{% endblock %} + + +{% block extra_categories %} +{% if picture.extra_info.styles %} +<span class="category"> +<span class="mono"> {% trans "Style" %}:</span> <span class="book-box-tag"> + {% for tag in picture.extra_info.styles %} + <a>{{ tag }}</a> + {% if not forloop.last %}<span>, </span>{% endif %} + {% endfor %} +</span></span> +{% endif %} + +{% if picture.extra_info.medium %} +<span class="category"> +<span class="mono"> {% trans "Medium" %}:</span> <span class="book-box-tag"> + <a>{{ picture.extra_info.medium }}</a> +</span></span> +{% endif %} + +{% if picture.extra_info.original_dimensions %} +<span class="category"> +<span class="mono"> {% trans "Dimensions" %}:</span> <span class="book-box-tag"> + <a>{{ picture.extra_info.original_dimensions }}</a> +</span></span> +{% endif %} + +<span class="category"> +<span class="mono"> {% trans "Date" %}:</span> <span class="book-box-tag"> + <a>{{ picture.extra_info.created_at }}</a> +</span></span> + +{% endblock %} + + +{% block book-box-extra-info %} +{% if themes or things%} + <div class="hidden-box-wrapper" id="theme-list-wrapper"> + <p><a class="hidden-box-trigger theme-list-link" + href="#">{% trans "Motifs, themes and objects" %}</a></p> + <div class="hidden-box"> + {% if themes %} + <p>{% trans "Motifs and themes" %}</p> + <ul> + {% for theme in themes %} + <li><a href="{% url 'picture_viewer' picture.slug %}#theme-{{theme.slug}}">{{ theme }}</a></li> + {% endfor %} + </ul> + {% endif %} + {% if things %} + <p>{% trans "Objects" %}</p> + <ul> + {% for thing in things %} + <li><a href="{% url 'picture_viewer' picture.slug %}#object-{{thing.slug}}">{{ thing }}</a></li> + {% endfor %} + </ul> + {% endif %} + </div> + </div> +{% else %} + <p> </p> +{% endif %} +{% endblock %} + + +{% block right-column %} +<div class="right-column"> + <div class="other-tools"> + <h2 class="mono">{% trans "See" %}</h2> + <ul class="plain"> + {% if extra_info.source_url %} + <li><a href="{{ extra_info.source_url }}">{% trans "Source" %}</a> {% trans "of the picture" %}</li> + {% endif %} + <li><a href="{{ picture.xml_file.url }}">{% trans "Source XML file" %}</a></li> + {% if extra_info.about and not hide_about %} + <li>{% trans "Picture on" %} <a href="{{ extra_info.about }}">{% trans "Editor's Platform" %}</a></li> + {% endif %} + {% if picture.wiki_link %} + <li><a href="{{ picture.wiki_link }}">{% trans "Picture description on Wikipedia" %}</a></li> + {% endif %} + </ul> + </div> + + {% comment %} + <div class="other-download"> + <h2 class="mono">{% trans "Download" %}</h2> + <ul class="plain"> + <li> + {% if related.media.mp3 or related.media.ogg or related.media.daisy %} + {% trans "Download all audiobooks for this book" %}: + {% download_audio book %}. + {% endif %} + </li> + {% custom_pdf_link_li book %} + </ul> + </div> + {% endcomment %} +</div> +{% endblock %} diff --git a/src/picture/templates/picture/picturearea_short.html b/src/picture/templates/picture/picturearea_short.html new file mode 100644 index 000000000..4fa97817d --- /dev/null +++ b/src/picture/templates/picture/picturearea_short.html @@ -0,0 +1,17 @@ +{% load i18n %} +{% load picture_tags %} +{% load catalogue_tags %} + +<div class="area"> + <div class="area-thumbnail"> + <a href="{% url 'picture_viewer' area.picture.slug %}{% if theme %}#theme-{{theme.slug}}{% else %}#object-{{thing.slug}}{% endif %}"><img src='{% area_thumbnail_url area "100x100" %}' /></a> + </div> + {% with area.picture as picture %} + <div class="area-description"> + <div class="mono source"> + {% book_title_html picture %} + </div> + </div> + <div style="clear:both"/> + {% endwith %} +</div> diff --git a/src/picture/templatetags/__init__.py b/src/picture/templatetags/__init__.py new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/src/picture/templatetags/__init__.py @@ -0,0 +1 @@ + diff --git a/src/picture/templatetags/picture_tags.py b/src/picture/templatetags/picture_tags.py new file mode 100644 index 000000000..02d80b005 --- /dev/null +++ b/src/picture/templatetags/picture_tags.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import logging +from random import randint +from django import template +from django.core.urlresolvers import reverse +from django.utils.cache import add_never_cache_headers +import sorl.thumbnail.default +from ssify import ssi_variable +from catalogue.utils import split_tags +from ..engine import CustomCroppingEngine +from ..models import Picture + + +register = template.Library() + +cropper = CustomCroppingEngine() + +@register.inclusion_tag('picture/picture_wide.html', takes_context=True) +def picture_wide(context, picture): + context.update({ + 'picture': picture, + 'main_link': reverse('picture_viewer', args=[picture.slug]), + 'request': context.get('request'), + 'tags': split_tags(picture.tags), + }) + return context + + +@register.simple_tag() +def area_thumbnail_url(area, geometry): + def to_square(coords): + w = coords[1][0] - coords[0][0] + h = coords[1][1] - coords[0][1] + if w == h: + return coords + elif w > h: + return [[coords[0][0] + w/2 - h/2, coords[0][1]], + [coords[1][0] - w/2 + h/2, coords[1][1]]] + else: + return [[coords[0][0], coords[0][1] + h/2 - w/2], + [coords[1][0], coords[1][1] - h/2 + w/2, ]] + + # so much for sorl extensibility. + # what to do about this? + _engine = sorl.thumbnail.default.engine + sorl.thumbnail.default.engine = cropper + coords = to_square(area.area) + + try: + th = sorl.thumbnail.default.backend.get_thumbnail( + area.picture.image_file, + geometry, + crop="%dpx %dpx %dpx %dpx" % tuple(map(lambda d: max(0, d), tuple(coords[0] + coords[1])))) + except Exception, e: + logging.exception("Error creating a thumbnail for PictureArea") + return '' + + sorl.thumbnail.default.engine = _engine + + return th.url + + +@ssi_variable(register, patch_response=[add_never_cache_headers]) +def picture_random_picture(request, exclude_ids, unless=None): + if unless: + return None + queryset = Picture.objects.exclude(pk__in=exclude_ids).exclude(image_file='') + count = queryset.count() + if count: + return queryset[randint(0, count - 1)].pk + else: + return None diff --git a/src/picture/tests/__init__.py b/src/picture/tests/__init__.py new file mode 100644 index 000000000..b2e50b00f --- /dev/null +++ b/src/picture/tests/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from picture.tests.picture_import import * diff --git a/src/picture/tests/files/kandinsky-composition-viii.png b/src/picture/tests/files/kandinsky-composition-viii.png new file mode 100644 index 000000000..a809eb5c4 Binary files /dev/null and b/src/picture/tests/files/kandinsky-composition-viii.png differ diff --git a/src/picture/tests/files/kandinsky-composition-viii.xml b/src/picture/tests/files/kandinsky-composition-viii.xml new file mode 100644 index 000000000..d9e79cbed --- /dev/null +++ b/src/picture/tests/files/kandinsky-composition-viii.xml @@ -0,0 +1,36 @@ +<picture> + <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> + <rdf:Description rdf:about="http://wiki.wolnepodreczniki.pl/Lektury:Andersen/Brzydkie_kaczÄ tko"> + <dc:creator xml:lang="pl">Kandinsky, Vasily</dc:creator> + <dc:title xml:lang="la">composition 8</dc:title> + <dc:publisher xml:lang="pl">Fundacja Nowoczesna Polska</dc:publisher> + <dc:contributor.editor xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">SekuÅa, Aleksandra</dc:contributor.editor> + <dc:contributor.editor xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Kwiatkowska, Katarzyna</dc:contributor.editor> + <dc:contributor.technical_editor xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">Trzeciak, Weronika</dc:contributor.technical_editor> + <dc:subject.period xml:lang="pl">Modernizm</dc:subject.period> + <dc:subject.type xml:lang="pl">Obraz</dc:subject.type> + <dc:description xml:lang="pl">Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl). Reprodukcja cyfrowa wykonana przez BibliotekÄ NarodowÄ z egzemplarza pochodzÄ cego ze zbiorów BN.</dc:description> + <dc:description.dimensions xml:lang="pl">55 1/8 x 79 1/8 inches</dc:description.dimensions> + <dc:description.medium xml:lang="pl">Olej na pÅótnie</dc:description.medium> + <dc:identifier.url xml:lang="pl">http://wolnelektury.pl/katalog/obraz/kandinsky-composition-viii</dc:identifier.url> + <dc:source.URL xml:lang="pl">http://www.ibiblio.org/wm/paint/auth/kandinsky/kandinsky.comp-8.jpg</dc:source.URL> + <dc:source xml:lang="pl">Muzeum Narodowe, inw. 00000001.</dc:source> + <dc:rights xml:lang="pl">Domena publiczna - Vasily Kandinsky zm. ?</dc:rights> + <dc:date.pd xml:lang="pl">1940</dc:date.pd> + <dc:type>Image</dc:type> + <dc:format xml:lang="pl">image/png</dc:format> + <dc:format.dimensions xml:lang="pl">1090 x 755 px</dc:format.dimensions> + <dc:format.checksum.sha1 xml:lang="pl">122b590510ce70cc80e617557f82048ce20f1d7b</dc:format.checksum.sha1> + <dc:date xml:lang="pl">1923</dc:date> + <dc:language xml:lang="pl" xmlns:dc="http://purl.org/dc/elements/1.1/">eng</dc:language> + </rdf:Description> + </rdf:RDF> + + <sem type="object" object="kosmos"> + <div type="area" x1="17" y1="31" x2="275" y2="309"/> + </sem> + <sem type="theme" theme="nieporzÄ dek"> + <div type="area" x1="300" y1="138" x2="976" y2="514"/> + </sem> + +</picture> diff --git a/src/picture/tests/picture_import.py b/src/picture/tests/picture_import.py new file mode 100644 index 000000000..1e17289c3 --- /dev/null +++ b/src/picture/tests/picture_import.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from __future__ import with_statement + +from os import path +from picture.models import Picture +from catalogue.test_utils import WLTestCase + + +class PictureTest(WLTestCase): + + def test_import(self): + picture = Picture.from_xml_file(path.join(path.dirname(__file__), "files/kandinsky-composition-viii.xml")) + + themes = set() + for area in picture.areas.all(): + themes.update([(tag.category, tag.name) + for tag in area.tags if tag.category in (u'theme', u'thing')]) + assert themes == set([(u'theme', u'nieporzÄ dek'), (u'thing', u'Kosmos')]), \ + 'Bad themes on Picture areas: %s' % themes + + pic_themes = set([tag.name for tag in picture.tags if tag.category in ('theme', 'thing')]) + assert not pic_themes, 'Unwanted themes set on Pictures: %s' % pic_themes + + picture.delete() + + def test_import_with_explicit_image(self): + picture = Picture.from_xml_file(path.join(path.dirname(__file__), "files/kandinsky-composition-viii.xml"), + path.join(path.dirname(__file__), "files/kandinsky-composition-viii.png")) + + picture.delete() + + + def test_import_2(self): + picture = Picture.from_xml_file(path.join(path.dirname(__file__), "files/kandinsky-composition-viii.xml"), + path.join(path.dirname(__file__), "files/kandinsky-composition-viii.png"), + overwrite=True) + cats = set([t.category for t in picture.tags]) + assert 'epoch' in cats + assert 'kind' in cats + diff --git a/src/picture/views.py b/src/picture/views.py new file mode 100644 index 000000000..1f8738650 --- /dev/null +++ b/src/picture/views.py @@ -0,0 +1,128 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from collections import OrderedDict +from django.contrib.auth.decorators import permission_required +from django.shortcuts import render_to_response, get_object_or_404, render +from django.template import RequestContext +from picture.models import Picture, PictureArea +from catalogue.utils import split_tags +from ssify import ssi_included +from sponsors.models import Sponsor + +# was picture/picture_list.html list (without thumbs) +def picture_list(request, filter=None, get_filter=None, template_name='catalogue/picture_list.html', cache_key=None, context=None): + """ generates a listing of all books, optionally filtered with a test function """ + + if get_filter: + filt = get_filter() + pictures_by_author, orphans = Picture.picture_list(filt) + books_nav = OrderedDict() + for tag in pictures_by_author: + if pictures_by_author[tag]: + books_nav.setdefault(tag.sort_key[0], []).append(tag) + + return render_to_response(template_name, locals(), + context_instance=RequestContext(request)) + + +def picture_list_thumb(request, filter=None, get_filter=None, template_name='picture/picture_list_thumb.html', cache_key=None, context=None): + book_list = Picture.objects.all() + if filter: + book_list = book_list.filter(filter) + if get_filter: + book_list = book_list.filter(get_filter()) + book_list = book_list.order_by('sort_key_author') + book_list = list(book_list) + return render_to_response(template_name, locals(), + context_instance=RequestContext(request)) + +def picture_detail(request, slug): + picture = get_object_or_404(Picture, slug=slug) + + theme_things = split_tags(picture.related_themes()) + + # categories = SortedDict() + # for tag in picture.tags.iterator(): + # categories.setdefault(tag.category, []).append(tag) + + themes = theme_things.get('theme', []) + things = theme_things.get('thing', []) + + extra_info = picture.extra_info + + return render_to_response("picture/picture_detail.html", locals(), + context_instance=RequestContext(request)) + + +def picture_viewer(request, slug): + picture = get_object_or_404(Picture, slug=slug) + sponsors = [] + for sponsor in picture.extra_info.get('sponsors', []): + have_sponsors = Sponsor.objects.filter(name=sponsor) + if have_sponsors.exists(): + sponsors.append(have_sponsors[0]) + return render_to_response("picture/picture_viewer.html", locals(), + context_instance=RequestContext(request)) + + +# ========= +# = Admin = +# ========= +@permission_required('picture.add_picture') +def import_picture(request): + """docstring for import_book""" + from django.http import HttpResponse + from picture.forms import PictureImportForm + from django.utils.translation import ugettext as _ + + import_form = PictureImportForm(request.POST, request.FILES) + if import_form.is_valid(): + try: + import_form.save() + except: + import sys + import pprint + import traceback + info = sys.exc_info() + exception = pprint.pformat(info[1]) + tb = '\n'.join(traceback.format_tb(info[2])) + return HttpResponse(_("An error occurred: %(exception)s\n\n%(tb)s") % {'exception':exception, 'tb':tb}, mimetype='text/plain') + return HttpResponse(_("Picture imported successfully")) + else: + return HttpResponse(_("Error importing file: %r") % import_form.errors) + + +@ssi_included +def picture_mini(request, pk, with_link=True): + picture = get_object_or_404(Picture, pk=pk) + author_str = ", ".join(tag.name + for tag in picture.tags.filter(category='author')) + return render(request, 'picture/picture_mini_box.html', { + 'picture': picture, + 'author_str': author_str, + 'with_link': with_link, + }) + + +@ssi_included +def picture_short(request, pk): + picture = get_object_or_404(Picture, pk=pk) + + return render(request, 'picture/picture_short.html', { + 'picture': picture, + 'main_link': picture.get_absolute_url(), + 'request': request, + 'tags': split_tags(picture.tags), + }) + + +@ssi_included +def picturearea_short(request, pk): + area = get_object_or_404(PictureArea, pk=pk) + theme = area.tags.filter(category='theme') + theme = theme and theme[0] or None + thing = area.tags.filter(category='thing') + thing = thing and thing[0] or None + return render(request, 'picture/picturearea_short.html', locals()) diff --git a/src/polls/__init__.py b/src/polls/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/polls/admin.py b/src/polls/admin.py new file mode 100644 index 000000000..235e8f3c2 --- /dev/null +++ b/src/polls/admin.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib import admin + +from .models import Poll, PollItem + + +class PollItemInline(admin.TabularInline): + model = PollItem + extra = 0 + readonly_fields = ('vote_count',) + + +class PollAdmin(admin.ModelAdmin): + inlines = [PollItemInline] + + +class PollItemAdmin(admin.ModelAdmin): + readonly_fields = ('vote_count',) + + +admin.site.register(Poll, PollAdmin) +admin.site.register(PollItem, PollItemAdmin) diff --git a/src/polls/forms.py b/src/polls/forms.py new file mode 100644 index 000000000..20d53fe33 --- /dev/null +++ b/src/polls/forms.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import forms + + +class PollForm(forms.Form): + vote = forms.ChoiceField(widget=forms.RadioSelect) + + def __init__(self, *args, **kwargs): + poll = kwargs.pop('poll', None) + super(PollForm, self).__init__(*args, **kwargs) + self.fields['vote'].choices = [(item.id, item.content) for item in poll.items.all()] diff --git a/src/polls/locale/pl/LC_MESSAGES/django.mo b/src/polls/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..b4fa6ec6b Binary files /dev/null and b/src/polls/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/polls/locale/pl/LC_MESSAGES/django.po b/src/polls/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..7334f63c4 --- /dev/null +++ b/src/polls/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,69 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" + +#: models.py:12 +msgid "question" +msgstr "Pytanie" + +#: models.py:13 +msgid "slug" +msgstr "slug" + +#: models.py:14 +msgid "open" +msgstr "otwarta" + +#: models.py:17 +msgid "Poll" +msgstr "Ankieta" + +#: models.py:18 +msgid "Polls" +msgstr "Ankiety" + +#: models.py:22 +msgid "Slug of an open poll needs to be unique" +msgstr "Slug otwartej ankiety musi byÄ unikalny" + +#: models.py:42 +msgid "content" +msgstr "treÅÄ" + +#: models.py:43 +msgid "vote count" +msgstr "licznik gÅosów" + +#: models.py:46 +msgid "vote item" +msgstr "Pozycja ankiety" + +#: models.py:47 +msgid "vote items" +msgstr "Pozycje ankiety" + +#: templates/polls/poll.html:11 +msgid "Thanks for voting! You can see current results below." +msgstr "" +"DziÄkujemy za oddanie gÅosu w ankiecie! Poniżej znajdujÄ siÄ bieÅ¼Ä ce wyniki." + +#: templates/polls/tags/poll.html:23 +msgid "Submit" +msgstr "WyÅlij" diff --git a/src/polls/migrations/0001_initial.py b/src/polls/migrations/0001_initial.py new file mode 100644 index 000000000..91c68aa00 --- /dev/null +++ b/src/polls/migrations/0001_initial.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Poll', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('question', models.TextField(verbose_name='question')), + ('slug', models.SlugField(verbose_name='Slug')), + ('open', models.BooleanField(default=False, verbose_name='open')), + ], + options={ + 'verbose_name': 'Poll', + 'verbose_name_plural': 'Polls', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='PollItem', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('content', models.TextField(verbose_name='content')), + ('vote_count', models.IntegerField(default=0, verbose_name='vote count')), + ('poll', models.ForeignKey(related_name=b'items', to='polls.Poll')), + ], + options={ + 'verbose_name': 'vote item', + 'verbose_name_plural': 'vote items', + }, + bases=(models.Model,), + ), + ] diff --git a/src/polls/migrations/0002_auto_20151221_1225.py b/src/polls/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..e75948893 --- /dev/null +++ b/src/polls/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('polls', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='poll', + name='slug', + field=models.SlugField(verbose_name='slug'), + ), + ] diff --git a/src/polls/migrations/__init__.py b/src/polls/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/polls/models.py b/src/polls/models.py new file mode 100644 index 000000000..8e356683e --- /dev/null +++ b/src/polls/models.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from django.core.exceptions import ValidationError +from django.core.urlresolvers import reverse + + +USED_POLLS_KEY = 'used_polls' + + +class Poll(models.Model): + + question = models.TextField(_('question')) + slug = models.SlugField(_('slug')) + open = models.BooleanField(_('open'), default=False) + + class Meta: + verbose_name = _('Poll') + verbose_name_plural = _('Polls') + + def clean(self): + if self.open and Poll.objects.exclude(pk=self.pk).filter(slug=self.slug).exists(): + raise ValidationError(_('Slug of an open poll needs to be unique')) + return super(Poll, self).clean() + + def __unicode__(self): + return self.question[:100] + ' (' + self.slug + ')' + + def get_absolute_url(self): + return reverse('poll', args=[self.slug]) + + @property + def vote_count(self): + return self.items.all().aggregate(models.Sum('vote_count'))['vote_count__sum'] + + def voted(self, session): + return self.id in session.get(USED_POLLS_KEY, []) + + +class PollItem(models.Model): + + poll = models.ForeignKey(Poll, related_name='items') + content = models.TextField(_('content')) + vote_count = models.IntegerField(_('vote count'), default=0) + + class Meta: + verbose_name = _('vote item') + verbose_name_plural = _('vote items') + + def __unicode__(self): + return self.content + ' @ ' + unicode(self.poll) + + @property + def vote_ratio(self): + return (float(self.vote_count) / self.poll.vote_count) * 100 if self.poll.vote_count else 0 + + def vote(self, session): + self.vote_count = self.vote_count + 1 + self.save() + session.setdefault(USED_POLLS_KEY, []).append(self.poll.id) + session.save() diff --git a/src/polls/templates/polls/poll.html b/src/polls/templates/polls/poll.html new file mode 100644 index 000000000..edb14cf7b --- /dev/null +++ b/src/polls/templates/polls/poll.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} +{% load i18n %} +{% load polls_tags %} + +{% block titleextra %}{{poll.question}}{% endblock %} + + +{% block body %} + <div class="normal-text"> + {% if voted_already %} + <p class="poll-msg">{% trans "Thanks for voting! You can see current results below." %}</p> + {% endif %} + {% poll poll %} + </div> +{% endblock %} \ No newline at end of file diff --git a/src/polls/templates/polls/tags/poll.html b/src/polls/templates/polls/tags/poll.html new file mode 100644 index 000000000..4c4d2b50d --- /dev/null +++ b/src/polls/templates/polls/tags/poll.html @@ -0,0 +1,28 @@ +{% load i18n %} +{% load ssi_csrf_token from ssify %} + +{% if poll %} + {% if voted_already %} + {% if show_results %} + <div class="poll"> + <p>{{poll.question}}</p> + <ul> + {% for item in poll.items.all %} + <li> + {{item.content}} + <div class="poll-bar"><div class="poll-bar-inner" style="width:{{item.vote_ratio|stringformat:"f"}}%;"></div> + </li> + {% endfor %} + </ul> + </div> + {% endif %} + {% else %} + <div class="poll"> + <p>{{poll.question}}</p> + <form action="{{poll.get_absolute_url}}" method="post">{% ssi_csrf_token %} + {{ form.vote }} + <input type="submit" value="{% trans "Submit" %}" /> + </form> + </div> + {% endif %} +{% endif %} \ No newline at end of file diff --git a/src/polls/templatetags/__init__.py b/src/polls/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/polls/templatetags/polls_tags.py b/src/polls/templatetags/polls_tags.py new file mode 100644 index 000000000..38619c108 --- /dev/null +++ b/src/polls/templatetags/polls_tags.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import template +from ..forms import PollForm + + +register = template.Library() + +@register.inclusion_tag('polls/tags/poll.html', takes_context=True) +def poll(context, poll, show_results=True, redirect_to=''): + form = None + voted_already = poll.voted(context.get('request').session) + if not voted_already: + form = PollForm(poll=poll, initial=dict(redirect_to=redirect_to)) + return dict(poll=poll, + form=form, + voted_already=voted_already, + vote_count=poll.vote_count, + show_results=show_results, + request=context.get('request'), + ) diff --git a/src/polls/urls.py b/src/polls/urls.py new file mode 100644 index 000000000..fcd0ac6b7 --- /dev/null +++ b/src/polls/urls.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url + + +urlpatterns = patterns('polls.views', + url(r'^(?P<slug>[^/]+)$', 'poll', name='poll'), +) diff --git a/src/polls/views.py b/src/polls/views.py new file mode 100644 index 000000000..79540c66a --- /dev/null +++ b/src/polls/views.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.core.urlresolvers import reverse +from django.shortcuts import get_object_or_404, redirect, render_to_response +from django.template import RequestContext +from django.views.decorators import cache +from django.views.decorators.http import require_http_methods + +from .models import Poll, PollItem +from .forms import PollForm + + +@cache.never_cache +@require_http_methods(['GET', 'POST']) +def poll(request, slug): + + poll = get_object_or_404(Poll, slug=slug, open=True) + + if request.method == 'POST': + redirect_to = reverse('poll', args = [slug]) + form = PollForm(request.POST, poll = poll) + if form.is_valid(): + if not poll.voted(request.session): + try: + poll_item = PollItem.objects.filter(pk=form.cleaned_data['vote'], poll=poll).get() + except PollItem.DoesNotExist: + pass + else: + poll_item.vote(request.session) + return redirect(redirect_to) + elif request.method == 'GET': + context = RequestContext(request) + context['poll'] = poll + context['voted_already'] = poll.voted(request.session) + return render_to_response('polls/poll.html', context) diff --git a/src/reporting/__init__.py b/src/reporting/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/reporting/locale/pl/LC_MESSAGES/django.mo b/src/reporting/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c09f3f0f1 Binary files /dev/null and b/src/reporting/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/reporting/locale/pl/LC_MESSAGES/django.po b/src/reporting/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..b811e0d91 --- /dev/null +++ b/src/reporting/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,23 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-01-27 16:40+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2)\n" + +#: templates/reporting/main.html:5 +msgid "Reports" +msgstr "Raporty" diff --git a/src/reporting/models.py b/src/reporting/models.py new file mode 100644 index 000000000..740b9276e --- /dev/null +++ b/src/reporting/models.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# + + +# import views here, so that signals are attached correctly +from reporting.views import catalogue_pdf diff --git a/src/reporting/templates/reporting/catalogue.csv b/src/reporting/templates/reporting/catalogue.csv new file mode 100755 index 000000000..eb2ebd982 --- /dev/null +++ b/src/reporting/templates/reporting/catalogue.csv @@ -0,0 +1 @@ +{% load catalogue_tags %}{% book_tree_texml "" orphans books_by_parent %}{% for author, group in books_by_author.items %}{% if group %}{% book_tree_csv author group books_by_parent %}{% endif %}{% endfor %} diff --git a/src/reporting/templates/reporting/catalogue.texml b/src/reporting/templates/reporting/catalogue.texml new file mode 100755 index 000000000..cb4a78f23 --- /dev/null +++ b/src/reporting/templates/reporting/catalogue.texml @@ -0,0 +1,118 @@ +{% load catalogue_tags %} +<TeXML xmlns="http://getfo.sourceforge.net/texml/ns1"> + <TeXML escape="0"> + \documentclass[a4paper, oneside, 11pt]{book} + +\usepackage[MeX]{polski} + +\usepackage[xetex]{graphicx} +\usepackage{xltxtra} +\usepackage{xunicode} + +\usepackage{scalefnt} +\usepackage[colorlinks=true,linkcolor=black,setpagesize=false,urlcolor=black,xetex]{hyperref} + +\usepackage{longtable} + +\setmainfont [ +%ExternalLocation, +UprightFont = JunicodeWL-Regular, +ItalicFont = JunicodeWL-Italic, +BoldFont = JunicodeWL-Regular, +BoldItalicFont = JunicodeWL-Italic, +SmallCapsFont = JunicodeWL-Regular, +SmallCapsFeatures = {Letters={SmallCaps,UppercaseSmallCaps}}, +Numbers=OldStyle, +Scale=1.04, +LetterSpace=-1.0 +] {JunicodeWL} + +\pagestyle{plain} +\usepackage{fancyhdr} + +\makeatletter + +\usepackage{color} +\definecolor{note}{gray}{.3} + +\setlength{\hoffset}{-1cm} +\setlength{\oddsidemargin}{0pt} +\setlength{\marginparsep}{0pt} +\setlength{\marginparwidth}{0pt} + +\setlength{\voffset}{0pt} +\setlength{\topmargin}{0pt} +\setlength{\headheight}{0pt} +\setlength{\headsep}{0pt} +\setlength{\leftmargin}{0em} +\setlength{\rightmargin}{0em} +\setlength{\textheight}{24cm} +\setlength{\textwidth}{17.5cm} + + +\pagestyle{fancy} +\fancyhf{} +\renewcommand{\headrulewidth}{0pt} +\renewcommand{\footrulewidth}{0pt} +\lfoot{\footnotesize Katalog biblioteki internetowej WolneLektury.pl, \today} +\cfoot{} +\rfoot{\footnotesize \thepage} + +\clubpenalty=100000 +\widowpenalty=100000 + + +% see http://osdir.com/ml/tex.xetex/2005-10/msg00003.html +\newsavebox{\ximagebox}\newlength{\ximageheight} +\newsavebox{\xglyphbox}\newlength{\xglyphheight} +\newcommand{\xbox}[1] +{\savebox{\ximagebox}{#1}\settoheight{\ximageheight}{\usebox {\ximagebox}}% +\savebox{\xglyphbox}{\char32}\settoheight{\xglyphheight}{\usebox {\xglyphbox}}% +\raisebox{\ximageheight}[0pt][0pt]{%\raisebox{-\xglyphheight}[0pt] [0pt]{% +\makebox[0pt][l]{\usebox{\xglyphbox}}}%}% +\usebox{\ximagebox}% +\raisebox{0pt}[0pt][0pt]{\makebox[0pt][r]{\usebox{\xglyphbox}}}} + + +\newcommand{\name}[1]{% +\\ +\Large{#1}% +} + +\newcommand{\note}[1]{% +\small{\color{note}{#1}}% +} + + +\begin{document} + + \noindent \begin{minipage}[t]{.35\textwidth}\vspace{0pt} + \href{http://www.wolnelektury.pl}{\xbox{\includegraphics[width=\textwidth]{wl-logo.png}}} + \end{minipage} + + \begin{minipage}[t]{.65\textwidth}\vspace{0pt} + \begin{flushright} + \section*{Katalog biblioteki internetowej + \href{http://www.wolnelektury.pl/}{WolneLektury.pl}.} + stan na \today + \end{flushright} + \end{minipage} + + \begin{longtable}{p{9.5cm} p{5.5cm}r p{2cm}} + + <TeXML escape="1"> + {% book_tree_texml orphans books_by_parent %} + {% for author, group in books_by_author.items %} + {% if group %} + <cmd name="name"><parm>{{ author }}</parm></cmd> + <ctrl ch='\' /> + + {% book_tree_texml group books_by_parent %} + {% endif %} + {% endfor %} + </TeXML> + + \end{longtable} + \end{document} + </TeXML> +</TeXML> \ No newline at end of file diff --git a/src/reporting/templates/reporting/main.html b/src/reporting/templates/reporting/main.html new file mode 100755 index 000000000..46d49c9ea --- /dev/null +++ b/src/reporting/templates/reporting/main.html @@ -0,0 +1,48 @@ +{% extends "base.html" %} +{% load i18n %} +{% load reporting_stats catalogue_tags %} + +{% block titleextra %}{% trans "Reports" %}{% endblock %} + +{% block bodyid %}reports-stats{% endblock %} + + +{% block body %} + <h1>Statystyka</h1> + + <div class="normal-text"> + + <h3>Audiobooki</h3> + + <table class="stats"> + <tr><th>Utwory</th></tr> + <tr><td>Utwory:</td><td>{% count_books %}</td></tr> + <tr><td>Niezależne ksiÄ Å¼ki:</td><td>{% count_books_root %}</td></tr> + <tr><td>Utwory nadrzÄdne:</td><td>{% count_books_parent %}</td></tr> + <tr><td>Wszystkie utwory:</td><td>{% count_books_all %}</td></tr> + + <tr><th>Media</th><th>Liczba</th><th>Rozmiar</th><th>Do wymiany</th></tr> + {% for mt in media_types %} + <tr><td>{{ mt.type }}:</td> + <td>{{ mt.count }}</td> + <td>{{ mt.size|filesizeformat }}</td> + <td>{{ mt.deprecated }} + {% for m in mt.deprecated_files %} + <br/><a href="{{ m.book.get_absolute_url }}">{% book_title m.book %}: {{ m }}</a> + {% endfor %} + </td> + </tr> + {% endfor %} + </table> + + <h3>Licencje</h3> + <ul> + {% for license, license_description in licenses %} + <li>{{ license }} ({{ license_description }})</li> + {% endfor %} + </ul> + + + </div> + +{% endblock %} diff --git a/src/reporting/templatetags/__init__.py b/src/reporting/templatetags/__init__.py new file mode 100755 index 000000000..e69de29bb diff --git a/src/reporting/templatetags/reporting_stats.py b/src/reporting/templatetags/reporting_stats.py new file mode 100755 index 000000000..7bbe23d03 --- /dev/null +++ b/src/reporting/templatetags/reporting_stats.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from functools import wraps +from django import template +from catalogue.models import Book + + +register = template.Library() + +class StatsNode(template.Node): + def __init__(self, value, varname=None): + self.value = value + self.varname = varname + + def render(self, context): + if self.varname: + context[self.varname] = self.value + return '' + else: + return self.value + + +def register_counter(f): + """Turns a simple counting function into a registered counter tag. + + You can run a counter tag as a simple {% tag_name %} tag, or + as {% tag_name var_name %} to store the result in a variable. + + """ + @wraps(f) + def wrapped(parser, token): + try: + tag_name, args = token.contents.split(None, 1) + except ValueError: + args = None + return StatsNode(f(), args) + + return register.tag(wrapped) + + +@register_counter +def count_books_all(): + return Book.objects.all().count() + +@register_counter +def count_books(): + return Book.objects.filter(children=None).count() + +@register_counter +def count_books_parent(): + return Book.objects.exclude(children=None).count() + +@register_counter +def count_books_root(): + return Book.objects.filter(parent=None).count() diff --git a/src/reporting/urls.py b/src/reporting/urls.py new file mode 100755 index 000000000..e78f961b2 --- /dev/null +++ b/src/reporting/urls.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url + + +urlpatterns = patterns('reporting.views', + url(r'^$', 'stats_page', name='reporting_stats'), + url(r'^katalog.pdf$', 'catalogue_pdf', name='reporting_catalogue_pdf'), + url(r'^katalog.csv$', 'catalogue_csv', name='reporting_catalogue_csv'), +) + diff --git a/src/reporting/utils.py b/src/reporting/utils.py new file mode 100755 index 000000000..8ecb9b045 --- /dev/null +++ b/src/reporting/utils.py @@ -0,0 +1,123 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from errno import ENOENT +import os +import os.path +from django.conf import settings +import logging +from django.http import HttpResponse + +logger = logging.getLogger(__name__) + + +def render_to_pdf(output_path, template, context=None, add_files=None): + """Renders a TeXML document into a PDF file. + + :param str output_path: is where the PDF file should go + :param str template: is a TeXML template path + :param context: is context for rendering the template + :param dict add_files: a dictionary of additional files XeTeX will need + """ + + from StringIO import StringIO + import shutil + from tempfile import mkdtemp + import subprocess + import Texml.processor + from django.template.loader import render_to_string + + rendered = render_to_string(template, context) + texml = StringIO(rendered.encode('utf-8')) + tempdir = mkdtemp(prefix="render_to_pdf-") + tex_path = os.path.join(tempdir, "doc.tex") + with open(tex_path, 'w') as tex_file: + Texml.processor.process(texml, tex_file, encoding="utf-8") + + if add_files: + for add_name, src_file in add_files.items(): + add_path = os.path.join(tempdir, add_name) + if hasattr(src_file, "read"): + with open(add_path, 'w') as add_file: + add_file.write(add_file.read()) + else: + shutil.copy(src_file, add_path) + + cwd = os.getcwd() + os.chdir(tempdir) + try: + subprocess.check_call(['xelatex', '-interaction=batchmode', tex_path], + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + try: + os.makedirs(os.path.dirname(output_path)) + except: + pass + shutil.move(os.path.join(tempdir, "doc.pdf"), output_path) + finally: + os.chdir(cwd) + shutil.rmtree(tempdir) + + +def render_to_csv(output_path, template, context=None, add_files=None): + """Renders a TeXML document into a PDF file. + + :param str output_path: is where the PDF file should go + :param str template: is a TeXML template path + :param context: is context for rendering the template + :param dict add_files: a dictionary of additional files XeTeX will need + """ + + from django.template.loader import render_to_string + + try: + os.makedirs(os.path.dirname(output_path)) + except: + pass + + rendered = render_to_string(template, context) + with open(output_path, 'w') as csv_file: + csv_file.write(rendered.encode('utf-8')) + + +def read_chunks(f, size=8192): + chunk = f.read(size) + while chunk: + yield chunk + chunk = f.read(size) + + +def generated_file_view(file_name, mime_type, send_name=None, signals=None): + file_path = os.path.join(settings.MEDIA_ROOT, file_name) + if send_name is None: + send_name = os.path.basename(file_name) + + def signal_handler(*args, **kwargs): + try: + os.unlink(file_path) + except OSError as oe: + if oe.errno != ENOENT: + raise oe + + if signals: + for signal in signals: + signal.connect(signal_handler, weak=False) + + def decorator(func): + def view(request, *args, **kwargs): + if not os.path.exists(file_path): + func(file_path, *args, **kwargs) + + if hasattr(send_name, "__call__"): + name = send_name() + else: + name = send_name + + response = HttpResponse(content_type=mime_type) + response['Content-Disposition'] = 'attachment; filename=%s' % name + with open(file_path) as f: + for chunk in read_chunks(f): + response.write(chunk) + return response + return view + return decorator diff --git a/src/reporting/views.py b/src/reporting/views.py new file mode 100644 index 000000000..8cb2715d5 --- /dev/null +++ b/src/reporting/views.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import os.path +from datetime import date +from django.conf import settings +from django.contrib.admin.views.decorators import staff_member_required +from django.db.models import Count +from django.shortcuts import render_to_response +from django.template import RequestContext + +from catalogue.models import Book, BookMedia +from reporting.utils import render_to_pdf, render_to_csv, generated_file_view + + +@staff_member_required +def stats_page(request): + media = BookMedia.objects.count() + media_types = BookMedia.objects.values('type').\ + annotate(count=Count('type')).\ + order_by('type') + for mt in media_types: + mt['size'] = sum(b.file.size for b in BookMedia.objects.filter(type=mt['type']).iterator()) + if mt['type'] in ('mp3', 'ogg'): + deprecated = BookMedia.objects.filter( + type=mt['type'], source_sha1=None) + mt['deprecated'] = deprecated.count() + mt['deprecated_files'] = deprecated.order_by('book', 'name') + else: + mt['deprecated'] = '-' + + licenses = set(((b.extra_info.get('license'), b.extra_info.get('license_description')) + for b in Book.objects.all().iterator() if b.extra_info.get('license'))) + + return render_to_response('reporting/main.html', + locals(), context_instance=RequestContext(request)) + + +@generated_file_view('reports/katalog.pdf', 'application/pdf', + send_name=lambda: 'wolnelektury_%s.pdf' % date.today(), + signals=[Book.published]) +def catalogue_pdf(path): + books_by_author, orphans, books_by_parent = Book.book_list() + render_to_pdf(path, 'reporting/catalogue.texml', locals(), { + "wl-logo.png": os.path.join(settings.STATIC_ROOT, "img/logo-big.png"), + }) + + +@generated_file_view('reports/katalog.csv', 'application/csv', + send_name=lambda: 'wolnelektury_%s.csv' % date.today(), + signals=[Book.published]) +def catalogue_csv(path): + books_by_author, orphans, books_by_parent = Book.book_list() + render_to_csv(path, 'reporting/catalogue.csv', locals()) diff --git a/src/search/__init__.py b/src/search/__init__.py new file mode 100644 index 000000000..d38412449 --- /dev/null +++ b/src/search/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# diff --git a/src/search/context_processors.py b/src/search/context_processors.py new file mode 100644 index 000000000..3cb9256c6 --- /dev/null +++ b/src/search/context_processors.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.core.urlresolvers import reverse +from search.forms import SearchForm + + +def search_form(request): + return { 'search_form': SearchForm(reverse('search.views.hint'), request.GET) } diff --git a/src/search/custom.py b/src/search/custom.py new file mode 100644 index 000000000..b3b704d0b --- /dev/null +++ b/src/search/custom.py @@ -0,0 +1,191 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from sunburnt import sunburnt +from lxml import etree +import urllib +import warnings +from sunburnt import search +import copy +from httplib2 import socket +import re + + +class TermVectorOptions(search.Options): + def __init__(self, schema, original=None): + self.schema = schema + if original is None: + self.fields = set() + self.positions = False + else: + self.fields = copy.copy(original.fields) + self.positions = copy.copy(original.positions) + + def update(self, positions=False, fields=None): + if fields is None: + fields = [] + if isinstance(fields, basestring): + fields = [fields] + self.schema.check_fields(fields, {"stored": True}) + self.fields.update(fields) + self.positions = positions + + def options(self): + opts = {} + if self.positions or self.fields: + opts['tv'] = 'true' + if self.positions: + opts['tv.positions'] = 'true' + if self.fields: + opts['tv.fl'] = ','.join(sorted(self.fields)) + return opts + + +class CustomSolrConnection(sunburnt.SolrConnection): + def __init__(self, *args, **kw): + super(CustomSolrConnection, self).__init__(*args, **kw) + self.analysis_url = self.url + "analysis/field/" + + def analyze(self, params): + qs = urllib.urlencode(params) + url = "%s?%s" % (self.analysis_url, qs) + if len(url) > self.max_length_get_url: + warnings.warn("Long query URL encountered - POSTing instead of " + "GETting. This query will not be cached at the HTTP layer") + url = self.analysis_url + kwargs = dict( + method="POST", + body=qs, + headers={"Content-Type": "application/x-www-form-urlencoded"}, + ) + else: + kwargs = dict(method="GET") + r, c = self.request(url, **kwargs) + if r.status != 200: + raise sunburnt.SolrError(r, c) + return c + + +# monkey patching sunburnt SolrSearch +search.SolrSearch.option_modules += ('term_vectorer',) + + +def __term_vector(self, positions=False, fields=None): + newself = self.clone() + newself.term_vectorer.update(positions, fields) + return newself +setattr(search.SolrSearch, 'term_vector', __term_vector) + + +def __patched__init_common_modules(self): + __original__init_common_modules(self) + self.term_vectorer = TermVectorOptions(self.schema) +__original__init_common_modules = search.SolrSearch._init_common_modules +setattr(search.SolrSearch, '_init_common_modules', __patched__init_common_modules) + + +class CustomSolrInterface(sunburnt.SolrInterface): + # just copied from parent and SolrConnection -> CustomSolrConnection + def __init__(self, url, schemadoc=None, http_connection=None, mode='', retry_timeout=-1, max_length_get_url=sunburnt.MAX_LENGTH_GET_URL): + self.conn = CustomSolrConnection(url, http_connection, retry_timeout, max_length_get_url) + self.schemadoc = schemadoc + if 'w' not in mode: + self.writeable = False + elif 'r' not in mode: + self.readable = False + try: + self.init_schema() + except socket.error, e: + raise socket.error, "Cannot connect to Solr server, and search indexing is enabled (%s)" % str(e) + + def _analyze(self, **kwargs): + if not self.readable: + raise TypeError("This Solr instance is only for writing") + args = { + 'analysis_showmatch': True + } + if 'field' in kwargs: args['analysis_fieldname'] = kwargs['field'] + if 'text' in kwargs: args['analysis_fieldvalue'] = kwargs['text'] + if 'q' in kwargs: args['q'] = kwargs['q'] + if 'query' in kwargs: args['q'] = kwargs['q'] + + params = map(lambda (k, v): (k.replace('_', '.'), v), sunburnt.params_from_dict(**args)) + + content = self.conn.analyze(params) + doc = etree.fromstring(content) + return doc + + def highlight(self, **kwargs): + doc = self._analyze(**kwargs) + analyzed = doc.xpath("//lst[@name='index']/arr[last()]/lst[bool/@name='match']") + matches = set() + for wrd in analyzed: + start = int(wrd.xpath("int[@name='start']")[0].text) + end = int(wrd.xpath("int[@name='end']")[0].text) + matches.add((start, end)) + + if matches: + return self.substring(kwargs['text'], matches, + margins=kwargs.get('margins', 30), + mark=kwargs.get('mark', ("<b>", "</b>"))) + else: + return None + + def analyze(self, **kwargs): + doc = self._analyze(**kwargs) + terms = doc.xpath("//lst[@name='index']/arr[last()]/lst/str[1]") + terms = map(lambda n: unicode(n.text), terms) + return terms + + def expand_margins(self, text, start, end): + totlen = len(text) + + def is_boundary(x): + ws = re.compile(r"\W", re.UNICODE) + return bool(ws.match(x)) + + while start > 0: + if is_boundary(text[start - 1]): + break + start -= 1 + + while end < totlen - 1: + if is_boundary(text[end + 1]): + break + end += 1 + + return (start, end) + + def substring(self, text, matches, margins=30, mark=("<b>", "</b>")): + start = None + end = None + totlen = len(text) + matches_margins = map(lambda (s, e): + ((s, e), + (max(0, s - margins), min(totlen, e + margins))), + matches) + matches_margins = map(lambda (m, (s, e)): + (m, self.expand_margins(text, s, e)), + matches_margins) + + # lets start with first match + (start, end) = matches_margins[0][1] + matches = [matches_margins[0][0]] + + for (m, (s, e)) in matches_margins[1:]: + if end < s or start > e: + continue + start = min(start, s) + end = max(end, e) + matches.append(m) + + snip = text[start:end] + matches.sort(lambda a, b: cmp(b[0], a[0])) + + for (s, e) in matches: + off = - start + snip = snip[:e + off] + mark[1] + snip[e + off:] + snip = snip[:s + off] + mark[0] + snip[s + off:] + + return snip diff --git a/src/search/fields.py b/src/search/fields.py new file mode 100755 index 000000000..45d8b7ecf --- /dev/null +++ b/src/search/fields.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import forms +from django.forms.widgets import flatatt +from django.utils.encoding import smart_unicode +from django.utils.safestring import mark_safe +from json import dumps + + +class JQueryAutoCompleteWidget(forms.TextInput): + def __init__(self, options, *args, **kwargs): + self.options = dumps(options) + super(JQueryAutoCompleteWidget, self).__init__(*args, **kwargs) + + def render_js(self, field_id, options): + return u'$(\'#%s\').autocomplete(%s).result(autocomplete_result_handler);' % (field_id, options) + + def render(self, name, value=None, attrs=None): + final_attrs = self.build_attrs(attrs, name=name) + if value: + final_attrs['value'] = smart_unicode(value) + + if not self.attrs.has_key('id'): + final_attrs['id'] = 'id_%s' % name + + html = u'''<input type="text" %(attrs)s/> + <script type="text/javascript">//<!-- + %(js)s//--></script> + ''' % { + 'attrs': flatatt(final_attrs), + 'js' : self.render_js(final_attrs['id'], self.options), + } + + return mark_safe(html) + + +class JQueryAutoCompleteSearchWidget(JQueryAutoCompleteWidget): + def __init__(self, *args, **kwargs): + super(JQueryAutoCompleteSearchWidget, self).__init__(*args, **kwargs) + + def render_js(self, field_id, options): + return u"" + + +class JQueryAutoCompleteField(forms.CharField): + def __init__(self, source, options={}, *args, **kwargs): + if 'widget' not in kwargs: + options['source'] = source + kwargs['widget'] = JQueryAutoCompleteWidget(options) + + super(JQueryAutoCompleteField, self).__init__(*args, **kwargs) + + +class JQueryAutoCompleteSearchField(forms.CharField): + def __init__(self, options={}, *args, **kwargs): + if 'widget' not in kwargs: + kwargs['widget'] = JQueryAutoCompleteSearchWidget(options) + + super(JQueryAutoCompleteSearchField, self).__init__(*args, **kwargs) diff --git a/src/search/forms.py b/src/search/forms.py new file mode 100755 index 000000000..9e0a07880 --- /dev/null +++ b/src/search/forms.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import forms +from django.utils.translation import ugettext_lazy as _ + +from search.fields import JQueryAutoCompleteSearchField + + +class SearchForm(forms.Form): + q = JQueryAutoCompleteSearchField(label=_('Search')) # {'minChars': 2, 'selectFirst': True, 'cacheLength': 50, 'matchContains': "word"}) + + def __init__(self, source, *args, **kwargs): + kwargs['auto_id'] = False + super(SearchForm, self).__init__(*args, **kwargs) + self.fields['q'].widget.attrs['id'] = 'search' + self.fields['q'].widget.attrs['autocomplete'] = 'off' + self.fields['q'].widget.attrs['data-source'] = source + if not 'q' in self.data: + self.fields['q'].widget.attrs['placeholder'] = _('title, author, theme/topic, epoch, kind, genre, phrase') diff --git a/src/search/index.py b/src/search/index.py new file mode 100644 index 000000000..31417ca87 --- /dev/null +++ b/src/search/index.py @@ -0,0 +1,946 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings + +import os +import re +import errno +from librarian import dcparser +from librarian.parser import WLDocument +from lxml import etree +import catalogue.models +from pdcounter.models import Author as PDCounterAuthor, BookStub as PDCounterBook +from itertools import chain +import traceback +import logging +log = logging.getLogger('search') +import sunburnt +import custom +import operator + +log = logging.getLogger('search') + +class SolrIndex(object): + def __init__(self, mode=None): + self.index = custom.CustomSolrInterface(settings.SOLR, mode=mode) + + +class Snippets(object): + """ + This class manages snippet files for indexed object (book) + the snippets are concatenated together, and their positions and + lengths are kept in lucene index fields. + """ + SNIPPET_DIR = "snippets" + + def __init__(self, book_id, revision=None): + try: + os.makedirs(os.path.join(settings.SEARCH_INDEX, self.SNIPPET_DIR)) + except OSError as exc: + if exc.errno == errno.EEXIST: + pass + else: raise + self.book_id = book_id + self.revision = revision + self.file = None + + @property + def path(self): + if self.revision: fn = "%d.%d" % (self.book_id, self.revision) + else: fn = "%d" % self.book_id + + return os.path.join(settings.SEARCH_INDEX, self.SNIPPET_DIR, fn) + + def open(self, mode='r'): + """ + Open the snippet file. Call .close() afterwards. + """ + if not 'b' in mode: + mode += 'b' + + if 'w' in mode: + if os.path.exists(self.path): + self.revision = 1 + while True: + if not os.path.exists(self.path): + break + self.revision += 1 + + self.file = open(self.path, mode) + self.position = 0 + return self + + def add(self, snippet): + """ + Append a snippet (unicode) to the snippet file. + Return a (position, length) tuple + """ + txt = snippet.encode('utf-8') + l = len(txt) + self.file.write(txt) + pos = (self.position, l) + self.position += l + return pos + + def get(self, pos): + """ + Given a tuple of (position, length) return an unicode + of the snippet stored there. + """ + self.file.seek(pos[0], 0) + txt = self.file.read(pos[1]).decode('utf-8') + return txt + + def close(self): + """Close snippet file""" + if self.file: + self.file.close() + + def remove(self): + self.revision = None + try: + os.unlink(self.path) + self.revision = 0 + while True: + self.revision += 1 + os.unlink(self.path) + except OSError: + pass + + +class Index(SolrIndex): + """ + Class indexing books. + """ + def __init__(self): + super(Index, self).__init__(mode='rw') + + def delete_query(self, *queries): + """ + index.delete(queries=...) doesn't work, so let's reimplement it + using deletion of list of uids. + """ + uids = set() + for q in queries: + if isinstance(q, sunburnt.search.LuceneQuery): + q = self.index.query(q) + q.field_limiter.update(['uid']) + st = 0 + rows = 100 + while True: + ids = q.paginate(start=st, rows=rows).execute() + if not len(ids): + break + for res in ids: + uids.add(res['uid']) + st += rows + if uids: + self.index.delete(uids) + return True + else: + return False + + def index_tags(self, *tags, **kw): + """ + Re-index global tag list. + Removes all tags from index, then index them again. + Indexed fields include: id, name (with and without polish stems), category + """ + log.debug("Indexing tags") + remove_only = kw.get('remove_only', False) + # first, remove tags from index. + if tags: + tag_qs = [] + for tag in tags: + q_id = self.index.Q(tag_id=tag.id) + + if isinstance(tag, PDCounterAuthor): + q_cat = self.index.Q(tag_category='pd_author') + elif isinstance(tag, PDCounterBook): + q_cat = self.index.Q(tag_category='pd_book') + else: + q_cat = self.index.Q(tag_category=tag.category) + + q_id_cat = self.index.Q(q_id & q_cat) + tag_qs.append(q_id_cat) + self.delete_query(*tag_qs) + else: # all + q = self.index.Q(tag_id__any=True) + self.delete_query(q) + + if not remove_only: + # then add them [all or just one passed] + if not tags: + tags = chain(catalogue.models.Tag.objects.exclude(category='set'), \ + PDCounterAuthor.objects.all(), \ + PDCounterBook.objects.all()) + + for tag in tags: + if isinstance(tag, PDCounterAuthor): + doc = { + "tag_id": int(tag.id), + "tag_name": tag.name, + "tag_name_pl": tag.name, + "tag_category": 'pd_author', + "is_pdcounter": True, + "uid": "tag%d_pd_a" % tag.id + } + elif isinstance(tag, PDCounterBook): + doc = { + "tag_id": int(tag.id), + "tag_name": tag.title, + "tag_name_pl": tag.title, + "tag_category": 'pd_book', + "is_pdcounter": True, + "uid": "tag%d_pd_b" % tag.id + } + else: + doc = { + "tag_id": int(tag.id), + "tag_name": tag.name, + "tag_name_pl": tag.name, + "tag_category": tag.category, + "is_pdcounter": False, + "uid": "tag%d" % tag.id + } + self.index.add(doc) + + def create_book_doc(self, book): + """ + Create a lucene document referring book id. + """ + doc = { + 'book_id': int(book.id), + } + if book.parent is not None: + doc["parent_id"] = int(book.parent.id) + return doc + + def remove_book(self, book_or_id, remove_snippets=True): + """Removes a book from search index. + book - Book instance.""" + if isinstance(book_or_id, catalogue.models.Book): + book_id = book_or_id.id + else: + book_id = book_or_id + + self.delete_query(self.index.Q(book_id=book_id)) + + if remove_snippets: + snippets = Snippets(book_id) + snippets.remove() + + def index_book(self, book, book_info=None, overwrite=True): + """ + Indexes the book. + Creates a lucene document for extracted metadata + and calls self.index_content() to index the contents of the book. + """ + if overwrite: + # we don't remove snippets, since they might be still needed by + # threads using not reopened index + self.remove_book(book, remove_snippets=False) + + book_doc = self.create_book_doc(book) + meta_fields = self.extract_metadata(book, book_info, dc_only=['source_name', 'authors', 'translators', 'title']) + # let's not index it - it's only used for extracting publish date + if 'source_name' in meta_fields: + del meta_fields['source_name'] + + for n, f in meta_fields.items(): + book_doc[n] = f + + book_doc['uid'] = "book%s" % book_doc['book_id'] + self.index.add(book_doc) + del book_doc + book_fields = { + 'title': meta_fields['title'], + 'authors': meta_fields['authors'], + 'published_date': meta_fields['published_date'] + } + + if 'translators' in meta_fields: + book_fields['translators'] = meta_fields['translators'] + + self.index_content(book, book_fields=book_fields) + + master_tags = [ + 'opowiadanie', + 'powiesc', + 'dramat_wierszowany_l', + 'dramat_wierszowany_lp', + 'dramat_wspolczesny', 'liryka_l', 'liryka_lp', + 'wywiad', + ] + + ignore_content_tags = [ + 'uwaga', 'extra', + 'zastepnik_tekstu', 'sekcja_asterysk', 'separator_linia', 'zastepnik_wersu', + 'didaskalia', + 'naglowek_aktu', 'naglowek_sceny', 'naglowek_czesc', + ] + + footnote_tags = ['pa', 'pt', 'pr', 'pe'] + + skip_header_tags = ['autor_utworu', 'nazwa_utworu', 'dzielo_nadrzedne', '{http://www.w3.org/1999/02/22-rdf-syntax-ns#}RDF'] + + published_date_re = re.compile("([0-9]+)[\]. ]*$") + + def extract_metadata(self, book, book_info=None, dc_only=None): + """ + Extract metadata from book and returns a map of fields keyed by fieldname + """ + fields = {} + + if book_info is None: + book_info = dcparser.parse(open(book.xml_file.path)) + + fields['slug'] = book.slug + fields['tags'] = [t.name for t in book.tags] + fields['is_book'] = True + + # validator, name + for field in dcparser.BookInfo.FIELDS: + if dc_only and field.name not in dc_only: + continue + if hasattr(book_info, field.name): + if not getattr(book_info, field.name): + continue + # since no type information is available, we use validator + type_indicator = field.validator + if type_indicator == dcparser.as_unicode: + s = getattr(book_info, field.name) + if field.multiple: + s = ', '.join(s) + fields[field.name] = s + elif type_indicator == dcparser.as_person: + p = getattr(book_info, field.name) + if isinstance(p, dcparser.Person): + persons = unicode(p) + else: + persons = ', '.join(map(unicode, p)) + fields[field.name] = persons + elif type_indicator == dcparser.as_date: + dt = getattr(book_info, field.name) + fields[field.name] = dt + + # get published date + pd = None + if hasattr(book_info, 'source_name') and book_info.source_name: + match = self.published_date_re.search(book_info.source_name) + if match is not None: + pd = str(match.groups()[0]) + if not pd: pd = "" + fields["published_date"] = pd + + return fields + + # def add_gaps(self, fields, fieldname): + # """ + # Interposes a list of fields with gap-fields, which are indexed spaces and returns it. + # This allows for doing phrase queries which do not overlap the gaps (when slop is 0). + # """ + # def gap(): + # while True: + # yield Field(fieldname, ' ', Field.Store.NO, Field.Index.NOT_ANALYZED) + # return reduce(lambda a, b: a + b, zip(fields, gap()))[0:-1] + + def get_master(self, root): + """ + Returns the first master tag from an etree. + """ + for master in root.iter(): + if master.tag in self.master_tags: + return master + + def index_content(self, book, book_fields={}): + """ + Walks the book XML and extract content from it. + Adds parts for each header tag and for each fragment. + """ + wld = WLDocument.from_file(book.xml_file.path, parse_dublincore=False) + root = wld.edoc.getroot() + + master = self.get_master(root) + if master is None: + return [] + + def walker(node, ignore_tags=[]): + + if node.tag not in ignore_tags: + yield node, None, None + if node.text is not None: + yield None, node.text, None + for child in list(node): + for b, t, e in walker(child): + yield b, t, e + yield None, None, node + + if node.tail is not None: + yield None, node.tail, None + return + + def fix_format(text): + # separator = [u" ", u"\t", u".", u";", u","] + if isinstance(text, list): + # need to join it first + text = filter(lambda s: s is not None, content) + text = u' '.join(text) + # for i in range(len(text)): + # if i > 0: + # if text[i][0] not in separator\ + # and text[i - 1][-1] not in separator: + # text.insert(i, u" ") + + return re.sub("(?m)/$", "", text) + + def add_part(snippets, **fields): + doc = self.create_book_doc(book) + for n, v in book_fields.items(): + doc[n] = v + + doc['header_index'] = fields["header_index"] + doc['header_span'] = 'header_span' in fields and fields['header_span'] or 1 + doc['header_type'] = fields['header_type'] + + doc['text'] = fields['text'] + + # snippets + snip_pos = snippets.add(fields["text"]) + + doc['snippets_position'] = snip_pos[0] + doc['snippets_length'] = snip_pos[1] + if snippets.revision: + doc["snippets_revision"] = snippets.revision + + if 'fragment_anchor' in fields: + doc["fragment_anchor"] = fields['fragment_anchor'] + + if 'themes' in fields: + doc['themes'] = fields['themes'] + doc['uid'] = "part%s%s%s" % (doc['header_index'], + doc['header_span'], + doc.get('fragment_anchor', '')) + return doc + + def give_me_utf8(s): + if isinstance(s, unicode): + return s.encode('utf-8') + else: + return s + + fragments = {} + snippets = Snippets(book.id).open('w') + try: + for header, position in zip(list(master), range(len(master))): + + if header.tag in self.skip_header_tags: + continue + if header.tag is etree.Comment: + continue + + # section content + content = [] + footnote = [] + + def all_content(text): + for frag in fragments.values(): + frag['text'].append(text) + content.append(text) + handle_text = [all_content] + + for start, text, end in walker(header, ignore_tags=self.ignore_content_tags): + # handle footnotes + if start is not None and start.tag in self.footnote_tags: + footnote = [] + + def collect_footnote(t): + footnote.append(t) + + handle_text.append(collect_footnote) + elif end is not None and footnote is not [] and end.tag in self.footnote_tags: + handle_text.pop() + doc = add_part(snippets, header_index=position, header_type=header.tag, + text=u''.join(footnote), + is_footnote=True) + self.index.add(doc) + footnote = [] + + # handle fragments and themes. + if start is not None and start.tag == 'begin': + fid = start.attrib['id'][1:] + fragments[fid] = {'text': [], 'themes': [], 'start_section': position, 'start_header': header.tag} + + # themes for this fragment + elif start is not None and start.tag == 'motyw': + fid = start.attrib['id'][1:] + handle_text.append(None) + if start.text is not None: + fragments[fid]['themes'] += map(unicode.strip, map(unicode, (start.text.split(',')))) + elif end is not None and end.tag == 'motyw': + handle_text.pop() + + elif start is not None and start.tag == 'end': + fid = start.attrib['id'][1:] + if fid not in fragments: + continue # a broken <end> node, skip it + frag = fragments[fid] + if frag['themes'] == []: + continue # empty themes list. + del fragments[fid] + + doc = add_part(snippets, + header_type=frag['start_header'], + header_index=frag['start_section'], + header_span=position - frag['start_section'] + 1, + fragment_anchor=fid, + text=fix_format(frag['text']), + themes=frag['themes']) + self.index.add(doc) + + # Collect content. + + if text is not None and handle_text is not []: + hdl = handle_text[-1] + if hdl is not None: + hdl(text) + + # in the end, add a section text. + doc = add_part(snippets, header_index=position, + header_type=header.tag, text=fix_format(content)) + + self.index.add(doc) + + finally: + snippets.close() + + +class SearchResult(object): + def __init__(self, doc, how_found=None, query=None, query_terms=None): + # self.search = search + self.boost = 1.0 + self._hits = [] + self._processed_hits = None # processed hits + self.snippets = [] + self.query_terms = query_terms + + if 'score' in doc: + self._score = doc['score'] + else: + self._score = 0 + + self.book_id = int(doc["book_id"]) + + try: + self.published_date = int(doc.get("published_date")) + except ValueError: + self.published_date = 0 + + # content hits + header_type = doc.get("header_type", None) + # we have a content hit in some header of fragment + if header_type is not None: + sec = (header_type, int(doc["header_index"])) + header_span = doc['header_span'] + header_span = header_span is not None and int(header_span) or 1 + fragment = doc.get("fragment_anchor", None) + snippets_pos = (doc['snippets_position'], doc['snippets_length']) + snippets_rev = doc.get('snippets_revision', None) + + hit = (sec + (header_span,), fragment, self._score, { + 'how_found': how_found, + 'snippets_pos': snippets_pos, + 'snippets_revision': snippets_rev, + 'themes': doc.get('themes', []), + 'themes_pl': doc.get('themes_pl', []) + }) + + self._hits.append(hit) + + def __unicode__(self): + return u"<SR id=%d %d(%d) hits score=%f %d snippets>" % \ + (self.book_id, len(self._hits), self._processed_hits and len(self._processed_hits) or -1, self._score, len(self.snippets)) + + def __str__(self): + return unicode(self).encode('utf-8') + + @property + def score(self): + return self._score * self.boost + + def merge(self, other): + if self.book_id != other.book_id: + raise ValueError("this search result is or book %d; tried to merge with %d" % (self.book_id, other.book_id)) + self._hits += other._hits + if other.score > self.score: + self._score = other._score + return self + + def get_book(self): + if hasattr(self, '_book'): + return self._book + self._book = catalogue.models.Book.objects.get(id=self.book_id) + return self._book + + book = property(get_book) + + POSITION = 0 + FRAGMENT = 1 + POSITION_INDEX = 1 + POSITION_SPAN = 2 + SCORE = 2 + OTHER = 3 + + @property + def hits(self): + if self._processed_hits is not None: + return self._processed_hits + + # to sections and fragments + frags = filter(lambda r: r[self.FRAGMENT] is not None, self._hits) + + sect = filter(lambda r: r[self.FRAGMENT] is None, self._hits) + + # sections not covered by fragments + sect = filter(lambda s: 0 == len(filter( + lambda f: s[self.POSITION][self.POSITION_INDEX] >= f[self.POSITION][self.POSITION_INDEX] + and s[self.POSITION][self.POSITION_INDEX] < f[self.POSITION][self.POSITION_INDEX] + f[self.POSITION][self.POSITION_SPAN], + frags)), sect) + + hits = [] + + def remove_duplicates(lst, keyfn, compare): + els = {} + for e in lst: + eif = keyfn(e) + if eif in els: + if compare(els[eif], e) >= 1: + continue + els[eif] = e + return els.values() + + # remove fragments with duplicated fid's and duplicated snippets + frags = remove_duplicates(frags, lambda f: f[self.FRAGMENT], lambda a, b: cmp(a[self.SCORE], b[self.SCORE])) + # frags = remove_duplicates(frags, lambda f: f[OTHER]['snippet_pos'] and f[OTHER]['snippet_pos'] or f[FRAGMENT], + # lambda a, b: cmp(a[SCORE], b[SCORE])) + + # remove duplicate sections + sections = {} + + for s in sect: + si = s[self.POSITION][self.POSITION_INDEX] + # skip existing + if si in sections: + if sections[si]['score'] >= s[self.SCORE]: + continue + + m = {'score': s[self.SCORE], + 'section_number': s[self.POSITION][self.POSITION_INDEX] + 1, + } + m.update(s[self.OTHER]) + sections[si] = m + + hits = sections.values() + + for f in frags: + try: + frag = catalogue.models.Fragment.objects.get(anchor=f[self.FRAGMENT], book__id=self.book_id) + except catalogue.models.Fragment.DoesNotExist: + # stale index + continue + # Figure out if we were searching for a token matching some word in theme name. + themes = frag.tags.filter(category='theme') + themes_hit = set() + if self.query_terms is not None: + for i in range(0, len(f[self.OTHER]['themes'])): + tms = f[self.OTHER]['themes'][i].split(r' +') + f[self.OTHER]['themes_pl'][i].split(' ') + tms = map(unicode.lower, tms) + for qt in self.query_terms: + if qt in tms: + themes_hit.add(f[self.OTHER]['themes'][i]) + break + + def theme_by_name(n): + th = filter(lambda t: t.name == n, themes) + if th: + return th[0] + else: + return None + themes_hit = filter(lambda a: a is not None, map(theme_by_name, themes_hit)) + + m = {'score': f[self.SCORE], + 'fragment': frag, + 'section_number': f[self.POSITION][self.POSITION_INDEX] + 1, + 'themes': themes, + 'themes_hit': themes_hit + } + m.update(f[self.OTHER]) + hits.append(m) + + hits.sort(lambda a, b: cmp(a['score'], b['score']), reverse=True) + + self._processed_hits = hits + + return hits + + @staticmethod + def aggregate(*result_lists): + books = {} + for rl in result_lists: + for r in rl: + if r.book_id in books: + books[r.book_id].merge(r) + else: + books[r.book_id] = r + return books.values() + + def __cmp__(self, other): + c = cmp(self.score, other.score) + if c == 0: + # this is inverted, because earlier date is better + return cmp(other.published_date, self.published_date) + else: + return c + + def __len__(self): + return len(self.hits) + + def snippet_pos(self, idx=0): + return self.hits[idx]['snippets_pos'] + + def snippet_revision(self, idx=0): + try: + return self.hits[idx]['snippets_revision'] + except: + return None + + +class Search(SolrIndex): + """ + Search facilities. + """ + def __init__(self, default_field="text"): + super(Search, self).__init__(mode='r') + + + def make_term_query(self, query, field='text', modal=operator.or_): + """ + Returns term queries joined by boolean query. + modal - applies to boolean query + fuzzy - should the query by fuzzy. + """ + if query is None: query = '' + q = self.index.Q() + q = reduce(modal, map(lambda s: self.index.Q(**{field: s}), + query.split(r" ")), q) + + return q + + def search_phrase(self, searched, field='text', book=False, + filters=None, + snippets=False): + if filters is None: filters = [] + if book: filters.append(self.index.Q(is_book=True)) + + q = self.index.query(**{field: searched}) + q = self.apply_filters(q, filters).field_limit(score=True, all_fields=True) + res = q.execute() + return [SearchResult(found, how_found=u'search_phrase') for found in res] + + def search_some(self, searched, fields, book=True, + filters=None, snippets=True, query_terms=None): + assert isinstance(fields, list) + if filters is None: filters = [] + if book: filters.append(self.index.Q(is_book=True)) + + query = self.index.Q() + + for fld in fields: + query = self.index.Q(query | self.make_term_query(searched, fld)) + + query = self.index.query(query) + query = self.apply_filters(query, filters).field_limit(score=True, all_fields=True) + res = query.execute() + return [SearchResult(found, how_found='search_some', query_terms=query_terms) for found in res] + + + def search_everywhere(self, searched, query_terms=None): + """ + Tries to use search terms to match different fields of book (or its parts). + E.g. one word can be an author survey, another be a part of the title, and the rest + are some words from third chapter. + """ + books = [] + # content only query : themes x content + q = self.make_term_query(searched, 'text') + q_themes = self.make_term_query(searched, 'themes_pl') + + query = self.index.query(q).query(q_themes).field_limit(score=True, all_fields=True) + res = query.execute() + + for found in res: + books.append(SearchResult(found, how_found='search_everywhere_themesXcontent', query_terms=query_terms)) + + # query themes/content x author/title/tags + in_content = self.index.Q() + in_meta = self.index.Q() + + for fld in ['themes_pl', 'text']: + in_content |= self.make_term_query(searched, field=fld) + + for fld in ['tags', 'authors', 'title']: + in_meta |= self.make_term_query(searched, field=fld) + + q = in_content & in_meta + res = self.index.query(q).field_limit(score=True, all_fields=True).execute() + + for found in res: + books.append(SearchResult(found, how_found='search_everywhere', query_terms=query_terms)) + + return books + + def get_snippets(self, searchresult, query, field='text', num=1): + """ + Returns a snippet for found scoreDoc. + """ + maxnum = len(searchresult) + if num is None or num < 0 or num > maxnum: + num = maxnum + book_id = searchresult.book_id + revision = searchresult.snippet_revision() + snippets = Snippets(book_id, revision=revision) + snips = [None] * maxnum + try: + snippets.open() + idx = 0 + while idx < maxnum and num > 0: + position, length = searchresult.snippet_pos(idx) + if position is None or length is None: + continue + text = snippets.get((int(position), + int(length))) + snip = self.index.highlight(text=text, field=field, q=query) + snips[idx] = snip + if snip: + num -= 1 + idx += 1 + + except IOError, e: + log.error("Cannot open snippet file for book id = %d [rev=%s], %s" % (book_id, revision, e)) + return [] + finally: + snippets.close() + + # remove verse end markers.. + snips = map(lambda s: s and s.replace("/\n", "\n"), snips) + + searchresult.snippets = snips + + return snips + + def hint_tags(self, query, pdcounter=True, prefix=True): + """ + Return auto-complete hints for tags + using prefix search. + """ + q = self.index.Q() + query = query.strip() + for field in ['tag_name', 'tag_name_pl']: + if prefix: + q |= self.index.Q(**{field: query + "*"}) + else: + q |= self.make_term_query(query, field=field) + qu = self.index.query(q) + + return self.search_tags(qu, pdcounter=pdcounter) + + def search_tags(self, query, filters=None, pdcounter=False): + """ + Search for Tag objects using query. + """ + if not filters: filters = [] + if not pdcounter: + filters.append(~self.index.Q(is_pdcounter=True)) + res = self.apply_filters(query, filters).execute() + + tags = [] + pd_tags = [] + + for doc in res: + is_pdcounter = doc.get('is_pdcounter', False) + category = doc.get('tag_category') + try: + if is_pdcounter == True: + if category == 'pd_author': + tag = PDCounterAuthor.objects.get(id=doc.get('tag_id')) + elif category == 'pd_book': + tag = PDCounterBook.objects.get(id=doc.get('tag_id')) + tag.category = 'pd_book' # make it look more lik a tag. + else: + print ("Warning. cannot get pdcounter tag_id=%d from db; cat=%s" % (int(doc.get('tag_id')), category)).encode('utf-8') + pd_tags.append(tag) + else: + tag = catalogue.models.Tag.objects.get(id=doc.get("tag_id")) + tags.append(tag) + + except catalogue.models.Tag.DoesNotExist: pass + except PDCounterAuthor.DoesNotExist: pass + except PDCounterBook.DoesNotExist: pass + + tags_slugs = set(map(lambda t: t.slug, tags)) + tags = tags + filter(lambda t: not t.slug in tags_slugs, pd_tags) + + log.debug('search_tags: %s' % tags) + + return tags + + def hint_books(self, query, prefix=True): + """ + Returns auto-complete hints for book titles + Because we do not index 'pseudo' title-tags. + Prefix search. + """ + q = self.index.Q() + query = query.strip() + if prefix: + q |= self.index.Q(title=query + "*") + else: + q |= self.make_term_query(query, field='title') + qu = self.index.query(q) + only_books = self.index.Q(is_book=True) + return self.search_books(qu, [only_books]) + + def search_books(self, query, filters=None, max_results=10): + """ + Searches for Book objects using query + """ + bks = [] + bks_found = set() + query = query.query(is_book=True) + res = self.apply_filters(query, filters).field_limit(['book_id']) + for r in res: + try: + bid = r['book_id'] + if not bid in bks_found: + bks.append(catalogue.models.Book.objects.get(id=bid)) + bks_found.add(bid) + except catalogue.models.Book.DoesNotExist: pass + return bks + + + @staticmethod + def apply_filters(query, filters): + """ + Apply filters to a query + """ + if filters is None: filters = [] + filters = filter(lambda x: x is not None, filters) + for f in filters: + query = query.query(f) + return query + + +if getattr(settings, 'SEARCH_MOCK', False): + from .mock_search import Search diff --git a/src/search/locale/de/LC_MESSAGES/django.mo b/src/search/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..831e52ac6 Binary files /dev/null and b/src/search/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/de/LC_MESSAGES/django.po b/src/search/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..6e98c6275 --- /dev/null +++ b/src/search/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,30 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-09 11:35+0100\n" +"Last-Translator: xxx <xxx>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: forms.py:12 templates/newsearch/search.html:16 +msgid "Search" +msgstr "Suchen" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "Titel, Autor, Thema, Epoche, Art, Gattung, Satz" + +#: views.py:100 +msgid "book" +msgstr "Buch" diff --git a/src/search/locale/en/LC_MESSAGES/django.mo b/src/search/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..30dabdcd3 Binary files /dev/null and b/src/search/locale/en/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/en/LC_MESSAGES/django.po b/src/search/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..05b74586c --- /dev/null +++ b/src/search/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,29 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-10 13:31+0100\n" +"Last-Translator: Kamil <kjaklukowski@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:12 templates/newsearch/search.html:16 +msgid "Search" +msgstr "Search" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "title, author, theme/topic, period, form, genre, phrase" + +#: views.py:100 +msgid "book" +msgstr "book" diff --git a/src/search/locale/es/LC_MESSAGES/django.mo b/src/search/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..6b996266e Binary files /dev/null and b/src/search/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/es/LC_MESSAGES/django.po b/src/search/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..c08ead943 --- /dev/null +++ b/src/search/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,30 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-05-17 23:20+0100\n" +"Last-Translator: KG <kamila.gawron87@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: forms.py:12 templates/newsearch/search.html:16 +msgid "Search" +msgstr "Buscar" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "tÃtulo, autor, tema, época , género, subgénero, frase" + +#: views.py:100 +msgid "book" +msgstr "libro" diff --git a/src/search/locale/fr/LC_MESSAGES/django.mo b/src/search/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..96e747616 Binary files /dev/null and b/src/search/locale/fr/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/fr/LC_MESSAGES/django.po b/src/search/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..70b0d42dd --- /dev/null +++ b/src/search/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,30 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: 2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 20:25+0100\n" +"Last-Translator: xxx <xxx>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" + +#: forms.py:12 templates/newsearch/search.html:16 +msgid "Search" +msgstr "Rechercher" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "titre, auteur, thème/sujet, époque, type, genre" + +#: views.py:100 +msgid "book" +msgstr "le livre" diff --git a/src/search/locale/it/LC_MESSAGES/django.mo b/src/search/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..348bf827a Binary files /dev/null and b/src/search/locale/it/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/it/LC_MESSAGES/django.po b/src/search/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..07c8c7a17 --- /dev/null +++ b/src/search/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,31 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: forms.py:12 templates/newsearch/search.html:16 +msgid "Search" +msgstr "" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "" + +#: views.py:100 +msgid "book" +msgstr "" diff --git a/src/search/locale/jp/LC_MESSAGES/django.mo b/src/search/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c9739db34 Binary files /dev/null and b/src/search/locale/jp/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/jp/LC_MESSAGES/django.po b/src/search/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 000000000..d991f75d4 --- /dev/null +++ b/src/search/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,30 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:12 templates/newsearch/search.html:16 +msgid "Search" +msgstr "" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "" + +#: views.py:100 +msgid "book" +msgstr "" diff --git a/src/search/locale/lt/LC_MESSAGES/django.mo b/src/search/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..d012e915a Binary files /dev/null and b/src/search/locale/lt/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/lt/LC_MESSAGES/django.po b/src/search/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..8b9b64e3d --- /dev/null +++ b/src/search/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,31 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-02 18:24+0100\n" +"Last-Translator: Karolina Zuber <suomija@o2.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" +"%100<10 || n%100>=20) ? 1 : 2)\n" + +#: forms.py:12 templates/newsearch/search.html:16 +msgid "Search" +msgstr "IeÅ¡koti" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "pavadinimas, autorius, motyvas/tema, epocha, rÅ«Å¡is, žanras, citata" + +#: views.py:100 +msgid "book" +msgstr "knyga" diff --git a/src/search/locale/pl/LC_MESSAGES/django.mo b/src/search/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..208692a08 Binary files /dev/null and b/src/search/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/pl/LC_MESSAGES/django.po b/src/search/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..1d89f7ca9 --- /dev/null +++ b/src/search/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-01-27 16:41+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2)\n" + +#: forms.py:12 templates/newsearch/search.html:16 +#, fuzzy +msgid "Search" +msgstr "szukaj" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "tytuÅ, autor, motyw/temat, epoka, rodzaj, gatunek, cytat" + +#: views.py:100 +msgid "book" +msgstr "utwór" + +#~ msgid "off" +#~ msgstr "wyÅ." diff --git a/src/search/locale/ru/LC_MESSAGES/django.mo b/src/search/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..1f7051309 Binary files /dev/null and b/src/search/locale/ru/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/ru/LC_MESSAGES/django.po b/src/search/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..868db0581 --- /dev/null +++ b/src/search/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,30 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 22:11+0100\n" +"Last-Translator: xxx <xxx>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: forms.py:12 templates/newsearch/search.html:16 +msgid "Search" +msgstr "ÐоиÑк" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "название, авÑоÑ, Ñема/ÑÑжеÑ, ÐµÐ¿Ð¾Ñ Ð°, вид, жанÑ, ÑÑаза" + +#: views.py:100 +msgid "book" +msgstr "книга" diff --git a/src/search/locale/uk/LC_MESSAGES/django.mo b/src/search/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..8e2b10c72 Binary files /dev/null and b/src/search/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/search/locale/uk/LC_MESSAGES/django.po b/src/search/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..b24b885b7 --- /dev/null +++ b/src/search/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,31 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-04-10 22:12+0100\n" +"Last-Translator: Natalia Kertyczak <natalczyk@o2.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: forms.py:12 templates/newsearch/search.html:16 +msgid "Search" +msgstr "ÐоÑÑк" + +#: forms.py:21 +msgid "title, author, theme/topic, epoch, kind, genre, phrase" +msgstr "назва, авÑоÑ, Ñема/моÑив, ÐµÐ¿Ð¾Ñ Ð°, ÑÑд, жанÑ, ÑÑаза" + +#: views.py:100 +msgid "book" +msgstr "книжка" diff --git a/src/search/management/__init__.py b/src/search/management/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/search/management/commands/__init__.py b/src/search/management/commands/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/search/management/commands/reindex.py b/src/search/management/commands/reindex.py new file mode 100755 index 000000000..4941354ce --- /dev/null +++ b/src/search/management/commands/reindex.py @@ -0,0 +1,88 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import sys +from django.core.management.base import BaseCommand + +from optparse import make_option + +def query_yes_no(question, default="yes"): + """Ask a yes/no question via raw_input() and return their answer. + + "question" is a string that is presented to the user. + "default" is the presumed answer if the user just hits <Enter>. + It must be "yes" (the default), "no" or None (meaning + an answer is required of the user). + + The "answer" return value is one of "yes" or "no". + """ + valid = {"yes":True, "y":True, "ye":True, + "no":False, "n":False} + if default == None: + prompt = " [y/n] " + elif default == "yes": + prompt = " [Y/n] " + elif default == "no": + prompt = " [y/N] " + else: + raise ValueError("invalid default answer: '%s'" % default) + + while True: + sys.stdout.write(question + prompt) + choice = raw_input().lower() + if default is not None and choice == '': + return valid[default] + elif choice in valid: + return valid[choice] + else: + sys.stdout.write("Please respond with 'yes' or 'no' "\ + "(or 'y' or 'n').\n") + +class Command(BaseCommand): + help = 'Reindex everything.' + args = '' + + option_list = BaseCommand.option_list + ( + make_option('-n', '--book-id', action='store_true', dest='book_id', default=False, + help='book id instead of slugs'), + make_option('-t', '--just-tags', action='store_true', dest='just_tags', default=False, + help='just reindex tags'), + ) + def handle(self, *args, **opts): + from catalogue.models import Book + from search.index import Index + idx = Index() + + if not opts['just_tags']: + if args: + books = [] + for a in args: + if opts['book_id']: + books += Book.objects.filter(id=int(a)).all() + else: + books += Book.objects.filter(slug=a).all() + else: + books = list(Book.objects.all()) + + while books: + try: + b = books[0] + print b.title + idx.index_book(b) + idx.index.commit() + books.pop(0) + except Exception, e: + print "Error occured: %s" % e + try: + # we might not be able to rollback + idx.index.rollback() + except: + pass + retry = query_yes_no("Retry?") + if not retry: + break + + print 'Reindexing tags.' + idx.index_tags() + idx.index.commit() diff --git a/src/search/management/commands/snippets.py b/src/search/management/commands/snippets.py new file mode 100755 index 000000000..40310eda1 --- /dev/null +++ b/src/search/management/commands/snippets.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.core.management.base import BaseCommand + +from glob import glob +from optparse import make_option +from os import path +from sys import stdout +from django.conf import settings + +class Command(BaseCommand): + help = 'Reindex everything.' + args = '' + + option_list = BaseCommand.option_list + ( + make_option('-C', '--check-just-read', action='store_true', dest='check', default=False, + help='Check snippets utf-8'), + make_option('-c', '--check', action='store_true', dest='check2', default=False, + help='Check snippets utf-8 by walking through index'), + ) + + + def handle(self, *args, **opts): + from catalogue.models import Book + from search.index import Search + + if opts['check']: + sfn = glob(settings.SEARCH_INDEX+'snippets/*') + print sfn + for fn in sfn: + print fn + bkid = int(path.basename(fn)) + with open(fn) as f: + cont = f.read() + try: + uc = cont.decode('utf-8') + except UnicodeDecodeError, ude: + print "error in snippets %d" % bkid + if opts['check2']: + s = Search() + reader = s.searcher.getIndexReader() + numdocs = reader.numDocs() + for did in range(numdocs): + doc = reader.document(did) + if doc and doc.get('book_id'): + bkid = int(doc.get('book_id')) + #import pdb; pdb.set_trace() + stdout.write("\r%d / %d" % (did, numdocs)) + stdout.flush() + ss = doc.get('snippet_position') + sl = doc.get('snippet_length') + if ss and sl: + snips = Snippets(bkid) + try: + txt = snips.get((ss,sl)) + assert len(txt) == sl + except UnicodeDecodeError, ude: + stdout.write("\nerror in snippets %d\n" % bkid) + raise ude + + stdout.write("\ndone.\n") + diff --git a/src/search/mock_search.py b/src/search/mock_search.py new file mode 100644 index 000000000..253c277a8 --- /dev/null +++ b/src/search/mock_search.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from mock import Mock +from catalogue.models import Book, Tag +from random import randint, choice + + +class Search(Mock): + """ + Search mock for development without setting up Solr. + + Instead of connecting to an actual search server, it returns + some random results for any query. + """ + class MockIndex(Mock): + def analyze(*args, **kwargs): + return [] + + index = MockIndex() + + @staticmethod + def _find_some_books(snippets=False, query_terms=None, max_results=20): + from .index import SearchResult + + qs = Book.objects.order_by('?') + if snippets: + qs = qs.exclude(fragments=None) + results = [] + for book in qs[:randint(1, max_results)]: + doc = { + 'score': randint(0, 100), + 'book_id': book.pk, + 'published_date': randint(1000, 1920), + } + if snippets: + fragment = book.fragments.order_by('?')[0] + doc.update({ + 'header_type': choice(['strofa', 'akap']), + 'header_index': randint(100, 200), + 'header_span': randint(100, 200), + 'fragment_anchor': fragment.anchor, + 'snippets_position': randint(100, 200), + 'snippets_length': randint(100, 200), + 'snippets_revision': randint(1, 100), + 'themes_pl': fragment.tags.filter(category='theme'), + }) + res = SearchResult(doc, how_found='mock', query_terms=query_terms) + if snippets: + res.snippets = [fragment.short_text] + results.append(res) + return results + + def search_phrase(self, searched, field='text', book=False, + filters=None, snippets=False): + return self._find_some_books(snippets) + + def search_some(self, searched, fields, book=True, filters=None, snippets=True, query_terms=None): + return self._find_some_books(snippets, query_terms) + + def search_books(self, query, filters=None, max_results=10): + return self._find_some_books(snippets, max_results=max_results) + + def search_everywhere(self, searched, query_terms=None): + return [] + + def hint_tags(self, query, pdcounter=True, prefix=True): + return Tag.objects.exclude(category='set').order_by('?')[:randint(1, 10)] + + def hint_books(self, prefix): + return Book.objects.order_by('?')[:randint(1, 10)] diff --git a/src/search/templates/newsearch/search.html b/src/search/templates/newsearch/search.html new file mode 100644 index 000000000..0b0fad49d --- /dev/null +++ b/src/search/templates/newsearch/search.html @@ -0,0 +1,58 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} + +{% block title %}Search{% endblock %} + +{% block metadescription %}{% endblock %} + +{% block bodyid %}newsearch{% endblock %} + +{% block body %} + <h1>Search</h1> + <form action="{% url 'search' %}" method="get" accept-charset="utf-8" id="search-form-x"> + <p> + <input type="text" name="q" value="{{request.GET.q}}" style="width:250px; font-size: 1.2em;"> + <input type="submit" value="{% trans "Search" %}" /> + <br /> + <input type="checkbox" value="true" name="fuzzy" {% if fuzzy %}checked{% endif %}/> fuzzy. + </p> + </form> + {% if did_you_mean %} + Czy miaÅeÅ na mysli <a href="?q={{did_you_mean|urlencode}}">{{did_you_mean}}</a>? + {% endif %} + + + <div id="results"> + <ol> + {% for result in results %} + <li> + <p><a href="{{result.book.get_absolute_url}}">{{result.book.pretty_title}}</a> (id: {{result.book_id}}, score: {{result.score}})</p> + <ul> + {% for snip in hit.snippets %} + <li> + {{snip|safe}}<br/> + </li> + {% endfor %} + + {% for part in result.parts %} + {% if part.header %} + <li>W {{part.header}} nr {{part.position}}</li> + {% else %} + {% if part.fragment %} + <li> + <div style="">Tagi/Motywy: {% for tag in part.fragment.tags %}{{tag.name}} {% endfor %}</div> + {{part.fragment.short_html|safe}} + </li> + {% endif %} + {% endif %} + {% endfor %} + </ul> + </li> + {% empty %} + <p>No results.</p> + {% endfor %} + </ol> + </div> + +{% endblock %} diff --git a/src/search/templatetags/__init__.py b/src/search/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/search/templatetags/search_tags.py b/src/search/templatetags/search_tags.py new file mode 100644 index 000000000..8dbad9dae --- /dev/null +++ b/src/search/templatetags/search_tags.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +# import feedparser +# import datetime + +from django import template +# from django.contrib.auth.forms import UserCreationForm, AuthenticationForm +# from django.db.models import Q +# from django.utils.translation import ugettext as _ +from catalogue.models import Book +import re +# from catalogue.forms import SearchForm +# from catalogue.utils import split_tags + + +register = template.Library() + + +@register.inclusion_tag('catalogue/book_searched.html', takes_context=True) +def book_searched(context, result): + book = Book.objects.get(pk=result.book_id) + + # snippets = [] + # for hit in result.hits: + # if hit['snippets']: + # snippets.append(hit['snippets']) + # elif hit['fragment']: + # snippets.append(hit['fragment'].short_text) + + # We don't need hits which lead to sections but do not have + # snippets. + hits = filter(lambda (idx, h): + result.snippets[idx] is not None + or 'fragment' in h, enumerate(result.hits)) + # print "[tmpl: from %d hits selected %d]" % (len(result.hits), len(hits)) + + for (idx, hit) in hits: + # currently we generate one snipper per hit though. + if result.snippets[idx] is None: + continue + snip = result.snippets[idx] + # fix some formattting + snip = re.subn(r"(^[ \t\n]+|[ \t\n]+$)", u"", + re.subn(r"[ \t\n]*\n[ \t\n]*", u"\n", snip)[0])[0] + + snip = snip.replace("\n", "<br />").replace('---', '—') + hit['snippet'] = snip + + return { + 'request': context['request'], + 'book': book, + 'hits': hits and zip(*hits)[1] or [] + } diff --git a/src/search/tests/__init__.py b/src/search/tests/__init__.py new file mode 100644 index 000000000..80c974e58 --- /dev/null +++ b/src/search/tests/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from search.tests.index import * diff --git a/src/search/tests/index.py b/src/search/tests/index.py new file mode 100644 index 000000000..b8d44726f --- /dev/null +++ b/src/search/tests/index.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from unittest import skipIf +from django.conf import settings +from django.test.utils import override_settings +from catalogue.test_utils import WLTestCase, get_fixture +from os import path +import tempfile +from catalogue.models import Book, Tag +from search.index import Index, Search, SearchResult +import catalogue +import opds + + +@override_settings( + SEARCH_INDEX = tempfile.mkdtemp(prefix='djangotest_search_'), +) +@skipIf(getattr(settings, 'NO_SEARCH_INDEX', False), + u'Requires search server and NO_SEARCH_INDEX=False.') +class BookSearchTests(WLTestCase): + def setUp(self): + WLTestCase.setUp(self) + + index = Index() + self.search = Search() + index.delete_query(self.search.index.query(uid="*")) + index.index.commit() + + self.do_doktora = Book.from_xml_file( + get_fixture('do-doktora.xml', opds)) + self.do_anusie = Book.from_xml_file( + get_fixture('fraszka-do-anusie.xml', catalogue)) + + def test_search_perfect_book_author(self): + books = self.search.search_books(self.search.index.query(authors=u"sÄp szarzyÅski")) + assert len(books) == 1 + assert books[0].id == self.do_anusie.id + + # here we lack slop functionality as well + def test_search_perfect_book_title(self): + books = self.search.search_books(self.search.index.query(title=u"fraszka do anusie")) + assert len(books) == 1 + assert books[0].id == self.do_anusie.id + + # TODO: Add slop option to sunburnt + # def test_search_perfect_parts(self): + # books = self.search.search_phrase(u"Jakoż hamowaÄ") + # assert len(books) == 2 + # for b in books: + # b.book_id == self.book.id + # a = SearchResult.aggregate(books) + # # just one fragment hit. + # assert len(a[0].hits) == 1 + diff --git a/src/search/urls.py b/src/search/urls.py new file mode 100644 index 000000000..d77d7220a --- /dev/null +++ b/src/search/urls.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url + +urlpatterns = patterns('search.views', + url(r'^$', 'main', name='search'), + url(r'^hint/$', 'hint', name='search_hint'), +) + diff --git a/src/search/views.py b/src/search/views.py new file mode 100644 index 000000000..f7aa77cd9 --- /dev/null +++ b/src/search/views.py @@ -0,0 +1,255 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from django.shortcuts import render_to_response, get_object_or_404 +from django.template import RequestContext +from django.views.decorators import cache +from django.http import HttpResponse, HttpResponseRedirect, Http404, HttpResponsePermanentRedirect, JsonResponse +from django.utils.translation import ugettext as _ + +from catalogue.utils import split_tags +from catalogue.models import Book, Tag, Fragment +from pdcounter.models import Author as PDCounterAuthor, BookStub as PDCounterBook +from search.index import Search, SearchResult +from suggest.forms import PublishingSuggestForm +import re +#import enchant +import json + + +def match_word_re(word): + if 'sqlite' in settings.DATABASES['default']['ENGINE']: + return r"\b%s\b" % word + elif 'mysql' in settings.DATABASES['default']['ENGINE']: + return "[[:<:]]%s[[:>:]]" % word + + +query_syntax_chars = re.compile(r"[\\/*:(){}]") + + +def remove_query_syntax_chars(query, replace=' '): + return query_syntax_chars.sub(' ', query) + + +def did_you_mean(query, tokens): + return query + # change = {} + # for t in tokens: + # authors = Tag.objects.filter(category='author', name__iregex=match_word_re(t)) + # if len(authors) > 0: + # continue + + # if False: + # if not dictionary.check(t): + # try: + # change_to = dictionary.suggest(t)[0].lower() + # if change_to != t.lower(): + # change[t] = change_to + # except IndexError: + # pass + + # if change == {}: + # return None + + # for frm, to in change.items(): + # query = query.replace(frm, to) + + # return query + + +@cache.never_cache +def hint(request): + prefix = request.GET.get('term', '') + if len(prefix) < 2: + return JsonResponse([], safe=False) + + prefix = remove_query_syntax_chars(prefix) + + search = Search() + # tagi beda ograniczac tutaj + # ale tagi moga byc na ksiazce i na fragmentach + # jezeli tagi dot tylko ksiazki, to wazne zeby te nowe byly w tej samej ksiazce + # jesli zas dotycza themes, to wazne, zeby byly w tym samym fragmencie. + + def is_dupe(tag): + if isinstance(tag, PDCounterAuthor): + if filter(lambda t: t.slug == tag.slug and t != tag, tags): + return True + elif isinstance(tag, PDCounterBook): + if filter(lambda b: b.slug == tag.slug, tags): + return True + return False + + def category_name(c): + if c.startswith('pd_'): + c = c[len('pd_'):] + return _(c) + + try: + limit = int(request.GET.get('max', '')) + except ValueError: + limit = -1 + else: + if limit < 1: + limit = -1 + + data = [] + + tags = search.hint_tags(prefix, pdcounter=True) + tags = filter(lambda t: not is_dupe(t), tags) + for t in tags: + if not limit: + break + limit -= 1 + data.append({ + 'label': t.name, + 'category': category_name(t.category), + 'id': t.id, + 'url': t.get_absolute_url() + }) + if limit: + books = search.hint_books(prefix) + for b in books: + if not limit: + break + limit -= 1 + data.append({ + 'label': b.title, + 'category': _('book'), + 'id': b.id, + 'url': b.get_absolute_url() + }) + + callback = request.GET.get('callback', None) + if callback: + return HttpResponse("%s(%s);" % (callback, json.dumps(data)), + content_type="application/json; charset=utf-8") + else: + return JsonResponse(data, safe=False) + + +@cache.never_cache +def main(request): + results = {} + + results = None + query = None + + query = request.GET.get('q', '') + + if len(query) < 2: + return render_to_response('catalogue/search_too_short.html', + {'prefix': query}, + context_instance=RequestContext(request)) + + query = remove_query_syntax_chars(query) + + search = Search() + + theme_terms = search.index.analyze(text=query, field="themes_pl") \ + + search.index.analyze(text=query, field="themes") + + # change hints + tags = search.hint_tags(query, pdcounter=True, prefix=False) + tags = split_tags(tags) + + author_results = search.search_phrase(query, 'authors', book=True) + translator_results = search.search_phrase(query, 'translators', book=True) + + title_results = search.search_phrase(query, 'title', book=True) + + # Boost main author/title results with mixed search, and save some of its results for end of list. + # boost author, title results + author_title_mixed = search.search_some(query, ['authors', 'translators', 'title', 'tags'], query_terms=theme_terms) + author_title_rest = [] + + for b in author_title_mixed: + also_in_mixed = filter(lambda ba: ba.book_id == b.book_id, author_results + translator_results + title_results) + for b2 in also_in_mixed: + b2.boost *= 1.1 + if also_in_mixed is []: + author_title_rest.append(b) + + # Do a phrase search but a term search as well - this can give us better snippets then search_everywhere, + # Because the query is using only one field. + text_phrase = SearchResult.aggregate( + search.search_phrase(query, 'text', snippets=True, book=False), + search.search_some(query, ['text'], snippets=True, book=False, query_terms=theme_terms)) + + everywhere = search.search_everywhere(query, query_terms=theme_terms) + + def already_found(results): + def f(e): + for r in results: + if e.book_id == r.book_id: + e.boost = 0.9 + results.append(e) + return True + return False + return f + f = already_found(author_results + translator_results + title_results + text_phrase) + everywhere = filter(lambda x: not f(x), everywhere) + + author_results = SearchResult.aggregate(author_results) + translator_results = SearchResult.aggregate(translator_results) + title_results = SearchResult.aggregate(title_results) + + everywhere = SearchResult.aggregate(everywhere, author_title_rest) + + for field, res in [('authors', author_results), + ('translators', translator_results), + ('title', title_results), + ('text', text_phrase), + ('text', everywhere)]: + res.sort(reverse=True) + for r in res: + search.get_snippets(r, query, field, 3) + + suggestion = u'' + + def ensure_exists(r): + try: + return r.book + except Book.DoesNotExist: + return False + + author_results = filter(ensure_exists, author_results) + translator_results = filter(ensure_exists, translator_results) + title_results = filter(ensure_exists, title_results) + text_phrase = filter(ensure_exists, text_phrase) + everywhere = filter(ensure_exists, everywhere) + + results = author_results + translator_results + title_results + text_phrase + everywhere + # ensure books do exists & sort them + for res in (author_results, translator_results, title_results, text_phrase, everywhere): + res.sort(reverse=True) + + # We don't want to redirect to book text, but rather display result page even with one result. + # if len(results) == 1: + # fragment_hits = filter(lambda h: 'fragment' in h, results[0].hits) + # if len(fragment_hits) == 1: + # #anchor = fragment_hits[0]['fragment'] + # #frag = Fragment.objects.get(anchor=anchor) + # return HttpResponseRedirect(fragment_hits[0]['fragment'].get_absolute_url()) + # return HttpResponseRedirect(results[0].book.get_absolute_url()) + if len(results) == 0: + form = PublishingSuggestForm(initial={"books": query + ", "}) + return render_to_response('catalogue/search_no_hits.html', + {'tags': tags, + 'prefix': query, + "form": form, + 'did_you_mean': suggestion}, + context_instance=RequestContext(request)) + + return render_to_response('catalogue/search_multiple_hits.html', + {'tags': tags, + 'prefix': query, + 'results': {'author': author_results, + 'translator': translator_results, + 'title': title_results, + 'content': text_phrase, + 'other': everywhere}, + 'did_you_mean': suggestion}, + context_instance=RequestContext(request)) diff --git a/src/social/__init__.py b/src/social/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/social/admin.py b/src/social/admin.py new file mode 100755 index 000000000..3da4ae8c0 --- /dev/null +++ b/src/social/admin.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib import admin +from django.utils.translation import ugettext_lazy as _ + +from social.models import Cite + + +class CiteAdmin(admin.ModelAdmin): + list_display = ['nonempty_text', 'sticky', 'vip', 'small', 'has_image'] + fieldsets = ( + (None, {'fields': ('book', 'text', 'small', 'vip', 'link', 'sticky')}), + ( + _('Background'), + {'fields': ('image', 'image_shift', 'image_title', 'image_author', + 'image_link', 'image_license', 'image_license_link') + } + ) + ) + + def nonempty_text(self, cite): + if cite.text.strip(): + return cite.text + return "(%s)" % (cite.image_title.strip() or cite.link) + nonempty_text.short_description = _('text') + + def has_image(self, cite): + return bool(cite.image) + has_image.short_description = _('image') + has_image.boolean = True + + +admin.site.register(Cite, CiteAdmin) diff --git a/src/social/forms.py b/src/social/forms.py new file mode 100755 index 000000000..5834ffa24 --- /dev/null +++ b/src/social/forms.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import forms +from django.utils.translation import ugettext_lazy as _ + +from catalogue.models import Tag +from catalogue import utils +from social.utils import get_set, set_sets + + +class UserSetsForm(forms.Form): + def __init__(self, book, user, *args, **kwargs): + super(UserSetsForm, self).__init__(*args, **kwargs) + self.fields['set_ids'] = forms.ChoiceField( + choices=[(tag.id, tag.name) for tag in + Tag.objects.filter(category='set', user=user).iterator()], + ) + + +class ObjectSetsForm(forms.Form): + tags = forms.CharField(label=_('Tags (comma-separated)'), required=False, + widget=forms.Textarea()) + + def __init__(self, obj, user, *args, **kwargs): + self._obj = obj + self._user = user + data = kwargs.setdefault('data', {}) + if 'tags' not in data and user.is_authenticated(): + data['tags'] = ', '.join(t.name + for t in obj.tags.filter(category='set', user=user).iterator() if t.name) + super(ObjectSetsForm, self).__init__(*args, **kwargs) + + def save(self, request): + tags = [get_set(self._user, tag_name.strip()) + for tag_name in self.cleaned_data['tags'].split(',')] + set_sets(self._user, self._obj, tags) + return {"like": True} + + +class NewSetForm(forms.Form): + name = forms.CharField(max_length=50, required=True) + + def __init__(self, *args, **kwargs): + super(NewSetForm, self).__init__(*args, **kwargs) + self.fields['name'].widget.attrs['title'] = _('Name of the new shelf') + + def save(self, user, commit=True): + name = self.cleaned_data['name'] + new_set = Tag(name=name, slug=utils.get_random_hash(name), sort_key=name.lower(), + category='set', user=user) + + new_set.save() + return new_set diff --git a/src/social/locale/pl/LC_MESSAGES/django.mo b/src/social/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..8b72b7b4c Binary files /dev/null and b/src/social/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/social/locale/pl/LC_MESSAGES/django.po b/src/social/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..a3053f7fe --- /dev/null +++ b/src/social/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,127 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-01-24 10:06+0100\n" +"PO-Revision-Date: 2014-01-24 10:06+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 1.5.4\n" + +#: admin.py:16 +msgid "Background" +msgstr "Obraz tÅa" + +#: admin.py:25 models.py:22 +msgid "image" +msgstr "obraz" + +#: forms.py:23 +msgid "Tags (comma-separated)" +msgstr "Tagi (rozdzielone przecinkami)" + +#: forms.py:47 +msgid "Name of the new shelf" +msgstr "Nazwa nowej póÅki" + +#: models.py:13 +msgid "book" +msgstr "ksiÄ Å¼ka" + +#: models.py:14 +msgid "text" +msgstr "tekst" + +#: models.py:15 +msgid "small" +msgstr "maÅy" + +#: models.py:16 +msgid "Make this cite display smaller." +msgstr "Sprawia, że cytat wyÅwietla siÄ mniejszym fontem." + +#: models.py:17 +msgid "VIP" +msgstr "VIP" + +#: models.py:18 models.py:31 +msgid "link" +msgstr "odnoÅnik" + +#: models.py:19 +msgid "sticky" +msgstr "przyklejony" + +#: models.py:20 +msgid "Sticky cites will take precedense." +msgstr "Przyklejone cytaty majÄ pierwszeÅstwo." + +#: models.py:24 +msgid "Best image is exactly 975px wide and weights under 100kB." +msgstr "Najlepszy obraz ma szerokoÅÄ 975px i waży poniżej 100kB." + +#: models.py:25 +msgid "shift" +msgstr "przesuniÄcie" + +#: models.py:26 +msgid "" +"Vertical shift, in percents. 0 means top, 100 is bottom. Default is 50%." +msgstr "" +"PrzesuniÄcie w pionie, w procentach. 0 to wyrównanie do górnej krawÄdzi, 100 " +"do dolnej. DomyÅlne jest 50%." + +#: models.py:27 +msgid "title" +msgstr "tytuÅ" + +#: models.py:29 +msgid "author" +msgstr "autor" + +#: models.py:32 +msgid "license name" +msgstr "nazwa licencji" + +#: models.py:34 +msgid "license link" +msgstr "adres licencji" + +#: models.py:38 +msgid "cite" +msgstr "cytat" + +#: models.py:39 +msgid "cites" +msgstr "cytaty" + +#: templates/social/cite_promo.html:6 +msgid "recommends" +msgstr "poleca" + +#: templates/social/my_shelf.html:5 templates/social/my_shelf.html.py:11 +msgid "My shelf" +msgstr "Moja póÅka" + +#: templates/social/my_shelf.html:16 +msgid "" +"Add works to your shelf by clicking on the star on the page of the work. The " +"work will then show up on My shelf page." +msgstr "" +"Aby dodaÄ pozycjÄ do swojej póÅki, należy zaznaczyÄ gwiazdkÄ znajdujÄ cÄ siÄ " +"na stronie utworu. Po jej zaznaczeniu publikacja pojawi siÄ w zakÅadce Moja " +"póÅka." + +#: templates/social/sets_form.html:7 +msgid "Remove from my shelf" +msgstr "UsuÅ z mojej póÅki" diff --git a/src/social/migrations/0001_initial.py b/src/social/migrations/0001_initial.py new file mode 100644 index 000000000..2ad4a681d --- /dev/null +++ b/src/social/migrations/0001_initial.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('catalogue', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Cite', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('text', models.TextField(verbose_name='text')), + ('small', models.BooleanField(default=False, help_text='Make this cite display smaller.', verbose_name='small')), + ('vip', models.CharField(max_length=128, null=True, verbose_name='VIP', blank=True)), + ('link', models.URLField(verbose_name='link')), + ('sticky', models.BooleanField(default=False, help_text='Sticky cites will take precedense.', db_index=True, verbose_name='sticky')), + ('image', models.ImageField(help_text='Best image is exactly 975px wide and weights under 100kB.', upload_to=b'social/cite', null=True, verbose_name='image', blank=True)), + ('image_shift', models.IntegerField(help_text='Vertical shift, in percents. 0 means top, 100 is bottom. Default is 50%.', null=True, verbose_name='shift', blank=True)), + ('image_title', models.CharField(max_length=255, null=True, verbose_name='Title', blank=True)), + ('image_author', models.CharField(max_length=255, null=True, verbose_name='author', blank=True)), + ('image_link', models.URLField(null=True, verbose_name='link', blank=True)), + ('image_license', models.CharField(max_length=255, null=True, verbose_name='license name', blank=True)), + ('image_license_link', models.URLField(null=True, verbose_name='license link', blank=True)), + ('book', models.ForeignKey(verbose_name='book', blank=True, to='catalogue.Book', null=True)), + ], + options={ + 'ordering': ('vip', 'text'), + 'verbose_name': 'cite', + 'verbose_name_plural': 'cites', + }, + bases=(models.Model,), + ), + ] diff --git a/src/social/migrations/0002_auto_20151221_1225.py b/src/social/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..f26e4f8fc --- /dev/null +++ b/src/social/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('social', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='cite', + name='image_title', + field=models.CharField(max_length=255, null=True, verbose_name='title', blank=True), + ), + ] diff --git a/src/social/migrations/__init__.py b/src/social/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/social/models.py b/src/social/models.py new file mode 100644 index 000000000..890280774 --- /dev/null +++ b/src/social/models.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from django.conf import settings +from django.core.urlresolvers import reverse +from ssify import flush_ssi_includes +from catalogue.models import Book + + +class Cite(models.Model): + book = models.ForeignKey(Book, verbose_name=_('book'), null=True, blank=True) + text = models.TextField(_('text')) + small = models.BooleanField(_('small'), default=False, + help_text=_('Make this cite display smaller.')) + vip = models.CharField(_('VIP'), max_length=128, null=True, blank=True) + link = models.URLField(_('link')) + sticky = models.BooleanField(_('sticky'), default=False, db_index=True, + help_text=_('Sticky cites will take precedense.')) + + image = models.ImageField(_('image'), upload_to='social/cite', + null=True, blank=True, + help_text=_('Best image is exactly 975px wide and weights under 100kB.')) + image_shift = models.IntegerField(_('shift'), null=True, blank=True, + help_text=_(u'Vertical shift, in percents. 0 means top, 100 is bottom. Default is 50%.')) + image_title = models.CharField(_('title'), max_length=255, + null=True, blank=True) + image_author = models.CharField(_('author'), + max_length=255, blank=True, null=True) + image_link = models.URLField(_('link'), blank=True, null=True) + image_license = models.CharField(_('license name'), + max_length=255, blank=True, null=True) + image_license_link = models.URLField(_('license link'), blank=True, null=True) + + class Meta: + ordering = ('vip', 'text') + verbose_name = _('cite') + verbose_name_plural = _('cites') + + def __unicode__(self): + return u"%s: %sâ¦" % (self.vip, self.text[:60]) + + def get_absolute_url(self): + """This is used for testing.""" + return "%s?choose_cite=%d" % (reverse('main_page'), self.id) + + def save(self, *args, **kwargs): + ret = super(Cite, self).save(*args, **kwargs) + self.flush_includes() + return ret + + def flush_includes(self): + flush_ssi_includes([ + template % (self.pk, lang) + for template in [ + '/ludzie/cite/%s.%s.html', + '/ludzie/cite_main/%s.%s.html', + ] + for lang in [lc for (lc, _ln) in settings.LANGUAGES]] + + ['/ludzie/cite_info/%s.html' % self.pk]) diff --git a/src/social/templates/social/cite_info.html b/src/social/templates/social/cite_info.html new file mode 100644 index 000000000..8f8e16d11 --- /dev/null +++ b/src/social/templates/social/cite_info.html @@ -0,0 +1,19 @@ +{% spaceless %} + +{% if cite.image %} + {% if cite.image_link %}<a href="{{ cite.image_link }}">{% endif %} + {% if cite.image_title %} + {{ cite.image_title }}{% else %} + untitled{% endif %}{% if cite.image_link %}</a>{% endif %}{% if cite.image_author %}, + {{ cite.image_author }}{% endif %}{% if cite.image_license %}, + {% if cite.image_license_link %}<a href="{{ cite.image_license_link }}">{% endif %} + {{ cite.image_license }} + {% if cite.image_license_link %}</a>{% endif %} + {% endif %} +{% else %} + <a href="http://www.flickr.com/photos/lou/430980641/">books about architecture</a>, + saikofish@Flickr, + <a href="http://creativecommons.org/licenses/by-nc-sa/2.0/">CC BY NC SA</a>. +{% endif %} + +{% endspaceless %} diff --git a/src/social/templates/social/cite_promo.html b/src/social/templates/social/cite_promo.html new file mode 100755 index 000000000..15786cf3b --- /dev/null +++ b/src/social/templates/social/cite_promo.html @@ -0,0 +1,30 @@ +{% spaceless %} + +{% load i18n %} + +{% if main %} + <section id="big-cite"{% if cite.image %} style="background-image: url('{{ cite.image.url }}'); background-position: 50% {{ cite.image_shift|default_if_none:50 }}%;"{% endif %} > +{% endif %} + +{% if cite %} + +<a href="{{ cite.link }}" class="cite{% if cite.small %} cite-small{% endif %}"> + {% if cite.vip %} + <p class='vip mono'><span>{{ cite.vip }} {% trans "recommends" %}:</span></p> + {% endif %} + <blockquote class="cite-body"> + <span>{{ cite.text|linebreaksbr|safe }}</span> + </blockquote> + {% if cite.book %} + <p class="source mono"><span>{{ cite.book.pretty_title }}</span></p> + {% endif %} +</a> + +{% endif %} + + +{% if main %} + </section> +{% endif %} + +{% endspaceless %} \ No newline at end of file diff --git a/src/social/templates/social/my_shelf.html b/src/social/templates/social/my_shelf.html new file mode 100755 index 000000000..f448ad220 --- /dev/null +++ b/src/social/templates/social/my_shelf.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} +{% load i18n %} +{% load catalogue_tags %} + +{% block titleextra %}{% trans "My shelf" %}{% endblock %} + +{% block logout %}/{% endblock %} + +{% block body %} + + <h1>{% trans "My shelf" %}</h1> + + {% work_list books %} + + {% if not books %} + {% trans "Add works to your shelf by clicking on the star on the page of the work. The work will then show up on My shelf page." %} + {# trans "Aby dodaÄ pozycjÄ do swojej póÅki, należy zaznaczyÄ gwiazdkÄ znajdujÄ cÄ siÄ na stronie utworu. Po jej zaznaczeniu publikacja pojawi siÄ w zakÅadce Moja póÅka" #} + {% endif %} +{% endblock %} diff --git a/src/social/templates/social/sets_form.html b/src/social/templates/social/sets_form.html new file mode 100755 index 000000000..5974a2a71 --- /dev/null +++ b/src/social/templates/social/sets_form.html @@ -0,0 +1,19 @@ +{% load i18n %} +{% load ssi_csrf_token from ssify %} +<h1>{{ title }}</h1> + +<form action="{% url 'social_unlike_book' view_kwargs.slug %}" method="post" accept-charset="utf-8" + class="cuteform{% if placeholdize %} hidelabels{% endif %}"> +{% ssi_csrf_token %} + <input type="submit" value="{% trans "Remove from my shelf" %}"/> +</form> + +<form action="{{ request.get_full_path }}" method="post" accept-charset="utf-8" + class="cuteform{% if placeholdize %} hidelabels{% endif %}"> +{% ssi_csrf_token %} +<ol> + <div id="id___all__"></div> + {{ form.as_ul }} + <li><input type="submit" value="{{ submit }}"/></li> +</ol> +</form> diff --git a/src/social/templates/social/shelf_tags.html b/src/social/templates/social/shelf_tags.html new file mode 100755 index 000000000..2baa0f007 --- /dev/null +++ b/src/social/templates/social/shelf_tags.html @@ -0,0 +1,9 @@ +{% spaceless %} + +<ul class='social-shelf-tags'> + {% for tag in tags %} + <li><a href="{{ tag.get_absolute_url }}">{{ tag.name }}</a></li> + {% endfor %} +</ul> + +{% endspaceless %} \ No newline at end of file diff --git a/src/social/templatetags/__init__.py b/src/social/templatetags/__init__.py new file mode 100755 index 000000000..e69de29bb diff --git a/src/social/templatetags/social_tags.py b/src/social/templatetags/social_tags.py new file mode 100755 index 000000000..7065467b4 --- /dev/null +++ b/src/social/templatetags/social_tags.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from random import randint +from django.db.models import Q +from django import template +from django.utils.functional import lazy +from django.utils.cache import add_never_cache_headers +from catalogue.models import Book, Tag +from ssify import ssi_variable +from ssify.utils import ssi_vary_on_cookie +from social.models import Cite +from social.utils import likes, cites_for_tags + +register = template.Library() + + +@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) +def likes_book(request, book_id): + return likes(request.user, Book.objects.get(pk=book_id), request) + + +def choose_cite(request, book_id=None, tag_ids=None): + """Choose a cite for main page, for book or for set of tags.""" + try: + assert request.user.is_staff + assert 'choose_cite' in request.GET + cite = Cite.objects.get(pk=request.GET['choose_cite']) + except (AssertionError, Cite.DoesNotExist): + if book_id is not None: + cites = Cite.objects.filter(Q(book=book_id) | Q(book__ancestor=book_id)) + elif tag_ids is not None: + tags = Tag.objects.filter(pk__in=tag_ids) + cites = cites_for_tags(tags) + else: + cites = Cite.objects.all() + stickies = cites.filter(sticky=True) + count = stickies.count() + if count: + cite = stickies[randint(0, count - 1)] + else: + count = cites.count() + if count: + cite = cites[randint(0, count - 1)] + else: + cite = None + return cite + + +@ssi_variable(register, name='choose_cite', patch_response=[add_never_cache_headers]) +def choose_cite_tag(request, book_id=None, tag_ids=None): + cite = choose_cite(request, book_id, tag_ids) + return cite.pk if cite is not None else None + + +@register.inclusion_tag('social/cite_promo.html') +def render_cite(cite): + return { + 'cite': cite, + } + + +@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) +def book_shelf_tags(request, book_id): + if not request.user.is_authenticated(): + return None + book = Book.objects.get(pk=book_id) + lks = likes(request.user, book, request) + def get_value(): + if not lks: + return '' + tags = book.tags.filter(category='set', user=request.user).exclude(name='') + if not tags: + return '' + ctx = {'tags': tags} + return template.loader.render_to_string('social/shelf_tags.html', ctx) + return lazy(get_value, unicode)() diff --git a/src/social/urls.py b/src/social/urls.py new file mode 100755 index 000000000..3642d91da --- /dev/null +++ b/src/social/urls.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url +from django.views.decorators.cache import never_cache +from social.views import ObjectSetsFormView + +urlpatterns = patterns('social.views', + url(r'^lektura/(?P<slug>[a-z0-9-]+)/lubie/$', 'like_book', name='social_like_book'), + url(r'^lektura/(?P<slug>[a-z0-9-]+)/nie_lubie/$', 'unlike_book', name='social_unlike_book'), + url(r'^lektura/(?P<slug>[a-z0-9-]+)/polki/$', never_cache(ObjectSetsFormView()), name='social_book_sets'), + url(r'^polka/$', 'my_shelf', name='social_my_shelf'), + + # Includes + url(r'^cite/(?P<pk>\d+)\.(?P<lang>.+)\.html$', 'cite', name='social_cite'), + url(r'^cite_main/(?P<pk>\d+)\.(?P<lang>.+)\.html$', 'cite', {'main': True}, name='social_cite_main'), + url(r'^cite_info/(?P<pk>\d+).html$', 'cite_info', name='social_cite_info'), + + #~ url(r'^polki/(?P<shelf>[a-zA-Z0-9-]+)/formaty/$', 'shelf_book_formats', name='shelf_book_formats'), + #~ url(r'^polki/(?P<shelf>[a-zA-Z0-9-]+)/(?P<slug>%s)/usun$' % SLUG, 'remove_from_shelf', name='remove_from_shelf'), + #~ url(r'^polki/$', 'user_shelves', name='user_shelves'), + #~ url(r'^polki/(?P<slug>[a-zA-Z0-9-]+)/usun/$', 'delete_shelf', name='delete_shelf'), + #~ url(r'^polki/(?P<slug>[a-zA-Z0-9-]+)\.zip$', 'download_shelf', name='download_shelf'), + #~ url(r'^polki/nowa/$', 'new_set', name='new_set'), +) diff --git a/src/social/utils.py b/src/social/utils.py new file mode 100755 index 000000000..bf1c24229 --- /dev/null +++ b/src/social/utils.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from collections import defaultdict +from django.contrib.contenttypes.models import ContentType +from django.db.models import Q +from django.utils.functional import lazy +from catalogue.models import Book, Tag +from catalogue import utils +from catalogue.tasks import touch_tag +from social.models import Cite + + +def likes(user, work, request=None): + if not user.is_authenticated(): + return False + + if request is None: + return work.tags.filter(category='set', user=user).exists() + + if not hasattr(request, 'social_likes'): + # tuple: unchecked, checked, liked + request.social_likes = defaultdict(lambda:(set(), set(), set())) + + ct = ContentType.objects.get_for_model(type(work)) + likes_t = request.social_likes[ct.pk] + if work.pk in likes_t[1]: + return work.pk in likes_t[2] + else: + likes_t[0].add(work.pk) + def _likes(): + if likes_t[0]: + ids = tuple(likes_t[0]) + likes_t[0].clear() + likes_t[2].update(Tag.intermediary_table_model.objects.filter( + content_type_id=ct.pk, tag__user_id=user.pk, + object_id__in=ids + ).distinct().values_list('object_id', flat=True)) + likes_t[1].update(ids) + return work.pk in likes_t[2] + return lazy(_likes, bool)() + + +def get_set(user, name): + """Returns a tag for use by the user. Creates it, if necessary.""" + try: + tag = Tag.objects.get(category='set', user=user, name=name) + except Tag.DoesNotExist: + tag = Tag.objects.create(category='set', user=user, name=name, + slug=utils.get_random_hash(name), sort_key=name.lower()) + return tag + + +def set_sets(user, work, sets): + """Set tags used for given work by a given user.""" + + old_sets = list(work.tags.filter(category='set', user=user)) + + work.tags = sets + list( + work.tags.filter(~Q(category='set') | ~Q(user=user))) + + for shelf in [shelf for shelf in old_sets if shelf not in sets]: + touch_tag(shelf) + for shelf in [shelf for shelf in sets if shelf not in old_sets]: + touch_tag(shelf) + + # delete empty tags + Tag.objects.filter(category='set', user=user, items=None).delete() + + +def cites_for_tags(tags): + """Returns a QuerySet with all Cites for books with given tags.""" + return Cite.objects.filter(book__in=Book.tagged.with_all(tags)) diff --git a/src/social/views.py b/src/social/views.py new file mode 100644 index 000000000..49c9b708a --- /dev/null +++ b/src/social/views.py @@ -0,0 +1,90 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.shortcuts import render, get_object_or_404, redirect +from django.http import HttpResponseForbidden, JsonResponse +from django.contrib.auth.decorators import login_required +from django.views.decorators.http import require_POST + +from ajaxable.utils import AjaxableFormView + +from catalogue.models import Book +from ssify import ssi_included +from social import forms +from .models import Cite +from social.utils import get_set, likes, set_sets + + +# ==================== +# = Shelf management = +# ==================== + + +@require_POST +def like_book(request, slug): + if not request.user.is_authenticated(): + return HttpResponseForbidden('Login required.') + book = get_object_or_404(Book, slug=slug) + if not likes(request.user, book): + tag = get_set(request.user, '') + set_sets(request.user, book, [tag]) + + if request.is_ajax(): + return JsonResponse({"success": True, "msg": "ok", "like": True}) + else: + return redirect(book) + + +@login_required +def my_shelf(request): + books = Book.tagged.with_any(request.user.tag_set.all()) + return render(request, 'social/my_shelf.html', locals()) + + +class ObjectSetsFormView(AjaxableFormView): + form_class = forms.ObjectSetsForm + placeholdize = True + template = 'social/sets_form.html' + ajax_redirect = True + POST_login = True + + def get_object(self, request, slug): + return get_object_or_404(Book, slug=slug) + + def context_description(self, request, obj): + return obj.pretty_title() + + def form_args(self, request, obj): + return (obj, request.user), {} + + +@require_POST +def unlike_book(request, slug): + if not request.user.is_authenticated(): + return HttpResponseForbidden('Login required.') + book = get_object_or_404(Book, slug=slug) + if likes(request.user, book): + set_sets(request.user, book, []) + + if request.is_ajax(): + return JsonResponse({"success": True, "msg": "ok", "like": False}) + else: + return redirect(book) + + +@ssi_included +def cite(request, pk, main=False): + cite = get_object_or_404(Cite, pk=pk) + return render(request, 'social/cite_promo.html', { + 'main': main, + 'cite': cite, + }) + + +@ssi_included(use_lang=False) +def cite_info(request, pk): + cite = get_object_or_404(Cite, pk=pk) + return render(request, 'social/cite_info.html', { + 'cite': cite, + }) diff --git a/src/sortify.py b/src/sortify.py new file mode 100644 index 000000000..642a5403f --- /dev/null +++ b/src/sortify.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +import re +from fnpdjango.utils.text.slughifi import char_map + + +# Specifies diacritics order. +# Default order is zero, max is 9 +char_order = { + u'ż': 1, u'Å»': 1, +} + + +def replace_char(m): + char = m.group() + if char_map.has_key(char): + order = char_order.get(char, 0) + return "%s~%d" % (char_map[char], order) + else: + return char + + +def sortify(value): + """ + Turns Unicode into ASCII-sortable str + + Examples : + + >>> sortify('a a') < sortify('aa') < sortify('Ä ') < sortify('b') + True + + >>> sortify('ź') < sortify('ż') + True + + """ + + if not isinstance(value, unicode): + value = unicode(value, 'utf-8') + + # try to replace chars + value = re.sub('[^a-zA-Z0-9\\s\\-]{1}', replace_char, value) + value = value.lower() + value = re.sub(r'[^a-z0-9~]+', ' ', value) + + return value.encode('ascii', 'ignore') diff --git a/src/sponsors/__init__.py b/src/sponsors/__init__.py new file mode 100644 index 000000000..f6a851dc5 --- /dev/null +++ b/src/sponsors/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +__author__ = u'Marek StÄpniowski, <marek@stepniowski.com>' +__version__ = '0.1' diff --git a/src/sponsors/admin.py b/src/sponsors/admin.py new file mode 100644 index 000000000..274fe901e --- /dev/null +++ b/src/sponsors/admin.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib import admin +from jsonfield import JSONField +from sponsors import models +from sponsors import widgets + + +class SponsorAdmin(admin.ModelAdmin): + list_display = ('name',) + search_fields = ('name',) + ordering = ('name',) + + +class SponsorPageAdmin(admin.ModelAdmin): + formfield_overrides = { + JSONField: {'widget': widgets.SponsorPageWidget}, + } + list_display = ('name',) + search_fields = ('name',) + ordering = ('name',) + + +admin.site.register(models.Sponsor, SponsorAdmin) +admin.site.register(models.SponsorPage, SponsorPageAdmin) diff --git a/src/sponsors/locale/de/LC_MESSAGES/django.mo b/src/sponsors/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..f6cebe39b Binary files /dev/null and b/src/sponsors/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/de/LC_MESSAGES/django.po b/src/sponsors/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..1b8dc02d9 --- /dev/null +++ b/src/sponsors/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2010-06-23 11:48+0100\n" +"Last-Translator: Iwona FiaÅkowska <ifialkowska@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "Name" + +#: models.py:22 +msgid "description" +msgstr "Beschreibung" + +#: models.py:23 +msgid "logo" +msgstr "Logo" + +#: models.py:24 +msgid "url" +msgstr "URL" + +#: models.py:38 +msgid "sponsors" +msgstr "Sponsoren" diff --git a/src/sponsors/locale/en/LC_MESSAGES/django.mo b/src/sponsors/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..158ec2c73 Binary files /dev/null and b/src/sponsors/locale/en/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/en/LC_MESSAGES/django.po b/src/sponsors/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..48676958f --- /dev/null +++ b/src/sponsors/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 20:05+0100\n" +"Last-Translator: xxx <xxx>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "name" + +#: models.py:22 +msgid "description" +msgstr "description" + +#: models.py:23 +msgid "logo" +msgstr "logo" + +#: models.py:24 +msgid "url" +msgstr "url" + +#: models.py:38 +msgid "sponsors" +msgstr "sponsors" diff --git a/src/sponsors/locale/es/LC_MESSAGES/django.mo b/src/sponsors/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..3e9d45667 Binary files /dev/null and b/src/sponsors/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/es/LC_MESSAGES/django.po b/src/sponsors/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..624e3f620 --- /dev/null +++ b/src/sponsors/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-28 12:01+0100\n" +"Last-Translator: Aneta <afroneta@wp.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "nombre" + +#: models.py:22 +msgid "description" +msgstr "descripción" + +#: models.py:23 +msgid "logo" +msgstr "logotipo" + +#: models.py:24 +msgid "url" +msgstr "url" + +#: models.py:38 +msgid "sponsors" +msgstr "patrocinadores" diff --git a/src/sponsors/locale/fr/LC_MESSAGES/django.mo b/src/sponsors/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..640e20521 Binary files /dev/null and b/src/sponsors/locale/fr/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/fr/LC_MESSAGES/django.po b/src/sponsors/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..d30e7605a --- /dev/null +++ b/src/sponsors/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-22 21:00+0100\n" +"Last-Translator: Ela Janota <amarillis5@wp.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "nom" + +#: models.py:22 +msgid "description" +msgstr "description" + +#: models.py:23 +msgid "logo" +msgstr "logo" + +#: models.py:24 +msgid "url" +msgstr "url" + +#: models.py:38 +msgid "sponsors" +msgstr "sponsors" diff --git a/src/sponsors/locale/it/LC_MESSAGES/django.mo b/src/sponsors/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..1f8c95660 Binary files /dev/null and b/src/sponsors/locale/it/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/it/LC_MESSAGES/django.po b/src/sponsors/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..d93d9fe79 --- /dev/null +++ b/src/sponsors/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-21 17:43+0100\n" +"Last-Translator: xxxx\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "nome" + +#: models.py:22 +msgid "description" +msgstr "descrizione" + +#: models.py:23 +msgid "logo" +msgstr "logo" + +#: models.py:24 +msgid "url" +msgstr "url" + +#: models.py:38 +msgid "sponsors" +msgstr "gli sponsor" diff --git a/src/sponsors/locale/jp/LC_MESSAGES/django.mo b/src/sponsors/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c9739db34 Binary files /dev/null and b/src/sponsors/locale/jp/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/jp/LC_MESSAGES/django.po b/src/sponsors/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 000000000..9ecfa8db2 --- /dev/null +++ b/src/sponsors/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "" + +#: models.py:22 +msgid "description" +msgstr "" + +#: models.py:23 +msgid "logo" +msgstr "" + +#: models.py:24 +msgid "url" +msgstr "" + +#: models.py:38 +msgid "sponsors" +msgstr "" diff --git a/src/sponsors/locale/lt/LC_MESSAGES/django.mo b/src/sponsors/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..d6b7271df Binary files /dev/null and b/src/sponsors/locale/lt/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/lt/LC_MESSAGES/django.po b/src/sponsors/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..cf009fe85 --- /dev/null +++ b/src/sponsors/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-01 16:13+0100\n" +"Last-Translator: Aneta\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "pavadinimas" + +#: models.py:22 +msgid "description" +msgstr "apraÅ¡ymas" + +#: models.py:23 +msgid "logo" +msgstr "logotipas" + +#: models.py:24 +msgid "url" +msgstr "url" + +#: models.py:38 +msgid "sponsors" +msgstr "rÄmÄjai" diff --git a/src/sponsors/locale/pl/LC_MESSAGES/django.mo b/src/sponsors/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..7776cb4e1 Binary files /dev/null and b/src/sponsors/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/pl/LC_MESSAGES/django.po b/src/sponsors/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..54ae8ca3c --- /dev/null +++ b/src/sponsors/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2010-05-19 16:18\n" +"Last-Translator: <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "nazwa" + +#: models.py:22 +msgid "description" +msgstr "opis" + +#: models.py:23 +msgid "logo" +msgstr "logo" + +#: models.py:24 +msgid "url" +msgstr "url" + +#: models.py:38 +msgid "sponsors" +msgstr "sponsorzy" diff --git a/src/sponsors/locale/ru/LC_MESSAGES/django.mo b/src/sponsors/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..0a1946f76 Binary files /dev/null and b/src/sponsors/locale/ru/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/ru/LC_MESSAGES/django.po b/src/sponsors/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..cd162751b --- /dev/null +++ b/src/sponsors/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 22:11+0100\n" +"Last-Translator: xxx <xxx>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "Ф.Ð.Ð./название" + +#: models.py:22 +msgid "description" +msgstr "опиÑание" + +#: models.py:23 +msgid "logo" +msgstr "логоÑип" + +#: models.py:24 +msgid "url" +msgstr "url" + +#: models.py:38 +msgid "sponsors" +msgstr "покÑовиÑели" diff --git a/src/sponsors/locale/uk/LC_MESSAGES/django.mo b/src/sponsors/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..8236e6024 Binary files /dev/null and b/src/sponsors/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/sponsors/locale/uk/LC_MESSAGES/django.po b/src/sponsors/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..aaf57266b --- /dev/null +++ b/src/sponsors/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 17:30+0100\n" +"Last-Translator: xxx <xxx>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: models.py:21 models.py:37 +msgid "name" +msgstr "назва" + +#: models.py:22 +msgid "description" +msgstr "опиÑ" + +#: models.py:23 +msgid "logo" +msgstr "логоÑип" + +#: models.py:24 +msgid "url" +msgstr "url" + +#: models.py:38 +msgid "sponsors" +msgstr "ÑпонÑоÑи" diff --git a/src/sponsors/migrations/0001_initial.py b/src/sponsors/migrations/0001_initial.py new file mode 100644 index 000000000..d672e846a --- /dev/null +++ b/src/sponsors/migrations/0001_initial.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import jsonfield.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Sponsor', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=120, verbose_name='name')), + ('_description', models.CharField(max_length=255, verbose_name='Description', blank=True)), + ('logo', models.ImageField(upload_to=b'sponsorzy/sponsor/logo', verbose_name='logo')), + ('url', models.URLField(verbose_name='url', blank=True)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='SponsorPage', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=120, verbose_name='name')), + ('sponsors', jsonfield.fields.JSONField(default={}, verbose_name='sponsors')), + ('_html', models.TextField(editable=False, blank=True)), + ('sprite', models.ImageField(upload_to=b'sponsorzy/sprite', blank=True)), + ], + options={ + }, + bases=(models.Model,), + ), + ] diff --git a/src/sponsors/migrations/0002_auto_20151221_1225.py b/src/sponsors/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..0110a8896 --- /dev/null +++ b/src/sponsors/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sponsors', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='sponsor', + name='_description', + field=models.CharField(max_length=255, verbose_name='description', blank=True), + ), + ] diff --git a/src/sponsors/migrations/__init__.py b/src/sponsors/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/sponsors/models.py b/src/sponsors/models.py new file mode 100644 index 000000000..0565b9744 --- /dev/null +++ b/src/sponsors/models.py @@ -0,0 +1,107 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import json +import time +from StringIO import StringIO +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from django.template.loader import render_to_string +from PIL import Image + +from jsonfield import JSONField +from django.core.files.base import ContentFile +from ssify import flush_ssi_includes + +THUMB_WIDTH = 120 +THUMB_HEIGHT = 120 + + +class Sponsor(models.Model): + name = models.CharField(_('name'), max_length=120) + _description = models.CharField(_('description'), blank=True, max_length=255) + logo = models.ImageField(_('logo'), upload_to='sponsorzy/sponsor/logo') + url = models.URLField(_('url'), blank=True) + + def __unicode__(self): + return self.name + + def description(self): + if len(self._description): + return self._description + else: + return self.name + + +class SponsorPage(models.Model): + name = models.CharField(_('name'), max_length=120) + sponsors = JSONField(_('sponsors'), default={}) + _html = models.TextField(blank=True, editable=False) + sprite = models.ImageField(upload_to='sponsorzy/sprite', blank=True) + + def populated_sponsors(self): + result = [] + offset = 0 + for column in self.sponsors: + result_group = {'name': column['name'], 'sponsors': []} + sponsor_objects = Sponsor.objects.in_bulk(column['sponsors']) + for sponsor_pk in column['sponsors']: + try: + result_group['sponsors'].append((offset, sponsor_objects[sponsor_pk])) + offset -= THUMB_HEIGHT + except KeyError: + pass + result.append(result_group) + return result + + def render_sprite(self): + sponsor_ids = [] + for column in self.sponsors: + sponsor_ids.extend(column['sponsors']) + sponsors = Sponsor.objects.in_bulk(sponsor_ids) + sprite = Image.new('RGBA', (THUMB_WIDTH, len(sponsors) * THUMB_HEIGHT)) + for i, sponsor_id in enumerate(sponsor_ids): + simg = Image.open(sponsors[sponsor_id].logo.path) + if simg.size[0] > THUMB_WIDTH or simg.size[1] > THUMB_HEIGHT: + size = ( + min(THUMB_WIDTH, + simg.size[0] * THUMB_HEIGHT / simg.size[1]), + min(THUMB_HEIGHT, + simg.size[1] * THUMB_WIDTH / simg.size[0]) + ) + simg = simg.resize(size, Image.ANTIALIAS) + sprite.paste(simg, ( + (THUMB_WIDTH - simg.size[0]) / 2, + i * THUMB_HEIGHT + (THUMB_HEIGHT - simg.size[1]) / 2, + )) + imgstr = StringIO() + sprite.save(imgstr, 'png') + + if self.sprite: + self.sprite.delete(save=False) + self.sprite.save('sponsorzy/sprite/%s-%d.png' % (self.name, time.time()), ContentFile(imgstr.getvalue()), save=False) + + def html(self): + return self._html + html = property(fget=html) + + def save(self, *args, **kwargs): + if isinstance(self.sponsors, basestring): + # Walkaround for weird jsonfield 'no-decode' optimization. + self.sponsors = json.loads(self.sponsors) + self.render_sprite() + self._html = render_to_string('sponsors/page.html', { + 'sponsors': self.populated_sponsors(), + 'page': self + }) + ret = super(SponsorPage, self).save(*args, **kwargs) + self.flush_includes() + return ret + + def flush_includes(self): + flush_ssi_includes(['/sponsors/page/%s.html' % self.name]) + + def __unicode__(self): + return self.name + diff --git a/src/sponsors/static/sponsors/css/footer_admin.css b/src/sponsors/static/sponsors/css/footer_admin.css new file mode 100644 index 000000000..fe19d30c9 --- /dev/null +++ b/src/sponsors/static/sponsors/css/footer_admin.css @@ -0,0 +1,73 @@ +.sponsors { + display: block; + clear: both; + margin-top: 5px; +} + +.sponsors .sponsors-sponsor-group { + float: left; + width: 180px; + border: 1px solid #CCC; + margin: 2px 2px 0 0; +} + +.sponsors .sponsors-sponsor-group-name { + border-bottom: 1px solid #CCC; + padding: 2px 2px 2px 4px; + margin: 0; + color: #FFF; + background-color: #7CA0C7; + font-weight: bold; + height: 15px; +} + +.sponsors .sponsors-sponsor-group-name input { + margin: -2px -2px -2px -4px; + padding: 0; + height: 15px; + width: 160px; +} + +.sponsors .sponsors-remove-sponsor-group { + float: right; + background-color: #CC3434; + color: #FFF; + width: 10px; + height: 15px; + padding: 2px; + text-align: center; + font-weight: bold; + display: block; + cursor: default; +} + +.sponsors .sponsors-remove-sponsor-group:hover { + color: #CC3434; + background-color: white; +} + +.sponsors .sponsors-unused-sponsor-group-name { + background-color: #FFF; + color: #666; +} + +.sponsors .sponsors-sponsor-group-list { + margin: 0; + padding: 2px; + list-style: none; + min-height: 400px; +} + +.sponsors-sponsor { + margin: 0 40px 2px 0; + width: 120px; + height: 120px; + border: 1px solid #CCC; + background-color: #EEE; + cursor: default; +} + +.sponsors-sponsor img { + max-width: 120px; + max-height: 120px; +} diff --git a/src/sponsors/static/sponsors/css/sponsors.css b/src/sponsors/static/sponsors/css/sponsors.css new file mode 100644 index 000000000..f35e56dd7 --- /dev/null +++ b/src/sponsors/static/sponsors/css/sponsors.css @@ -0,0 +1,24 @@ +.sponsors-page { + background: white; + margin-top: 1em; +} + +.sponsors-column { + float: left; + width: 150px; +} + +.sponsor-logos { + height: 130px; +} + +.sponsors-page img { + float: left; +} + +.sponsors-page a { + display: block; + width: 120px; + height: 120px; + background-repeat: no-repeat; +} diff --git a/src/sponsors/static/sponsors/js/footer_admin.js b/src/sponsors/static/sponsors/js/footer_admin.js new file mode 100644 index 000000000..33c794a3d --- /dev/null +++ b/src/sponsors/static/sponsors/js/footer_admin.js @@ -0,0 +1,131 @@ +(function($) { + $.fn.sponsorsFooter = function(options) { + var settings = { + sponsors: [] + }; + $.extend(settings, options); + + var input = $(this).hide(); + + var container = $('<div class="sponsors"></div>').appendTo(input.parent()); + var groups = $.evalJSON(input.val()); + + var unusedDiv = $('<div class="sponsors-sponsor-group sponsors-unused-sponsor-group"></div>') + .appendTo(container) + .append('<p class="sponsors-sponsor-group-name sponsors-unused-sponsor-group-name">dostÄpni sponsorzy</p>'); + var unusedList = $('<ol class="sponsors-sponsor-group-list sponsors-unused-group-list"></ol>') + .appendTo(unusedDiv) + .sortable({ + connectWith: '.sponsors-sponsor-group-list' + }); + + // Edit group name inline + function editNameInline(name) { + name.unbind('click.sponsorsFooter'); + var inlineInput = $('<input></input>').val(name.html()); + name.html(''); + + function endEditing() { + name.html(inlineInput.val()); + inlineInput.remove(); + name.bind('click.sponsorsFooter', function() { + editNameInline($(this)); + }); + input.parents('form').unbind('submit.sponsorsFooter', endEditing); + return false; + } + + inlineInput.appendTo(name).focus().blur(endEditing); + input.parents('form').bind('submit.sponsorsFooter', endEditing); + } + + // Remove sponsor with passed id from sponsors array and return it + function popSponsor(id) { + for (var i=0; i < settings.sponsors.length; i++) { + if (settings.sponsors[i].id == id) { + var s = settings.sponsors[i]; + settings.sponsors.splice(i, 1); + return s; + } + } + return null; + } + + // Create sponsor group and bind events + function createGroup(name, sponsors) { + if (!sponsors) { + sponsors = []; + } + + var groupDiv = $('<div class="sponsors-sponsor-group"></div>'); + + $('<a class="sponsors-remove-sponsor-group">X</a>') + .click(function() { + groupDiv.fadeOut('slow', function() { + $('.sponsors-sponsor', groupDiv).hide().appendTo(unusedList).fadeIn(); + groupDiv.remove(); + }); + }).appendTo(groupDiv); + + $('<p class="sponsors-sponsor-group-name">' + name + '</p>') + .bind('click.sponsorsFooter', function() { + editNameInline($(this)); + }).appendTo(groupDiv); + + var groupList = $('<ol class="sponsors-sponsor-group-list"></ol>') + .appendTo(groupDiv) + .sortable({ + connectWith: '.sponsors-sponsor-group-list' + }); + + + for (var i = 0; i < sponsors.length; i++) { + $('<li class="sponsors-sponsor"><img src="' + sponsors[i].image + '" alt="' + sponsors[i].name + '"/></li>') + .data('obj_id', sponsors[i].id) + .appendTo(groupList); + } + return groupDiv; + } + + // Create groups from data in input value + for (var i = 0; i < groups.length; i++) { + var group = groups[i]; + var sponsors = []; + + for (var j = 0; j < group.sponsors.length; j++) { + var s = popSponsor(group.sponsors[j]); + if (s) { + sponsors.push(s); + } + } + createGroup(group.name, sponsors).appendTo(container); + } + + // Serialize input value before submiting form + input.parents('form').submit(function(event) { + var groups = []; + $('.sponsors-sponsor-group', container).not('.sponsors-unused-sponsor-group').each(function() { + var group = {name: $('.sponsors-sponsor-group-name', this).html(), sponsors: []}; + $('.sponsors-sponsor', this).each(function() { + group.sponsors.push($(this).data('obj_id')); + }); + groups.push(group); + }); + input.val($.toJSON(groups)); + }); + + for (i = 0; i < settings.sponsors.length; i++) { + $('<li class="sponsors-sponsor"><img src="' + settings.sponsors[i].image + '" alt="' + settings.sponsors[i].name + '"/></li>') + .data('obj_id', settings.sponsors[i].id) + .appendTo(unusedList); + } + + $('<button type="button">Dodaj nowÄ grupÄ</button>') + .click(function() { + var newGroup = createGroup('').appendTo(container); + editNameInline($('.sponsors-sponsor-group-name', newGroup)); + }).prependTo(input.parent()); + + input.parent().append('<div style="clear: both"></div>'); + }; +})(jQuery); diff --git a/src/sponsors/static/sponsors/js/jquery.json.min.js b/src/sponsors/static/sponsors/js/jquery.json.min.js new file mode 100644 index 000000000..bad4a0afa --- /dev/null +++ b/src/sponsors/static/sponsors/js/jquery.json.min.js @@ -0,0 +1,31 @@ + +(function($){$.toJSON=function(o) +{if(typeof(JSON)=='object'&&JSON.stringify) +return JSON.stringify(o);var type=typeof(o);if(o===null) +return"null";if(type=="undefined") +return undefined;if(type=="number"||type=="boolean") +return o+"";if(type=="string") +return $.quoteString(o);if(type=='object') +{if(typeof o.toJSON=="function") +return $.toJSON(o.toJSON());if(o.constructor===Date) +{var month=o.getUTCMonth()+1;if(month<10)month='0'+month;var day=o.getUTCDate();if(day<10)day='0'+day;var year=o.getUTCFullYear();var hours=o.getUTCHours();if(hours<10)hours='0'+hours;var minutes=o.getUTCMinutes();if(minutes<10)minutes='0'+minutes;var seconds=o.getUTCSeconds();if(seconds<10)seconds='0'+seconds;var milli=o.getUTCMilliseconds();if(milli<100)milli='0'+milli;if(milli<10)milli='0'+milli;return'"'+year+'-'+month+'-'+day+'T'+ +hours+':'+minutes+':'+seconds+'.'+milli+'Z"';} +if(o.constructor===Array) +{var ret=[];for(var i=0;i<o.length;i++) +ret.push($.toJSON(o[i])||"null");return"["+ret.join(",")+"]";} +var pairs=[];for(var k in o){var name;var type=typeof k;if(type=="number") +name='"'+k+'"';else if(type=="string") +name=$.quoteString(k);else +continue;if(typeof o[k]=="function") +continue;var val=$.toJSON(o[k]);pairs.push(name+":"+val);} +return"{"+pairs.join(", ")+"}";}};$.evalJSON=function(src) +{if(typeof(JSON)=='object'&&JSON.parse) +return JSON.parse(src);return eval("("+src+")");};$.secureEvalJSON=function(src) +{if(typeof(JSON)=='object'&&JSON.parse) +return JSON.parse(src);var filtered=src;filtered=filtered.replace(/\\["\\\/bfnrtu]/g,'@');filtered=filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']');filtered=filtered.replace(/(?:^|:|,)(?:\s*\[)+/g,'');if(/^[\],:{}\s]*$/.test(filtered)) +return eval("("+src+")");else +throw new SyntaxError("Error parsing JSON, source is not valid.");};$.quoteString=function(string) +{if(string.match(_escapeable)) +{return'"'+string.replace(_escapeable,function(a) +{var c=_meta[a];if(typeof c==='string')return c;c=a.charCodeAt();return'\\u00'+Math.floor(c/16).toString(16)+(c%16).toString(16);})+'"';} +return'"'+string+'"';};var _escapeable=/["\\\x00-\x1f\x7f-\x9f]/g;var _meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'};})(jQuery); \ No newline at end of file diff --git a/src/sponsors/static/sponsors/js/sponsors.js b/src/sponsors/static/sponsors/js/sponsors.js new file mode 100755 index 000000000..fbfbaebb3 --- /dev/null +++ b/src/sponsors/static/sponsors/js/sponsors.js @@ -0,0 +1,8 @@ +(function($) { + $(function() { + + $('.sponsor-logos').cycle({timeout: 3000}); + + }); +})(jQuery); + diff --git a/src/sponsors/templates/sponsors/page.html b/src/sponsors/templates/sponsors/page.html new file mode 100644 index 000000000..5a3b38ec2 --- /dev/null +++ b/src/sponsors/templates/sponsors/page.html @@ -0,0 +1,16 @@ +{% spaceless %} +<style type="text/css">.sponsors-page a{background-image:url({{ page.sprite.url }});}</style> +<div class="sponsors-page"> + {% for column in sponsors %} + <div class="sponsors-column"> + <p class="sponsors-column-name">{{ column.name|default:" " }}</p> + <div class='sponsor-logos'> + {% for offset, sponsor in column.sponsors %} + <a href="{{ sponsor.url }}" title="{{ sponsor.description }}" style='background-position: 0px {{ offset }}px;'></a> + {% endfor %} + </div> + </div> + {% endfor %} + <div style="clear: both"></div> +</div> +{% endspaceless %} diff --git a/src/sponsors/urls.py b/src/sponsors/urls.py new file mode 100644 index 000000000..6da6186c3 --- /dev/null +++ b/src/sponsors/urls.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url + +urlpatterns = patterns('sponsors.views', + url(r'^page/(?P<name>.+)\.html$', 'page', name='sponsor_page'), +) diff --git a/src/sponsors/views.py b/src/sponsors/views.py new file mode 100644 index 000000000..9a340895c --- /dev/null +++ b/src/sponsors/views.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.http import HttpResponse +from ssify import ssi_included +from .models import SponsorPage + + +@ssi_included(use_lang=False) +def page(request, name): + try: + page = SponsorPage.objects.get(name=name) + except SponsorPage.DoesNotExist: + return HttpResponse(u'') + return HttpResponse(page.html) diff --git a/src/sponsors/widgets.py b/src/sponsors/widgets.py new file mode 100644 index 000000000..0ddab3809 --- /dev/null +++ b/src/sponsors/widgets.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from django import forms +from django.utils.safestring import mark_safe + +from sponsors import models + + +class SponsorPageWidget(forms.Textarea): + class Media: + js = ( + 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js', + 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.1/jquery-ui.min.js', + settings.STATIC_URL + 'sponsors/js/jquery.json.min.js', + settings.STATIC_URL + 'sponsors/js/footer_admin.js', + ) + css = { + 'all': (settings.STATIC_URL + 'sponsors/css/footer_admin.css',), + } + + def render(self, name, value, attrs=None): + output = [super(SponsorPageWidget, self).render(name, value, attrs)] + sponsors = [(unicode(obj), obj.pk, obj.logo.url) for obj in models.Sponsor.objects.all().iterator()] + sponsors_js = ', '.join('{name: "%s", id: %d, image: "%s"}' % sponsor for sponsor in sponsors) + output.append(u'<script type="text/javascript">addEvent(window, "load", function(e) {') + # TODO: "id_" is hard-coded here. This should instead use the correct + # API to determine the ID dynamically. + output.append(u'$("#id_%s").sponsorsFooter({sponsors: [%s]}); });</script>\n' % + (name, sponsors_js)) + return mark_safe(u''.join(output)) diff --git a/src/stats/__init__.py b/src/stats/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/stats/models.py b/src/stats/models.py new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/src/stats/models.py @@ -0,0 +1 @@ + diff --git a/src/stats/tasks.py b/src/stats/tasks.py new file mode 100644 index 000000000..dcd0a4bd7 --- /dev/null +++ b/src/stats/tasks.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from celery.task import task +from django.conf import settings +import httplib +import logging +import urlparse + +logger = logging.getLogger(__name__) + + +PIWIK_API_VERSION = 1 + +# Retrieve piwik information +try: + _host = urlparse.urlsplit(settings.PIWIK_URL).netloc +except AttributeError: + logger.debug("PIWIK_URL not configured.") + _host = None + + +@task(ignore_result=True) +def track_request(piwik_args): + piwik_url = "%s%s%s" % (settings.PIWIK_URL, u"/piwik.php?", piwik_args) + conn = httplib.HTTPConnection(_host) + conn.request('GET', piwik_url) + conn.close() diff --git a/src/stats/utils.py b/src/stats/utils.py new file mode 100644 index 000000000..474d1b59a --- /dev/null +++ b/src/stats/utils.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from datetime import datetime +import logging +from functools import update_wrapper +import urllib +from random import random +from inspect import isclass +from .tasks import track_request + +logger = logging.getLogger(__name__) + + +def piwik_url(request): + return urllib.urlencode(dict( + idsite=getattr(settings, 'PIWIK_SITE_ID', '0'), + rec=1, + url='http://%s%s' % (request.META['HTTP_HOST'], request.path), + rand=int(random() * 0x10000), + apiv=PIWIK_API_VERSION, + urlref=request.META.get('HTTP_REFERER', ''), + ua=request.META.get('HTTP_USER_AGENT', ''), + lang=request.META.get('HTTP_ACCEPT_LANGUAGE', ''), + token_auth=getattr(settings, 'PIWIK_TOKEN', ''), + cip=request.META['REMOTE_ADDR'], + cdt=datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S") + )) + +PIWIK_API_VERSION = 1 + + +def piwik_track(klass_or_method): + """Track decorated class or method using Piwik (according to configuration in settings and django-piwik) + Works for handler classes (executed by __call__) or handler methods. Expects request to be the first parameter + """ + if not getattr(settings, 'PIWIK_SITE_ID', 0): + return klass_or_method + + # get target method + if isclass(klass_or_method): + klass = klass_or_method + call_func = klass.__call__ + else: + call_func = klass_or_method + + def wrap(self, request, *args, **kw): + if getattr(request, 'piwik_track', True): + track_request.delay(piwik_url(request)) + return call_func(self, request, *args, **kw) + + # and wrap it + update_wrapper(wrap, call_func) + + if isclass(klass_or_method): + klass.__call__ = wrap + return klass + else: + return wrap diff --git a/src/suggest/__init__.py b/src/suggest/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/suggest/admin.py b/src/suggest/admin.py new file mode 100644 index 000000000..b5fcb5cf2 --- /dev/null +++ b/src/suggest/admin.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.contrib import admin + +from suggest.models import Suggestion, PublishingSuggestion + +class SuggestionAdmin(admin.ModelAdmin): + list_display = ('created_at', 'contact', 'user', 'description') + +admin.site.register(Suggestion, SuggestionAdmin) + + +class PublishingSuggestionAdmin(admin.ModelAdmin): + list_display = ('created_at', 'contact', 'user', 'books', 'audiobooks') + +admin.site.register(PublishingSuggestion, PublishingSuggestionAdmin) diff --git a/src/suggest/forms.py b/src/suggest/forms.py new file mode 100644 index 000000000..b98e0ae4a --- /dev/null +++ b/src/suggest/forms.py @@ -0,0 +1,118 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import forms +from django.contrib.sites.models import Site +from django.core.exceptions import ValidationError +from django.core.mail import send_mail, mail_managers +from django.core.urlresolvers import reverse +from django.core.validators import validate_email +from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ugettext +from suggest.models import PublishingSuggestion, Suggestion + + +class SuggestForm(forms.Form): + contact = forms.CharField(label=_('Contact'), max_length=120, required=False) + description = forms.CharField(label=_('Description'), widget=forms.Textarea, required=True) + + def save(self, request): + contact = self.cleaned_data['contact'] + description = self.cleaned_data['description'] + + suggestion = Suggestion(contact=contact, + description=description, ip=request.META['REMOTE_ADDR']) + if request.user.is_authenticated(): + suggestion.user = request.user + suggestion.save() + + mail_managers(u'Nowa sugestia na stronie WolneLektury.pl', u'''\ +ZgÅoszono nowÄ sugestiÄ w serwisie WolneLektury.pl. +http://%(site)s%(url)s + +Użytkownik: %(user)s +Kontakt: %(contact)s + +%(description)s''' % { + 'site': Site.objects.get_current().domain, + 'url': reverse('admin:suggest_suggestion_change', args=[suggestion.id]), + 'user': str(request.user) if request.user.is_authenticated() else '', + 'contact': contact, + 'description': description, + }, fail_silently=True) + + try: + validate_email(contact) + except ValidationError: + pass + else: + send_mail(u'[WolneLektury] ' + + ugettext(u'Thank you for your suggestion.'), + ugettext(u"""\ +Thank you for your comment on WolneLektury.pl. +The suggestion has been referred to the project coordinator.""") + +u""" + +-- +""" + ugettext(u'''Message sent automatically. Please do not reply.'''), + 'no-reply@wolnelektury.pl', [contact], fail_silently=True) + + +class PublishingSuggestForm(forms.Form): + contact = forms.CharField(label=_('Contact'), max_length=120, required=False) + books = forms.CharField(label=_('books'), widget=forms.Textarea, required=False) + audiobooks = forms.CharField(label=_('audiobooks'), widget=forms.Textarea, required=False) + + def clean(self, *args, **kwargs): + if not self.cleaned_data['books'] and not self.cleaned_data['audiobooks']: + msg = ugettext(u"One of these fields is required.") + self._errors["books"] = self.error_class([msg]) + self._errors["audiobooks"] = self.error_class([msg]) + return super(PublishingSuggestForm, self).clean(*args, **kwargs) + + def save(self, request): + contact = self.cleaned_data['contact'] + books = self.cleaned_data['books'] + audiobooks = self.cleaned_data['audiobooks'] + + suggestion = PublishingSuggestion(contact=contact, books=books, + audiobooks=audiobooks, ip=request.META['REMOTE_ADDR']) + if request.user.is_authenticated(): + suggestion.user = request.user + suggestion.save() + + mail_managers(u'Konsultacja planu wydawniczego na WolneLektury.pl', u'''\ +ZgÅoszono nowÄ sugestiÄ nt. planu wydawniczego w serwisie WolneLektury.pl. +%(url)s + +Użytkownik: %(user)s +Kontakt: %(contact)s + +KsiÄ Å¼ki: +%(books)s + +Audiobooki: +%(audiobooks)s''' % { + 'url': request.build_absolute_uri(reverse('admin:suggest_suggestion_change', args=[suggestion.id])), + 'user': str(request.user) if request.user.is_authenticated() else '', + 'contact': contact, + 'books': books, + 'audiobooks': audiobooks, + }, fail_silently=True) + + try: + validate_email(contact) + except ValidationError: + pass + else: + send_mail(u'[WolneLektury] ' + + ugettext(u'Thank you for your suggestion.'), + ugettext(u"""\ +Thank you for your comment on WolneLektury.pl. +The suggestion has been referred to the project coordinator.""") + +u""" + +-- +""" + ugettext(u'''Message sent automatically. Please do not reply.'''), + 'no-reply@wolnelektury.pl', [contact], fail_silently=True) diff --git a/src/suggest/locale/de/LC_MESSAGES/django.mo b/src/suggest/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..2531a86b7 Binary files /dev/null and b/src/suggest/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/de/LC_MESSAGES/django.po b/src/suggest/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..e96c86b0e --- /dev/null +++ b/src/suggest/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,106 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-08 11:33+0100\n" +"Last-Translator: \n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "Kontakt" + +#: forms.py:17 +msgid "Description" +msgstr "Beschreibung" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "Vielen Dank für Ihren Vorschlag." + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" +"Vielen Dank für Ihren Kommentar zu WolneLekturz.pl\n" +"Ihr Kommentar ist an den Projekt - Koordinator weitergeleitet worden. " + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "" +"Diese Nachricht wird automatisch generiert. Bitte sie nicht beantworten." + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "Bücher" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "Audiobücher" + +#: forms.py:64 +msgid "One of these fields is required." +msgstr "Erfüllen Sie bitte ein von diesen Feldern. " + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "Kontakt" + +#: models.py:11 +msgid "description" +msgstr "Beschreibung" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "Erstellungsdatum" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "IP-Adresse" + +#: models.py:18 +msgid "suggestion" +msgstr "Vorschlag" + +#: models.py:19 +msgid "suggestions" +msgstr "Vorschläge" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "Vorschlag publizieren" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "Vorschläge publizieren" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr "Melden Sie einen Bug oder einen Vorschlag" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "Der Bericht wurde erfolgreich gesendet." + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "Bericht senden" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "Hast Du kein Buch gefunden? Mach einen Vorschlag." + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl theseâ¦" +msgstr "Ich würde gerne auf WolneLektury ... finden." diff --git a/src/suggest/locale/en/LC_MESSAGES/django.mo b/src/suggest/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..69b20d038 Binary files /dev/null and b/src/suggest/locale/en/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/en/LC_MESSAGES/django.po b/src/suggest/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..20bd3bb0a --- /dev/null +++ b/src/suggest/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,106 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-10 13:06+0100\n" +"Last-Translator: Kamil <kjaklukowski@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1\n" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "Contact" + +#: forms.py:17 +msgid "Description" +msgstr "Description" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "Thank you for your suggestion." + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" +"Thank you for your suggestion concerning WolneLektury.pl \n" +"Your suggestion was sent to the project coordinator." + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "This message was sent automatically. Please do not reply." + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "books" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "audiobooks" + +#: forms.py:64 +msgid "One of these fields is required." +msgstr "One of these fields is required." + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "Contact" + +#: models.py:11 +msgid "description" +msgstr "description" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "creation date" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "IP address" + +#: models.py:18 +msgid "suggestion" +msgstr "suggestion" + +#: models.py:19 +msgid "suggestions" +msgstr "suggestions" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "publishing suggestion" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "publishing suggestions" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr "Report an error or make a suggestion" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "publishing suggestion" + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "send a suggestion" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "Didn't find a book? Make a suggestion." + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl theseâ¦" +msgstr "I would like to find the following items on WolneLektury.pl:" diff --git a/src/suggest/locale/es/LC_MESSAGES/django.mo b/src/suggest/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..11f8aa62a Binary files /dev/null and b/src/suggest/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/es/LC_MESSAGES/django.po b/src/suggest/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..67e142599 --- /dev/null +++ b/src/suggest/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,105 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-18 13:20+0100\n" +"Last-Translator: Anna Jopp <aniajopp@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "Contacto" + +#: forms.py:17 +msgid "Description" +msgstr "Descripción" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "Gracias por tu sugerencia" + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" +"Gracias por tu comentario en WolneLektury.pl La sugerencia ha sido remitida " +"a el coordinador del proyecto" + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "La mensaje enviado automaticamente. No conteste por favor." + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "libros" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "audiolibros" + +#: forms.py:64 +msgid "One of these fields is required." +msgstr "Uno de estos campos es requerido" + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "Contacto" + +#: models.py:11 +msgid "description" +msgstr "Descripción" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "Fecha de creación" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "Dirección IP" + +#: models.py:18 +msgid "suggestion" +msgstr "sugerencia" + +#: models.py:19 +msgid "suggestions" +msgstr "sugerencias" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "Sugerencia de publicación" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "Sugerencias de publicación" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr "Reporta un error o una sugerencia" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "la noticia ha sido enviada con éxito " + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "Envia un report" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "No encontraste un libro? Haz una sugerencia." + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl theseâ¦" +msgstr "Me gustarÃa encontrar estos en WolneLektury.pl" diff --git a/src/suggest/locale/fr/LC_MESSAGES/django.mo b/src/suggest/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..04716bcac Binary files /dev/null and b/src/suggest/locale/fr/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/fr/LC_MESSAGES/django.po b/src/suggest/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..3b95f4739 --- /dev/null +++ b/src/suggest/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,105 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-23 17:55+0100\n" +"Last-Translator: Ela Janota <amarillis5@wp.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "Contact" + +#: forms.py:17 +msgid "Description" +msgstr "Description" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "Merci pour votre suggestion." + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" +"Merci pour votre commentaire sur Wolne Lektury.pl.\n" +"Votre suggestion a été adressée au coordinateur du projet." + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "Message envoyé automatiquement. Merci de n'y pas répondre." + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "livres" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "livres audio" + +#: forms.py:64 +msgid "One of these fields is required." +msgstr "L'une des ces rubriques est obligatoire." + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "contact" + +#: models.py:11 +msgid "description" +msgstr "description" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "date de création" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "adresse IP" + +#: models.py:18 +msgid "suggestion" +msgstr "suggestion" + +#: models.py:19 +msgid "suggestions" +msgstr "suggestions" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "suggestion sur publication" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "suggestions sur publication" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr "Rapportez une erreur ou faites une suggestion" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "Votre rapport a été envoyé" + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "Envoyez un rapport" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "Vous n'avez pas trouvé un livre? Faites une suggestion." + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl theseâ¦" +msgstr "J'aimerais trouver dans Wolne Lektury.pl:..." diff --git a/src/suggest/locale/it/LC_MESSAGES/django.mo b/src/suggest/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..38cbcb47f Binary files /dev/null and b/src/suggest/locale/it/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/it/LC_MESSAGES/django.po b/src/suggest/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..70f0c346b --- /dev/null +++ b/src/suggest/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,107 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-21 17:57+0100\n" +"Last-Translator: xxx\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "Contatto" + +#: forms.py:17 +msgid "Description" +msgstr "Descrizione" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "Grazie per la sua proposta" + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" +"Grazie per il commento su WolneLektury.pl. La sua proposta è stata inviata " +"al coordinatore del progetto. // " + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "" +"Il messaggio è stato inviato automaticamente. Si prega di non rispondere." + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "libri" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "audiolibri" + +#: forms.py:64 +msgid "One of these fields is required." +msgstr "E' richiesto uno di questi campi. " + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "contatto" + +#: models.py:11 +msgid "description" +msgstr "descrizione" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "data di creazione" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "Indirizzo IP" + +#: models.py:18 +msgid "suggestion" +msgstr "proposta" + +#: models.py:19 +msgid "suggestions" +msgstr "proposte" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "pubblica la proposta" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "pubblica le proposte" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr " Segnala un'errore o un proposta" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "La notifica è stata inviata con successo." + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "Invia una notifica" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "Non hai trovato il libro?Fai una proposta." + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl theseâ¦" +msgstr "Vorrei trovare in WolneLektury.pl questo..." diff --git a/src/suggest/locale/jp/LC_MESSAGES/django.mo b/src/suggest/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c9739db34 Binary files /dev/null and b/src/suggest/locale/jp/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/jp/LC_MESSAGES/django.po b/src/suggest/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 000000000..b02e371d3 --- /dev/null +++ b/src/suggest/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,104 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "" + +#: forms.py:17 +msgid "Description" +msgstr "" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "" + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "" + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "" + +#: forms.py:64 +msgid "One of these fields is required." +msgstr "" + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "" + +#: models.py:11 +msgid "description" +msgstr "" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "" + +#: models.py:18 +msgid "suggestion" +msgstr "" + +#: models.py:19 +msgid "suggestions" +msgstr "" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr "" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "" + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "" + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl theseâ¦" +msgstr "" diff --git a/src/suggest/locale/lt/LC_MESSAGES/django.mo b/src/suggest/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..0dbad8e48 Binary files /dev/null and b/src/suggest/locale/lt/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/lt/LC_MESSAGES/django.po b/src/suggest/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..25759b3d7 --- /dev/null +++ b/src/suggest/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,105 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-02 18:19+0100\n" +"Last-Translator: Karolina Zuber <suomija@o2.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "Kontaktas" + +#: forms.py:17 +msgid "Description" +msgstr "ApraÅ¡ymas" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "AÄiÅ« už jÅ«sų pasiÅ«lymÄ ." + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" +"AÄiÅ« už jÅ«sų komentarÄ WolneLektury.pl interneto svetainÄje \n" +"PasiÅ«lymas buvo pateiktas projekto koordinatoriui." + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "Tai automatiÅ¡kai sugeneruotas laiÅ¡kas. PraÅ¡ome į jį neatsakyti." + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "knygas" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "audio knygas" + +#: forms.py:64 +msgid "One of these fields is required." +msgstr "Vienas iÅ¡ Å¡ių laukelių yra reikalaujamas." + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "kontaktas" + +#: models.py:11 +msgid "description" +msgstr "apraÅ¡ymas" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "sukÅ«rimo data" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "IP adresas" + +#: models.py:18 +msgid "suggestion" +msgstr "pasiÅ«lymas" + +#: models.py:19 +msgid "suggestions" +msgstr "pasiÅ«lymai" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "publikavimo pasiÅ«lymas" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "publikavimo pasiÅ«lymai" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr "PraneÅ¡kite apie klaidÄ arba teikite pasiÅ«lymus" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "PraneÅ¡imas sÄkmingai iÅ¡siųstas." + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "Siųsti praneÅ¡imÄ " + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "Neradote knygos? Teikite pasiÅ«lymus." + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl theseâ¦" +msgstr "Interneto svetainÄje WolneLektury.pl norÄÄiau rasti Å¡ias..." diff --git a/src/suggest/locale/pl/LC_MESSAGES/django.mo b/src/suggest/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..b2dcabd83 Binary files /dev/null and b/src/suggest/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/pl/LC_MESSAGES/django.po b/src/suggest/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..b5bfc9eae --- /dev/null +++ b/src/suggest/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,106 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2011-06-09 13:06+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "Kontakt" + +#: forms.py:17 +msgid "Description" +msgstr "Opis" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "DziÄkujemy za zgÅoszenie." + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" +"DziÄkujemy za zgÅoszenie uwag do serwisu Wolne Lektury.\n" +"Sugestia zostaÅa przekazana koordynatorce projektu." + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "WiadomoÅÄ wysÅana automatycznie. ProszÄ nie odpowiadaÄ." + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "ksiÄ Å¼ki" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "audiobooki" + +#: forms.py:64 +msgid "One of these fields is required." +msgstr "ProszÄ wypeÅniÄ co najmniej jedno z tych pól." + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "kontakt" + +#: models.py:11 +msgid "description" +msgstr "opis" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "data utworzenia" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "adres IP" + +#: models.py:18 +msgid "suggestion" +msgstr "sugestia" + +#: models.py:19 +msgid "suggestions" +msgstr "sugestie" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "sugestia publikacji" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "sugestie publikacji" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr "ZgÅoÅ bÅÄ d lub sugestiÄ" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "ZgÅoszenie zostaÅo wysÅane." + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "WyÅlij zgÅoszenie" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "Nie znalazÅeÅ utworu na stronie? ZgÅoÅ sugestiÄ." + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl theseâ¦" +msgstr "ChciaÅabym/chciaÅbym znaleÅºÄ w bibliotece Wolne Lektury nastÄpujÄ ce" diff --git a/src/suggest/locale/ru/LC_MESSAGES/django.mo b/src/suggest/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..0b7fe0c82 Binary files /dev/null and b/src/suggest/locale/ru/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/ru/LC_MESSAGES/django.po b/src/suggest/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..b6ba0f15e --- /dev/null +++ b/src/suggest/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,105 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 22:11+0100\n" +"Last-Translator: xxx <xxx>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "ÐонÑакÑ" + +#: forms.py:17 +msgid "Description" +msgstr "ÐпиÑание" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "СпаÑибо за ÐаÑе пÑедложение." + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" +"СпаÑибо за ÐÐ°Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑий на WolneLektury.pl. \n" +"ÐÑедложение бÑло пеÑедано кооÑдинаÑоÑÑ Ð¿ÑоекÑа." + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "СообÑение оÑпÑавлено авÑомаÑиÑеÑки. ÐожалÑйÑÑа, не оÑвеÑайÑе." + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "книги" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "аÑдиокниги" + +#: forms.py:64 +msgid "One of these fields is required." +msgstr "ТÑебÑеÑÑÑ Ð¾Ð´Ð½Ð¾ из ÑÑÐ¸Ñ Ð¿Ð¾Ð»ÐµÐ¹." + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "конÑакÑ" + +#: models.py:11 +msgid "description" +msgstr "опиÑание" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "даÑа ÑозданиÑ" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "IP-адÑеÑ" + +#: models.py:18 +msgid "suggestion" +msgstr "пÑедложение" + +#: models.py:19 +msgid "suggestions" +msgstr "пÑедложениÑ" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "издаÑелÑÑкое пÑедложение" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "издаÑелÑÑкие пÑедложениÑ" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr "СообÑиÑe об оÑибке или пÑедложении" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "ÐÑÑÐµÑ Ð¾ÑпÑавлен ÑÑпеÑно." + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "ÐÑпÑавиÑÑ Ð¾ÑÑеÑ" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "ÐÑ Ð½Ðµ наÑли книгÑ? СделайÑе пÑедложение." + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl theseâ¦" +msgstr "Я Ñ Ð¾Ñел/а Ð±Ñ Ð½Ð°Ð¹Ñи на ÑайÑе WolneLektury.pl ÑÑÐ¸Ñ ..." diff --git a/src/suggest/locale/uk/LC_MESSAGES/django.mo b/src/suggest/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..8e7f71016 Binary files /dev/null and b/src/suggest/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/suggest/locale/uk/LC_MESSAGES/django.po b/src/suggest/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..5aaed2577 --- /dev/null +++ b/src/suggest/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,106 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-04 17:31+0100\n" +"Last-Translator: xxx <xxx>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:16 forms.py:58 +msgid "Contact" +msgstr "ÐонÑакÑ" + +#: forms.py:17 +msgid "Description" +msgstr "ÐпиÑ" + +#: forms.py:46 forms.py:101 +msgid "Thank you for your suggestion." +msgstr "ÐÑкÑÑмо за ÐаÑÑ Ð¿ÑопозиÑÑÑ." + +#: forms.py:47 forms.py:102 +msgid "" +"Thank you for your comment on WolneLektury.pl.\n" +"The suggestion has been referred to the project coordinator." +msgstr "" +"ÐÑкÑÑмо за ÐÐ°Ñ ÐºÐ¾Ð¼ÐµÐ½ÑÐ°Ñ Ð½Ð° WolneLektury.pl.\n" +"ÐаÑÑ Ð¿ÑопозиÑÑÑ Ð¿ÐµÑедано кооÑдинаÑоÑÑ Ð¿ÑоекÑÑ." + +#: forms.py:53 forms.py:108 +msgid "Message sent automatically. Please do not reply." +msgstr "ÐовÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð°Ð´ÑÑлано авÑомаÑиÑно. ÐÑоÑимо не вÑдповÑдаÑи." + +#: forms.py:59 models.py:27 +msgid "books" +msgstr "книжки" + +#: forms.py:60 models.py:28 +msgid "audiobooks" +msgstr "аÑдÑокниги" + +#: forms.py:64 +#, fuzzy +msgid "One of these fields is required." +msgstr "Ðдне з ÑÐ¸Ñ Ð¿Ð¾Ð»Ñв Ñ Ð¾Ð±Ð¾Ð²'Ñзковим." + +#: models.py:10 models.py:26 +msgid "contact" +msgstr "конÑакÑ" + +#: models.py:11 +msgid "description" +msgstr "опиÑ" + +#: models.py:12 models.py:29 +msgid "creation date" +msgstr "даÑа ÑÑвоÑеннÑ" + +#: models.py:13 models.py:30 +msgid "IP address" +msgstr "IP-адÑеÑа" + +#: models.py:18 +msgid "suggestion" +msgstr "пÑопозиÑÑÑ" + +#: models.py:19 +msgid "suggestions" +msgstr "пÑопозиÑÑÑ" + +#: models.py:35 +msgid "publishing suggestion" +msgstr "пÑопозиÑÑÑ Ð¿ÑблÑкаÑÑÑ" + +#: models.py:36 +msgid "publishing suggestions" +msgstr "пÑопозиÑÑÑ Ð¿ÑблÑкаÑÑй" + +#: views.py:13 views.py:21 +msgid "Report a bug or suggestion" +msgstr "ÐовÑдомиÑи пÑо Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑ Ð°Ð±Ð¾ надÑÑлаÑи пÑопозиÑÑÑ" + +#: views.py:15 views.py:23 +msgid "Report was sent successfully." +msgstr "ÐаÑе повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð°Ð´ÑÑлано ÑÑпÑÑно." + +#: views.py:22 templates/publishing_suggest.html:18 +msgid "Send report" +msgstr "ÐиÑлаÑи повÑдомленнÑ" + +#: templates/publishing_suggest.html:4 +msgid "Didn't find a book? Make a suggestion." +msgstr "Ðе знайÑли книжки, ÑÐºÐ¾Ñ ÑÑкали? ÐиÑлÑÑÑ ÑÐ²Ð¾Ñ Ð¿ÑопозиÑÑÑ." + +#: templates/publishing_suggest.html:12 +msgid "I'd like to find in WolneLektury.pl theseâ¦" +msgstr "Я Ñ Ð¾ÑÑв би/Ñ Ð¾ÑÑла би знайÑи на ÑайÑÑ WolneLektury.pl наÑÑÑпнÑ..." diff --git a/src/suggest/migrations/0001_initial.py b/src/suggest/migrations/0001_initial.py new file mode 100644 index 000000000..b02889762 --- /dev/null +++ b/src/suggest/migrations/0001_initial.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='PublishingSuggestion', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('contact', models.CharField(max_length=120, verbose_name='Contact', blank=True)), + ('books', models.TextField(null=True, verbose_name='Books', blank=True)), + ('audiobooks', models.TextField(null=True, verbose_name='audiobooks', blank=True)), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='creation date')), + ('ip', models.GenericIPAddressField(verbose_name='IP address')), + ('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)), + ], + options={ + 'ordering': ('-created_at',), + 'verbose_name': 'publishing suggestion', + 'verbose_name_plural': 'publishing suggestions', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Suggestion', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('contact', models.CharField(max_length=120, verbose_name='Contact', blank=True)), + ('description', models.TextField(verbose_name='Description', blank=True)), + ('created_at', models.DateTimeField(auto_now=True, verbose_name='creation date')), + ('ip', models.GenericIPAddressField(verbose_name='IP address')), + ('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)), + ], + options={ + 'ordering': ('-created_at',), + 'verbose_name': 'suggestion', + 'verbose_name_plural': 'suggestions', + }, + bases=(models.Model,), + ), + ] diff --git a/src/suggest/migrations/0002_auto_20151221_1225.py b/src/suggest/migrations/0002_auto_20151221_1225.py new file mode 100644 index 000000000..126808b68 --- /dev/null +++ b/src/suggest/migrations/0002_auto_20151221_1225.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('suggest', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='publishingsuggestion', + name='books', + field=models.TextField(null=True, verbose_name='books', blank=True), + ), + migrations.AlterField( + model_name='publishingsuggestion', + name='contact', + field=models.CharField(max_length=120, verbose_name='contact', blank=True), + ), + migrations.AlterField( + model_name='suggestion', + name='contact', + field=models.CharField(max_length=120, verbose_name='contact', blank=True), + ), + migrations.AlterField( + model_name='suggestion', + name='description', + field=models.TextField(verbose_name='description', blank=True), + ), + ] diff --git a/src/suggest/migrations/__init__.py b/src/suggest/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/suggest/models.py b/src/suggest/models.py new file mode 100644 index 000000000..c0f8658f5 --- /dev/null +++ b/src/suggest/models.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.db import models +from django.contrib.auth.models import User +from django.utils.translation import ugettext_lazy as _ + +class Suggestion(models.Model): + contact = models.CharField(_('contact'), blank=True, max_length=120) + description = models.TextField(_('description'), blank=True) + created_at = models.DateTimeField(_('creation date'), auto_now=True) + ip = models.GenericIPAddressField(_('IP address')) + user = models.ForeignKey(User, blank=True, null=True) + + class Meta: + ordering = ('-created_at',) + verbose_name = _('suggestion') + verbose_name_plural = _('suggestions') + + def __unicode__(self): + return unicode(self.created_at) + + +class PublishingSuggestion(models.Model): + contact = models.CharField(_('contact'), blank=True, max_length=120) + books = models.TextField(_('books'), null=True, blank=True) + audiobooks = models.TextField(_('audiobooks'), null=True, blank=True) + created_at = models.DateTimeField(_('creation date'), auto_now_add=True) + ip = models.GenericIPAddressField(_('IP address')) + user = models.ForeignKey(User, blank=True, null=True) + + class Meta: + ordering = ('-created_at',) + verbose_name = _('publishing suggestion') + verbose_name_plural = _('publishing suggestions') + + def __unicode__(self): + return unicode(self.created_at) diff --git a/src/suggest/templates/publishing_suggest.html b/src/suggest/templates/publishing_suggest.html new file mode 100755 index 000000000..2ac0ec245 --- /dev/null +++ b/src/suggest/templates/publishing_suggest.html @@ -0,0 +1,21 @@ +{% load i18n %} +{% load honeypot %} +{% load ssi_csrf_token from ssify %} + +<h1>{% trans "Didn't find a book? Make a suggestion." %}</h1> + +<form id='suggest-publishing-form' action="{% url 'suggest_publishing' %}" method="post" accept-charset="utf-8" class="cuteform"> +{% ssi_csrf_token %} +{% render_honeypot_field %} +<ol> + <li><span class="error">{{ form.contact.errors }}</span><label for="id_contact">{{ form.contact.label }}</label> {{ form.contact }}</li> + + <li>{% trans "I'd like to find in WolneLektury.pl theseâ¦" %}</li> + + <li><span class="error">{{ form.books.errors }}</span><label for="id_books">{{ form.books.label }}:</label> {{ form.books }}</li> + + <li><span class="error">{{ form.audiobooks.errors }}</span><label for="id_audiobooks">{{ form.audiobooks.label }}:</label> {{ form.audiobooks }}</li> + + <li><input type="submit" value="{% trans "Send report" %}"/></li> +</ol> +</form> diff --git a/src/suggest/urls.py b/src/suggest/urls.py new file mode 100644 index 000000000..2f7017213 --- /dev/null +++ b/src/suggest/urls.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url +from suggest import views + +urlpatterns = patterns('', + url(r'^$', views.SuggestionFormView(), name='suggest'), + url(r'^plan/$', views.PublishingSuggestionFormView(), name='suggest_publishing'), +) + diff --git a/src/suggest/views.py b/src/suggest/views.py new file mode 100644 index 000000000..035074d0a --- /dev/null +++ b/src/suggest/views.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.utils.translation import ugettext_lazy as _ + +from ajaxable.utils import AjaxableFormView +from suggest import forms + + +class PublishingSuggestionFormView(AjaxableFormView): + form_class = forms.PublishingSuggestForm + title = _('Report a bug or suggestion') + template = "publishing_suggest.html" + success_message = _('Report was sent successfully.') + honeypot = True + + +class SuggestionFormView(AjaxableFormView): + form_class = forms.SuggestForm + title = _('Report a bug or suggestion') + submit = _('Send report') + success_message = _('Report was sent successfully.') + honeypot = True diff --git a/src/waiter/__init__.py b/src/waiter/__init__.py new file mode 100644 index 000000000..9c83ee36e --- /dev/null +++ b/src/waiter/__init__.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +""" +Celery waiter. + +Takes orders for files generated by async Celery tasks. +Serves the file when ready. Kindly asks the user to wait if not. + +Author: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl> +""" diff --git a/src/waiter/locale/pl/LC_MESSAGES/django.mo b/src/waiter/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..dc750957f Binary files /dev/null and b/src/waiter/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/waiter/locale/pl/LC_MESSAGES/django.po b/src/waiter/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..28008ee37 --- /dev/null +++ b/src/waiter/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,70 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-22 15:54+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2)\n" + +#: templates/waiter/wait.html:7 templates/waiter/wait.html.py:33 +msgid "The file is ready for download!" +msgstr "Plik jest gotowy do pobrania!" + +#: templates/waiter/wait.html:10 templates/waiter/wait.html.py:43 +msgid "Your file is being prepared, please wait." +msgstr "Plik jest generowany, proszÄ czekaÄ." + +#: templates/waiter/wait.html:12 templates/waiter/wait.html.py:52 +msgid "Something went wrong." +msgstr "CoÅ poszÅo nie tak." + +#: templates/waiter/wait.html:36 +#, python-format +msgid "" +"Your file is ready!\n" +" If the download doesn't start in a few seconds,\n" +" feel free to use this <a href=\"%(file_url)s\">direct link</a>." +msgstr "" +"Twój plik jest gotowy!\n" +"JeÅli pobieranie nie zacznie siÄ w ciÄ gu kilku sekund,\n" +"skorzystaj z tego <a href=\"%(file_url)s\">bezpoÅredniego linku</a>." + +#: templates/waiter/wait.html:42 +msgid "Please wait" +msgstr "" + +#: templates/waiter/wait.html:46 +#, python-format +msgid "The file you requested was: <em>%(d)s</em>." +msgstr "Zamówiony plik to: <em>%(d)s</em>." + +#: templates/waiter/wait.html:48 +msgid "" +"<strong>Be aware:</strong> Generating the file can take a while.\n" +" Please be patient, or bookmark this page and come back later.</p>" +msgstr "" +"<strong>Uwaga:</strong> Generowanie pliku może trwaÄ dÅuższÄ chwilÄ.\n" +"Poczekaj cierpliwie, albo dodaj tÄ stronÄ do zakÅadek i wrÃ³Ä później.</p>" + +#: templates/waiter/wait.html:56 +#, python-format +msgid "" +"Something seems to have gone wrong while generating your file.\n" +" Please order it again or <a id='suggest' class='ajaxable' href=" +"\"%(s)s\">complain to us</a> about it." +msgstr "" +"WyglÄ da na to, że coÅ poszÅo źle podczas generowania Twojego pliku.\n" +"Spróbuj zamówiÄ go jeszcze raz albo <a id='suggest' class='ajaxable' href=" +"\"%(s)s\">napisz do nas</a>." diff --git a/src/waiter/migrations/0001_initial.py b/src/waiter/migrations/0001_initial.py new file mode 100644 index 000000000..a579d6efb --- /dev/null +++ b/src/waiter/migrations/0001_initial.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import picklefield.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='WaitedFile', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('path', models.CharField(unique=True, max_length=255, db_index=True)), + ('task_id', models.CharField(db_index=True, max_length=128, null=True, blank=True)), + ('task', picklefield.fields.PickledObjectField(null=True, editable=False)), + ('description', models.CharField(max_length=255, null=True, blank=True)), + ], + options={ + }, + bases=(models.Model,), + ), + ] diff --git a/src/waiter/migrations/__init__.py b/src/waiter/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/waiter/models.py b/src/waiter/models.py new file mode 100644 index 000000000..bffaf7f8a --- /dev/null +++ b/src/waiter/models.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from os.path import join, isfile +from django.core.urlresolvers import reverse +from django.db import models +from waiter.settings import WAITER_URL, WAITER_MAX_QUEUE +from waiter.utils import check_abspath +from picklefield import PickledObjectField + + +class WaitedFile(models.Model): + path = models.CharField(max_length=255, unique=True, db_index=True) + task_id = models.CharField(max_length=128, db_index=True, null=True, blank=True) + task = PickledObjectField(null=True, editable=False) + description = models.CharField(max_length=255, null=True, blank=True) + + @classmethod + def exists(cls, path): + """Returns opened file or None. + + `path` is relative to WAITER_ROOT. + Won't open a path leading outside of WAITER_ROOT. + """ + abs_path = check_abspath(path) + # Pre-fetch objects for deletion to avoid minor race condition + relevant = [o.id for o in cls.objects.filter(path=path)] + if isfile(abs_path): + cls.objects.filter(id__in=relevant).delete() + return True + else: + return False + + @classmethod + def can_order(cls, path): + return (cls.objects.filter(path=path).exists() or + cls.exists(path) or + cls.objects.count() < WAITER_MAX_QUEUE + ) + + @classmethod + def order(cls, path, task_creator, description=None): + """ + Returns an URL for the user to follow. + If the file is ready, returns download URL. + If not, starts preparing it and returns waiting URL. + + task_creator: function taking a path and generating the file; + description: a string or string proxy with a description for user; + """ + already = cls.exists(path) + if not already: + waited, created = cls.objects.get_or_create(path=path) + if created or waited.is_stale(): + waited.task = task_creator(check_abspath(path), waited.pk) + waited.task_id = waited.task.task_id + waited.description = description + waited.save() + return reverse("waiter", args=[path]) + return join(WAITER_URL, path) diff --git a/src/waiter/settings.py b/src/waiter/settings.py new file mode 100644 index 000000000..aaa9f03b3 --- /dev/null +++ b/src/waiter/settings.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from os.path import abspath, join +from django.conf import settings + +try: + WAITER_ROOT = abspath(settings.WAITER_ROOT) +except AttributeError: + WAITER_ROOT = abspath(join(settings.MEDIA_ROOT, 'waiter')) + +try: + WAITER_URL = settings.WAITER_URL +except AttributeError: + WAITER_URL = join(settings.MEDIA_URL, 'waiter') + +try: + WAITER_MAX_QUEUE = settings.WAITER_MAX_QUEUE +except AttributeError: + WAITER_MAX_QUEUE = 20 + diff --git a/src/waiter/tasks.py b/src/waiter/tasks.py new file mode 100644 index 000000000..89db402a3 --- /dev/null +++ b/src/waiter/tasks.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from celery.signals import task_postrun +from waiter.models import WaitedFile + + +def task_delete_after(task_id=None, **kwargs): + WaitedFile.objects.filter(task_id=task_id).delete() +task_postrun.connect(task_delete_after) diff --git a/src/waiter/templates/waiter/wait.html b/src/waiter/templates/waiter/wait.html new file mode 100644 index 000000000..6ef1b7751 --- /dev/null +++ b/src/waiter/templates/waiter/wait.html @@ -0,0 +1,93 @@ +{% extends "base.html" %} +{% load i18n %} +{% load static from staticfiles %} + +{% block titleextra %} +{% if file_url %} + {% trans "The file is ready for download!" %} +{% else %} + {% if waiting %} + {% trans "Your file is being prepared, please wait." %} + {% else %} + {% trans "Something went wrong." %} + {% endif %} +{% endif %} +{% endblock %} + + +{% block extrahead %} +{% if file_url %} + <meta http-equiv="refresh" content="3; url={{ file_url }}" /> +{% else %} + {% if waiting %} + <noscript> + <meta http-equiv="refresh" content="10" /> + </noscript> + {% endif %} +{% endif %} +{% endblock %} + + +{% block body %} +{% if file_url %} + <h1>{% trans "The file is ready for download!" %}</h1> + + <div class="normal-text white-box"> + <p>{% blocktrans %}Your file is ready! + If the download doesn't start in a few seconds, + feel free to use this <a href="{{ file_url }}">direct link</a>.{% endblocktrans %}</p> + </div> +{% else %} + {% if waiting %} + <h1><img src="{% static "img/indicator.gif" %}" alt="{% trans 'Please wait' %}"/> + {% trans "Your file is being prepared, please wait." %}</h1> + + <div class="normal-text"> + <p>{% blocktrans with d=waiting.description %}The file you requested was: <em>{{d}}</em>.{% endblocktrans %}</p> + + <p>{% blocktrans %}<strong>Be aware:</strong> Generating the file can take a while. + Please be patient, or bookmark this page and come back later.</p>{% endblocktrans %} + </div> + {% else %} + <h1>{% trans "Something went wrong." %}</h1> + + <div class="normal-text"> + {% url 'suggest' as s %} + <p>{% blocktrans %}Something seems to have gone wrong while generating your file. + Please order it again or <a id='suggest' class='ajaxable' href="{{s}}">complain to us</a> about it.{% endblocktrans %}</p> + </div> + {% endif %} +{% endif %} + +{% endblock %} + +{% block extrabody %} +{% if waiting %} +<script language="JavaScript"> +<!-- +(function($) { + $(function(){ + +function wait() { + $.ajax({ + href: '', + success: function(data) { + if (data) { + location.reload(); + } + else + setTimeout(wait, 10*1000); + }, + error: function(xhr) { + location.reload(); + } + }); +} +setTimeout(wait, 10*1000); + + }); +})(jQuery); +//--> +</script> +{% endif %} +{% endblock %} diff --git a/src/waiter/urls.py b/src/waiter/urls.py new file mode 100644 index 000000000..21352c786 --- /dev/null +++ b/src/waiter/urls.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import patterns, url + +urlpatterns = patterns('waiter.views', + url(r'^(?P<path>.*)$', 'wait', name='waiter'), +) diff --git a/src/waiter/utils.py b/src/waiter/utils.py new file mode 100644 index 000000000..68d21bd79 --- /dev/null +++ b/src/waiter/utils.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from os.path import abspath, join, exists +from shutil import rmtree +from waiter.settings import WAITER_ROOT + + +def check_abspath(path): + abs_path = abspath(join(WAITER_ROOT, path)) + if not abs_path.startswith(WAITER_ROOT): + raise ValueError('Path not inside WAITER_ROOT.') + return abs_path + + +def clear_cache(path): + abs_path = check_abspath(path) + if exists(abs_path): + rmtree(abs_path) diff --git a/src/waiter/views.py b/src/waiter/views.py new file mode 100644 index 000000000..b951cc4c8 --- /dev/null +++ b/src/waiter/views.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from os.path import join +from waiter.models import WaitedFile +from waiter.settings import WAITER_URL +from django.shortcuts import render, get_object_or_404 +from django.http import HttpResponse +from django.views.decorators.cache import never_cache + + +@never_cache +def wait(request, path): + if WaitedFile.exists(path): + file_url = join(WAITER_URL, path) + else: + file_url = "" + waiting = get_object_or_404(WaitedFile, path=path) + + if request.is_ajax(): + return HttpResponse(file_url) + else: + return render(request, "waiter/wait.html", locals()) diff --git a/src/wolnelektury/__init__.py b/src/wolnelektury/__init__.py new file mode 100644 index 000000000..c6098f4e9 --- /dev/null +++ b/src/wolnelektury/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from .celery import app as celery_app + +default_app_config = 'wolnelektury.apps.WLCoreConfig' diff --git a/src/wolnelektury/apps.py b/src/wolnelektury/apps.py new file mode 100644 index 000000000..a45bfe24f --- /dev/null +++ b/src/wolnelektury/apps.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.apps import AppConfig + +class WLCoreConfig(AppConfig): + name = 'wolnelektury' + + def ready(self): + from . import signals diff --git a/src/wolnelektury/celery.py b/src/wolnelektury/celery.py new file mode 100644 index 000000000..ae5ce20ce --- /dev/null +++ b/src/wolnelektury/celery.py @@ -0,0 +1,21 @@ +from __future__ import absolute_import + +import os +import sys + +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path = [ + os.path.join(ROOT, 'apps'), + os.path.join(ROOT, 'lib'), + os.path.join(ROOT, 'lib/librarian'), +] + sys.path + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'wolnelektury.settings') + +from celery import Celery +from django.conf import settings + +app = Celery('wolnelektury') + +app.config_from_object('django.conf:settings') +app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) diff --git a/src/wolnelektury/context_processors.py b/src/wolnelektury/context_processors.py new file mode 100644 index 000000000..5885e039b --- /dev/null +++ b/src/wolnelektury/context_processors.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf 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/src/wolnelektury/locale-contrib/de/LC_MESSAGES/django.mo b/src/wolnelektury/locale-contrib/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..9dfa5d3ef Binary files /dev/null and b/src/wolnelektury/locale-contrib/de/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale-contrib/de/LC_MESSAGES/django.po b/src/wolnelektury/locale-contrib/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..5c198ea2e --- /dev/null +++ b/src/wolnelektury/locale-contrib/de/LC_MESSAGES/django.po @@ -0,0 +1,668 @@ +# German translations for PROJECT. +# Copyright (C) 2012 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-08-14 17:50+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: de <LL@li.org>\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "Einspeichern" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +#, fuzzy +msgid "E-mail address" +msgstr "E-Mail Adresse" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "E-Mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "Username" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "Dieses Account ist zurzeit inaktiv." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "Die E-Mail-Adresse und/oder das Password sind nicht korrekt." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "Der Username ist nicht korrekt." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +#, fuzzy +msgid "The login and/or password you specified are not correct." +msgstr "Der Username ist nicht korrekt." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "E-Mail (fakultativ)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +#, fuzzy +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "Usernamen können nur aus Buchstaben, Ziffern" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "Dieser Username ist schon besetzt. Wählen Sie bitte einen anderen." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +#, fuzzy +msgid "A user is already registered with this e-mail address." +msgstr "Ein User ist schon mit dieser E-Mail-Adresse verbunden." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "Password (nochmals)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "Sie müssen dasselbe Password jedesmal eintippen." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +#, fuzzy +msgid "This e-mail address is already associated with this account." +msgstr "Die E-Mail ist schon mit diesem Account verbunden." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +#, fuzzy +msgid "This e-mail address is already associated with another account." +msgstr "Diese E-Mail-Adresse ist schon mit einem anderen Account verbunden." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "Aktuelles Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "Neues Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "Neues Password (nochmals)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "Tippe Ihr Password ein." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "Diese E-Mail-Adresse ist noch mit keinem anderen Account verbunden." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +#, fuzzy +msgid "email address" +msgstr "E-Mail Adresse" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +#, fuzzy +msgid "email addresses" +msgstr "E-Mail Adresse" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +#, fuzzy +msgid "email confirmation" +msgstr "E-Mail-Adresse-Bestätigung" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +#, fuzzy +msgid "email confirmations" +msgstr "E-Mail-Adresse-Bestätigung" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "Erfolgreich als %(user)s eingeloggt." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "BestBestätigungsmail an %(email)s gesendet" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, fuzzy, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "Die E-Mail-Adresse %(email)s gelöscht." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "Die E-Mail-Adresse %(email)s gelöscht." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +#, fuzzy +msgid "Your primary e-mail address must be verified" +msgstr "Ihre E-Mail-Adresse wurd erfolgreich verifiziert." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "Die Haupt-Email-Adresse eingestellt" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "Password erfolgreich geändert." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "Password erfolgreich erstellt." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "Sie haben sich ausgeloggt." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +#, fuzzy +msgid "Your account has no password set up." +msgstr "Ihr lokales Account hat keine Schlüsselworteinstellung" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +#, fuzzy +msgid "Your account has no verified e-mail address." +msgstr "Ihr lokales Account hat keine verfizierte Email-Adresse" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +#, fuzzy +msgid "The social account has been connected" +msgstr "Das Social-Account wurde abgeschaltet." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "Das Social-Account wurde abgeschaltet." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "Falsche Antwort beim Erhalten des Fragentokens von \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "Falsche Antwort beim Erhalten des Zugangstokens von \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, python-format +msgid "No request token saved for \"%s\"." +msgstr "Keine Fragentokens für \"%s\" gespeichert." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, python-format +msgid "No access token saved for \"%s\"." +msgstr "Keine Zugangstokens für \"%s\" gespeichert." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "Kein Zugagng zu privaten Angaben bei \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "Account" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "E-Mail Adresse" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +#, fuzzy +msgid "The following e-mail addresses are associated with your account:" +msgstr "Die folgenden E-Mail-Adressen wurden mit Ihrem Account verbunden:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "Verifiziert" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "Unverifiziert" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "Primär" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "Stelle als primär ein" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "Verifizierung wiedersenden" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "Entfernen" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "Warnung:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" +"Sie haben jetzt keine Email-Adresse eingestellt. Sie sollen eine Email-" +"Adresse einstellen, um Ihr Schlüsselwort zu resetieren, um wichtige " +"Informationen zu bekommen." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "E-Mail-Adress eintippen" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "Add E-Mail eintippen" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "Wollen Sie wirklich die angegebene E-Mail-Adresse löschen?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +#, fuzzy +msgid "Confirm E-mail Address" +msgstr "Die Haupt-Email-Adresse eingestellt" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, fuzzy, python-format +msgid "" +"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Sie haben bestätigt, dass <a href=\"mailto:%(email)s\">%(email)s</a> ist " +"mit dem User '%(user)s' verbunden." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please <a " +"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, fuzzy, python-format +msgid "" +"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Sie haben bestätigt, dass <a href=\"mailto:%(email)s\">%(email)s</a> ist " +"mit dem User '%(user)s' verbunden." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "Anmelden" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, fuzzy, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, <a " +"href=\"%(signup_url)s\">sign up</a> \n" +"for a %(site_name)s account and sign in below:" +msgstr "" +"Loggen Sie sich bitte ein mit einem\n" +"von Accounts einer dritten Partei. Oder, <a \n" +"href=\"%(signup_url)s\">registrieren Sie</a> for a %(site_name)s den " +"Account und loggen Sie sich ein\n" +"hierunter:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "oder" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "Password vergessen?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "Ausgeloggt" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "Password ändern" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "Password löschen" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "" +"Sie können Ihr Schlüsselwort löschen, weil Sie jetzt durch OpenID " +"eingeloggt sind." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "Password löschen" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "Password gelöscht" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "Password wurde gelöscht." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "Password neu erstellen" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" +"Password vergessen? Tippe unten Ihre E-Mail-Adresse ein, dann senden wir " +"Ihnen eine E-Mail, um das Password zu ändern." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "Password neu erstellen" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +#, fuzzy +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" +"Wir haben Ihnen eine Email geschickt. Falls Sie sie nicht innerhalb von " +"einigen Minuten erhalten, wenden Sie sich bitte an uns <a " +"href=\"mailto:%(CONTACT_EMAIL)s\">%(CONTACT_EMAIL)s</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "Falscher Token" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " +"reset</a>." +msgstr "" +"Der Passwort-Reset-Link war falsch, da er schon möglicherweise benutzt " +"worden war. Bitten Sie um ein <a href=\"%(passwd_reset_url)s\">Reset " +"eines neuen Passwortes</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "Password ändern" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "Password wurde geändert" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "Password erstellen" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "Registrieren" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "Anmelden" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please <a href=\"%(login_url)s\">sign " +"in</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "Verifizieren Sie Ihre E-Mail-Adresse" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " +"your e-mail address</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" +"Sie bekommen diese Email an %(site_domain)s, weil Sie or jemand anderer " +"Ihr Schlüsselwort erhalten will. Sie können diese Nachricht ignorieren, " +"wenn Sie um Neustellung des Schlüssekworts nicht gebeten haben. Klicken " +"Sie an das Link unten, um Ihr Schlüsselwort neu zu stellen.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"Falls Sie vergessen haben, ist Ihr Benutzername: %(username)s.\n" +"\n" +"Vielen dank, dass Sie unsere Webseite benutzt haben!\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "Password neu stellen E-Mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "Notiz" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "Sie sind schon als %(user_display)s eingeloggt." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "OpenID Registrieren" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "Inaktives Account" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "Dieses Account ist inaktiv." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "Social-Networt-Login Fehler" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +#, fuzzy +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "Ein Fehler ist eingetreten beim Einloggen mithilfe Social-Networt-Account." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Account-Beziehungen" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "Sie können sich einloggen mittels eines von folgenden Accounts Dritter:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +#, fuzzy +msgid "You currently have no social network accounts connected to this account." +msgstr "Das Social-Network-Account wurde mit Ihrem Account verbunden." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "Fügen Sie ein fremdes Account hinzu." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "Login annulliert" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, fuzzy, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to <a " +"href=\"%(login_url)s\">sign in</a>." +msgstr "" +"Sie haben sich entschieden, das Einloggen in unsere Webseite mittels " +"eines von Ihren existierenden Accounts. Falls dies ein Fehler war, gehen " +"Sie auf <a href=\"%(login_url)s\">sign in</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" +"Sie werden Ihr %(provider_name)s Account benutzen, um\n" +"sich in %(site_name)s einzuloggen. Der letzte Schritt ist, den folgenden " +"Formular auszufüllen" + diff --git a/src/wolnelektury/locale-contrib/django.pot b/src/wolnelektury/locale-contrib/django.pot new file mode 100644 index 000000000..01486b24b --- /dev/null +++ b/src/wolnelektury/locale-contrib/django.pot @@ -0,0 +1,611 @@ +# Translations template for PROJECT. +# Copyright (C) 2013 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +msgid "E-mail address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +msgid "The login and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +msgid "A user is already registered with this e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +msgid "This e-mail address is already associated with this account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +msgid "This e-mail address is already associated with another account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +msgid "email address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +msgid "email addresses" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +msgid "email confirmation" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +msgid "email confirmations" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +msgid "Your primary e-mail address must be verified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +msgid "Your account has no password set up." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +msgid "Your account has no verified e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +msgid "The social account has been connected" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, python-format +msgid "No request token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, python-format +msgid "No access token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +msgid "The following e-mail addresses are associated with your account:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +msgid "Confirm E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, python-format +msgid "" +"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please <a " +"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, python-format +msgid "" +"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, <a " +"href=\"%(signup_url)s\">sign up</a> \n" +"for a %(site_name)s account and sign in below:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " +"reset</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please <a href=\"%(login_url)s\">sign " +"in</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " +"your e-mail address</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +msgid "You currently have no social network accounts connected to this account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to <a " +"href=\"%(login_url)s\">sign in</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" + diff --git a/src/wolnelektury/locale-contrib/en/LC_MESSAGES/django.mo b/src/wolnelektury/locale-contrib/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..7a4cdebe4 Binary files /dev/null and b/src/wolnelektury/locale-contrib/en/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale-contrib/en/LC_MESSAGES/django.po b/src/wolnelektury/locale-contrib/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..f407f7ad8 --- /dev/null +++ b/src/wolnelektury/locale-contrib/en/LC_MESSAGES/django.po @@ -0,0 +1,671 @@ +# English translations for PROJECT. +# Copyright (C) 2012 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-08-14 17:50+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: en <LL@li.org>\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "Remember Me" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +#, fuzzy +msgid "E-mail address" +msgstr "E-mail Addresses" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "E-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "Username" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "This account is currently inactive." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "The e-mail address and/or password you specified are not correct." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "The username and/or password you specified are not correct." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +#, fuzzy +msgid "The login and/or password you specified are not correct." +msgstr "The username and/or password you specified are not correct." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "E-mail (optional)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +#, fuzzy +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "Usernames can only contain letters, numbers and underscores." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "This username is already taken. Please choose another." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +#, fuzzy +msgid "A user is already registered with this e-mail address." +msgstr "A user is registered with this e-mail address." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "Password (again)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "You must type the same password each time." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +#, fuzzy +msgid "This e-mail address is already associated with this account." +msgstr "This e-mail address already associated with this account." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +#, fuzzy +msgid "This e-mail address is already associated with another account." +msgstr "This e-mail address already associated with another account." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "Current Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "New Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "New Password (again)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "Please type your current password." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "The e-mail address is not assigned to any user account" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +#, fuzzy +msgid "email address" +msgstr "E-mail Addresses" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +#, fuzzy +msgid "email addresses" +msgstr "E-mail Addresses" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +#, fuzzy +msgid "email confirmation" +msgstr "E-mail Address Confirmation" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +#, fuzzy +msgid "email confirmations" +msgstr "E-mail Address Confirmation" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "Successfully signed in as %(user)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "Confirmation e-mail sent to %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, fuzzy, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "Removed e-mail address %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "Removed e-mail address %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +#, fuzzy +msgid "Your primary e-mail address must be verified" +msgstr "Your e-mail address has already been verified" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "Primary e-mail address set" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "Password successfully changed." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "Password successfully set." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "You have signed out." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +#, fuzzy +msgid "Your account has no password set up." +msgstr "Your local account has no password setup." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +#, fuzzy +msgid "Your account has no verified e-mail address." +msgstr "Your local account has no verified e-mail address." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +#, fuzzy +msgid "The social account has been connected" +msgstr "The social account has been disconnected" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "The social account has been disconnected" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "Invalid response while obtaining request token from \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "Invalid response while obtaining access token from \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, python-format +msgid "No request token saved for \"%s\"." +msgstr "No request token saved for \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, python-format +msgid "No access token saved for \"%s\"." +msgstr "No access token saved for \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "No access to private resources at \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "Account" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "E-mail Addresses" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +#, fuzzy +msgid "The following e-mail addresses are associated with your account:" +msgstr "The following e-mail addresses are associated to your account:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "Verified" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "Unverified" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "Primary" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "Make Primary" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "Re-send Verification" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "Remove" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "Warning:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "Add E-mail Address" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "Add E-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "Do you really want to remove the selected e-mail address?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +#, fuzzy +msgid "Confirm E-mail Address" +msgstr "Primary e-mail address set" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, fuzzy, python-format +msgid "" +"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" +"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user '%(user)s'." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please <a " +"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, fuzzy, python-format +msgid "" +"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" +"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user '%(user)s'." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "Sign In" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, fuzzy, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, <a " +"href=\"%(signup_url)s\">sign up</a> \n" +"for a %(site_name)s account and sign in below:" +msgstr "" +"Please sign in with one\n" +"of your existing third party accounts. Or, <a \n" +"href=\"%(signup_url)s\">sign up</a> for a %(site_name)s account and sign " +"in\n" +"below:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "or" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "Forgot Password?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "Signed Out" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "Change Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "Delete Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "" +"You may delete your password since you are currently logged in using " +"OpenID." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "delete my password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "Password Deleted" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "Your password has been deleted." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "Password Reset" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "Reset My Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +#, fuzzy +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" +"We have sent you an e-mail. If you do not receive it within a few " +"minutes, contact us at <a " +"href=\"mailto:%(CONTACT_EMAIL)s\">%(CONTACT_EMAIL)s</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "Bad Token" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " +"reset</a>." +msgstr "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " +"reset</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "change password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "Your password is now changed." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "Set Password" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "Signup" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "Sign Up" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please <a href=\"%(login_url)s\">sign " +"in</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "Verify Your E-mail Address" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " +"your e-mail address</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "Password Reset E-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "Note" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "you are already logged in as %(user_display)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "OpenID Sign In" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "Account Inactive" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "This account is inactive." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "Social Network Login Failure" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +#, fuzzy +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "" +"An error occured while attempting to login via your social network " +"account." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Account Connections" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" +"You can sign in to your account using any of the following third party " +"accounts:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +#, fuzzy +msgid "You currently have no social network accounts connected to this account." +msgstr "The social account has been connected to your existing account" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "Add a 3rd Party Account" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "Login Cancelled" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, fuzzy, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to <a " +"href=\"%(login_url)s\">sign in</a>." +msgstr "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to <a " +"href=\"%(login_url)s\">sign in</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" + diff --git a/src/wolnelektury/locale-contrib/es/LC_MESSAGES/django.mo b/src/wolnelektury/locale-contrib/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..a5ad327ba Binary files /dev/null and b/src/wolnelektury/locale-contrib/es/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale-contrib/es/LC_MESSAGES/django.po b/src/wolnelektury/locale-contrib/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..bc180c5e3 --- /dev/null +++ b/src/wolnelektury/locale-contrib/es/LC_MESSAGES/django.po @@ -0,0 +1,674 @@ +# Spanish translations for PROJECT. +# Copyright (C) 2012 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-08-14 17:50+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: es <LL@li.org>\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "Contraseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "Recuérdame" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +#, fuzzy +msgid "E-mail address" +msgstr "Direcciones de correo electrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "Correo elctrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "Nombre de usuario" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "Esta cuenta de usuario está actualmente inactiva." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "El correo electrónico y/o contraseña son incorrectos." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "El nombre de usuario y/o contraseña son incorrectos." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +#, fuzzy +msgid "The login and/or password you specified are not correct." +msgstr "El nombre de usuario y/o contraseña son incorrectos." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "Correo elctrónico (opcional)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +#, fuzzy +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "Nombre de usuario sólo puede consistir de letras, números y guiones bajos" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "El nombre de usuario está ocupado. Por favor, elija otro." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +#, fuzzy +msgid "A user is already registered with this e-mail address." +msgstr "Un usuario está registrado con esta direccin de correo electrónico." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "Contraseña (otra vez)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "Tiene que introducir cada vez la misma contraseña." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +#, fuzzy +msgid "This e-mail address is already associated with this account." +msgstr "Este correo electrónico ya ha sido asociado a esta cuenta de usuario." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +#, fuzzy +msgid "This e-mail address is already associated with another account." +msgstr "Este correo electrónico ya ha sido asociado a otra cuenta de usuario." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "Contraseña actual" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "Nueva contarseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "Nueva contarseña (otra vez)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "Introduzca su contraseña actual, por favor." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "Este correo electrónico no ha sido asignado a ninguna cuenta de usuario." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +#, fuzzy +msgid "email address" +msgstr "Direcciones de correo electrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +#, fuzzy +msgid "email addresses" +msgstr "Direcciones de correo electrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +#, fuzzy +msgid "email confirmation" +msgstr "Confirmación de la dirección de correo electrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +#, fuzzy +msgid "email confirmations" +msgstr "Confirmación de la dirección de correo electrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "Ha iniciado sesión como %(user)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "La confirmación ha sido enviada a %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, fuzzy, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "Dirección de correo electrónico eliminado %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "Dirección de correo electrónico eliminado %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +#, fuzzy +msgid "Your primary e-mail address must be verified" +msgstr "Su correo electrónico ha sido verificado" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "La dirección de correo electrónico principal establecida" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "Contraseña ha sido cambiada con éxito." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "Contraseña ha sido establecida con éxito." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "Ha cerrado sesión." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +#, fuzzy +msgid "Your account has no password set up." +msgstr "Su cuenta de usuario local todavÃa no tiene la contraseña establecida." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +#, fuzzy +msgid "Your account has no verified e-mail address." +msgstr "" +"Su cuenta de usuario local no dispone de direcciones de correo " +"electrónico verificadas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +#, fuzzy +msgid "The social account has been connected" +msgstr "La cuenta social ha sido desconectada" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "La cuenta social ha sido desconectada" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "Respuesta inválida al obtener request token de \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "Respuesta inválida al obtener access token de \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, fuzzy, python-format +msgid "No request token saved for \"%s\"." +msgstr "No hay request token guardado para \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, fuzzy, python-format +msgid "No access token saved for \"%s\"." +msgstr "No hay acces token guardado para \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "No hay acceso a recursos privados en \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "Cuenta de usuario" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "Direcciones de correo electrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +#, fuzzy +msgid "The following e-mail addresses are associated with your account:" +msgstr "" +"A su cuenta de usuario están asociados los siguientes direcciones de " +"correo electrónico:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "Verificado" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "No verificado" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "Principal" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "La dirección de correo electrónico principal" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "Reenviar verificación" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "Borrar" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "Aviso:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" +"Actualmente no tiene ninguna dirección de correo electrónico configurada." +" Debe agregar una para poder recibir notificaciones, restablecer su " +"contraseña etc." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "Agregar dirección de correo electrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "Agregar correo electrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "¿Está seguro que quiere borrar el correo electrónico seleccionado?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +#, fuzzy +msgid "Confirm E-mail Address" +msgstr "La dirección de correo electrónico principal establecida" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, fuzzy, python-format +msgid "" +"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Ha confirmado que <a href=\"mailto:%(email)s\">%(email)s</a> es la " +"dirección del correo electrónico para usuario '%(user)s'." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please <a " +"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, fuzzy, python-format +msgid "" +"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Ha confirmado que <a href=\"mailto:%(email)s\">%(email)s</a> es la " +"dirección del correo electrónico para usuario '%(user)s'." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "Iniciar sesión" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, fuzzy, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, <a " +"href=\"%(signup_url)s\">sign up</a> \n" +"for a %(site_name)s account and sign in below:" +msgstr "" +"Por favor, inicie sesión con una \n" +" de sus cuentas de terceros o <a \n" +"href=\"%(signup_url)s\"> regÃstrese </a> en la cuenta de %(site_name)s e " +"inicie sesión \n" +"abajo:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "o" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "¿Olvidaste tu contraseña?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "Cerrar sesión" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "Cambia la contraseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "Borra la contraseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "Puede borrar su contraseña ya que ha iniciado sesión con OpenID." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "borra mi contraseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "La contraseña ha sido borrada" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "Su contraseña ha sido borrada. " + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "Restablecimiento de la contraseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" +"¿Olvidaste tu contraseña? Introduce aquà tu dirección de correo " +"electrónico y te enviamos un mensaje que te permitirá restablecerla. " + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "Restablecimiento de la contraseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +#, fuzzy +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" +"Le hemos enviado un correo. Si no recibe ningún correo dentro de unos " +"minutos, póngase en contacto con nosotros a través de <a " +"href=\"mailto:%(CONTACT_EMAIL)s\">%(CONTACT_EMAIL)s</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "Token incorrecto" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " +"reset</a>." +msgstr "" +"El enlace de restablecimiento de la contraseña ha sido inválido. Es " +"probable que ya haya sido usado. Por favor, solicite uno nuevo <a " +"href=\"%(passwd_reset_url)s\">new password reset</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "cambia la contraseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "Su contraseña ya se ha cambiado." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "Establecer contraseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "Registrarse" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "Registrarse" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please <a href=\"%(login_url)s\">sign " +"in</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "Verifique su dirección de correo electrónico" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " +"your e-mail address</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" +"Ha recibido este correo porque usted u otra persona ha solicitado la " +"contraseña de su cuenta de usuario en %(site_domain)s. \n" +"Si no ha solicitado restablecimiento de su contraseña, pase de este " +"mensaje. Abra el enlace de abajo para restablecer su contraseña.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"Le recordamos que su nombre de usuario es %(username)s.\n" +" \n" +"¡Gracias por usar nuestra página!\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "La dirección de correo electrónico en caso de restablecer la contraseña" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "Nota" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "ya está conectado como %(user_display)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "Iniciar sesión con OpenID " + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "La cuenta de usuario inactiva" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "Esta cuenta de usuario está inactiva." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "Error al iniciar sesión en la red social" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +#, fuzzy +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "" +"Ha ocurrido un error al intentar iniciar sesión a través de su cuenta de " +"red social." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Conexiones de la cuenta de usuario" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" +"Puede iniciar sesión en su cuenta de usuario a través de cualquiera de " +"las siguientes cuentas de terceros:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +#, fuzzy +msgid "You currently have no social network accounts connected to this account." +msgstr "La cuenta social ha sido conectada con su cuenta de usuario existente " + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "Agrega una cuenta de terceros" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "Nombre de usuario ha sido cancelado" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, fuzzy, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to <a " +"href=\"%(login_url)s\">sign in</a>." +msgstr "" +"Ha decidido anular lo de iniciar sesión en nuestra página usando una de " +"sus cuentas de usuario existentes. Si se ha equivocado, pase a<a " +"href=\"%(login_url)s\">sign in</a>, por favor." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" +"Está a punto de usar su %(provider_name)s cuenta de usuario para iniciar " +"sesión en \n" +"%(site_name)s. El último paso es rellenar este formulario:" + diff --git a/src/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.mo b/src/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..047cbaefa Binary files /dev/null and b/src/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.po b/src/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..7703f0209 --- /dev/null +++ b/src/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.po @@ -0,0 +1,612 @@ +# French translations for PROJECT. +# Copyright (C) 2012 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-22 14:23+0100\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: fr <LL@li.org>\n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +msgid "E-mail address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +msgid "The login and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +msgid "A user is already registered with this e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +msgid "This e-mail address is already associated with this account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +msgid "This e-mail address is already associated with another account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +msgid "email address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +msgid "email addresses" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +msgid "email confirmation" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +msgid "email confirmations" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +msgid "Your primary e-mail address must be verified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +msgid "Your account has no password set up." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +msgid "Your account has no verified e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +msgid "The social account has been connected" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, python-format +msgid "No request token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, python-format +msgid "No access token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +msgid "The following e-mail addresses are associated with your account:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +msgid "Confirm E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, python-format +msgid "" +"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please <a " +"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, python-format +msgid "" +"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, <a " +"href=\"%(signup_url)s\">sign up</a> \n" +"for a %(site_name)s account and sign in below:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " +"reset</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please <a href=\"%(login_url)s\">sign " +"in</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " +"your e-mail address</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +msgid "You currently have no social network accounts connected to this account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to <a " +"href=\"%(login_url)s\">sign in</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" + diff --git a/src/wolnelektury/locale-contrib/it/LC_MESSAGES/django.mo b/src/wolnelektury/locale-contrib/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..ecc10676d Binary files /dev/null and b/src/wolnelektury/locale-contrib/it/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale-contrib/it/LC_MESSAGES/django.po b/src/wolnelektury/locale-contrib/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..c52eb4c4c --- /dev/null +++ b/src/wolnelektury/locale-contrib/it/LC_MESSAGES/django.po @@ -0,0 +1,612 @@ +# English translations for PROJECT. +# Copyright (C) 2012 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-22 14:23+0100\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: en <LL@li.org>\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +msgid "E-mail address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +msgid "The login and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +msgid "A user is already registered with this e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +msgid "This e-mail address is already associated with this account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +msgid "This e-mail address is already associated with another account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +msgid "email address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +msgid "email addresses" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +msgid "email confirmation" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +msgid "email confirmations" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +msgid "Your primary e-mail address must be verified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +msgid "Your account has no password set up." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +msgid "Your account has no verified e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +msgid "The social account has been connected" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, python-format +msgid "No request token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, python-format +msgid "No access token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +msgid "The following e-mail addresses are associated with your account:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +msgid "Confirm E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, python-format +msgid "" +"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please <a " +"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, python-format +msgid "" +"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, <a " +"href=\"%(signup_url)s\">sign up</a> \n" +"for a %(site_name)s account and sign in below:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " +"reset</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please <a href=\"%(login_url)s\">sign " +"in</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " +"your e-mail address</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +msgid "You currently have no social network accounts connected to this account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to <a " +"href=\"%(login_url)s\">sign in</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" + diff --git a/src/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.mo b/src/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..b57074733 Binary files /dev/null and b/src/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.po b/src/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..2d58ef078 --- /dev/null +++ b/src/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.po @@ -0,0 +1,671 @@ +# Lithuanian translations for PROJECT. +# Copyright (C) 2012 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-08-14 17:50+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: lt <LL@li.org>\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"(n%100<10 || n%100>=20) ? 1 : 2)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "Slaptažodis" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "Ä®siminti mane" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +#, fuzzy +msgid "E-mail address" +msgstr "El. paÅ¡to adresai" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "El. paÅ¡tas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "Vartotojo vardas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "Å i paskyra yra Å¡iuo metu neaktyvi." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "El. paÅ¡to adresas ir/arba slaptažodis nÄra teisingas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "Vartotojo vardas ir/arba slaptažodis nÄra teisingas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +#, fuzzy +msgid "The login and/or password you specified are not correct." +msgstr "Vartotojo vardas ir/arba slaptažodis nÄra teisingas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "El. paÅ¡tas (pasirenkamas)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +#, fuzzy +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "" +"Vartotojo vardas gali bÅ«ti sudarytas tik iÅ¡ raidžių, skaiÄių ir " +"pabraukimo brÅ«kÅ¡nelių." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "Å is vartotojo vardas yra užimtas. PraÅ¡ome pasirinkite kitÄ ." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +#, fuzzy +msgid "A user is already registered with this e-mail address." +msgstr "Å iuo elektroninio paÅ¡to adresu jau yra užsiregistravÄs vartotojas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "Slaptažodis (pakartoti)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "KiekvienÄ kartÄ turite įvesti tokį patį slaptažodį." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +#, fuzzy +msgid "This e-mail address is already associated with this account." +msgstr "Å is el. paÅ¡to adresas jau yra susietas su Å¡ia paskyra." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +#, fuzzy +msgid "This e-mail address is already associated with another account." +msgstr "Å is el. paÅ¡to adresas jau yra susietas su kita paskyra." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "Dabartinis slaptažodis" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "Naujas slaptažodis" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "Naujas slaptažodis (pakartoti)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "PraÅ¡ome įvesti jÅ«sų dabartinį slaptažodį." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "Å is el. paÅ¡to adresas nÄra priskirtas jokio vartotojo paskyrai." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +#, fuzzy +msgid "email address" +msgstr "El. paÅ¡to adresai" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +#, fuzzy +msgid "email addresses" +msgstr "El. paÅ¡to adresai" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +#, fuzzy +msgid "email confirmation" +msgstr "El. paÅ¡to adreso patvirtinimas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +#, fuzzy +msgid "email confirmations" +msgstr "El. paÅ¡to adreso patvirtinimas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "SÄkmingai prisijungÄs kaip %(user)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "El. paÅ¡to patvirtinimas buvo iÅ¡siųstas į %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, fuzzy, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "PaÅ¡alintas el. paÅ¡to adresas %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "PaÅ¡alintas el. paÅ¡to adresas %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +#, fuzzy +msgid "Your primary e-mail address must be verified" +msgstr "JÅ«sų el.paÅ¡to adresas jau buvo patikrintas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "Nustatytas pagrindinis el. paÅ¡to adresas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "Slaptažodis sÄkmingai pakeistas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "Slaptažodis sÄkmingai nustatytas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "JÅ«s atsijungÄte." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +#, fuzzy +msgid "Your account has no password set up." +msgstr "JÅ«sų vietinÄs paskyros slaptažodis dar yra nenustatytas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +#, fuzzy +msgid "Your account has no verified e-mail address." +msgstr "JÅ«sų vietinÄs paskyros el. paÅ¡to adresas dar nepatikrintas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +#, fuzzy +msgid "The social account has been connected" +msgstr "SocialinÄ paskyra buvo atjungta" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "SocialinÄ paskyra buvo atjungta" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "Neteisingas atsakas gaunant užklausos žetonÄ iÅ¡ \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "Neteisingas atsakas gaunant prieigos žetonÄ iÅ¡ \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, python-format +msgid "No request token saved for \"%s\"." +msgstr "NÄra užklausos žetono įraÅ¡yto \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, python-format +msgid "No access token saved for \"%s\"." +msgstr "NÄra prieigos žetono įraÅ¡yto \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "TrÅ«ksta prieigos prie privaÄių iÅ¡teklių \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "Paskyra" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "El. paÅ¡to adresai" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +#, fuzzy +msgid "The following e-mail addresses are associated with your account:" +msgstr "Å ie el. paÅ¡to adresai yra priskirti jÅ«sų paskyrai:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "Patikrintas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "Nepatikrintas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "Pirminis" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "Padaryti pirminiu" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "Dar kartÄ siųsti patikrinimÄ " + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "PaÅ¡alinti" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "Ä®spÄjimas:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" +"Å iuo metu neturite nustatyto jokio el. paÅ¡to adreso. JÅ«s tikrai " +"turÄtumÄte pridÄti el. paÅ¡to adresÄ , kad gautumÄte praneÅ¡imus, " +"atstatytumÄte jÅ«sų slaptažodį ir t.t." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "PridÄti el. paÅ¡to adresÄ " + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "PridÄti el. paÅ¡tÄ " + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "Ar esate tikri, kad norite paÅ¡alinti pasirinktÄ el. paÅ¡to adresÄ ?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +#, fuzzy +msgid "Confirm E-mail Address" +msgstr "Nustatytas pagrindinis el. paÅ¡to adresas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, fuzzy, python-format +msgid "" +"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Patvirtinote, kad <a href=\"mailto:%(email)s\">%(email)s</a> yra " +"'%(user)s' vartotojo el. paÅ¡to adresas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please <a " +"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, fuzzy, python-format +msgid "" +"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Patvirtinote, kad <a href=\"mailto:%(email)s\">%(email)s</a> yra " +"'%(user)s' vartotojo el. paÅ¡to adresas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "Prisijungti" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, fuzzy, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, <a " +"href=\"%(signup_url)s\">sign up</a> \n" +"for a %(site_name)s account and sign in below:" +msgstr "" +"PraÅ¡ome prisijungti su viena\n" +"iÅ¡ jÅ«sų third party paskyrų. Arba <a \n" +"href=\"%(signup_url)s\">užsiregistruoti</a> %(site_name)s paskyrai " +"sukurti ir prisijungti\n" +"žemiau:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "arba" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "PamirÅ¡ote slaptažodį?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "AtsijungÄs" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "Keisti slaptažodį" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "PaÅ¡alinti slaptažodį" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "" +"Galite paÅ¡alinti jÅ«sų slaptažodį, nes esate prisijungÄ naudodamiesi " +"OpenID." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "paÅ¡alinti mano slaptažodį" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "Slaptažodis paÅ¡alintas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "JÅ«sų slaptažodis paÅ¡alintas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "Slaptažodžio atstatymas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" +"PamirÅ¡ote slaptažodį? Ä®veskite jÅ«sų el. paÅ¡to adresÄ Å¾emiau ir mes " +"iÅ¡siųsime jums el. laiÅ¡kÄ leidžiantį jį atstatyti." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "Atstatyti mano slaptažodį" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +#, fuzzy +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" +"Jums iÅ¡siuntÄme el. laiÅ¡kÄ . Jei to negausite per kelias minutes, " +"susisiekite su mumis <a " +"href=\"mailto:%(CONTACT_EMAIL)s\">%(CONTACT_EMAIL)s</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "Blogas žetonas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " +"reset</a>." +msgstr "" +"Atstatymo slaptažodžio nuoroda buvo netinkama, galbÅ«t, nes jau buvo " +"panaudota. PraÅ¡ome papraÅ¡yti <a href=\"%(passwd_reset_url)s\">naujo " +"slaptažodžio atstatymo</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "keisti slaptažodį" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "JÅ«sų slaptažodis pakeistas." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "Nustatyti slaptažodį" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "Registracija" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "Registruotis" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please <a href=\"%(login_url)s\">sign " +"in</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "Patikrinkite jÅ«sų el. paÅ¡to adresÄ " + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " +"your e-mail address</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" +"Gavote šį el. laiÅ¡kÄ , nes papraÅ¡Äte, arba kitas asmuo papraÅ¡Ä, atstatyti " +"slaptažodį jÅ«sų paskyrai Äia %(site_domain)s.\n" +"Galite į jį nekreipti dÄmesio jei nepraÅ¡Äte slaptažodžio atstatymo. " +"Paspauskite jÅ«sų slaptažodžio atstatymui skirtÄ nuorodÄ .\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"JÅ«sų vartotojo vardas yra %(username)s\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "Slaptažodžio atstatymo el. laiÅ¡kas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "Pastaba" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "jÅ«s jau esate prisijungÄs kaip %(user_display)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "OpenID prisijungimas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "Paskyra neaktyvi" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "Å i paskyra neaktyvi." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "Klaida " + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +#, fuzzy +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "Ä®vyko klaida prisijungiant per jÅ«sų socialinio tinklo paskyrÄ ." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Paskyros jungtys" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" +"Galite prisijungti prie jÅ«sų paskyros naudodamiesi Å¡iomis 3rd party " +"paskyromis:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +#, fuzzy +msgid "You currently have no social network accounts connected to this account." +msgstr "Å i socialinÄ paskyra buvo prijungta prie jÅ«sų paskyros" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "PridÄti 3rd Party Paskyra" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "Prisijungimas atÅ¡auktas" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, fuzzy, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to <a " +"href=\"%(login_url)s\">sign in</a>." +msgstr "" +"NusprendÄte atÅ¡aukti prisijungimÄ prie mÅ«sų interneto svetainÄs " +"naudodamiesi viena iÅ¡ jÅ«sų paskyrų. Jei įvyko klaida, praÅ¡ome pradÄti Äia" +" <a href=\"%(login_url)s\">sign in</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" +"JÅ«s ruoÅ¡iatÄs naudotis jÅ«sų %(provider_name)s paskyra, kad " +"prisijungtumÄte prie \n" +"%(site_name)s. PraÅ¡ome užpildyti Å¡iÄ formÄ :" + diff --git a/src/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.mo b/src/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..3912839c1 Binary files /dev/null and b/src/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.po b/src/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..c189ecd62 --- /dev/null +++ b/src/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.po @@ -0,0 +1,668 @@ +# Polish translations for PROJECT. +# Copyright (C) 2012 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 15:46+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: pl <LL@li.org>\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && " +"(n%100<10 || n%100>=20) ? 1 : 2)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "HasÅo" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "HasÅo musi skÅadaÄ siÄ z co najmniej {0} znaków." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "ZapamiÄtaj mnie" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +msgid "E-mail address" +msgstr "Adres e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "E-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "Login" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "Nazwa użytkownika lub e-mail." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "Konto jest nieaktywne." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "Podany e-mail i/lub hasÅo sÄ niepoprawne." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "Podany login i/lub hasÅo sÄ niepoprawne." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +msgid "The login and/or password you specified are not correct." +msgstr "Podany login i/lub hasÅo sÄ niepoprawne." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "E-mail (opcjonalnie)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "Login może zawieraÄ tylko litery, cyfry i znaki @/./+/-/_." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "Ta nazwa użytkownika nie może zostaÄ użyta. Prosimy użyÄ innej." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "Ten login jest zajÄty. ProszÄ wybraÄ inny." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +msgid "A user is already registered with this e-mail address." +msgstr "Istnieje użytkownik o tym adresie e-mail." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "HasÅo (ponownie)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "ProszÄ wpisaÄ dwa razy to samo hasÅo." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +msgid "This e-mail address is already associated with this account." +msgstr "Ten adres e-mail jest już używany przez to konto." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +msgid "This e-mail address is already associated with another account." +msgstr "Ten adres e-mail jest już używany przez inne konto." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "Aktualne hasÅo" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "Nowe hasÅo" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "Nowe hasÅo (ponownie)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "ProszÄ wpisaÄ swoje aktualne hasÅo." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "Ten adres e-mail nie jest używany przez żadne konto." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +msgid "email address" +msgstr "adres e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +msgid "email addresses" +msgstr "adresy e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +msgid "email confirmation" +msgstr "potwierdzenie adresu e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +msgid "email confirmations" +msgstr "potwierdzenia adresów e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "Zalogowano jako %(user)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "E-mail potwierdzajÄ cy wysÅany do %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "Adres %(email)s zostaÅ potwierdzony." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "Nie można usunÄ Ä gÅównego adresu e-mail (%(email)s)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "UsuniÄto adres e-mail %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +msgid "Your primary e-mail address must be verified" +msgstr "GÅówny adres e-mail musi zostaÄ potwierdzony" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "Ustawiono gÅówny adres e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "HasÅo zostaÅo zmienione." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "HasÅo zostaÅo ustawione." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "Wylogowano." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +msgid "Your account has no password set up." +msgstr "Twoje konto nie ma ustawionego hasÅa." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +msgid "Your account has no verified e-mail address." +msgstr "Twoje konto nie ma potwierdzonego adresu e-mail." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +msgid "The social account has been connected" +msgstr "Konto spoÅecznoÅciowe zostaÅo doÅÄ czone" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "Konto spoÅecznoÅciowe zostaÅo odÅÄ czone." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, python-format +msgid "No request token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, python-format +msgid "No access token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "Brak dostÄpu do prywatnych zasobów pod adresem \"%s\"." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "Konto" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "Adresy e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +msgid "The following e-mail addresses are associated with your account:" +msgstr "Z Twoim kontem sÄ zwiÄ zane nastÄpujÄ ce adresy e-mail:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "Potwierdzony" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "Nie potwierdzony" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "GÅówny" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "Ustaw gÅówny" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "Ponownie przeÅlij link potwierdzajÄ cy" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "UsuÅ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "Uwaga:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" +"Nie masz ustawionego żadnego adresu e-mail. Dodanie adresu e-mail " +"umożliwi odzyskanie konta w przypadku utraty hasÅa." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "Dodaj adres e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "Dodaj e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "Czy na pewno usunÄ Ä wybrany adres e-mail?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +msgid "Confirm E-mail Address" +msgstr "Potwierdź adres e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, python-format +msgid "" +"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" +"ProszÄ potwierdziÄ adres <a href=\"mailto:%(email)s\">%(email)s</a> jako " +"e-mail użytkownika '%(user_display)s'." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "Potwierdź" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please <a " +"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." +msgstr "" +"Ten link z wiadomoÅci e-mail jest nieprawidÅowy lub nieaktualny. Możesz " +"<a href=\"%(email_url)s\">zamówiÄ kolejny link weryfikacyjny</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, python-format +msgid "" +"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Adres <a href=\"mailto:%(email)s\">%(email)s</a> zostaÅ wÅaÅnie " +"powierdzony jako e-mail dla użytkownika '%(user_display)s'." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "Zaloguj" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, <a " +"href=\"%(signup_url)s\">sign up</a> \n" +"for a %(site_name)s account and sign in below:" +msgstr "" +"Zaloguj za pomocÄ konta zewnÄtrznego, albo <a \n" +"href=\"%(signup_url)s\">zarejestruj siÄ</a> w serwisie %(site_name)s i " +"zaloguj poniżej:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "lub" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "Nie pamiÄtasz hasÅa?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "Wylogowano" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "ZmieÅ hasÅo" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "UsuÅ hasÅo" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "Możesz usunÄ Ä hasÅo, ponieważ jesteÅ zalogowany/-a za pomocÄ OpenID." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "usuÅ moje hasÅo" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "HasÅo usuniÄte" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "Twoje hasÅo zostaÅo usuniÄte." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "Odzyskiwanie hasÅa" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" +"Nie pamiÄtasz swojego hasÅa? Wpisz adres e-mail, a wyÅlemy Ci e-mail " +"umożliwiajÄ cy zresetowanie go." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "Odzyskaj hasÅo" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "Prosimy o kontakt w przypadku problemów z uzyskaniem nowego hasÅa." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" +"E-mail zostaÅ wysÅany. Prosimy o kontakt, jeÅli wiadomoÅÄ nie dotrze w " +"ciÄ gu kilku minut." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "BÅÄdny klucz" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " +"reset</a>." +msgstr "" +"Link resetujÄ cy hasÅo jest nieprawidÅowy, byÄ może ponieważ zostaÅ już " +"wczeÅniej użyty. Spróbuj <a href=\"%(passwd_reset_url)s\">zresetowaÄ " +"hasÅo ponownie</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "zmieÅ hasÅo" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "HasÅo zostaÅo zmienione." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "Ustaw hasÅo" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "Rejestracja" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "Zarejestruj siÄ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please <a href=\"%(login_url)s\">sign " +"in</a>." +msgstr "Masz już konto? <a href=\"%(login_url)s\">Zaloguj siÄ</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "Rejestracja zamkniÄta" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "Przepraszamy, ale rejestracja jest obecnie zamkniÄta." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "Potwierdź swój adres e-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" +"Na podany adres e-mail <a href=\"mailto:%(email)s\">%(email)s</a> zostaÅa" +" wysÅana wiadomoÅÄ w celu weryfikacji. ProszÄ kliknÄ Ä w podany w tej " +"wiadomoÅci link w celu zakoÅczenia procesu rejestracji. Prosimy o " +"kontakt, jeÅli wiadomoÅÄ nie dotrze w ciÄ gu kilku minut." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" +"W celu korzystania z tej czÄÅci strony wymagamy\n" +"potwierdzenia tożsamoÅci. W tym celu konieczne jest\n" +"potwierdzenie adresu e-mail. " + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" +"Na podany adres zostaÅa wysÅana wiadomoÅÄ w celu\n" +"weryfikacji. ProszÄ kliknÄ Ä na link wewnÄ trz tej wiadomoÅci. Prosimy\n" +"o kontakt, jeÅli wiadomoÅÄ nie dotrze w ciÄ gu kilku minut." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " +"your e-mail address</a>." +msgstr "" +"<strong>Uwaga:</strong> nadal możesz <a href=\"%(email_url)s\">zmieniÄ " +"swój adres e-mail</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" +"Użytkownik '%(user_display)s' podaÅ ten adres e-mail na stronie " +"%(site_name)s.\n" +"\n" +"Aby go potwierdziÄ, przejdź do %(activate_url)s\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" +"Otrzymujesz tego e-maila, ponieważ zostaliÅmy poproszeni o zresetowanie " +"hasÅa dla konta w serwisie %(site_domain)s.\n" +"Możesz go zignorowaÄ, jeÅli proÅba nie pochodzi od Ciebie. Wejdź pod " +"poniższy link, aby zresetowaÄ swoje hasÅo.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"W razie czego, Twój login to: %(username)s.\n" +"\n" +"MiÅego czytania!\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "E-mail resetujÄ cy hasÅo" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "ZwrÃ³Ä uwagÄ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "jesteÅ już zalogowany/-a jako %(user_display)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "Logowanie przy użyciu OpenID" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "Konto nieaktywne" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "To konto jest nieaktywne." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "BÅÄ d podczas logowania przy użyciu sieci spoÅecznoÅciowej." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "" +"Podczas próby zalogowania za poÅrednictwej konta w sieci spoÅecznoÅciowej" +" wystÄ piÅ bÅÄ d." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "PowiÄ zania konta" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" +"Możesz zalogowaÄ siÄ na swoje konto używajÄ c nastÄpujÄ cych kont " +"zewnÄtrznych:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +msgid "You currently have no social network accounts connected to this account." +msgstr "" +"Aktualnie do Twojego konta nie sÄ podÅÄ czone żadne konta w sieciach " +"spoÅecznoÅciowych." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "Dodaj konto zewnÄtrzne" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "Logowanie anulowane" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to <a " +"href=\"%(login_url)s\">sign in</a>." +msgstr "" +"Logowanie do serwisu za pomocÄ istniejÄ cego konta zostaÅo anulowane. " +"JeÅli byÅ to bÅÄ d, przejdź do <a href=\"%(login_url)s\">strony " +"logowania</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" +"Za chwilÄ użyjesz konta w serwisie %(provider_name)s aby zalogowaÄ siÄ \n" +"do serwisu %(site_name)s. Zanim to nastÄ pi, wypeÅnij proszÄ ten krótki " +"formularz:" + diff --git a/src/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.mo b/src/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..df98508d7 Binary files /dev/null and b/src/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.po b/src/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..9c9f8156b --- /dev/null +++ b/src/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.po @@ -0,0 +1,613 @@ +# Russian translations for PROJECT. +# Copyright (C) 2012 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-03-22 14:23+0100\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: ru <LL@li.org>\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +msgid "E-mail address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +msgid "The login and/or password you specified are not correct." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +msgid "A user is already registered with this e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +msgid "This e-mail address is already associated with this account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +msgid "This e-mail address is already associated with another account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +msgid "email address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +msgid "email addresses" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +msgid "email confirmation" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +msgid "email confirmations" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +msgid "Your primary e-mail address must be verified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +msgid "Your account has no password set up." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +msgid "Your account has no verified e-mail address." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +msgid "The social account has been connected" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, python-format +msgid "No request token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, python-format +msgid "No access token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +msgid "The following e-mail addresses are associated with your account:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +msgid "Confirm E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, python-format +msgid "" +"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please <a " +"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, python-format +msgid "" +"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, <a " +"href=\"%(signup_url)s\">sign up</a> \n" +"for a %(site_name)s account and sign in below:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " +"reset</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please <a href=\"%(login_url)s\">sign " +"in</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " +"your e-mail address</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +msgid "You currently have no social network accounts connected to this account." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to <a " +"href=\"%(login_url)s\">sign in</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" + diff --git a/src/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.mo b/src/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..d6335b97c Binary files /dev/null and b/src/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.po b/src/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..0a86ef3e2 --- /dev/null +++ b/src/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.po @@ -0,0 +1,673 @@ +# Ukrainian translations for PROJECT. +# Copyright (C) 2012 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-08-14 17:49+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: uk <LL@li.org>\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 +msgid "Password" +msgstr "ÐаÑолÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 +msgid "Password must be a minimum of {0} characters." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 +msgid "Remember Me" +msgstr "ÐапамâÑÑаÑи мене" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 +#, fuzzy +msgid "E-mail address" +msgstr "ÐлекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑи" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 +msgid "E-mail" +msgstr "E-mail" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 +msgid "Username" +msgstr "ÐмâÑ ÐºÐ¾ÑиÑÑÑваÑа" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 +msgid "Username or e-mail" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 +msgid "This account is currently inactive." +msgstr "ÐкаÑÐ½Ñ Ð½Ð° даний Ð¼Ð¾Ð¼ÐµÐ½Ñ Ñ Ð½ÐµÐ°ÐºÑивним." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 +msgid "The e-mail address and/or password you specified are not correct." +msgstr "ÐÐºÐ°Ð·Ð°Ð½Ñ ÐµÐ»ÐµÐºÑÑонна адÑеÑа Ñа/або паÑÐ¾Ð»Ñ Ð½ÐµÐ¿ÑавилÑнÑ." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 +msgid "The username and/or password you specified are not correct." +msgstr "ÐÐºÐ°Ð·Ð°Ð½Ñ ÑмâÑ ÐºÐ¾ÑиÑÑÑваÑа Ñа/або паÑÐ¾Ð»Ñ Ð½ÐµÐ¿ÑавилÑнÑ." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 +#, fuzzy +msgid "The login and/or password you specified are not correct." +msgstr "ÐÐºÐ°Ð·Ð°Ð½Ñ ÑмâÑ ÐºÐ¾ÑиÑÑÑваÑа Ñа/або паÑÐ¾Ð»Ñ Ð½ÐµÐ¿ÑавилÑнÑ." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 +msgid "E-mail (optional)" +msgstr "E-mail (ÑакÑлÑÑаÑивно)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 +#, fuzzy +msgid "Usernames can only contain letters, digits and @/./+/-/_." +msgstr "ÐмâÑ ÐºÐ¾ÑиÑÑÑваÑа може мÑÑÑиÑи ÑÑлÑки бÑкви, ÑиÑÑи Ñа пÑдÑеÑкÑваннÑ." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 +msgid "Username can not be used. Please use other username." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 +msgid "This username is already taken. Please choose another." +msgstr "Це ÑмâÑ ÐºÐ¾ÑиÑÑÑваÑа вже викоÑиÑÑано. ÐÑÐ´Ñ Ð»Ð°Ñка, вибеÑÑÑÑ ÑнÑе." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 +#, fuzzy +msgid "A user is already registered with this e-mail address." +msgstr "ÐоÑиÑÑÑÐ²Ð°Ñ Ð· ÑÐ°ÐºÐ¾Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ð¾Ñ Ð°Ð´ÑеÑÐ¾Ñ Ð²Ð¶Ðµ ÑÑнÑÑ." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 +msgid "Password (again)" +msgstr "ÐаÑÐ¾Ð»Ñ (повÑоÑиÑи)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 +msgid "You must type the same password each time." +msgstr "ÐпиÑÑÑÑ Ð´Ð²ÑÑÑ Ñакий Ñамий паÑолÑ." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 +#, fuzzy +msgid "This e-mail address is already associated with this account." +msgstr "Ð¦Ñ ÐµÐ»ÐµÐºÑÑонна адÑеÑа вже пов'Ñзана з ÑÑм акаÑнÑом." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 +#, fuzzy +msgid "This e-mail address is already associated with another account." +msgstr "Ð¦Ñ ÐµÐ»ÐµÐºÑÑонна адÑеÑа вже пов'Ñзана з ÑнÑим акаÑнÑом." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 +msgid "Current Password" +msgstr "ÐкÑÑалÑний паÑолÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 +msgid "New Password" +msgstr "Ðовий паÑолÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 +msgid "New Password (again)" +msgstr "Ðовий паÑÐ¾Ð»Ñ (повÑоÑиÑи)" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 +msgid "Please type your current password." +msgstr "ÐведÑÑÑ Ð±ÑÐ´Ñ Ð»Ð°Ñка ÐÐ°Ñ ÑепеÑÑÑнÑй паÑолÑ." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 +msgid "The e-mail address is not assigned to any user account" +msgstr "Ð¦Ñ ÐµÐ»ÐµÐºÑÑонна адÑеÑа не пов'Ñзана з жодним акаÑнÑом." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 +#, fuzzy +msgid "email address" +msgstr "ÐлекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑи" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 +#, fuzzy +msgid "email addresses" +msgstr "ÐлекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑи" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 +#, fuzzy +msgid "email confirmation" +msgstr "ÐÑдÑвеÑÐ´Ð¶ÐµÐ½Ð½Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ð¾Ñ Ð°Ð´ÑеÑи." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 +#, fuzzy +msgid "email confirmations" +msgstr "ÐÑдÑвеÑÐ´Ð¶ÐµÐ½Ð½Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ð¾Ñ Ð°Ð´ÑеÑи." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 +#, python-format +msgid "Successfully signed in as %(user)s." +msgstr "Ðи ÑÑпÑÑно ÑвÑйÑли Ñк %(user)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 +#, python-format +msgid "Confirmation e-mail sent to %(email)s" +msgstr "ÐодвÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿ÑдÑвеÑÐ´Ð¶ÐµÐ½Ð½Ñ ÑеÑÑÑÑаÑÑÑ Ð²Ð¸Ñлано на %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 +#, python-format +msgid "You have confirmed %(email)s." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 +#, fuzzy, python-format +msgid "You cannot remove your primary e-mail address (%(email)s)" +msgstr "Ðидалено елекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 +#, python-format +msgid "Removed e-mail address %(email)s" +msgstr "Ðидалено елекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ %(email)s" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 +#, fuzzy +msgid "Your primary e-mail address must be verified" +msgstr "ÐаÑÑ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ Ð¿ÑдÑвеÑджено." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 +msgid "Primary e-mail address set" +msgstr "ÐÑÑановлено оÑÐ½Ð¾Ð²Ð½Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 +msgid "Password successfully changed." +msgstr "ÐаÑÐ¾Ð»Ñ ÑÑпÑÑно змÑнено." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 +msgid "Password successfully set." +msgstr "УÑпÑÑно вÑÑановлено паÑолÑ." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 +msgid "You have signed out." +msgstr "Ðи вийÑли з акаÑнÑÑ." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 +#, fuzzy +msgid "Your account has no password set up." +msgstr "ÐÐ»Ñ ÐаÑого локалÑного акаÑнÑÑ Ð½Ðµ вÑÑановлено паÑолÑ." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 +#, fuzzy +msgid "Your account has no verified e-mail address." +msgstr "" +"ÐÐ»Ñ ÐаÑого локалÑного акаÑнÑÑ Ð½Ðµ вÑÑановлено пеÑевÑÑÐµÐ½Ð¾Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ð¾Ñ " +"адÑеÑи." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 +#, fuzzy +msgid "The social account has been connected" +msgstr "ÐблÑковий Ð·Ð°Ð¿Ð¸Ñ Ð² ÑоÑÑалÑнÑй меÑÐµÐ¶Ñ Ð²Ñд'Ñднано." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 +msgid "The social account has been disconnected" +msgstr "ÐблÑковий Ð·Ð°Ð¿Ð¸Ñ Ð² ÑоÑÑалÑнÑй меÑÐµÐ¶Ñ Ð²Ñд'Ñднано." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 +#, python-format +msgid "Invalid response while obtaining request token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 +#, python-format +msgid "Invalid response while obtaining access token from \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 +#, python-format +msgid "No request token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 +#, python-format +msgid "No access token saved for \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 +#, python-format +msgid "No access to private resources at \"%s\"." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 +msgid "Account" +msgstr "ÐкаÑнÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 +msgid "E-mail Addresses" +msgstr "ÐлекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑи" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 +#, fuzzy +msgid "The following e-mail addresses are associated with your account:" +msgstr "Ð ÐаÑим акаÑнÑом пов'ÑÐ·Ð°Ð½Ñ Ð½Ð°ÑÑÑÐ¿Ð½Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑи:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 +msgid "Verified" +msgstr "ÐеÑевÑÑено" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 +msgid "Unverified" +msgstr "ÐепеÑевÑÑено" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 +msgid "Primary" +msgstr "ÐÑновна" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 +msgid "Make Primary" +msgstr "ÐÑобиÑи оÑновноÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 +msgid "Re-send Verification" +msgstr "ÐадÑÑлаÑи Ñе Ñаз повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿ÐµÑевÑÑки" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 +msgid "Remove" +msgstr "ÐидалиÑи" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "Warning:" +msgstr "ÐопеÑедженнÑ:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 +msgid "" +"You currently do not have any e-mail address set up. You should really " +"add an e-mail address so you can receive notifications, reset your " +"password, etc." +msgstr "" +"Ðи не додали Ð¶Ð¾Ð´Ð½Ð¾Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ð¾Ñ Ð°Ð´ÑеÑи. РекомендÑÑмо Ðам додаÑи адÑеÑÑ, " +"Ð´Ð»Ñ ÑÑого Ñоб оÑÑимÑваÑи повÑдомленнÑ, маÑи можливÑÑÑÑ Ð²ÑÐ´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÑолÑ" +" ÑоÑо." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 +msgid "Add E-mail Address" +msgstr "ÐодаÑи елекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 +msgid "Add E-mail" +msgstr "ÐодаÑи елекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 +msgid "Do you really want to remove the selected e-mail address?" +msgstr "Чи ÑпÑÐ°Ð²Ð´Ñ Ñ Ð¾ÑеÑе видалиÑи вибÑÐ°Ð½Ñ Ð°Ð´ÑеÑÑ?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 +#, fuzzy +msgid "Confirm E-mail Address" +msgstr "ÐÑÑановлено оÑÐ½Ð¾Ð²Ð½Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 +#, fuzzy, python-format +msgid "" +"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Ðи пÑдÑвеÑдили, Ñо адÑеÑа <a href=\"mailto:%(email)s\">%(email)s</a> Ñ " +"адÑеÑÐ¾Ñ ÐºÐ¾ÑиÑÑÑваÑа '%(user)s'." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 +msgid "Confirm" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 +#, python-format +msgid "" +"This e-mail confirmation link expired or is invalid. Please <a " +"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 +#, fuzzy, python-format +msgid "" +"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " +"e-mail address for user %(user_display)s." +msgstr "" +"Ðи пÑдÑвеÑдили, Ñо адÑеÑа <a href=\"mailto:%(email)s\">%(email)s</a> Ñ " +"адÑеÑÐ¾Ñ ÐºÐ¾ÑиÑÑÑваÑа '%(user)s'." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 +msgid "Sign In" +msgstr "УвÑйÑи в акаÑнÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 +#, fuzzy, python-format +msgid "" +"Please sign in with one\n" +"of your existing third party accounts. Or, <a " +"href=\"%(signup_url)s\">sign up</a> \n" +"for a %(site_name)s account and sign in below:" +msgstr "" +"УвÑйдÑÑÑ Ð·Ð° допомогоÑ\n" +"ÑÑнÑÑÑого облÑкового запиÑÑ Ñ ÑнÑÑй ÑиÑÑемÑ. ÐожеÑе Ñакож, <a \n" +"href=\"%(signup_url)s\">ÑвÑйÑи</a> в акаÑÐ½Ñ %(site_name)s Ñа ÑвÑйÑи\n" +"нижÑе:" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 +msgid "or" +msgstr "або" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 +msgid "Forgot Password?" +msgstr "ÐабÑли паÑолÑ?" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 +msgid "Signed Out" +msgstr "Ðи вийÑли з акаÑнÑÑ." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Change Password" +msgstr "ÐмÑниÑи паÑолÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 +msgid "Delete Password" +msgstr "ÐидалиÑи паÑолÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 +msgid "" +"You may delete your password since you are currently logged in using " +"OpenID." +msgstr "ÐожеÑе видалиÑи ÑвÑй паÑолÑ, ÑÐ¾Ð¼Ñ Ñо заÑаз ви ÑвÑйÑли за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ OpenID." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 +msgid "delete my password" +msgstr "видалиÑи мÑй паÑолÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 +msgid "Password Deleted" +msgstr "ÐаÑÐ¾Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð¾" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 +msgid "Your password has been deleted." +msgstr "ÐÐ°Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð¾." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 +msgid "Password Reset" +msgstr "ÐмÑна паÑолÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll send " +"you an e-mail allowing you to reset it." +msgstr "" +"ÐабÑли паÑолÑ? ÐведÑÑÑ ÑÐ²Ð¾Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ, Ñоб оÑÑимаÑи ÑнÑÑÑÑкÑÑÑ " +"Ñодо вÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ паÑолÑ." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 +msgid "Reset My Password" +msgstr "ÐмÑниÑи мÑй паÑолÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 +msgid "Please contact us if you have any trouble resetting your password." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 +#, fuzzy +msgid "" +"We have sent you an e-mail. Please contact us if you do not receive it " +"within a few minutes." +msgstr "" +"Ðам бÑло виÑлано повÑдомленнÑ. ЯкÑо не оÑÑимаÑÑе його пÑоÑÑгом кÑлÑÐºÐ¾Ñ " +"Ñ Ð²Ð¸Ð»Ð¸Ð½, напиÑÑÑÑ Ð½Ð° адÑеÑÑ <a " +"href=\"mailto:%(CONTACT_EMAIL)s\">%(CONTACT_EMAIL)s</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 +msgid "Bad Token" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 +#, python-format +msgid "" +"The password reset link was invalid, possibly because it has already been" +" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " +"reset</a>." +msgstr "" +"ÐоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° змÑÐ½Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð±Ñло непÑавилÑним, ÑÐ¾Ð¼Ñ Ñо його вже " +"викоÑиÑÑали. ÐÑÐ´Ñ Ð»Ð°Ñка, замовÑе <a href=\"%(passwd_reset_url)s\">Ñе однÑ" +" змÑÐ½Ñ Ð¿Ð°ÑолÑ</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 +msgid "change password" +msgstr "змÑниÑи паÑолÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 +msgid "Your password is now changed." +msgstr "ÐÐ°Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð·Ð¼Ñнено." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 +msgid "Set Password" +msgstr "ÐÑÑановиÑи паÑолÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "РеÑÑÑÑаÑÑÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 +msgid "Sign Up" +msgstr "РеÑÑÑÑÑваÑиÑÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 +#, python-format +msgid "" +"Already have an account? Then please <a href=\"%(login_url)s\">sign " +"in</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 +msgid "Sign Up Closed" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 +msgid "We are sorry, but the sign up is currently closed." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 +msgid "Verify Your E-mail Address" +msgstr "ÐеÑевÑÑиÑи елекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 +#, python-format +msgid "" +"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " +"verification. Follow the link provided to finalize the signup process. " +"Please contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 +msgid "" +"This part of the site requires us to verify that\n" +"you are who you claim to be. For this purpose, we require that you\n" +"verify ownership of your e-mail address. " +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 +msgid "" +"We have sent an e-mail to you for\n" +"verification. Please click on the link inside this e-mail. Please\n" +"contact us if you do not receive it within a few minutes." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 +#, python-format +msgid "" +"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " +"your e-mail address</a>." +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 +#, python-format +msgid "" +"User %(user_display)s at %(site_name)s has given this as an email " +"address.\n" +"\n" +"To confirm this is correct, go to %(activate_url)s\n" +msgstr "" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 +#, python-format +msgid "" +"You're receiving this e-mail because you or someone else has requested a " +"password for your user account at %(site_domain)s.\n" +"It can be safely ignored if you did not request a password reset. Click " +"the link below to reset your password.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"In case you forgot, your username is %(username)s.\n" +"\n" +"Thanks for using our site!\n" +msgstr "" +"Ðи оÑÑимали Ñе повÑдомленнÑ, ÑÐ¾Ð¼Ñ Ñо Ñ ÑоÑÑ Ð¿Ð¾Ð¿ÑоÑив пÑо змÑÐ½Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð´Ð»Ñ " +"ÐаÑого акаÑнÑÑ Ð½Ð° ÑайÑÑ %(site_domain)s.\n" +"ЯкÑо ви не пÑоÑили пÑо змÑнÑ, можеÑе пÑоÑгноÑÑваÑи Ñе повÑдомленнÑ. ÐÐ»Ñ " +"змÑни паÑÐ¾Ð»Ñ Ð½Ð°ÑиÑнÑÑÑ Ð¿Ð¾ÑиланнÑ.\n" +"\n" +"%(password_reset_url)s\n" +"\n" +"ÐагадÑÑмо, Ñо ÐаÑе Ñм'Ñ ÐºÐ¾ÑиÑÑÑваÑа Ñе %(username)s.\n" +"\n" +"ÐÑкÑÑмо за коÑиÑÑÑÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ñим ÑайÑом!\n" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 +msgid "Password Reset E-mail" +msgstr "ÐовÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²ÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ паÑолÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +msgid "Note" +msgstr "Увага" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 +#, python-format +msgid "you are already logged in as %(user_display)s." +msgstr "ви вже ÑвÑйÑли Ñк коÑиÑÑÑÐ²Ð°Ñ %(user_display)s." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 +msgid "OpenID Sign In" +msgstr "УвÑйÑи за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ OpenID" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 +msgid "Account Inactive" +msgstr "ÐеакÑивний акаÑнÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 +msgid "This account is inactive." +msgstr "Цей акаÑÐ½Ñ Ð½ÐµÐ°ÐºÑивний." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 +msgid "Social Network Login Failure" +msgstr "Ðеможливо ÑвÑйÑи в ÑиÑÑÐµÐ¼Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ ÑоÑÑалÑÐ½Ð¾Ñ Ð¼ÐµÑежÑ." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 +#, fuzzy +msgid "" +"An error occurred while attempting to login via your social network " +"account." +msgstr "" +"ÐÑд ÑÐ°Ñ ÑпÑоби ÑвÑйÑи за допомоги облÑкового запиÑÑ Ñ ÑоÑÑалÑнÑй меÑÐµÐ¶Ñ " +"наÑÑÑпила помилка." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "ÐовâÑÐ·Ð°Ð½Ñ Ð¾Ð±Ð»ÑÐºÐ¾Ð²Ñ Ð·Ð°Ð¿Ð¸Ñи" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" +"ÐожеÑе ÑвÑйÑи Ñ ÐÐ°Ñ Ð°ÐºÐ°ÑÐ½Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð¾Ð±Ð»ÑÐºÐ¾Ð²Ð¸Ñ Ð·Ð°Ð¿Ð¸ÑÑв Ñ Ð½Ð°ÑÑÑÐ¿Ð½Ð¸Ñ " +"ÑиÑÑÐµÐ¼Ð°Ñ :" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 +#, fuzzy +msgid "You currently have no social network accounts connected to this account." +msgstr "ÐÐ°Ñ Ð¾Ð±Ð»Ñковий Ð·Ð°Ð¿Ð¸Ñ Ñ ÑоÑÑалÑнÑй меÑÐµÐ¶Ñ Ð¿Ð¾Ð²'Ñзано з ÑÑнÑÑÑим акаÑнÑом." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 +msgid "Add a 3rd Party Account" +msgstr "ÐодаÑи облÑковий Ð·Ð°Ð¿Ð¸Ñ Ñ ÑнÑÑй ÑиÑÑемÑ" + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 +msgid "Login Cancelled" +msgstr "СпÑÐ¾Ð±Ñ ÑвÑйÑи в ÑиÑÑÐµÐ¼Ñ ÑкаÑовано." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 +#, fuzzy, python-format +msgid "" +"You decided to cancel logging in to our site using one of your existing " +"accounts. If this was a mistake, please proceed to <a " +"href=\"%(login_url)s\">sign in</a>." +msgstr "" +"Ðи виÑÑÑили ÑкаÑÑваÑи ÑпÑÐ¾Ð±Ñ ÑвÑйÑи в ÑиÑÑÐµÐ¼Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð²Ð¶Ðµ ÑÑнÑÑÑого " +"облÑкового запиÑÑ. ЯкÑо Ñе помилка, пеÑейдÑÑÑ Ð´Ð¾ <a " +"href=\"%(login_url)s\">ÑвÑйÑи</a>." + +#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 +#, python-format +msgid "" +"You are about to use your %(provider_name)s account to login to \n" +"%(site_name)s. As a final step, please complete the following form:" +msgstr "" +"ХоÑеÑе ÑкоÑиÑÑаÑиÑÑ Ð²Ð°Ñим облÑковим запиÑом %(provider_name)s Ñоб ÑвÑйÑи " +"на ÑÐ°Ð¹Ñ \n" +"%(site_name)s. ÐÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð½Ñ Ð¿ÑоÑеÑÑ, заповнÑÑÑ Ð±ÑÐ´Ñ Ð»Ð°Ñка наÑÑÑÐ¿Ð½Ñ " +"ÑоÑмÑ:" + diff --git a/src/wolnelektury/locale/de/LC_MESSAGES/django.mo b/src/wolnelektury/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 000000000..2a83addfe Binary files /dev/null and b/src/wolnelektury/locale/de/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/de/LC_MESSAGES/django.po b/src/wolnelektury/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..df2e21286 --- /dev/null +++ b/src/wolnelektury/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,1126 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:43+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: views.py:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "Einloggen" + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "Eingeloggt als User %(user)s" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "Registrieren" + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr "Sie müssen eingeloggt sein, um fortzusetzen." + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "Die gewünschte Webseite existiert nicht" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "Seite nicht gefunden." + +#: 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 "" +"Die gesuchte Seite existiert leider nicht mehr. Ãberprüfen Sie bitte, ob Sie " +"sich bei der Eingabe der URL in der Adresszeile des Browsers vertippt haben " +"oder gehen Sie zur Startseite" + +#: templates/404.html:14 +msgid "main page" +msgstr "Startseite" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "Serverfehler" + +#: templates/500.html:19 +msgid "" +"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " +"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " +"error.</p>" +msgstr "" +"<p> Wolnelektury.pl ist zurzeit nicht verfügbar. Besuchen Sie unsere " +"Startseite <a href='http://nowoczesnapolska.org.pl'> Blog </ a>. </ P> " +"Informieren Sie uns <a href = \"mailto: fundacja@nowoczesnapolska.org.pl\" > " +"Administratoren </ a> über den Fehler. </ p>" + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "Service nicht verfügbar" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "Wolnelektury.pl wegen Wartungsarbeiten momentan nicht verfügbar." + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "Internetbibliothek WolneLektury.pl" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "Was Neues?" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "Letzte Publikationen" + +#: templates/main_page.html:41 +msgid "News" +msgstr "News" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "Leistungen" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "Melden Sie einen Bug oder Vorschlag." + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "Der Katalog als PDF-Datei herunterladen." + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "Widget" + +#: templates/main_page.html:59 +#, fuzzy +msgid "Missing a book?" +msgstr "Brauchen Sie ein Buch?" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "Plan der Veröffentlichung" + +#: templates/main_page.html:71 +#, fuzzy +msgid "Information" +msgstr "Format öffnen" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "das genutzte Bild" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "in WolneLektury.pl" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" <a href='%(b)s'>%(c)s</a> free reading you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgid_plural "" +"\n" +" <a href='%(b)s'>%(c)s</a> free readings you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgstr[0] "" +"\n" +"Sie haben <a href='%(b)s'>%(c)s</a> freies Werk <a href='%(r)s'>zur " +"Verfügung</a>\n" +" " +msgstr[1] "" +"\n" +"Sie haben <a href='%(b)s'>%(c)s</a> freie Werke <a href='%(r)s'>zur " +"Verfügung</a>\n" +" " + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "Willkommen" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "Password" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "E-Mail" + +#: templates/superbase.html:74 templates/user.html:14 +#, fuzzy +msgid "Social accounts" +msgstr "oder melde dich an:" + +#: templates/superbase.html:77 +#, fuzzy +msgid "My shelf" +msgstr "Mein Bücherregal" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "Administration" + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "Ausloggen" + +#: templates/superbase.html:111 +msgid "Search" +msgstr "Suchen" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "Sprachversionen" + +#: templates/superbase.html:165 +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." +"org.pl/\">Modern Poland Foundation</a>.\n" +"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" +"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" +"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" +"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" +"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tWolne Lektury ist das Projekt der<a href=\"http://nowoczesnapolska." +"org.pl/\">Stiftung Modernes Polen</a>.\n" +"\t\t\t\tDigitalisierung wird von der <a href=\"http://www.bn.org.pl/" +"\">Natonalbibliothek</a> ausgeführt, Exemplare aus dem Bücherbestand der " +"NB. \n" +"\t\t\t\tHosting <a href=\"http://eo.pl/\">EO Networks</a>.\n" +"\t\t\t\t" + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" +"\">fundacja@nowoczesnapolska.org.pl</a>\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\t Stiftung Modernes Polen, 00-514 Warschau, MarszaÅkowska 84/92, " +"Wohnungsnummer 125, Telefon/Fax: +48 (22) 621-30-17\n" +" E-Mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" +"\">fundacja@nowoczesnapolska.org.pl</a>\n" +"\t\t\t\t" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "SchlieÃen" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "Laden" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "User" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "Webseite-Administration" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "Ãbersetzungen" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "fortgeschritten" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "vereinfacht " + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "Buch importieren" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "Password vergessen?" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +#, fuzzy +msgid "Sign in using:" +msgstr "Einloggen" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "oder Registrieren" + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgstr[0] "" +"\n" +"Wir haben eine Arbeit in Wolne Lektury veröffentlicht!\n" +"Hilfen Sie uns bei der Entwicklung der Bibliothek und bereite neue Titel " +"frei von\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">Ãnterstütze uns " +"vor\n" +"oder mit einer Ãberweisung 1% Ihrer Einkommensteuer </a>.\n" +msgstr[1] "" +"\n" +"Wir haben %(c)s Arbeiten in Wolne Lektury veröffentlicht!\n" +"Hilfen Sie uns bei der Entwicklung der Bibliothek und bereite neue Titel " +"frei von\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">Ãnterstütze uns " +"vor\n" +"oder mit einer Ãberweisung 1% Ihrer Einkommensteuer </a>.\n" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +msgstr "" +"Werde Redakteur/in bei Wolne Lektury! Schau, ob wir gerade an der " +"Veröffentlichung der Schullektüre arbeiten, die du ausgesucht hast. Um " +"eigene Texte zu veröffentlichen, musst du vorher auf unserer redaktionellen " +"Online-Plattform eingeloggt sein. " + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "Mehr..." + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "OpenID registrieren" + +#: templates/openid/login.html:27 +#, fuzzy +msgid "Sign In" +msgstr "Einloggen" + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "zurück" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "weiter" + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "Den Zugang zu Wolne Lektury authorisieren" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" +"strong>." +msgstr "" +"Bitte bestätigen Sie den Zugang zu Wolne Lektury <strong>%(user)s</strong>." + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Konto-Beziehungen" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "Sie können mithilfe folgenden fremden Accounts registrieren." + +#: templates/socialaccount/connections.html:36 +#, fuzzy +msgid "Remove" +msgstr "löschen" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "Sie haben noch kein Social-Networt-Konto mit diesem Konto verbunden." + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "Füge ein fremdes Konto hinzu" + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "Login annulliert" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" +"\">sign in</a>." +msgstr "" +"Sie haben entschieden, sich in dieser Seite nicht mit erschafftn Kontos " +"einzuloggen. Wenn es aus Versehen passiert ist, gehen Sie bitte <a href=" +"\"%(login_url)s\">Registrieren</a> voran." + +#~ msgid "Listing of all audiobooks" +#~ msgstr "Audiobücherverzeichnis" + +#~ msgid "Latest MP3 audiobooks" +#~ msgstr "MP3-Werkverzeichnis" + +#, fuzzy +#~ msgid "Latest Ogg Vorbis audiobooks" +#~ msgstr "Werkverzeichnis" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." +#~ msgstr "" +#~ "Die Audiothek der Schulbücher der Stiftung Nowoczesna Polska.\n" +#~ "Sie können diese Audiothek kostenlos und unbeschränkt nutzen.\n" +#~ "Die Audiobücher werden von bekannten Schauspielerinnen und Schauspielern, " +#~ "u. a. von Danuta Stenka und Jan Peszek, aufgenommen." + +#~ msgid "See also" +#~ msgstr "Sehe auch" + +#~ msgid "Theme" +#~ msgstr "Motiv" + +#~ msgid "in work " +#~ msgstr "im Werk" + +#~ msgid "This work is licensed under:" +#~ msgstr "Das Werk ist unter der Lizenz verfügbar" + +#~ msgid "" +#~ "This work isn't covered by copyright and is part of the\n" +#~ " public domain, which means it can be freely used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" +#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" +#~ " license." +#~ msgstr "" +#~ "Dieses Werk ist nicht urheberrechtlich geschützt, dass sie frei benutzt " +#~ "werden kann, vervielfältigt und veröffentlicht. Wenn es irgendwelche " +#~ "zusätzlichen ürheberrechtlich geschützten Materialien an diesem Werk gibt " +#~ "(Anmerkungen, Motive), sind sie unter der Lizenz http://creativecommons." +#~ "org/licenses/by-sa/3.0/ verfügbar." + +#~ msgid "Text prepared based on:" +#~ msgstr "Der vorbereitete Text basiert auf:" + +#~ msgid "Edited and annotated by:" +#~ msgstr "Herausgegeben und mit Anmerkungen versehen von:" + +#~ msgid "Listing of all works" +#~ msgstr "Werkverzeichnis" + +#~ msgid "Table of Content" +#~ msgstr "Inhaltsverzeichnis" + +#~ msgid "â top â" +#~ msgstr "nach oben" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Leg das Buch aufs Regal ab!" + +#~ msgid "Create new shelf" +#~ msgstr "Neues Bücherregal erstellen" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Keine neue Bücherregale vorhanden. Wenn du willst, kannst du ein neues " +#~ "Bücherregal erstellen." + +#~ msgid "Put on the shelf!" +#~ msgstr "Leg aufs Regal ab!" + +#~ msgid "Epoch" +#~ msgstr "Epoche" + +#~ msgid "Kind" +#~ msgstr "Art" + +#~ msgid "Genre" +#~ msgstr "Gattung" + +#~ msgid "Read online" +#~ msgstr "Online lesen" + +#~ msgid "Download" +#~ msgstr "Herunterladen" + +#~ msgid "to print" +#~ msgstr "Drucken" + +#~ msgid "for an e-book reader" +#~ msgstr "für E-Book-Reader" + +#~ msgid "for Kindle" +#~ msgstr "für Kindle" + +#, fuzzy +#~ msgid "for advanced usage" +#~ msgstr "fortgeschritten" + +#~ msgid "Listen" +#~ msgstr "Hören" + +#~ msgid "Table of contents" +#~ msgstr "Inhalt" + +#~ msgid "Themes" +#~ msgstr "Motive" + +#~ msgid "Edit. note" +#~ msgstr "Edit. note" + +#~ msgid "Infobox" +#~ msgstr "Infobox" + +#~ msgid "Book's page" +#~ msgstr "Buchseite" + +#, fuzzy +#~ msgid "for a reader" +#~ msgstr "zum Lesen" + +#, fuzzy +#~ msgid "for advanced usege" +#~ msgstr "fortgeschritten" + +#, fuzzy +#~ msgid "Download a custom PDF" +#~ msgstr "PDF-Datei herunterladen" + +#~ msgid "Motifs and themes" +#~ msgstr "Motive und Themen" + +#~ msgid "See" +#~ msgstr "Siehe" + +#~ msgid "Source" +#~ msgstr "Quelle" + +#, fuzzy +#~ msgid "of the book" +#~ msgstr "Buchquelle" + +#~ msgid "Source XML file" +#~ msgstr "Quelle der XML-Datei" + +#~ msgid "Book on" +#~ msgstr "Buch über" + +#~ msgid "Editor's Platform" +#~ msgstr "Die Plattform des Editors" + +#~ msgid "Book description on Lektury.Gazeta.pl" +#~ msgstr "Buchbeschreibung in Lektury.Gazeta.pl" + +#~ msgid "Book description on Wikipedia" +#~ msgstr "Buchbeschreibung in Wikipedia" + +#~ msgid "Mix this book" +#~ msgstr "Mische dieses Buch" + +#~ msgid "Download all audiobooks for this book" +#~ msgstr "Alle Audiobücher zu diesem Buch herunterladen" + +#~ msgid "Catalogue" +#~ msgstr "Katalog" + +#~ msgid "Authors" +#~ msgstr "Autoren" + +#~ msgid "Kinds" +#~ msgstr "Arten" + +#~ msgid "Genres" +#~ msgstr "Gattungen" + +#~ msgid "Epochs" +#~ msgstr "Epochen" + +#~ msgid "Themes and topics" +#~ msgstr "Motive und Themen" + +#, fuzzy +#~ msgid "Listing of all DAISY files" +#~ msgstr "Werkverzeichnis" + +#, fuzzy +#~ msgid "Latest DAISY audiobooks" +#~ msgstr "Werkverzeichnis" + +#~ 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Å." +#~ msgstr "" +#~ "DAISY-System ist ein weltweit populäres Format, Bücher zur Verfügung zu " +#~ "stellen \n" +#~ "Es ist angepasst an Bedüfnisse von Sehbehinderten, Blinden und anderen " +#~ "Menschen, die Leseprobleme haben.\n" +#~ "Sie können die Sammlung kostenlos und ohne Beschränkugen nutzen." + +#~ msgid "" +#~ "The criteria are ambiguous. Please select one of the following options:" +#~ msgstr "" +#~ "Die Kriterien sind zweitdeutig. Bitte wählen Sie eine der folgenden " +#~ "Möglichkeiten." + +#~ msgid "Shelves containing fragment" +#~ msgstr "Regale mit Buchauszügen" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Keine neue Bücherregale vorhanden. Wenn du willst, kannst du ein neues " +#~ "Bücherregal erstellen." + +#~ msgid "Save all shelves" +#~ msgstr "Alle Bücherregale speichern" + +#~ msgid "Expand fragment" +#~ msgstr "Buchauszug aufklappen" + +#~ msgid "Hide fragment" +#~ msgstr "Buchauszug zuklappen" + +#~ msgid "See full category" +#~ msgstr "Alle Kategorien ansehen" + +#, fuzzy +#~ msgid "All books" +#~ msgstr "Alle Bücher" + +#~ msgid "Audiobooks" +#~ msgstr "Audiobücher" + +#~ msgid "DAISY" +#~ msgstr "DAISY" + +#~ msgid "Work is licensed under " +#~ msgstr "Das Werk ist unter der Lizenz verfügbar" + +#~ msgid "Based on" +#~ msgstr "Basiert auf" + +#~ msgid "Details" +#~ msgstr "Einzelheiten" + +#~ msgid "Author" +#~ msgstr "Autor" + +#~ msgid "Other resources" +#~ msgstr "Andere Ressourcen" + +#, fuzzy +#~ msgid "Source of the image" +#~ msgstr "Bildquelle" + +#~ msgid "Image on the Editor's Platform" +#~ msgstr "Image auf dem Platform des Editors" + +#~ msgid "View XML source" +#~ msgstr "Siehe die XML-Quelle" + +#~ msgid "Work's themes " +#~ msgstr "Werkmotive" + +#, fuzzy +#~ msgid "Listing of all pictures" +#~ msgstr "Abbildungenverzeichnis" + +#~ msgid "Download as" +#~ msgstr "Herunterladen als" + +#~ msgid "Artist" +#~ msgstr "Schriftsteller" + +#~ msgid "Director" +#~ msgstr "Regisseur" + +#~ msgid "Audiobooks were prepared as a part of the projects:" +#~ msgstr "Audiobücher wurden als Teil der folgenden Projekte vorbereitet:" + +#~ msgid "%(cs)s, funded by %(fb)s" +#~ msgstr "%(cs)s, gestiftet von %(fb)s" + +#~ msgid "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +#~ msgstr "" +#~ "Audiobücher wurden als Teil des Projektes %(cs)s, finanziert von: %(fb)s." + +#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." +#~ msgstr "Audiobücher wurden als Teil des Projektes %(cs)s vorbereitet." + +#~ msgid "Did you mean" +#~ msgstr "Meinten Sie" + +#~ msgid "Results by authors" +#~ msgstr "Ergebnisse von Autoren" + +#~ msgid "Results by title" +#~ msgstr "Ergebnisse von Titeln" + +#~ msgid "Results in text" +#~ msgstr "Ergebnisse im Text" + +#, fuzzy +#~ msgid "Other results" +#~ msgstr "Andere Ergebnisse" + +#~ msgid "Sorry! Search cirteria did not match any resources." +#~ msgstr "Sorry! Die Suche ergab leider keine Treffer." + +#~ msgid "" +#~ "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 "" +#~ "Die Suchemaschine berücksichtigt folgende Kriterien: Titel, Autor, Motiv/" +#~ "Thema, Epoche, Literaturgattung und Gattungsart. \n" +#~ "\t\tDie Suche nach Text-Phrasen wird momentan nicht unterstützt." + +#~ msgid "Sorry! Search query must have at least two characters." +#~ msgstr "Ihre Suchanfrage muss mindestens zwei Zeichen enthalten." + +#~ msgid "in Lektury.Gazeta.pl" +#~ msgstr "in Lektury.Gazeta.pl" + +#~ msgid "in Wikipedia" +#~ msgstr "in Wikipedia" + +#~ msgid "Your shelves with books" +#~ msgstr "Deine Bücherregale" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "" +#~ "Keine neuen Bücherregale vorhanden. Wenn du willst, kannst du ein neues " +#~ "Bücherregal erstellen." + +#~ msgid "Create shelf" +#~ msgstr "Bücherregal erstellen" + +#~ msgid "author" +#~ msgstr "Autor" + +#~ msgid "Hand-outs for teachers" +#~ msgstr "Lehrmaterialien" + +#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" +#~ msgstr "Lese Werkanalyse dieses Autors in Lektury.Gazeta.pl" + +#~ msgid "Read article about this author on Wikipedia" +#~ msgstr "Lese den Beitrag über diesen Autor in Wikipedia" + +#~ msgid "This author's works are copyrighted." +#~ msgstr "Die Werke dieses Autors sind urheberrechtlich geschützt." + +#~ msgid "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries can't publish this author's works." +#~ msgstr "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Finde " +#~ "heraus</a>, warum Internet-Bibliotheken dürfen Werke dieses Autors nicht " +#~ "zugänglich machen." + +#~ msgid "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet school library of Wolne Lektury soon." +#~ msgstr "" +#~ "Dieses Werk ist zur öffentlichen Nutzung vorgesehen und wird bald in der " +#~ "Internetbibliothek Wolne Lektury veröffentlicht sein." + +#~ msgid "" +#~ "This author's works will become part of public domain and will be allowed " +#~ "to be published without restrictions in" +#~ msgstr "" +#~ "Die Werke dieses Autors werden bald zur öffentlichen Nutzung freigestellt " +#~ "und können in der Zukunft ohne weitere Einschränkungen veröffentlicht " +#~ "werden." + +#~ msgid "" +#~ "This work is in public domain and will be published on Internet school " +#~ "library of Wolne Lektury soon." +#~ msgstr "" +#~ "Dieses Werk ist zur öffentlichen Nutzung vorgesehen und wird bald in der " +#~ "Internetbibliothek Wolne Lektury veröffentlicht sein." + +#~ msgid "" +#~ "This work will become part of public domain and will be allowed to be " +#~ "published without restrictions in" +#~ msgstr "" +#~ "Dieses Werk wird bald zur öffentlichen Nutzung freigestellt und kann in " +#~ "der Zukunft ohne weitere Einschränkungen veröffentlicht werden" + +#~ msgid "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries can't publish this work." +#~ msgstr "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Finde " +#~ "heraus</a>, warum Internet-Bibliotheken die Werke dieses Autors nicht " +#~ "veröffentlichen dürfen." + +#~ msgid "This work is copyrighted." +#~ msgstr "Dieses Werk ist urheberrechtlich geschützt." + +#~ msgid "Login to Wolne Lektury" +#~ msgstr "Einloggen in WolneLektury.pl" + +#~ msgid "Login" +#~ msgstr "Login" + +#~ msgid "" +#~ "Internet Explorer cannot display this site properly. Click here to read " +#~ "more..." +#~ msgstr "" +#~ "Diese Seite kann nicht richtig im Internet Explorer angezeigt werden. " +#~ "Klicken Sie hier, um mehr zu lesen..." + +#~ msgid "Your shelves" +#~ msgstr "Deine Bücherregale" + +#~ msgid "Register on" +#~ msgstr "Registrieren" + +#~ msgid "or" +#~ msgstr "oder" + +#~ msgid "return to main page" +#~ msgstr "Zur Startseite wechseln" + +#, fuzzy +#~ msgid "Listing of all audiobooks on WolneLektury.pl" +#~ msgstr "Werkverzeichnis unter WolneLektury.pl" + +#~ msgid "Put a book" +#~ msgstr "Buch ablegen" + +#~ msgid "on the shelf!" +#~ msgstr "aufs Regal!" + +#~ msgid "and printing using" +#~ msgstr "drucken mit" + +#~ msgid "Download EPUB" +#~ msgstr "EPUB-Datei herunterladen" + +#~ msgid "Download TXT" +#~ msgstr "TXT-Datei herunterladen" + +#~ msgid "on small displays, for example mobile phones" +#~ msgstr "auf kleines Display, z. B. Handy" + +#~ msgid "Download ODT" +#~ msgstr "ODT-Datei herunterladen" + +#~ msgid "and editing using" +#~ msgstr "bearbeiten mit" + +#~ msgid "Book on project's wiki" +#~ msgstr "Schullektüre auf WikiProjekt" + +#~ msgid "on" +#~ msgstr "auf" + +#~ msgid "See description" +#~ msgstr "Beschreibung ansehen" + +#~ msgid "Listing of all works on WolneLektury.pl" +#~ msgstr "Werkverzeichnis unter WolneLektury.pl" + +#~ msgid "Jump to" +#~ msgstr "Ãberspringen" + +#~ msgid "Categories" +#~ msgstr "Kategorien" + +#, fuzzy +#~ msgid "Listing of all DAISY files on WolneLektury.pl" +#~ msgstr "Werkverzeichnis unter WolneLektury.pl" + +#~ msgid "Show full category" +#~ msgstr "Alle Kategorien anzeigen" + +#~ msgid "Hide" +#~ msgstr "weniger" + +#~ msgid "Browse books by categories" +#~ msgstr "Bücher nach ausgewählten Kategorien ansehen" + +#~ msgid "delete" +#~ msgstr "löschen" + +#~ msgid "" +#~ "Create your own book set. You can share it with friends by sending them " +#~ "link to your shelf." +#~ msgstr "" +#~ "Erstelle dein eigenes Bücherregal. Du kannst es später mal mit deinen " +#~ "Freunden teilen, indem du den Link an sie verschickst." + +#~ msgid "You need to " +#~ msgstr "Um deine Bücherregale zu verwalten " + +#~ msgid "sign in" +#~ msgstr "musst du angemeldet sein" + +#~ msgid "to manage your shelves." +#~ msgstr "Bücherregale verwalten" + +#~ msgid "" +#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." +#~ msgstr "" +#~ "Unterrichtsszenarien und andere Ideen für die Verwendung von Wolnelektury." +#~ "pl für das Unterricht" + +#~ msgid "" +#~ "are professional recordings of literary texts from our repository, " +#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " +#~ "DAISY system." +#~ msgstr "" +#~ "sind professionelle Aufnahmen literarischer Texte aus unserer Sammlung, " +#~ "die unter freier Lizenz in folgenden Formaten verfügbar sind: MP3-und Ogg-" +#~ "Vorbis-Formate sowie im DAISY-System." + +#~ msgid "Themes groups" +#~ msgstr "Motivketten" + +#~ msgid "See our blog" +#~ msgstr "Siehe unseren Blog" + +#~ msgid "You can help us!" +#~ msgstr "Du kannst uns helfen!" + +#~ msgid "" +#~ "We try our best to elaborate works appended to our library. It is " +#~ "possible only due to support of our volunteers." +#~ msgstr "" +#~ "Wir sind stets bemüht, unseren Bibliothekbestand ständig um neue Werke zu " +#~ "erweitern. Dies ist nur dank der Hilfe unserer Volontäre möglich." + +#~ msgid "" +#~ "We invite people who want to take part in developing Internet school " +#~ "library Wolne Lektury." +#~ msgstr "" +#~ "Wir laden herzlich alle Personen ein, die sich an der Mitgestaltung " +#~ "unserer Internet-Schulbibliothek beteiligen wollen." + +#~ msgid "About us" +#~ msgstr "Ãber das Projekt" + +#~ msgid "" +#~ "\n" +#~ "\t\t\tInternet library with school readings âWolne Lekturyâ (<a href=" +#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) is a project made by " +#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " +#~ "which are recommended by Ministry of National Education and are in public " +#~ "domain.\n" +#~ "\t\t\t" +#~ msgstr "" +#~ "\n" +#~ "\t\t\tSchulbücher âWolne Lekturyâ in der Internetbibliothek(<a href=" +#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) ist ein Projekt, das " +#~ "von der Stiftung Modernes Polen gefördert wird. Die Stiftung ist seit " +#~ "2007 tätig und hat bisher viele Schulbücher aus dem Bibliothekbestand zur " +#~ "öffentlichen Nutzung freigestellt. Die Schulbücher werden ausdrücklich " +#~ "vom Bildungsministerium empfohlen.\n" +#~ "\t\t\t" + +#~ msgid "Searching in" +#~ msgstr "Suchen in" + +#~ msgid "More than one result matching the criteria found." +#~ msgstr "Es wurden mehrere Treffer in dieser Kategorie gefunden." + +#~ msgid "Search in WolneLektury.pl" +#~ msgstr "Suche unter WolneLektury.pl" + +#~ msgid "Your shelf is empty" +#~ msgstr "Dein Bücherregal ist leer" + +#~ msgid "" +#~ "You can put a book on a shelf by entering page of the reading and " +#~ "clicking 'Put on the shelf'." +#~ msgstr "" +#~ "Du kannst das Buch aufs Regal ablegen, indem du \" aufs Regal!\" - Button " +#~ "anklickst." + +#~ msgid "Choose books' formats which you want to download:" +#~ msgstr "Wähle Buchformate aus, die du herunterladen möchtest:" + +#~ msgid "for listening" +#~ msgstr "zum Hören" + +#~ msgid "on favourite MP3 player" +#~ msgstr "auf Lieblings-MP3-Player" + +#~ msgid "Xiph.org Foundation" +#~ msgstr "Xiph.org Stiftung" + +#~ msgid "Updating list of books' formats on the shelf" +#~ msgstr "Liste der Buchformate auf dem Regal aktualisieren" + +#~ msgid "cancel" +#~ msgstr "löschen" + +#~ msgid "Share this shelf" +#~ msgstr "Teile dieses Bücherregal" + +#~ msgid "" +#~ "Copy this link and share it with other people to let them see your shelf." +#~ msgstr "" +#~ "Kopiere diesen Link und verschicke an Personen, mit denen du dein " +#~ "Bücherregal teilen willst." + +#, fuzzy +#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Lies Werkanalyse dieses Autors unter Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Lies Werkanalyse dieses Autors unter Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Lies Werkanalyse dieses Autors unter Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read related study on Lektury.Gazeta.pl" +#~ msgstr "Lies Werkanalyse dieses Autors unter Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" +#~ msgstr "Lies den Beitrag über diesen Autor auf Wikipedia" + +#, fuzzy +#~ msgid "Read article about kind %(last_tag)s on Wikipedia" +#~ msgstr "Lies den Beitrag über diesen Autor auf Wikipedia" + +#, fuzzy +#~ msgid "Read article about genre %(last_tag)s on Wikipedia" +#~ msgstr "Lies den Beitrag über diesen Autor auf Wikipedia" + +#, fuzzy +#~ msgid "Read related article on Wikipedia" +#~ msgstr "Lies den Beitrag über diesen Autor auf Wikipedia" + +#~ msgid "Delete" +#~ msgstr "Löschen" + +#~ msgid "return to the main page" +#~ msgstr "zur Startseite wechseln" + +#~ msgid "return to list of materials" +#~ msgstr "zurück zur Materialienliste" + +#~ msgid "Hand-outs for teachers on " +#~ msgstr "Lehrmaterialien" + +#, fuzzy +#~ msgid "" +#~ "Download TXT - for reading on small displays, for example mobile phones" +#~ msgstr "auf kleines Display, z. B. Handy" + +#~ msgid "Download MP3" +#~ msgstr "MP3-Datei herunterladen" + +#~ msgid "Download Ogg Vorbis" +#~ msgstr "Ogg Vorbis-Datei herunterladen" + +#~ msgid "Download DAISY" +#~ msgstr "DAISY10-Datei herunterladen" + +#~ msgid "check list of books" +#~ msgstr "Siehe Bücherliste" + +#~ msgid "in our repository" +#~ msgstr "in unserer Sammlung" + +#~ msgid "Polish" +#~ msgstr "Polnisch" + +#~ msgid "German" +#~ msgstr "Deutsch" + +#~ msgid "English" +#~ msgstr "Englisch" + +#~ msgid "Lithuanian" +#~ msgstr "Litauisch" + +#~ msgid "French" +#~ msgstr "Französisch" + +#~ msgid "Russian" +#~ msgstr "Russisch" + +#~ msgid "Spanish" +#~ msgstr "Spanisch" + +#~ msgid "Ukrainian" +#~ msgstr "Ukrainisch" + +#~ msgid "Choose your interface language: " +#~ msgstr "Wählen Sie Ihre Sprache:" + +#~ msgid "Choose language" +#~ msgstr "Sprache wählen" + +#~ msgid "Hide description" +#~ msgstr "Beschreibung ausblenden" + +#~ msgid "Read study of epoch" +#~ msgstr "Lies Epochenanalyse" + +#~ msgid "Read article about epoch" +#~ msgstr "Lies den Beitrag aus dieser Epoche" diff --git a/src/wolnelektury/locale/en/LC_MESSAGES/django.mo b/src/wolnelektury/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..54c22ef01 Binary files /dev/null and b/src/wolnelektury/locale/en/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/en/LC_MESSAGES/django.po b/src/wolnelektury/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..d5cfb827e --- /dev/null +++ b/src/wolnelektury/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,796 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:43+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1\n" + +#: views.py:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "Sign in" + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "Register" + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr "You have to be logged in to continue" + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "Page does not exist" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "Page not found" + +#: 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 "" +"We are sorry, but this page does not exist. Please check if the address you " +"entered is correct you entered or go to " + +#: templates/404.html:14 +msgid "main page" +msgstr "main page" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "Server error" + +#: templates/500.html:19 +msgid "" +"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " +"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " +"error.</p>" +msgstr "" +"<p>Wolnelektury.pl is currently unavailable. Meanwhile, visit our <a " +"href='http://nowoczesnapolska.org.pl'>website</a>.</p> <p>Inform our <a " +"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " +"error.</p>" + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "Service unavailable" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "" +"The website Wolnelektury.pl is currently unavailable due to maintainance." + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "Wolne Lektury Internet library" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "Latest publications" + +#: templates/main_page.html:41 +msgid "News" +msgstr "News" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "Tools" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "Report an error or make a suggestion" + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "Download the catalogue in PDF format." + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "Widget" + +#: templates/main_page.html:59 +msgid "Missing a book?" +msgstr "Missing a book?" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "Publishing plan" + +#: templates/main_page.html:71 +msgid "Information" +msgstr "Information" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "Image used:" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" <a href='%(b)s'>%(c)s</a> free reading you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgid_plural "" +"\n" +" <a href='%(b)s'>%(c)s</a> free readings you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgstr[0] "" +"\n" +" <a href='%(b)s'>%(c)s</a> free reading you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgstr[1] "" +"\n" +" <a href='%(b)s'>%(c)s</a> free readings you have <a " +"href='%(r)s'>right to</a>\n" +" " + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "Welcome" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "" + +#: templates/superbase.html:74 templates/user.html:14 +#, fuzzy +msgid "Social accounts" +msgstr "or join accounts:" + +#: templates/superbase.html:77 +msgid "My shelf" +msgstr "My shelf" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "Administration" + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "Logout" + +#: templates/superbase.html:111 +msgid "Search" +msgstr "Search" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "Language versions" + +#: templates/superbase.html:165 +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." +"org.pl/\">Modern Poland Foundation</a>.\n" +"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" +"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" +"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" +"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" +"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tWolne Lektury is a project carried out by the <a href=\"http://" +"nowoczesnapolska.org.pl/\">Modern Poland Foundation</a>.\n" +"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" +"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/\">the " +"Silesian Library</a> and <a href=\"http://www.bibliotekaelblaska.pl/\">the " +"Library of ElblÄ g</a>, based on NL, US and LE resources.\n" +"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" +"\t\t\t\t\"" + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" +"\">fundacja@nowoczesnapolska.org.pl</a>\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" +"\">fundacja@nowoczesnapolska.org.pl</a>\n" +"\t\t\t\t" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "Close" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "Loading" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "Site administration" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "Translations" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "advanced" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "simplified" + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "Import book" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +#, fuzzy +msgid "Sign in using:" +msgstr "Sign in" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "or register" + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgstr[0] "" +"\n" +"We have %(c)s works published at Wolne Lektury!\n" +"Help us expand our library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or donating 1% your income tax</a>.\n" +msgstr[1] "" +"\n" +"We have %(c)s works published at Wolne Lektury!\n" +"Help us expand our library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or donating 1% of your income tax</a>.\n" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +msgstr "" +"Become an editor of Wolne Lektury! Find out if\n" +"we are currently working on a reading you are looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "More..." + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "" + +#: templates/openid/login.html:27 +#, fuzzy +msgid "Sign In" +msgstr "Sign in" + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "previous" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "next" + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "Authorize access to Wolne Lektury" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" +"strong>." +msgstr "" +"Confirm to authorize access to Wolne Lektury as <strong>%(user)s</strong>." + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" + +#: templates/socialaccount/connections.html:36 +#, fuzzy +msgid "Remove" +msgstr "remove" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "" + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" +"\">sign in</a>." +msgstr "" + +#~ msgid "Listing of all audiobooks" +#~ msgstr "List of the audiobooks" + +#~ msgid "Latest MP3 audiobooks" +#~ msgstr "Latest MP3 audiobooks" + +#~ msgid "Latest Ogg Vorbis audiobooks" +#~ msgstr "Latest Ogg Vorbis audiobooks" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." +#~ msgstr "" +#~ "Audio library of required readings of Modern Poland Foundation.\n" +#~ "It is free of charge and you can use it without any limits. \n" +#~ "Audiobooks are recorded with the participation of famous Polish actors " +#~ "like Danuta Stenka or Jan Peszek." + +#~ msgid "See also" +#~ msgstr "See also" + +#~ msgid "Theme" +#~ msgstr "Theme" + +#~ msgid "in work " +#~ msgstr "in work " + +#~ msgid "This work is licensed under:" +#~ msgstr "This work is licensed under:" + +#~ msgid "" +#~ "This work isn't covered by copyright and is part of the\n" +#~ " public domain, which means it can be freely used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" +#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" +#~ " license." +#~ msgstr "" +#~ "This work is not covered by copyright and is a part of the\n" +#~ " public domain, which means that it can be used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" +#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" +#~ " license." + +#~ msgid "Text prepared based on:" +#~ msgstr "Text based on:" + +#~ msgid "Edited and annotated by:" +#~ msgstr "Edited and annotated by:" + +#~ msgid "Listing of all works" +#~ msgstr "List of all works" + +#~ msgid "Table of Content" +#~ msgstr "Table of Contents" + +#~ msgid "â top â" +#~ msgstr "â top â" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Put this book on the shelf!" + +#~ msgid "Create new shelf" +#~ msgstr "Create new shelf" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "You do not have any shelves. You can create one below, if you want to." + +#~ msgid "Put on the shelf!" +#~ msgstr "Put on the shelf!" + +#~ msgid "Epoch" +#~ msgstr "Period" + +#~ msgid "Kind" +#~ msgstr "Form" + +#~ msgid "Genre" +#~ msgstr "Genre" + +#~ msgid "Read online" +#~ msgstr "Read online" + +#~ msgid "Download" +#~ msgstr "Download" + +#~ msgid "to print" +#~ msgstr "to print" + +#~ msgid "for an e-book reader" +#~ msgstr "for an e-book reader" + +#~ msgid "for Kindle" +#~ msgstr "for Kindle" + +#, fuzzy +#~ msgid "for advanced usage" +#~ msgstr "advanced" + +#~ msgid "Listen" +#~ msgstr "Listen" + +#~ msgid "Table of contents" +#~ msgstr "Table of contents" + +#~ msgid "Themes" +#~ msgstr "Themes" + +#~ msgid "Edit. note" +#~ msgstr "Edit. note" + +#~ msgid "Infobox" +#~ msgstr "Infobox" + +#~ msgid "Book's page" +#~ msgstr "Book's page" + +#~ msgid "for a reader" +#~ msgstr "for a reader" + +#, fuzzy +#~ msgid "for advanced usege" +#~ msgstr "advanced" + +#~ msgid "Download a custom PDF" +#~ msgstr "Download a custom PDF" + +#~ msgid "Motifs and themes" +#~ msgstr "Motifs and themes" + +#~ msgid "See" +#~ msgstr "See" + +#~ msgid "Source" +#~ msgstr "Source" + +#~ msgid "of the book" +#~ msgstr "of the book" + +#~ msgid "Source XML file" +#~ msgstr "Source XML file" + +#~ msgid "Book on" +#~ msgstr "Book on" + +#~ msgid "Editor's Platform" +#~ msgstr "Editor's Platform" + +#~ msgid "Book description on Lektury.Gazeta.pl" +#~ msgstr "Book description on Lektury.Gazeta.pl" + +#~ msgid "Book description on Wikipedia" +#~ msgstr "Book description on Wikipedia" + +#~ msgid "Mix this book" +#~ msgstr "Mix this book" + +#~ msgid "Download all audiobooks for this book" +#~ msgstr "Download all audiobooks for this book" + +#~ msgid "Catalogue" +#~ msgstr "Catalogue" + +#~ msgid "Authors" +#~ msgstr "Authors" + +#~ msgid "Kinds" +#~ msgstr "Forms" + +#~ msgid "Genres" +#~ msgstr "Genres" + +#~ msgid "Epochs" +#~ msgstr "Periods" + +#~ msgid "Themes and topics" +#~ msgstr "Motifs and themes" + +#~ msgid "Listing of all DAISY files" +#~ msgstr "List of all DAISY files" + +#~ msgid "Latest DAISY audiobooks" +#~ msgstr "Latest DAISY audiobooks" + +#~ 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Å." +#~ msgstr "" +#~ "The internationally recognized DAISY book format \n" +#~ "provides the best possible standardized access to books for people who " +#~ "are \n" +#~ "partially sighted, blind or are dyslexic. It is free of charge and you " +#~ "can use it without any limits." + +#~ msgid "" +#~ "The criteria are ambiguous. Please select one of the following options:" +#~ msgstr "" +#~ "The criteria are ambiguous. Please select one of the following options:" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Shelves containing fragment" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "You do not own any shelves. You can create one below, if you want to." + +#~ msgid "Save all shelves" +#~ msgstr "Save all shelves" + +#~ msgid "Expand fragment" +#~ msgstr "Expand fragment" + +#~ msgid "Hide fragment" +#~ msgstr "Hide fragment" + +#~ msgid "See full category" +#~ msgstr "See full category" + +#~ msgid "All books" +#~ msgstr "All books" + +#~ msgid "Audiobooks" +#~ msgstr "Audiobooks" + +#~ msgid "DAISY" +#~ msgstr "DAISY" + +#~ msgid "Work is licensed under " +#~ msgstr "Work is licensed under " + +#~ msgid "Based on" +#~ msgstr "Based on" + +#~ msgid "Details" +#~ msgstr "Details" + +#~ msgid "Author" +#~ msgstr "Author" + +#~ msgid "Other resources" +#~ msgstr "Other sources" + +#~ msgid "Source of the image" +#~ msgstr "Source of the image" + +#~ msgid "Image on the Editor's Platform" +#~ msgstr "Image on the Editor's Platform" + +#~ msgid "View XML source" +#~ msgstr "View XML source" + +#~ msgid "Work's themes " +#~ msgstr "Work's themes " + +#~ msgid "Listing of all pictures" +#~ msgstr "List of all pictures" + +#~ msgid "Download as" +#~ msgstr "Download as" + +#~ msgid "Artist" +#~ msgstr "Reader" + +#~ msgid "Director" +#~ msgstr "Director" + +#~ msgid "Audiobooks were prepared as a part of the projects:" +#~ msgstr "Audiobooks were prepared as a part of the following projects:" + +#~ msgid "%(cs)s, funded by %(fb)s" +#~ msgstr "%(cs)s, funded by %(fb)s" + +#~ msgid "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +#~ msgstr "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." + +#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." +#~ msgstr "Audiobooks were prepared as a part of the %(cs)s project." + +#~ msgid "Did you mean" +#~ msgstr "Did you mean" + +#~ msgid "Results by authors" +#~ msgstr "Results by authors" + +#~ msgid "Results by title" +#~ msgstr "Results by title" + +#~ msgid "Results in text" +#~ msgstr "Results in text" + +#~ msgid "Other results" +#~ msgstr "Other results" + +#~ msgid "Sorry! Search cirteria did not match any resources." +#~ msgstr "Sorry! Search cirteria did not match any resources." + +#~ msgid "" +#~ "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 "" +#~ "Search engine supports following criteria: title, author, theme/topic, " +#~ "period, form and genre.\n" +#~ "\t\tAs for now we do not support full text search." + +#~ msgid "Sorry! Search query must have at least two characters." +#~ msgstr "Sorry! Search query must have at least two characters." + +#~ msgid "in Lektury.Gazeta.pl" +#~ msgstr "in Lektury.Gazeta.pl" + +#~ msgid "in Wikipedia" +#~ msgstr "in Wikipedia" + +#~ msgid "Your shelves with books" +#~ msgstr "Your shelves with books" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "You do not own any shelves. You can create one below if you want to" + +#~ msgid "Create shelf" +#~ msgstr "Create shelf" + +#~ msgid "author" +#~ msgstr "author" + +#~ msgid "Hand-outs for teachers" +#~ msgstr "Handouts for teachers" + +#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" +#~ msgstr "Read work's study of this author on Lektury.Gazeta.pl" + +#~ msgid "Read article about this author on Wikipedia" +#~ msgstr "Read article about this author on Wikipedia" + +#~ msgid "This author's works are copyrighted." +#~ msgstr "This author's works are copyrighted." + +#~ msgid "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries can't publish this author's works." +#~ msgstr "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries cannot publish this author's works." + +#~ msgid "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet school library of Wolne Lektury soon." +#~ msgstr "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet library of Wolne Lektury soon." + +#~ msgid "" +#~ "This author's works will become part of public domain and will be allowed " +#~ "to be published without restrictions in" +#~ msgstr "" +#~ "This author's works will become part of public domain and will be " +#~ "published without restrictions in" + +#~ msgid "" +#~ "This work is in public domain and will be published on Internet school " +#~ "library of Wolne Lektury soon." +#~ msgstr "" +#~ "This work is in public domain and will be published on Internet library " +#~ "of Wolne Lektury soon." + +#~ msgid "" +#~ "This work will become part of public domain and will be allowed to be " +#~ "published without restrictions in" +#~ msgstr "" +#~ "This work will become part of public domain and will be published without " +#~ "restrictions in" + +#~ msgid "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries can't publish this work." +#~ msgstr "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries cannot publish this work." + +#~ msgid "This work is copyrighted." +#~ msgstr "This work is copyrighted." + +#~ msgid "Login to Wolne Lektury" +#~ msgstr "Login to Wolne Lektury" + +#~ msgid "Login" +#~ msgstr "Login" diff --git a/src/wolnelektury/locale/es/LC_MESSAGES/django.mo b/src/wolnelektury/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 000000000..b00c569b3 Binary files /dev/null and b/src/wolnelektury/locale/es/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/es/LC_MESSAGES/django.po b/src/wolnelektury/locale/es/LC_MESSAGES/django.po new file mode 100644 index 000000000..e60b97811 --- /dev/null +++ b/src/wolnelektury/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,1105 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:43+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: views.py:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "Iniciar sesión" + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "Ya has iniciado sesión como usuario %(user)s" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "Registrarse" + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr "Tienes que iniciar sesión para continuar" + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "Página no existe" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "Página no encontrada" + +#: 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 "" +"Lo sentimos, esta página no existe. Compruebue si la dirección es correcta o " +"pase a" + +#: templates/404.html:14 +msgid "main page" +msgstr "página principal" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "Error del servidor" + +#: templates/500.html:19 +msgid "" +"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " +"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " +"error.</p>" +msgstr "" +"<p>La página Wolnelektury.pl actualmente no está disponible. Mientras tanto " +"visita nuestro <a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> " +"<p>Informa a nuestros <a href='mailto:fundacja@nowoczesnapolska.org." +"pl'>administradores</a> sobre el error.</p>" + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "Servicio no está disponible" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "La página Wolnelektury.pl no está disponible debido al mantenimiento." + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "La biblioteca virtual WolneLektury.pl" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "Novedades" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "Publicaciones recientes" + +#: templates/main_page.html:41 +msgid "News" +msgstr "Noticias" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "Herramientas" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "Reporta un error o una sugerencia" + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "Descarga el catálogo en el formato PDF" + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "Widget" + +#: templates/main_page.html:59 +msgid "Missing a book?" +msgstr "¿Falta un libro?" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "Plan de publicación" + +#: templates/main_page.html:71 +msgid "Information" +msgstr "Información" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "La imagen usada:" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "RegÃstrate en WolneLektury.pl" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" <a href='%(b)s'>%(c)s</a> free reading you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgid_plural "" +"\n" +" <a href='%(b)s'>%(c)s</a> free readings you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgstr[0] "" +"\n" +" <a href='%(b)s'>%(c)s</a> tienes lecturas libres <a " +"href='%(r)s'>right to</a>\n" +" " +msgstr[1] "" +"\n" +" <a href='%(b)s'>%(c)s</a> free readings you have <a " +"href='%(r)s'>right to</a>\n" +" " + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "Bienvenido" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "Contraseña" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "Correo electrónico" + +#: templates/superbase.html:74 templates/user.html:14 +msgid "Social accounts" +msgstr "Cuentas sociales" + +#: templates/superbase.html:77 +msgid "My shelf" +msgstr "Mi estante" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "Administración" + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "Cerrar sesión" + +#: templates/superbase.html:111 +msgid "Search" +msgstr "Buscar" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "Versiones de idiomas" + +#: templates/superbase.html:165 +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." +"org.pl/\">Modern Poland Foundation</a>.\n" +"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" +"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" +"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" +"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" +"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tWolne Lektury es un proyecto dirigido por <a href=\"http://" +"nowoczesnapolska.org.pl/\"> la Fundación Polonia Moderna</a>.\n" +"\t\t\t\tReproducciones digitales están preparadas por <a href=\"http://www." +"bn.org.pl/\">La Biblioteca Nacional</a>, en base de los recursos de la BN. \n" +"\t\t\t\tHosting <a href=\"http://eo.pl/\">EO Networks</a>.\n" +"\t\t\t\t " + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" +"\">fundacja@nowoczesnapolska.org.pl</a>\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tFundación Polonia Moderna, c/ MarszaÅkowska 84/92, lok. 125, 00-514 " +"Varsovia, tel/fax: +48 (22) 621-30-17\n" +" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" +"\">fundacja@nowoczesnapolska.org.pl</a>\n" +"\t\t\t\t" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "Cerrar" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "Cargando" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "Usuario" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "Administración de la página" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "Traducciones" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "avanzado" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "simplificado" + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "Importar libro" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "¿Olvidaste tu contraseña?" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +msgid "Sign in using:" +msgstr "Iniciar sesión con:" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "o registrarse" + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgstr[0] "" +"\n" +"Tenemos %(c)s obras publicadas en Wolne Lektury!Ayúdanos ampliar la " +"biblioteca y libera lecturas nuevas \n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\"> - haz una " +"donación \n" +" o dona 1 porcentaje de tu impuesto </a>.\n" +msgstr[1] "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +msgstr "" +"Hazte el editor de Wolne Lektury! Averigua si\n" +"actualmente estamos preparando la lectura que te interesa y prepara\n" +"una publicación por ti mismo/a inscribiéndote en la Plataforma Editorial." + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "Más..." + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "Iniciar sesión con OpenID " + +#: templates/openid/login.html:27 +#, fuzzy +msgid "Sign In" +msgstr "Iniciar sesión" + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "anterior" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "siguiente" + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "Autoriza el acceso a Wolne Lektury" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" +"strong>." +msgstr "" +"Confirma para autorizar el acceso a Wolne Lektury como el usuario <strong>" +"%(user)s</strong>." + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Conexiones de la cuenta de usuario" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" +"Puede iniciar sesión en su cuenta de usuario a través de cualquiera de las " +"siguientes cuentas de terceros:" + +#: templates/socialaccount/connections.html:36 +msgid "Remove" +msgstr "Borrar" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "" +"Actualmente no tiene ninguna cuenta social relacionada con esta cuenta de " +"usuario." + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "Agrega una cuenta de terceros" + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "Inicio de sesión cancelado" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" +"\">sign in</a>." +msgstr "" +"Ha decidido anular lo de iniciar sesión en nuestra página usando una de sus " +"cuentas de usuario existentes. Si se ha equivocado, pase a<a href=" +"\"%(login_url)s\">sign in</a>, por favor." + +#~ msgid "Listing of all audiobooks" +#~ msgstr "Lista de todos los audiolibros" + +#~ msgid "Latest MP3 audiobooks" +#~ msgstr "Los últimos audiolibros en el formato MP3" + +#~ msgid "Latest Ogg Vorbis audiobooks" +#~ msgstr "Los últimos audiolibros en el formato Ogg" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." +#~ msgstr "" +#~ "Colección de grabaciones de libros de lectura obligatoria de la Fundación " +#~ "Polonia Moderna.Es gratuita y libre.Los audiolibros están grabados por " +#~ "actores y actrices conocidos/as, como Danuta Stenka y Jan Peszek." + +#~ msgid "See also" +#~ msgstr "Ve también" + +#~ msgid "Theme" +#~ msgstr "Tema" + +#~ msgid "in work " +#~ msgstr "de la obra" + +#~ msgid "This work is licensed under:" +#~ msgstr "Esta obra se distribuye bajo licencia" + +#~ msgid "" +#~ "This work isn't covered by copyright and is part of the\n" +#~ " public domain, which means it can be freely used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" +#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" +#~ " license." +#~ msgstr "" +#~ "Esta obra está libre de derechos de autor y es de dominio público, por " +#~ "ende se puede usar,publicar y difundir libremente. Si esta obra tiene " +#~ "materiales adicionales (como notas a pie de pá gina, temas lutrarios, " +#~ "etc.), que no esten libres de derechos de autor, dichos materiales están " +#~ "publicados bajo la \n" +#~ "<a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " +#~ "Commons Attribution-ShareAlike 3.0</a>\n" +#~ " licencia." + +#~ msgid "Text prepared based on:" +#~ msgstr "Texto preparado basado en:" + +#~ msgid "Edited and annotated by:" +#~ msgstr "Editado y anotado por:" + +#~ msgid "Listing of all works" +#~ msgstr "Lista de las obras" + +#~ msgid "Table of Content" +#~ msgstr "Ãndice" + +#~ msgid "â top â" +#~ msgstr "â la cabeza de página â" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "¡Poner un libro en el estante!" + +#~ msgid "Create new shelf" +#~ msgstr "Crear un estante nuevo" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "No tienes ningún estante. Puedes crear uno abajo si quieres." + +#~ msgid "Put on the shelf!" +#~ msgstr "¡Poner en el estante!" + +#~ msgid "Epoch" +#~ msgstr "Ãpoca" + +#~ msgid "Kind" +#~ msgstr "Género" + +#~ msgid "Genre" +#~ msgstr "Subgénero" + +#~ msgid "Read online" +#~ msgstr "Leer online" + +#~ msgid "Download" +#~ msgstr "Descargar" + +#~ msgid "to print" +#~ msgstr "imprimir" + +#~ msgid "for an e-book reader" +#~ msgstr "para los usuarios de e-libros" + +#~ msgid "for Kindle" +#~ msgstr "para Kindle" + +#~ msgid "for advanced usage" +#~ msgstr "para el uso avanzado" + +#~ msgid "Listen" +#~ msgstr "Escucha" + +#~ msgid "Table of contents" +#~ msgstr "Ãndice" + +#~ msgid "Themes" +#~ msgstr "Temas" + +#~ msgid "Edit. note" +#~ msgstr "Editar nota" + +#~ msgid "Infobox" +#~ msgstr "Infobox" + +#~ msgid "Book's page" +#~ msgstr "volver a la página del libro" + +#~ msgid "for a reader" +#~ msgstr "para el lector" + +#, fuzzy +#~ msgid "for advanced usege" +#~ msgstr "avanzado" + +#~ msgid "Download a custom PDF" +#~ msgstr "Descarga un PDF personalisado" + +#~ msgid "Motifs and themes" +#~ msgstr "Temas" + +#~ msgid "See" +#~ msgstr "Ve" + +#~ msgid "Source" +#~ msgstr "Fuente" + +#~ msgid "of the book" +#~ msgstr "del libro" + +#~ msgid "Source XML file" +#~ msgstr "Archivo XML fuente" + +#~ msgid "Book on" +#~ msgstr "Libro en" + +#~ msgid "Editor's Platform" +#~ msgstr "La plataforma de redactor" + +#~ msgid "Book description on Lektury.Gazeta.pl" +#~ msgstr "Descripción del libro en Lektury.Gazeta.pl" + +#~ msgid "Book description on Wikipedia" +#~ msgstr "Descripción del libro en Wikipedia" + +#~ msgid "Mix this book" +#~ msgstr "Mezcla est elibro" + +#~ msgid "Download all audiobooks for this book" +#~ msgstr "Descarga todos los audiolibros de este libro" + +#~ msgid "Catalogue" +#~ msgstr "Catálogo" + +#~ msgid "Authors" +#~ msgstr "Autores" + +#~ msgid "Kinds" +#~ msgstr "Géneros" + +#~ msgid "Genres" +#~ msgstr "Subgéneros" + +#~ msgid "Epochs" +#~ msgstr "Ãpocas" + +#~ msgid "Themes and topics" +#~ msgstr "Temas y motivos" + +#~ msgid "Listing of all DAISY files" +#~ msgstr "Lista de todos los archivos DAISY" + +#~ msgid "Latest DAISY audiobooks" +#~ msgstr "Los últimos audiolibros en el formato 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Å." +#~ msgstr "" +#~ "El sistema DAISY es un formato multimedio que permite acceder a los " +#~ "libros, adaptado para las necesidades de personas con baja visión, " +#~ "invidentes o las que tienes problemas para leer. Los podeis usar de " +#~ "manera gratuita y libre." + +#~ msgid "" +#~ "The criteria are ambiguous. Please select one of the following options:" +#~ msgstr "" +#~ "Estos criterios son ambiguous. Por favor, selecta una de las siguientes " +#~ "opciones:" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Estentes que contienen este fragmento" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "No tienes ningún estante. Puedes crear uno abajo si quieres." + +#~ msgid "Save all shelves" +#~ msgstr "Guardar todos los estantes" + +#~ msgid "Expand fragment" +#~ msgstr "Ampliar este fragmento" + +#~ msgid "Hide fragment" +#~ msgstr "Esconder este fragmento" + +#~ msgid "See full category" +#~ msgstr "Ver toda la categorÃa" + +#~ msgid "All books" +#~ msgstr "Todos los libros" + +#~ msgid "Audiobooks" +#~ msgstr "Audiolibros" + +#~ msgid "DAISY" +#~ msgstr "DAISY" + +#~ msgid "Work is licensed under " +#~ msgstr "Las obras se distribuyen bajo licencia" + +#~ msgid "Based on" +#~ msgstr "Basado en" + +#~ msgid "Details" +#~ msgstr "Detalles" + +#~ msgid "Author" +#~ msgstr "Autor" + +#~ msgid "Other resources" +#~ msgstr "Otros recursos" + +#~ msgid "Source of the image" +#~ msgstr "Fuente de la imagen" + +#~ msgid "Image on the Editor's Platform" +#~ msgstr "La imagen en la Plataforma de el Editor" + +#~ msgid "View XML source" +#~ msgstr "Ver XML fuente" + +#~ msgid "Work's themes " +#~ msgstr "Temas de la obra" + +#~ msgid "Listing of all pictures" +#~ msgstr "Lista de todas la imagenes" + +#~ msgid "Download as" +#~ msgstr "Descarga como" + +#~ msgid "Artist" +#~ msgstr "Artista" + +#~ msgid "Director" +#~ msgstr "Director" + +#~ msgid "Audiobooks were prepared as a part of the projects:" +#~ msgstr "Los audiolibros fueron preparados como la parte de los proyectos:" + +#~ msgid "%(cs)s, funded by %(fb)s" +#~ msgstr "%(cs)s, financiado por %(fb)s" + +#~ msgid "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +#~ msgstr "" +#~ "Los audiolibros fueron preparados como parte del %(cs)s proyecto fundado " +#~ "por %(fb)s." + +#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." +#~ msgstr "Los audiolibros fueron preparados como parte del %(cs)s proyecto" + +#~ msgid "Did you mean" +#~ msgstr "Quizás quisiste decir" + +#~ msgid "Results by authors" +#~ msgstr "Resultados por autores" + +#~ msgid "Results by title" +#~ msgstr "Resultados por el tÃtulo" + +#~ msgid "Results in text" +#~ msgstr "Resultados en el texto" + +#~ msgid "Other results" +#~ msgstr "Otros resultados" + +#~ msgid "Sorry! Search cirteria did not match any resources." +#~ msgstr "" +#~ "Lo sentimos, no hay resultados que corresponden con los criterios de la " +#~ "búsqueda." + +#~ msgid "" +#~ "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 "" +#~ "El buscador admite los criterios siguientes: tÃtulo, autor, tema/motivo, " +#~ "época, género y subgénero.\n" +#~ "\t\tActualmente no admitimos la búsqueda de texto entero." + +#~ msgid "Sorry! Search query must have at least two characters." +#~ msgstr "¡Perdón! La pregunta debe tener por lo menos dos letras." + +#~ msgid "in Lektury.Gazeta.pl" +#~ msgstr "en Lektury.Gazeta.pl" + +#~ msgid "in Wikipedia" +#~ msgstr "en Wikipedia" + +#~ msgid "Your shelves with books" +#~ msgstr "Tus estantes con libros" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "No tienes ningún estante. Puedes crear uno abajo si quieres." + +#~ msgid "Create shelf" +#~ msgstr "Crear un estante" + +#~ msgid "author" +#~ msgstr "autor" + +#~ msgid "Hand-outs for teachers" +#~ msgstr "Materiales para los profesores" + +#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" +#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" + +#~ msgid "Read article about this author on Wikipedia" +#~ msgstr "Leer el artÃculo sobre este autor en Wikipedia" + +#~ msgid "This author's works are copyrighted." +#~ msgstr "Las obras de este autor están protegidas por los derechos de autor." + +#~ msgid "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries can't publish this author's works." +#~ msgstr "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" +#~ "publiczna/'>Entérate</a> por qué las bibliotecas virtuales no pueden " +#~ "publicar las obras de este autor." + +#~ msgid "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet school library of Wolne Lektury soon." +#~ msgstr "" +#~ "Las obras de este autor se encuentran en el dominio público y pronto " +#~ "serán publicadas en la biblioteca virtual de Wolne Lektury." + +#~ msgid "" +#~ "This author's works will become part of public domain and will be allowed " +#~ "to be published without restrictions in" +#~ msgstr "" +#~ "Las obras de este autor entrarán en los recursos del dominio público y " +#~ "podrán ser publicadas sin restricciones en " + +#~ msgid "" +#~ "This work is in public domain and will be published on Internet school " +#~ "library of Wolne Lektury soon." +#~ msgstr "" +#~ "Esta obra se encuentra en el dominio público y pronto será publicada en " +#~ "la biblioteca electrónica de Wolne Lektury." + +#~ msgid "" +#~ "This work will become part of public domain and will be allowed to be " +#~ "published without restrictions in" +#~ msgstr "" +#~ "Esta obra entrará en los recursos del dominio público y podrá ser " +#~ "publicada sin restricciones en" + +#~ msgid "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries can't publish this work." +#~ msgstr "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" +#~ "publiczna/'>Entérate</a> por qué las bibliotecas virtuales no pueden " +#~ "publicar esta obra." + +#~ msgid "This work is copyrighted." +#~ msgstr "Esta obra está protegida por los derechos de autor." + +#~ msgid "Login to Wolne Lektury" +#~ msgstr "Registrate en WolneLektury.pl" + +#~ msgid "Login" +#~ msgstr "Login" + +#~ msgid "" +#~ "Internet Explorer cannot display this site properly. Click here to read " +#~ "more..." +#~ msgstr "" +#~ "Internet Explorer no puede mostrar esta página correctamente. Haz clic " +#~ "aquà para saber más..." + +#~ msgid "Your shelves" +#~ msgstr "Tus estantes" + +#~ msgid "Register on" +#~ msgstr "Registrarse en" + +#~ msgid "or" +#~ msgstr "o" + +#~ msgid "return to main page" +#~ msgstr "volver a la página principal" + +#, fuzzy +#~ msgid "Listing of all audiobooks on WolneLektury.pl" +#~ msgstr "Lista de las obras en WolneLektury.pl" + +#~ msgid "Put a book" +#~ msgstr "¡Poner un libro" + +#~ msgid "on the shelf!" +#~ msgstr "en el estante!" + +#~ msgid "and printing using" +#~ msgstr "e imprimir" + +#~ msgid "Download EPUB" +#~ msgstr "Descargar EPUB" + +#~ msgid "Download TXT" +#~ msgstr "Descargar TXT" + +#~ msgid "on small displays, for example mobile phones" +#~ msgstr "en pantallas pequeñas como las de teléfonos móviles" + +#~ msgid "Download ODT" +#~ msgstr "Descargar ODT" + +#~ msgid "and editing using" +#~ msgstr "y editar" + +#~ msgid "Book on project's wiki" +#~ msgstr "Libro en wiki del proyecto" + +#~ msgid "on" +#~ msgstr "en" + +#~ msgid "See description" +#~ msgstr "Ver la descripción" + +#~ msgid "Listing of all works on WolneLektury.pl" +#~ msgstr "Lista de las obras en WolneLektury.pl" + +#~ msgid "Jump to" +#~ msgstr "Saltar a" + +#~ msgid "Categories" +#~ msgstr "CategorÃas" + +#, fuzzy +#~ msgid "Listing of all DAISY files on WolneLektury.pl" +#~ msgstr "Lista de las obras en WolneLektury.pl" + +#~ msgid "Show full category" +#~ msgstr "Mostrar toda la categorÃa" + +#~ msgid "Hide" +#~ msgstr "Esconder" + +#~ msgid "Browse books by categories" +#~ msgstr "Mirar los libros según categorÃa" + +#~ msgid "delete" +#~ msgstr "borrar" + +#~ msgid "" +#~ "Create your own book set. You can share it with friends by sending them " +#~ "link to your shelf." +#~ msgstr "" +#~ "Crea tu propia colección de libros. Puedes compartirla con tus amigos " +#~ "enviándoles el enlace a tu estante." + +#~ msgid "You need to " +#~ msgstr "Tienes que" + +#~ msgid "sign in" +#~ msgstr "iniciar la sesión" + +#~ msgid "to manage your shelves." +#~ msgstr "para organizar tus estantes." + +#~ msgid "" +#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." +#~ msgstr "" +#~ "Esquemas de clases y otras ideas para usar WolneLektury.pl en la " +#~ "enseñanza." + +#~ msgid "" +#~ "are professional recordings of literary texts from our repository, " +#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " +#~ "DAISY system." +#~ msgstr "" +#~ "son grabaciones profesionales de textos literarios de nuestro depósito. " +#~ "Están disponibles gratis en formatos MP3, Ogg Vorbis y en el sistema " +#~ "DAISY. " + +#~ msgid "Themes groups" +#~ msgstr "Grupos de temas" + +#~ msgid "See our blog" +#~ msgstr "Ver nuestro blog" + +#~ msgid "You can help us!" +#~ msgstr "¡Puedes ayudarnos!" + +#~ msgid "" +#~ "We try our best to elaborate works appended to our library. It is " +#~ "possible only due to support of our volunteers." +#~ msgstr "" +#~ "Hacemos todo lo posible para elaborar las obras de nuestra biblioteca con " +#~ "la mayor perfección. Esto es posible sólo gracias al apoyo de nuestros " +#~ "voluntarios." + +#~ msgid "" +#~ "We invite people who want to take part in developing Internet school " +#~ "library Wolne Lektury." +#~ msgstr "" +#~ "Invitamos a todos quienes quieren formar parte en el desarrollo de la " +#~ "biblioteca virtual de Wolne Lektury." + +#~ msgid "About us" +#~ msgstr "Sobre nosotros" + +#~ msgid "" +#~ "\n" +#~ "\t\t\tInternet library with school readings âWolne Lekturyâ (<a href=" +#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) is a project made by " +#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " +#~ "which are recommended by Ministry of National Education and are in public " +#~ "domain.\n" +#~ "\t\t\t" +#~ msgstr "" +#~ "\n" +#~ "\t\t\tLa biblioteca virtual con lecturas âWolne Lekturyâ (<a href=" +#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>)es un proyecto creado " +#~ "por la Fundación Polonia Moderna. HabÃa comenzado su actividad en el año " +#~ "2007 y está compartiendo las lecturas recomendadas por el Ministerio de " +#~ "la Educación Nacional y que son del dominio público.\n" +#~ "\t\t\t" + +#~ msgid "Searching in" +#~ msgstr "Buscando en" + +#~ msgid "More than one result matching the criteria found." +#~ msgstr "" +#~ "Se ha encontrado más que un resultado que corresponde a tus criterios." + +#~ msgid "Search in WolneLektury.pl" +#~ msgstr "Buscar en WolneLektury.pl" + +#~ msgid "Your shelf is empty" +#~ msgstr "Tu estante está vacÃo" + +#~ msgid "" +#~ "You can put a book on a shelf by entering page of the reading and " +#~ "clicking 'Put on the shelf'." +#~ msgstr "" +#~ "Puedes poner un libro en el estante entrando en la página de aquella " +#~ "lectura y haciendo clic en \"Poner en el estante\"." + +#~ msgid "Choose books' formats which you want to download:" +#~ msgstr "Elige formatos de los libros que quieres descargar:" + +#~ msgid "for listening" +#~ msgstr "para escuchar" + +#~ msgid "on favourite MP3 player" +#~ msgstr "en tu reproductor de MP3 favorito." + +#~ msgid "Xiph.org Foundation" +#~ msgstr "Fundación Xiph.org" + +#~ msgid "Updating list of books' formats on the shelf" +#~ msgstr "Actualizando la lista de formatos de los libros en el estante" + +#~ msgid "cancel" +#~ msgstr "cancelar" + +#~ msgid "Share this shelf" +#~ msgstr "Compartir este estante" + +#~ msgid "" +#~ "Copy this link and share it with other people to let them see your shelf." +#~ msgstr "" +#~ "Copia este enlace y compártelo con otros para que puedan ver tu estante. " + +#, fuzzy +#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read related study on Lektury.Gazeta.pl" +#~ msgstr "Leer el estudio sobre las obras de este autor en Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" +#~ msgstr "Leer el artÃculo sobre este autor en Wikipedia" + +#, fuzzy +#~ msgid "Read article about kind %(last_tag)s on Wikipedia" +#~ msgstr "Leer el artÃculo sobre este autor en Wikipedia" + +#, fuzzy +#~ msgid "Read article about genre %(last_tag)s on Wikipedia" +#~ msgstr "Leer el artÃculo sobre este autor en Wikipedia" + +#, fuzzy +#~ msgid "Read related article on Wikipedia" +#~ msgstr "Leer el artÃculo sobre este autor en Wikipedia" + +#~ msgid "Delete" +#~ msgstr "Borrar" + +#~ msgid "return to the main page" +#~ msgstr "volver a la página principal" + +#~ msgid "return to list of materials" +#~ msgstr "volver a la lista de los materiales" + +#~ msgid "Hand-outs for teachers on " +#~ msgstr "Materiales para los profesores en" + +#, fuzzy +#~ msgid "" +#~ "Download TXT - for reading on small displays, for example mobile phones" +#~ msgstr "en pantallas pequeñas como las de teléfonos móviles" + +#~ msgid "Download MP3" +#~ msgstr "Descargar MP3" + +#~ msgid "Download Ogg Vorbis" +#~ msgstr "Descargar Ogg Vorbis" + +#~ msgid "Download DAISY" +#~ msgstr "Descargar DAISY" + +#~ msgid "check list of books" +#~ msgstr "Verificar la lista de libros" + +#~ msgid "in our repository" +#~ msgstr "en nuestra colección" + +#~ msgid "Polish" +#~ msgstr "polaco" + +#~ msgid "German" +#~ msgstr "alemán" + +#~ msgid "English" +#~ msgstr "inglés" + +#~ msgid "Lithuanian" +#~ msgstr "lituano" + +#~ msgid "French" +#~ msgstr "francés" + +#~ msgid "Russian" +#~ msgstr "ruso" + +#~ msgid "Spanish" +#~ msgstr "español" + +#~ msgid "Ukrainian" +#~ msgstr "ucraniano" + +#~ msgid "Choose your interface language: " +#~ msgstr "Elige el idioma de la interfaz:" + +#~ msgid "Choose language" +#~ msgstr "Elige el idioma" + +#~ msgid "Hide description" +#~ msgstr "Esconder la descripción" + +#~ msgid "Read study of epoch" +#~ msgstr "Leer el estudio sobre esta época" + +#~ msgid "Read article about epoch" +#~ msgstr "Leer el artÃculo sobre esta época" diff --git a/src/wolnelektury/locale/fr/LC_MESSAGES/django.mo b/src/wolnelektury/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..cb1d1c608 Binary files /dev/null and b/src/wolnelektury/locale/fr/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/fr/LC_MESSAGES/django.po b/src/wolnelektury/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..aed8199d8 --- /dev/null +++ b/src/wolnelektury/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,805 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:43+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1\n" + +#: views.py:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "Connexion" + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "Inscrivez-vous" + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr "Vous devez être connecter pour continuer" + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "Site n'existe pas" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "Composant non trouvé" + +#: 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 "" +"Désolé, cette page n'existe pas. Vérifiez si vous avez introduit l'adresse " +"correcte ou allez à " + +#: templates/404.html:14 +msgid "main page" +msgstr "accueil" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "Erreur du serveur" + +#: templates/500.html:19 +msgid "" +"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " +"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " +"error.</p>" +msgstr "" +"<p> Le site Wolnelektury.pl est temporairement inaccessible. En attendant, " +"visitez notre <a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p> " +"Informez nos <a href='mailto:fundacja@nowoczesnapolska.org.pl'> " +"administrateurs </a> de l'erreur.</p>" + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "Site inaccessible" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "" +"Le site Wolnelektury.pl est temporairement inaccessible en raison " +"d'opérations de maintenance." + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "Wolne Lektury - la bibliothèque en ligne" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "Publications récentes" + +#: templates/main_page.html:41 +msgid "News" +msgstr "Actualités" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "Outils" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "Rapportez une erreur ou faites une suggestion" + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "Téléchargez le catalogue au format PDF" + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "Widget" + +#: templates/main_page.html:59 +msgid "Missing a book?" +msgstr "Il vous manque un livre?" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "Plan de publication" + +#: templates/main_page.html:71 +msgid "Information" +msgstr "Informations" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "L'image utilisé:" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "Wolne Lektury (Lectures Libres)" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" <a href='%(b)s'>%(c)s</a> free reading you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgid_plural "" +"\n" +" <a href='%(b)s'>%(c)s</a> free readings you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgstr[0] "" +"\n" +" <a href='%(b)s'>%(c)s</a> lecture gratuite <a " +"href='%(r)s'>auxquelles vous avez droit</a>\n" +" " +msgstr[1] "" +"\n" +" <a href='%(b)s'>%(c)s</a> lectures gratuites <a " +"href='%(r)s'>auxquelles vous avez droit</a>\n" +" " + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "Bienvenue" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "" + +#: templates/superbase.html:74 templates/user.html:14 +#, fuzzy +msgid "Social accounts" +msgstr "ou utilisez votre compte" + +#: templates/superbase.html:77 +msgid "My shelf" +msgstr "Mon étagère" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "Administration" + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "Déconnexion" + +#: templates/superbase.html:111 +msgid "Search" +msgstr "Rechercher" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "Version linguistique" + +#: templates/superbase.html:165 +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." +"org.pl/\">Modern Poland Foundation</a>.\n" +"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" +"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" +"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" +"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" +"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tLectures Libres est un projet réalisé par la <a href=\"http://" +"nowoczesnapolska.org.pl/\">Fondation Pologne Moderne </a>.\n" +"\t\t\t\tReproductions numériques sont préparées par la<a href=\"http://www." +"bn.org.pl/\">Bibliothèque nationale</a>, <a href=\"http://www.bs.katowice.pl/" +"\">Bibliothèque de Silésie</a> et <a href=\"http://www.bibliotekaelblaska.pl/" +"\">Bibliothèque d'ElblÄ g</a> et basées sur leurs ressources. \n" +"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" +"\t\t\t\t" + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" +"\">fundacja@nowoczesnapolska.org.pl</a>\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\t Fondation Pologne Moderne, 00-514 Warszawa (Varsovie), ul. " +"MarszaÅkowska 84/92 lok. 125, tél./fax: (+48) (22) 621-30-17\n" +" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" +"\">fundacja@nowoczesnapolska.org.pl</a>\n" +"\t\t\t\t" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "Fermer" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "Chargement en cours" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "Site de l'administrateur" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "Traductions" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "avancé(e)" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "simplifié(e)" + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "Importez le livre" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +#, fuzzy +msgid "Sign in using:" +msgstr "Connexion" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "ou inscrivez-vous" + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgstr[0] "" +"\n" +"Nous avons %(c)s d'ouvrages publiés sur Wolne Lektury!\n" +"Aidez-nous à élargir la bibliothèque et libérez des nouvelles lectures par\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">faire une donation\n" +"ou transférer 1% de vos impôts</a>.\n" +msgstr[1] "" +"\n" +"Nous avons %(c)s d'ouvrages publiés sur Wolne Lektury!\n" +"Aidez-nous à élargir la bibliothèque et libérez des nouvelles lectures par\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">faire une donation\n" +"ou transférer 1% de vos impôts</a>.\n" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +msgstr "" +"Devenez un éditeur de Wolne Lektury! Vérifiez si\n" +"nous sommes en train de préparer un texte que vous cherchez et rédigez\n" +"une publication vous-mêmes en se connectant sur la Plateforme des éditeurs." + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "Plus..." + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "" + +#: templates/openid/login.html:27 +#, fuzzy +msgid "Sign In" +msgstr "Connexion" + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "précédent(e)" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "suivant(e)" + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "Autorisez l'accès à Wolne Lektury" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" +"strong>." +msgstr "" +"Confirmez pour autoriser l'accès à Wolne Lektury comme l'utilisateur <strong>" +"%(user)s</strong>." + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" + +#: templates/socialaccount/connections.html:36 +#, fuzzy +msgid "Remove" +msgstr "supprimer" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "" + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" +"\">sign in</a>." +msgstr "" + +#~ msgid "Listing of all audiobooks" +#~ msgstr "Liste des tous les livres audio" + +#~ msgid "Latest MP3 audiobooks" +#~ msgstr "Les plus nouveaux livres audio MP3" + +#~ msgid "Latest Ogg Vorbis audiobooks" +#~ msgstr "Les plus nouveaux livres audio Ogg Vorbis" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." +#~ msgstr "" +#~ "Audiothèque des lectures scolaires de la Fondation Pologne Moderne.\n" +#~ "Vous pouvez l'utiliser gratuitement et sans limites. \n" +#~ "Les livres audio sont lus par les acteurs connus, comme par exemple: " +#~ "Danuta Stenka et Jan Peszek." + +#~ msgid "See also" +#~ msgstr "Voir aussi" + +#~ msgid "Theme" +#~ msgstr "Thème" + +#~ msgid "in work " +#~ msgstr "dans l'oeuvre" + +#~ msgid "This work is licensed under:" +#~ msgstr "Cet oeuvre est publié sous la licence" + +#~ msgid "" +#~ "This work isn't covered by copyright and is part of the\n" +#~ " public domain, which means it can be freely used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" +#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" +#~ " license." +#~ msgstr "" +#~ "Cet ouvrage n'est pas protégé par le droit d'auteur et appartiennent au\n" +#~ "domaine public; c'est-à -dire qu'il peut être publié et divulgué " +#~ "librement.\n" +#~ "Si l'ouvrage est accompagné des matériaux supplémentaires (annotations, " +#~ "motifs littéraires, etc.),\n" +#~ "ces derniers sont donc distribués sous la licence:\n" +#~ "<a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl" +#~ "\">Paternité - Partage à l'Identique 3.0 non transposé</a>." + +#~ msgid "Text prepared based on:" +#~ msgstr "Préparation du texte basée sur:" + +#~ msgid "Edited and annotated by:" +#~ msgstr "Les éditions et annotations par:" + +#~ msgid "Listing of all works" +#~ msgstr "Liste des tous les ouvrages" + +#~ msgid "Table of Content" +#~ msgstr "Table des matières" + +#~ msgid "â top â" +#~ msgstr "â top â" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Mettre un livre sur l'étagère!" + +#~ msgid "Create new shelf" +#~ msgstr "Créez une nouvelle étagère" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une au-dessous, si " +#~ "vous voulez." + +#~ msgid "Put on the shelf!" +#~ msgstr "Mettre sur l'étagère!" + +#~ msgid "Epoch" +#~ msgstr "Ãpoque" + +#~ msgid "Kind" +#~ msgstr "Type" + +#~ msgid "Genre" +#~ msgstr "Genre" + +#~ msgid "Read online" +#~ msgstr "Lisez en ligne" + +#~ msgid "Download" +#~ msgstr "Téléchargez" + +#~ msgid "to print" +#~ msgstr "pour imprimer" + +#~ msgid "for an e-book reader" +#~ msgstr "pour un lecteur des livres numeriques" + +#~ msgid "for Kindle" +#~ msgstr "pour Kindle" + +#~ msgid "for advanced usage" +#~ msgstr "pour lâutilisation avancée" + +#~ msgid "Listen" +#~ msgstr "Ãcoutez" + +#~ msgid "Table of contents" +#~ msgstr "Table des matières" + +#~ msgid "Themes" +#~ msgstr "Thèmes" + +#~ msgid "Edit. note" +#~ msgstr "Note d'éditeur" + +#~ msgid "Infobox" +#~ msgstr "Infobox" + +#~ msgid "Book's page" +#~ msgstr "Site du livre" + +#~ msgid "for a reader" +#~ msgstr "pour un lecteur" + +#, fuzzy +#~ msgid "for advanced usege" +#~ msgstr "avancé(e)" + +#~ msgid "Download a custom PDF" +#~ msgstr "Téléchargez un PDF pérsonnalisé" + +#~ msgid "Motifs and themes" +#~ msgstr "Motifs et thèmes" + +#~ msgid "See" +#~ msgstr "Voir" + +#~ msgid "Source" +#~ msgstr "Source" + +#~ msgid "of the book" +#~ msgstr "du livre" + +#~ msgid "Source XML file" +#~ msgstr "Fichier source XML" + +#~ msgid "Book on" +#~ msgstr "Livre sur" + +#~ msgid "Editor's Platform" +#~ msgstr "Plateforme d'éditeur" + +#~ msgid "Book description on Lektury.Gazeta.pl" +#~ msgstr "Description du livre sur Lektury.Gazeta.pl" + +#~ msgid "Book description on Wikipedia" +#~ msgstr "Description du livre sur Wikipédia" + +#~ msgid "Mix this book" +#~ msgstr "Mixez ce livre" + +#~ msgid "Download all audiobooks for this book" +#~ msgstr "Téléchargez tous les livres audio pour ce livre" + +#~ msgid "Catalogue" +#~ msgstr "Catalogue" + +#~ msgid "Authors" +#~ msgstr "Auteurs" + +#~ msgid "Kinds" +#~ msgstr "Types" + +#~ msgid "Genres" +#~ msgstr "Genres" + +#~ msgid "Epochs" +#~ msgstr "Ãpoques" + +#~ msgid "Themes and topics" +#~ msgstr "Thèmes et sujets" + +#~ msgid "Listing of all DAISY files" +#~ msgstr "Liste des tous les livres audio DAISY" + +#~ msgid "Latest DAISY audiobooks" +#~ msgstr "Le plus nouveaux livres audio 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Å." +#~ msgstr "" +#~ "DAISY est un système pour rendre les livres accessibles, apprécié autour " +#~ "du monde, \n" +#~ "approprié à des non voyants et à des malvoyants et à des personnes \n" +#~ "qui ont des difficultés à lire. Vous pouvez l'utiliser gratuitement et " +#~ "sans limites." + +#~ msgid "" +#~ "The criteria are ambiguous. Please select one of the following options:" +#~ msgstr "Les critères sont ambigus. Choisissez parmi les options ci-dessous:" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Ãtagères qui contiennent l'extrait" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une au-dessous, si " +#~ "vous voulez." + +#~ msgid "Save all shelves" +#~ msgstr "Enregistrer toutes les étagères" + +#~ msgid "Expand fragment" +#~ msgstr "Montrer l'extrait" + +#~ msgid "Hide fragment" +#~ msgstr "Cacher l'extrait" + +#~ msgid "See full category" +#~ msgstr "Voir catégorie entière" + +#~ msgid "All books" +#~ msgstr "Tous les livres" + +#~ msgid "Audiobooks" +#~ msgstr "Livres audio" + +#~ msgid "DAISY" +#~ msgstr "DAISY" + +#~ msgid "Work is licensed under " +#~ msgstr "Ouvrage sous la licence" + +#~ msgid "Based on" +#~ msgstr "Basé sur" + +#~ msgid "Details" +#~ msgstr "Détails" + +#~ msgid "Author" +#~ msgstr "Auteur" + +#~ msgid "Other resources" +#~ msgstr "Autres ressources" + +#~ msgid "Source of the image" +#~ msgstr "Source d'image" + +#~ msgid "Image on the Editor's Platform" +#~ msgstr "L'image sur la Plateforme d'éditeur" + +#~ msgid "View XML source" +#~ msgstr "Voir source XML" + +#~ msgid "Work's themes " +#~ msgstr "Les thèmes de l'oeuvre" + +#~ msgid "Listing of all pictures" +#~ msgstr "Liste de tous les images" + +#~ msgid "Download as" +#~ msgstr "Téléchargez comme" + +#~ msgid "Artist" +#~ msgstr "Artiste" + +#~ msgid "Director" +#~ msgstr "Metteur en scène" + +#~ msgid "Audiobooks were prepared as a part of the projects:" +#~ msgstr "Livres audios ont été préparés comme une part des projets:" + +#~ msgid "%(cs)s, funded by %(fb)s" +#~ msgstr "%(cs)s, sponsorisé par %(fb)s" + +#~ msgid "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +#~ msgstr "" +#~ "Livres audios ont été préparés comme une part du projet %(cs)s sponsorisé " +#~ "par %(fb)s." + +#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." +#~ msgstr "Livres audios ont été préparés comme une part du projet %(cs)s." + +#~ msgid "Did you mean" +#~ msgstr "Est-ce que vous cherchez" + +#~ msgid "Results by authors" +#~ msgstr "Résultats par l'auteur" + +#~ msgid "Results by title" +#~ msgstr "Résultats par le titre" + +#~ msgid "Results in text" +#~ msgstr "Résultats dans le texte" + +#~ msgid "Other results" +#~ msgstr "Autres résultats" + +#~ msgid "Sorry! Search cirteria did not match any resources." +#~ msgstr "" +#~ "Nous sommes désolés, aucune ressource ne répond aux critères de recherche." + +#~ msgid "" +#~ "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 "" +#~ "Le moteur de recherche permet de chercher selon le titre, auteur, sujet/" +#~ "thème, époque, type et genre.\n" +#~ "\t\tPour le moment nous n'assurons pas la recherche en plein texte." + +#~ msgid "Sorry! Search query must have at least two characters." +#~ msgstr "" +#~ "Nous sommes désolés, pour effectuer la recherche il faut entrer au moins " +#~ "deux caractères." + +#~ msgid "in Lektury.Gazeta.pl" +#~ msgstr "sur Lektury.Gazeta.pl" + +#~ msgid "in Wikipedia" +#~ msgstr "sur Wikipédia" + +#~ msgid "Your shelves with books" +#~ msgstr "Vos étagères avec les livres" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "" +#~ "Vous ne possédez aucune étagère. Vous pouvez en créer une en-dessus, si " +#~ "vous voulez." + +#~ msgid "Create shelf" +#~ msgstr "Créez une étagère" + +#~ msgid "author" +#~ msgstr "auteur" + +#~ msgid "Hand-outs for teachers" +#~ msgstr "Fiches pour les enseignants" + +#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" +#~ msgstr "Lisez une élaboration d'oeuvres de cet auteur sur Lektury.Gazeta.pl" + +#~ msgid "Read article about this author on Wikipedia" +#~ msgstr "Lisez un article sur cet auteur sur Wikipédia." + +#~ msgid "This author's works are copyrighted." +#~ msgstr "Les oeuvres de cet auteur sont protégées par le droit d'auteur." + +#~ msgid "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries can't publish this author's works." +#~ msgstr "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" +#~ "publiczna/'>Apprenez pourquoi</a> les bibliothèques en ligne ne peuvent " +#~ "pas publier les oeuvres de cet auteur." + +#~ msgid "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet school library of Wolne Lektury soon." +#~ msgstr "" +#~ "Les oeuvres de cet auteur appartiennent au domaine public et seront " +#~ "prochainement publiées dans la bibliothèque en ligne Wolne Lektury." + +#~ msgid "" +#~ "This author's works will become part of public domain and will be allowed " +#~ "to be published without restrictions in" +#~ msgstr "" +#~ "Les oeuvres de cet auteur entreront dans le domaine public et il sera " +#~ "possible de les publier sans restrictions" + +#~ msgid "" +#~ "This work is in public domain and will be published on Internet school " +#~ "library of Wolne Lektury soon." +#~ msgstr "" +#~ "Cette oeuvre appartient au domaine public et sera prochainement publiée " +#~ "dans la bibliothèque en ligne Wolne Lektury." + +#~ msgid "" +#~ "This work will become part of public domain and will be allowed to be " +#~ "published without restrictions in" +#~ msgstr "" +#~ "Cette oeuvre entrera dans le domaine public et il sera possible de la " +#~ "publier sans restrictions " + +#~ msgid "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries can't publish this work." +#~ msgstr "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" +#~ "publiczna/'>Apprenez pourquoi</a> les bibliothèques en ligne ne peuvent " +#~ "pas publier cette oeuvre." + +#~ msgid "This work is copyrighted." +#~ msgstr "Cette oeuvre est protégée par le droit d'auteur" + +#~ msgid "Login to Wolne Lektury" +#~ msgstr "Se connecter à Wolne Lektury" + +#~ msgid "Login" +#~ msgstr "Connexion" diff --git a/src/wolnelektury/locale/it/LC_MESSAGES/django.mo b/src/wolnelektury/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..5e5748cb2 Binary files /dev/null and b/src/wolnelektury/locale/it/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/it/LC_MESSAGES/django.po b/src/wolnelektury/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..38d521eb1 --- /dev/null +++ b/src/wolnelektury/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,787 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:43+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: views.py:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "Accedi" + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "Registrati" + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr " Per poter continuare devi essere loggato" + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "Questa pagina non esiste" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "La pagina non è stata trovata" + +#: 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 "" +"Siamo spiacenti, ma questa pagina non esiste. Si prega di verificare se " +"l'indirizzo è stato inserito correttamente oppure andare su" + +#: templates/404.html:14 +msgid "main page" +msgstr "pagina principale" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "Errore del server" + +#: templates/500.html:19 +msgid "" +"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " +"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " +"error.</p>" +msgstr "" +"<p> il sito di Wolnelektury.pl non è disponibile al momento. Nel frattempo " +"si prega di visitare il nostro <a href='http://nowoczesnapolska.org." +"pl'>blog</a>.</p> <p>Si prega di informare i nostri <a href='mailto:" +"fundacja@nowoczesnapolska.org.pl'>amministratori</a> sull'errore. </p>" + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "Servizio non disponibile" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "" +"A causa di lavori di manutenzione il sito WolneLektury.pl non è " +"momentaneamente disponibile." + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "Wolne Lektury biblioteca online" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "" + +#: templates/main_page.html:41 +msgid "News" +msgstr "" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "Segnala un'errore o una proposta" + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "Scarica il catalogo nel formato PDF." + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "Widget" + +#: templates/main_page.html:59 +msgid "Missing a book?" +msgstr "Manca un libro?" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "Programma editoriale" + +#: templates/main_page.html:71 +msgid "Information" +msgstr "" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "Immagine usata" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" <a href='%(b)s'>%(c)s</a> free reading you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgid_plural "" +"\n" +" <a href='%(b)s'>%(c)s</a> free readings you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgstr[0] "" +"\n" +" <a href='%(b)s'>%(c)s</a> hai una lettura libera <a " +"href='%(r)s'>right to</a>\n" +" " +msgstr[1] "" +"\n" +" <a href='%(b)s'>%(c)s</a> hai le letture libere <a " +"href='%(r)s'>right to</a>\n" +" " + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "Benvenuti" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "" + +#: templates/superbase.html:74 templates/user.html:14 +msgid "Social accounts" +msgstr "" + +#: templates/superbase.html:77 +msgid "My shelf" +msgstr "Il mio scaffale" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "Amministrazione" + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "Esci" + +#: templates/superbase.html:111 +msgid "Search" +msgstr "Cerca" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "Versioni in altre lingue" + +#: templates/superbase.html:165 +#, fuzzy +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." +"org.pl/\">Modern Poland Foundation</a>.\n" +"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" +"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" +"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" +"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" +"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tWolne Lektury è il progetto condotto da <a href=\"http://" +"nowoczesnapolska.org.pl/\">Modern Poland Foundation</a>.\n" +"\t\t\t\t Le riproduzioni digitali vengono fatte da <a href=\"http://www.bn." +"org.pl/\">Biblioteca Nazionale</a>, <a href=\"http://www.bs.katowice.pl/" +"\">Biblioteka ĹšlÃâ¦ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" +"\">Biblioteka ElblÃâ¦ska</a>, sulla base di raccolte di BN, BĹš e BE.\n" +"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" +"\t\t\t\t" + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" +"\">fundacja@nowoczesnapolska.org.pl</a>\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tFondazione Polonia Moderna, 00-514 Varsavia, ul. MarszaÅkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" +"\">fundacja@nowoczesnapolska.org.pl</a>\n" +"\t\t\t\t" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "Chiudi" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "Caricamento" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "Amministrazione del sito" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "Traduzioni" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "avanzato" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "semplificato" + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "Importa un libro" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +#, fuzzy +msgid "Sign in using:" +msgstr "Accedi" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "oppure registrati" + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgstr[0] "" +"\n" +"Abbiamo %(c)s dell'opera pubblicata in Wolne Lektury!\n" +"Aiutaci ad espandere la biblioteca e aggiungere nuove letture gratuite da\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">facendo una " +"donazione\n" +"oppure con un trasferimento 1% della tua imposta sul reddito</a>.\n" +msgstr[1] "" +"\n" +"Abbiamo %(c)s dell'opera pubblicata in Wolne Lektury!\n" +"Aiutaci ad espandere la biblioteca e aggiungere nuove letture gratuite da\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">facendo una " +"donazione\n" +"oppure con un trasferimento 1% della tua imposta sul reddito</a>.\n" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +msgstr "" + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "Più" + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "" + +#: templates/openid/login.html:27 +#, fuzzy +msgid "Sign In" +msgstr "Accedi" + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "precedente" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "seguente" + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "Autorizza accesso a Wolne Lektury" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" +"strong>." +msgstr "" +"Conferma l'accesso autorizzato a Wolne Lektury come utente <strong>%(user)s</" +"strong>." + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" + +#: templates/socialaccount/connections.html:36 +#, fuzzy +msgid "Remove" +msgstr "elimina" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "" + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" +"\">sign in</a>." +msgstr "" + +#~ msgid "Listing of all audiobooks" +#~ msgstr "Elenco di tutti gli audiolibri " + +#~ msgid "Latest MP3 audiobooks" +#~ msgstr "Ultimi audiolibri MP3" + +#~ msgid "Latest Ogg Vorbis audiobooks" +#~ msgstr "Ultimi audiolibri Ogg Vorbis" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "MoĹĽecie z niej korzystaÃâ¡ bezpĹâatnie i bez ograniczeĹâ.\n" +#~ "Audiobooki nagrywajÃ⦠znani aktorzy, wĹâºrÄÅd nich Danuta Stenka i Jan " +#~ "Peszek." +#~ msgstr "" +#~ "Audioteca dei testi scolastici della Fondazione Nowoczesna Polska. \n" +#~ " Potete utilizzarla gratuitamente e senza limiti.\n" +#~ "Gli audiolibri vengono registrati da famosi attori, tra cui Danuta Stenka " +#~ "e Jan Peszek." + +#~ msgid "See also" +#~ msgstr "Vedi anche" + +#~ msgid "Theme" +#~ msgstr "tema" + +#~ msgid "in work " +#~ msgstr "in corso" + +#~ msgid "This work is licensed under:" +#~ msgstr "Questa opera è pubblicata su licenza:" + +#~ msgid "" +#~ "This work isn't covered by copyright and is part of the\n" +#~ " public domain, which means it can be freely used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" +#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" +#~ " license." +#~ msgstr "" +#~ "Questa opera non è sotto il diritto d'autore e fa parte del\n" +#~ "pubblico dominio, il che significa che è possibile pubblicarla \n" +#~ "e distribuirla liberamente. Se un'opera è completata con i materiali " +#~ "aggiuntivi \n" +#~ "(le annotazioni, i motivi letterari ecc.) che sono protette dal diritto " +#~ "d'autore, quei\n" +#~ "materiali aggiuntivi sono disponibili secondo la \n" +#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " +#~ "Commons Attribution-ShareAlike 3.0</a>\n" +#~ "licenza." + +#~ msgid "Text prepared based on:" +#~ msgstr "Il testo preparato e basato su:" + +#~ msgid "Edited and annotated by:" +#~ msgstr "Curato ed elaborato da:" + +#~ msgid "Listing of all works" +#~ msgstr "Elenco di tutte le opere" + +#~ msgid "Table of Content" +#~ msgstr "Indice" + +#~ msgid "ââ â top ââ â" +#~ msgstr "ââ â su ââ â" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "Metti il libro sullo scaffale" + +#~ msgid "Create new shelf" +#~ msgstr "Crea un nuovo scaffale" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "Non hai nessuno scaffale. se vuoi puoi crearne uno, qui sotto." + +#~ msgid "Put on the shelf!" +#~ msgstr "Metti sullo scaffale!" + +#~ msgid "Epoch" +#~ msgstr "Epoca" + +#~ msgid "Kind" +#~ msgstr "Categoria" + +#~ msgid "Genre" +#~ msgstr "Genere" + +#~ msgid "Read online" +#~ msgstr "Leggi online" + +#~ msgid "Download" +#~ msgstr "Scarica" + +#~ msgid "Listen" +#~ msgstr "Ascolta" + +#~ msgid "Table of contents" +#~ msgstr "Indice" + +#~ msgid "Themes" +#~ msgstr "Temi" + +#~ msgid "Edit. note" +#~ msgstr "Modifica. nota" + +#~ msgid "Infobox" +#~ msgstr "Infobox" + +#~ msgid "Book's page" +#~ msgstr "Pagina del libro" + +#~ msgid "Download a custom PDF" +#~ msgstr " Scarica un PDF personalizzato" + +#~ msgid "Motifs and themes" +#~ msgstr "Motivi e temi" + +#~ msgid "See" +#~ msgstr "Vedi" + +#~ msgid "Source" +#~ msgstr "Fonte" + +#~ msgid "of the book" +#~ msgstr "del libro" + +#~ msgid "Source XML file" +#~ msgstr "File di fonte XML" + +#~ msgid "Book on" +#~ msgstr "Libro su" + +#~ msgid "Editor's Platform" +#~ msgstr " Piattaforma del editore" + +#~ msgid "Book description on Lektury.Gazeta.pl" +#~ msgstr "Descrizione del libro su Lektury.Gazeta.pl" + +#~ msgid "Book description on Wikipedia" +#~ msgstr "Descrizione del libro su Wikipedia" + +#~ msgid "Mix this book" +#~ msgstr "Combina questo libro" + +#~ msgid "Download all audiobooks for this book" +#~ msgstr "Scarica tutti gli audiolibri per questo libro." + +#~ msgid "Catalogue" +#~ msgstr "Catalogo" + +#~ msgid "Authors" +#~ msgstr "Autori" + +#~ msgid "Kinds" +#~ msgstr "Categorie" + +#~ msgid "Genres" +#~ msgstr "Generi" + +#~ msgid "Epochs" +#~ msgstr "Epoche" + +#~ msgid "Themes and topics" +#~ msgstr "temi e argomenti" + +#~ msgid "Listing of all DAISY files" +#~ msgstr "Elenco di tutti i file DAISY " + +#~ msgid "Latest DAISY audiobooks" +#~ msgstr "Ultimi audiolibri 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Ĺâ." +#~ msgstr "" +#~ "Il sistema DAISY è un formato conosciuto nel mondo che serve a fornire i " +#~ "libri\n" +#~ "adeguato ai bisogni delle persone non vedenti, ipovedenti \n" +#~ "e con difficoltà nel leggere. Potete usufruirne gratuitamente e senza " +#~ "limiti." + +#~ msgid "" +#~ "The criteria are ambiguous. Please select one of the following options:" +#~ msgstr "" +#~ "Questi criteri sono ambigui. Si prega di selezionare una delle seguenti " +#~ "opzioni:" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Gli scaffali che contengono il frammento" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "Non hai nessuno scaffale. Se vuoi puoi crearne uno, qui sotto." + +#~ msgid "Save all shelves" +#~ msgstr "Salva tutti gli scaffali" + +#~ msgid "Expand fragment" +#~ msgstr "Espandi il frammento" + +#~ msgid "Hide fragment" +#~ msgstr "Nascondi il frammento" + +#~ msgid "See full category" +#~ msgstr "Vedi tutta la categoria" + +#~ msgid "All books" +#~ msgstr "Tutti i libri" + +#~ msgid "Audiobooks" +#~ msgstr "Audiolibri" + +#~ msgid "DAISY" +#~ msgstr "DAISY" + +#~ msgid "Work is licensed under " +#~ msgstr "L'opera è su licenza di" + +#~ msgid "Based on" +#~ msgstr "Basato su" + +#~ msgid "Details" +#~ msgstr "Dettagli" + +#~ msgid "Author" +#~ msgstr "Autore" + +#~ msgid "Other resources" +#~ msgstr "Altre fonti" + +#~ msgid "Source of the image" +#~ msgstr "Fonte dell'immagine" + +#~ msgid "Image on the Editor's Platform" +#~ msgstr "Immagine sulla piattaforma del editore" + +#~ msgid "View XML source" +#~ msgstr "Visualizza la fonte XML" + +#~ msgid "Work's themes " +#~ msgstr "Temi dell'opera" + +#~ msgid "Listing of all pictures" +#~ msgstr "Elenco di tutte le immagini" + +#~ msgid "Artist" +#~ msgstr "Artista" + +#~ msgid "Director" +#~ msgstr "Direttore" + +#~ msgid "Download as" +#~ msgstr "Scarica come" + +#~ msgid "Audiobooks were prepared as a part of the projects:" +#~ msgstr "" +#~ "Gli audilobri sono stati preparati come parte dei seguenti progetti:" + +#~ msgid "%(cs)s, funded by %(fb)s" +#~ msgstr "%(cs)s, creato da %(fb)s // %(cs)s, finanziato da %(fb)s" + +#~ msgid "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +#~ msgstr "" +#~ "Gli audiollibri sono stati preparati come parte del progetto %(cs)s, " +#~ "finanziato da %(fb)s" + +#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." +#~ msgstr "Gli audiolibri sono stati preparati come parte di progetto %(cs)s." + +#~ msgid "Did you mean" +#~ msgstr "Volevi dire" + +#~ msgid "Results by authors" +#~ msgstr "Risultati per autore" + +#~ msgid "Results by title" +#~ msgstr "Risultati per titolo" + +#~ msgid "Results in text" +#~ msgstr "Risultati nel testo" + +#~ msgid "Other results" +#~ msgstr "Altri risultati" + +#~ msgid "Sorry! Search cirteria did not match any resources." +#~ msgstr "" +#~ "Siamo spiacenti!I criteri di ricerca non corrispondono alle risorse." + +#~ msgid "" +#~ "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 "" +#~ "Il motore di ricerca supporta i seguenti criteri: titolo, autore, tema, " +#~ "epoca, genere.\n" +#~ "\t\t Per il momento non supportiamo i criteri del testo intero." + +#~ msgid "Sorry! Search query must have at least two characters." +#~ msgstr "" +#~ "Siamo spiacenti! La ricerca viene effettuata su parole con almeno due " +#~ "caratteri." + +#~ msgid "in Lektury.Gazeta.pl" +#~ msgstr "su Lektury.Gazeta.pl" + +#~ msgid "in Wikipedia" +#~ msgstr "su Wikipedia" + +#~ msgid "Your shelves with books" +#~ msgstr "I tuoi scaffali con i libri" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "Non hai nessuno scaffale. se vuoi puoi crearne uno, qui sotto." + +#~ msgid "Create shelf" +#~ msgstr "Crea uno scaffale" + +#~ msgid "author" +#~ msgstr "autore" + +#~ msgid "Hand-outs for teachers" +#~ msgstr "Materiali per gli insegnanti // " + +#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" +#~ msgstr "Leggi lo studio dell'opera di questo autore su Lektury.Gazeta.pl" + +#~ msgid "Read article about this author on Wikipedia" +#~ msgstr "Leggi l'articolo di questo autore su Wikipedia" + +#~ msgid "This author's works are copyrighted." +#~ msgstr " Le opere di questo autore sono protette dai diritti d'autore." + +#~ msgid "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries can't publish this author's works." +#~ msgstr "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Scopri</" +#~ "a> perche le biblioteche online non possono pubblicare opere di questo " +#~ "autore." + +#~ msgid "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet school library of Wolne Lektury soon." +#~ msgstr "" +#~ "Le opere di questo autore sono di pubblico dominio e fra poco saranno " +#~ "pubblicate nella biblioteca scolastica di Wolne Lektury. " + +#~ msgid "" +#~ "This author's works will become part of public domain and will be allowed " +#~ "to be published without restrictions in" +#~ msgstr "" +#~ "Le opere di questo autore saranno di pubblico dominio e sarà possibile " +#~ "pubblicarle senza le restrizioni su" + +#~ msgid "" +#~ "This work is in public domain and will be published on Internet school " +#~ "library of Wolne Lektury soon." +#~ msgstr "" +#~ "Questa opera è di pubblico dominio e fra poco sarà pubblicata nella " +#~ "biblioteca scolastica di Wolne Lektury." + +#~ msgid "" +#~ "This work will become part of public domain and will be allowed to be " +#~ "published without restrictions in" +#~ msgstr "" +#~ "Questa opera sarà di pubblico dominio e sarà possibile pubblicarla senza " +#~ "le restrizioni su" + +#~ msgid "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries can't publish this work." +#~ msgstr "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Scopri</" +#~ "a> perché le librerie online non possono pubblicare le opere di questo " +#~ "autore." + +#~ msgid "This work is copyrighted." +#~ msgstr "Quest'opera è protetta dal diritto d'autore." + +#~ msgid "Login to Wolne Lektury" +#~ msgstr "Loggati in Wolne Lektury" + +#~ msgid "Login" +#~ msgstr "Login" diff --git a/src/wolnelektury/locale/jp/LC_MESSAGES/django.mo b/src/wolnelektury/locale/jp/LC_MESSAGES/django.mo new file mode 100644 index 000000000..6b700daec Binary files /dev/null and b/src/wolnelektury/locale/jp/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/jp/LC_MESSAGES/django.po b/src/wolnelektury/locale/jp/LC_MESSAGES/django.po new file mode 100644 index 000000000..c2d5e8fd9 --- /dev/null +++ b/src/wolnelektury/locale/jp/LC_MESSAGES/django.po @@ -0,0 +1,345 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2012-02-07 15:50+0100\n" +"Last-Translator: Marcin Koziej <marcin@lolownia.org>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: views.py:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "Zaloguj" + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "" + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr "" + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "" + +#: 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 "" + +#: templates/404.html:14 +msgid "main page" +msgstr "" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "" + +#: templates/500.html:19 +msgid "" +"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " +"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " +"error.</p>" +msgstr "" + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "" + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "" + +#: templates/main_page.html:41 +msgid "News" +msgstr "" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "" + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "" + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "" + +#: templates/main_page.html:59 +msgid "Missing a book?" +msgstr "" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "" + +#: templates/main_page.html:71 +msgid "Information" +msgstr "" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" <a href='%(b)s'>%(c)s</a> free reading you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgid_plural "" +"\n" +" <a href='%(b)s'>%(c)s</a> free readings you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgstr[0] "" +msgstr[1] "" + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "" + +#: templates/superbase.html:74 templates/user.html:14 +msgid "Social accounts" +msgstr "" + +#: templates/superbase.html:77 +msgid "My shelf" +msgstr "" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "" + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "" + +#: templates/superbase.html:111 +msgid "Search" +msgstr "" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "" + +#: templates/superbase.html:165 +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." +"org.pl/\">Modern Poland Foundation</a>.\n" +"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" +"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" +"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" +"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" +"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" +"\t\t\t\t" +msgstr "" + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" +"\">fundacja@nowoczesnapolska.org.pl</a>\n" +"\t\t\t\t" +msgstr "" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "" + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +#, fuzzy +msgid "Sign in using:" +msgstr "Zaloguj" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "" + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgstr[0] "" +msgstr[1] "" + +#: 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 "" + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "" + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "" + +#: templates/openid/login.html:27 +#, fuzzy +msgid "Sign In" +msgstr "Zaloguj" + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "" + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" +"strong>." +msgstr "" + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" + +#: templates/socialaccount/connections.html:36 +msgid "Remove" +msgstr "" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "" + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" +"\">sign in</a>." +msgstr "" diff --git a/src/wolnelektury/locale/lt/LC_MESSAGES/django.mo b/src/wolnelektury/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..5d1dfb986 Binary files /dev/null and b/src/wolnelektury/locale/lt/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/lt/LC_MESSAGES/django.po b/src/wolnelektury/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 000000000..99e0dfa8e --- /dev/null +++ b/src/wolnelektury/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,1136 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:43+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.3\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: views.py:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "Prisijungti " + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "Jau esate prisijungÄs kaip vartotojas %(user)s" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "Registruotis " + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr "NorÄdami tÄsti, turite bÅ«ti prisijungÄ" + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "Tinklalapis neegzistuoja" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "Puslapis nerastas" + +#: 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 "" +"AtsipraÅ¡ome, bet Å¡is tinklalapis neegzistuoja. PraÅ¡ome patvirtinti ar " +"įvedÄte teisingÄ adresÄ arba eikite į" + +#: templates/404.html:14 +msgid "main page" +msgstr "pagrindinį puslapį" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "Serverio klaida" + +#: templates/500.html:19 +msgid "" +"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " +"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " +"error.</p>" +msgstr "" +"<p>Interneto svetainÄ yra laikinai neprieinama. Aplankykite mÅ«sų <a " +"href='http://nowoczesnapolska.org.pl'>blogÄ </a>.</p> <p>PraneÅ¡kite<a " +"href='mailto:fundacja@nowoczesnapolska.org.pl'>administratoriams</a> apie " +"klaidÄ .</p>\"" + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "Paslauga neprieinama" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "" +"Interneto svetainÄ Wolnelektury.pl Å¡iuo metu yra neprieinama dÄl atliekamų " +"remonto darbų." + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "Wolne Lektury internetinÄ biblioteka" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "Kas naujo?" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "Naujos publikacijos" + +#: templates/main_page.html:41 +msgid "News" +msgstr "Naujienos" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "PriemonÄs" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "PraneÅ¡kite apie klaidÄ arba teikite pasiÅ«lymus" + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "Atsisiųsti katalogÄ PDF formatu." + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "Valdiklis" + +#: templates/main_page.html:59 +msgid "Missing a book?" +msgstr "Neradote knygos?" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "Publikavimo planas" + +#: templates/main_page.html:71 +msgid "Information" +msgstr "Informacija" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "Panaudotas paveikslÄlis:" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" <a href='%(b)s'>%(c)s</a> free reading you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgid_plural "" +"\n" +" <a href='%(b)s'>%(c)s</a> free readings you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgstr[0] "" +"\n" +" <a href='%(b)s'>%(c)s</a> nemokamas kÅ«rinys į kurį <a " +"href='%(r)s'>turite teisÄ</a>\n" +" " +msgstr[1] "" +"\n" +" <a href='%(b)s'>%(c)s</a> nemokami kÅ«riniai į kuriuos <a " +"href='%(r)s'>turite teisÄ</a>\n" +" " +msgstr[2] "" +"\n" +" <a href='%(b)s'>%(c)s</a> nemokamų kÅ«rinių į kuriuos <a " +"href='%(r)s'>turite teisÄ</a>\n" +" " + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "Sveiki atvykÄ" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "Slaptažodis" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "El- paÅ¡tas" + +#: templates/superbase.html:74 templates/user.html:14 +msgid "Social accounts" +msgstr "SocialinÄs paskyros" + +#: templates/superbase.html:77 +msgid "My shelf" +msgstr "Mano lentyna" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "Administracija " + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "Atsijungti" + +#: templates/superbase.html:111 +msgid "Search" +msgstr "IeÅ¡koti" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "Kalbų versijos" + +#: templates/superbase.html:165 +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." +"org.pl/\">Modern Poland Foundation</a>.\n" +"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" +"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" +"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" +"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" +"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tProjektas Wolne Lektury yra <a href=\"http://nowoczesnapolska.org.pl/" +"\">fondo Å iuolaikinÄ Lenkija</a> vadovaujamas.\n" +"\t\t\t\tSkaitmeninÄs reprodukcijos yra <a href=\"http://www.bn.org.pl/\"> " +"NacionalinÄs bibliotekos</a>, <a href=\"http://www.bs.katowice.pl/" +"\">Silezijos bibliotekos</a> ir <a href=\"http://www.bibliotekaelblaska.pl/" +"\">Elbingo bibliotekos</a> paruoÅ¡tos, remiantis Å¡ių bibliotekų iÅ¡tekliais.\n" +"\t\t\t\tPriegloba: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" +"\t\t\t\t" + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" +"\">fundacja@nowoczesnapolska.org.pl</a>\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tFondas Å iuolaikinÄ Lenkija, 00-514 Warszawa, ul. MarszaÅkowska 84/92 " +"lok. 125, tel/faksas: (22) 621-30-17\n" +" el. paÅ¡tas: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" +"\">fundacja@nowoczesnapolska.org.pl</a>\n" +"\t\t\t\t" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "Uždaryti" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "Kraunasi" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "Vartotojas" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "Interneto svetainÄs administracija" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "Vertimai" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "papildomas" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "supaprastintas" + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "Importuoti knygÄ " + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "PamirÅ¡ote slaptažodį?" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +msgid "Sign in using:" +msgstr "Prisijungti naudojant:" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "arba registruotis " + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgstr[0] "" +"\n" +"Turime %(c)s kÅ«rinį publikuotÄ Wolne Lektury interneto svetainÄje!\n" +"PadÄkite mums plÄtoti bibliotekÄ ir nemokamai bendrinti naujus kÅ«rinius\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">remdami mus " +"finansiÅ¡kai\n" +"arba skirdami 1% jÅ«sų pajamų mokesÄio</a>.\n" +msgstr[1] "" +"\n" +"Turime %(c)s kÅ«rinius publikuotus Wolne Lektury interneto svetainÄje!\n" +"PadÄkite mums plÄtoti bibliotekÄ ir nemokamai bendrinti naujus kÅ«rinius\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">remdami mus " +"finansiÅ¡kai\n" +"arba skirdami 1% jÅ«sų pajamų mokesÄio</a>.\n" +msgstr[2] "" +"\n" +"Turime %(c)s kÅ«rinių publikuotų Wolne Lektury interneto svetainÄje!\n" +"PadÄkite mums plÄtoti bibliotekÄ ir nemokamai bendrinti naujus kÅ«rinius\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">remdami mus " +"finansiÅ¡kai\n" +"arba skirdami 1% jÅ«sų pajamų mokesÄio</a>.\n" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +msgstr "" +"Tapkite redaktoriumi Wolne Lektury interneto svetainÄs! Sužinokite ar\n" +"Å¡iuo metu dirbame su jÅ«sų ieÅ¡komu kÅ«riniu ir paruoÅ¡kite\n" +"jÅ«sų leidinį prisijungdami prie RedakcinÄs Platformos." + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "Daugiau..." + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "OpenID Prisijungti" + +#: templates/openid/login.html:27 +msgid "Sign In" +msgstr "Prisijungti " + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "ankstÄsnis" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "sekantis " + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "Leisti prieigÄ prie Wolne Lektury interneto svetainÄs" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" +"strong>." +msgstr "" +"Patvirtinkite, kad leistute prieigÄ prie Wolne Lektury interneto svetainÄs " +"kaip vartotojas <strong>%(user)s</strong>." + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Paskyros jungtys" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" +"Galite prisijungti prie jÅ«sų paskyros naudodamiesi Å¡iomis third party " +"paskyromis:" + +#: templates/socialaccount/connections.html:36 +msgid "Remove" +msgstr "PaÅ¡alinti" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "Neturite socialinio tinklo paskyrų prijungtų prie Å¡ios paskyros." + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "PridÄti 3rd Party PaskyrÄ " + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "Prisijungimas atÅ¡auktas" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" +"\">sign in</a>." +msgstr "" +"NusprendÄte atÅ¡aukti prisijungimÄ prie mÅ«sų interneto svetainÄs naudodamiesi " +"viena iÅ¡ jÅ«sų egzistuojanÄių paskyrų. Jei įvyko klaida, praÅ¡ome pradÄti Äia " +"<a href=\"%(login_url)s\">sign in</a>." + +#~ msgid "Listing of all audiobooks" +#~ msgstr "Visų audio knygų sÄ raÅ¡as" + +#~ msgid "Latest MP3 audiobooks" +#~ msgstr "Naujosios MP3 audio knygos" + +#~ msgid "Latest Ogg Vorbis audiobooks" +#~ msgstr "Naujosios Ogg Vorbis audio knygos" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." +#~ msgstr "" +#~ "Fondo Å iuolaikinÄ Lenkija privalomos literatÅ«ros audio knygų rinkinys.\n" +#~ "Galite juo naudotis nemokamai ir be apribojimų.\n" +#~ "Audio knygos yra garsių aktorių įraÅ¡omos, tokių kaip Danuta Stenka ir Jan " +#~ "Peszek." + +#~ msgid "See also" +#~ msgstr "ŽiÅ«rÄti daugiau" + +#~ msgid "Theme" +#~ msgstr "Motyvas" + +#~ msgid "in work " +#~ msgstr "kÅ«rinyje" + +#~ msgid "This work is licensed under:" +#~ msgstr "Å is kÅ«rinys yra licencijuotas pagal:" + +#~ msgid "" +#~ "This work isn't covered by copyright and is part of the\n" +#~ " public domain, which means it can be freely used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" +#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" +#~ " license." +#~ msgstr "" +#~ "Å io visuomenÄs srities kÅ«rinio autorių teisÄ neapima,\n" +#~ "tai reiÅ¡kia, kad gali bÅ«ti laisvai naudojamas bei\n" +#~ "platinamas. Jei su Å¡iuo kÅ«riniu yra pateikiamos bet kokios\n" +#~ "papildomos autorinių teisių saugomos medžiagos (kaip pastabos, motyvai ir " +#~ "t.t.), Å¡ios\n" +#~ "medžiagos yra licencijuotos pagal\n" +#~ "<a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative " +#~ "Commons Attribution-ShareAlike 3.0</a>\n" +#~ "licencijÄ ." + +#~ msgid "Text prepared based on:" +#~ msgstr "Tekstas paruoÅ¡tas remiantis:" + +#~ msgid "Edited and annotated by:" +#~ msgstr "Redagavimas ir pastabos:" + +#~ msgid "Listing of all works" +#~ msgstr "Visų kÅ«rinių sÄ raÅ¡as" + +#~ msgid "Table of Content" +#~ msgstr "Turinys" + +#~ msgid "â top â" +#~ msgstr "âį viršųâ" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "PadÄkite knygÄ Ä¯ lentynÄ !" + +#~ msgid "Create new shelf" +#~ msgstr "Sukurti naujÄ lentynÄ " + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naujÄ lentynÄ " +#~ "žemiau." + +#~ msgid "Put on the shelf!" +#~ msgstr "PadÄkite į lentynÄ !" + +#~ msgid "Epoch" +#~ msgstr "Epocha" + +#~ msgid "Kind" +#~ msgstr "RÅ«Å¡is " + +#~ msgid "Genre" +#~ msgstr "Žanras" + +#~ msgid "Read online" +#~ msgstr "Skaityti online" + +#~ msgid "Download" +#~ msgstr "Atsisiųsti" + +#~ msgid "to print" +#~ msgstr "Spausdinti" + +#~ msgid "for an e-book reader" +#~ msgstr "e-knygos skaitytojui" + +#~ msgid "for Kindle" +#~ msgstr "skaityklei Kindle" + +#~ msgid "for advanced usage" +#~ msgstr "iÅ¡plÄstiniam naudojimui" + +#~ msgid "Listen" +#~ msgstr "Klausytis" + +#~ msgid "Table of contents" +#~ msgstr "Turinys" + +#~ msgid "Themes" +#~ msgstr "Motyvai" + +#~ msgid "Edit. note" +#~ msgstr "Redaguoti pastabÄ " + +#~ msgid "Infobox" +#~ msgstr "Infobox" + +#~ msgid "Book's page" +#~ msgstr "Knygos puslapis" + +#~ msgid "for a reader" +#~ msgstr "skaitytojui" + +#, fuzzy +#~ msgid "for advanced usege" +#~ msgstr "papildomas" + +#~ msgid "Download a custom PDF" +#~ msgstr "Atsisiųsti PDF failÄ " + +#~ msgid "Motifs and themes" +#~ msgstr "Motyvai ir temos" + +#~ msgid "See" +#~ msgstr "ŽiÅ«rÄti" + +#~ msgid "Source" +#~ msgstr "Knygos" + +#~ msgid "of the book" +#~ msgstr "Å¡altinis" + +#~ msgid "Source XML file" +#~ msgstr "Å altinio XML failas" + +#~ msgid "Book on" +#~ msgstr "Knyga " + +#~ msgid "Editor's Platform" +#~ msgstr "Redaktoriaus Platformoje" + +#~ msgid "Book description on Lektury.Gazeta.pl" +#~ msgstr "Knygos apraÅ¡ymas Lektury.Gazeta.pl interneto svetainÄje" + +#~ msgid "Book description on Wikipedia" +#~ msgstr "Knygos apraÅ¡ymas Vikipedijoje" + +#~ msgid "Mix this book" +#~ msgstr "MaiÅ¡yti Å¡iÄ knygÄ " + +#~ msgid "Download all audiobooks for this book" +#~ msgstr "Atsisiųsti visas Å¡ios knygos audio knygas" + +#~ msgid "Catalogue" +#~ msgstr "Katalogas" + +#~ msgid "Authors" +#~ msgstr "Autoriai" + +#~ msgid "Kinds" +#~ msgstr "RÅ«Å¡ys" + +#~ msgid "Genres" +#~ msgstr "Žanrai" + +#~ msgid "Epochs" +#~ msgstr "Epochos" + +#~ msgid "Themes and topics" +#~ msgstr "Motyvai ir temos" + +#~ msgid "Listing of all DAISY files" +#~ msgstr "Visų DAISY failų sÄ raÅ¡as" + +#~ msgid "Latest DAISY audiobooks" +#~ msgstr "Naujosios DAISY audio knygos" + +#~ 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Å." +#~ msgstr "" +#~ "DAISY sistema yra visame pasaulyje pripažintas knygų bendrinimo formatas\n" +#~ "pritaikytas silpnesnio regÄjimo žmonÄms, akliesiems bei kitiems skaitymo " +#~ "problemų turintiems žmonÄms.Galite jomis naudotis nemokamai ir be " +#~ "apribojimų." + +#~ msgid "" +#~ "The criteria are ambiguous. Please select one of the following options:" +#~ msgstr "" +#~ "PaieÅ¡kos kriterijai nÄra tikslÅ«s. PraÅ¡ome iÅ¡rinkti vienÄ iÅ¡ žemiau " +#~ "nurodytų galimybių:" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Lentynos turinÄios fragmentus " + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naujÄ lentynÄ " +#~ "žemiau." + +#~ msgid "Save all shelves" +#~ msgstr "Ä®raÅ¡yti visas lentynas" + +#~ msgid "Expand fragment" +#~ msgstr "IÅ¡plÄsti fragmentÄ " + +#~ msgid "Hide fragment" +#~ msgstr "SlÄpti fragmentÄ " + +#~ msgid "See full category" +#~ msgstr "ŽiÅ«rÄti visÄ kategorijÄ " + +#~ msgid "All books" +#~ msgstr "Visos knygos" + +#~ msgid "Audiobooks" +#~ msgstr "Audio knygos" + +#~ msgid "DAISY" +#~ msgstr "DAISY" + +#~ msgid "Work is licensed under " +#~ msgstr "KÅ«rinys yra licencijuotas pagal:" + +#~ msgid "Based on" +#~ msgstr "Remiantis" + +#~ msgid "Details" +#~ msgstr "DetalÄs " + +#~ msgid "Author" +#~ msgstr "Autorius" + +#~ msgid "Other resources" +#~ msgstr "Kiti iÅ¡tekliai" + +#~ msgid "Source of the image" +#~ msgstr "PaveikslÄlio Å¡altinis" + +#~ msgid "Image on the Editor's Platform" +#~ msgstr "PaveikslÄlis Redaktoriaus Platformoje" + +#~ msgid "View XML source" +#~ msgstr "ŽiÅ«rÄti XML Å¡altinį" + +#~ msgid "Work's themes " +#~ msgstr "KÅ«rinio motyvai" + +#~ msgid "Listing of all pictures" +#~ msgstr "Visų vaizdų sÄ raÅ¡as" + +#~ msgid "Download as" +#~ msgstr "Atsisiųsti kaip" + +#~ msgid "Artist" +#~ msgstr "Artistas" + +#~ msgid "Director" +#~ msgstr "Režisierus" + +#~ msgid "Audiobooks were prepared as a part of the projects:" +#~ msgstr "Audio knygos buvo paruoÅ¡tos kaip projektų dalis:" + +#~ msgid "%(cs)s, funded by %(fb)s" +#~ msgstr "\"%(cs)s, %(fb)s finansuotų" + +#~ msgid "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +#~ msgstr "" +#~ "Audio knygos buvo paruoÅ¡tos kaip dalis %(fb)s. finansuoto %(cs)s projekto." + +#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." +#~ msgstr "Audio knygos buvo paruoÅ¡tos kaip dalis %(cs)s projekto." + +#~ msgid "Did you mean" +#~ msgstr "Gal turÄjote omenyje" + +#~ msgid "Results by authors" +#~ msgstr "Rezultatai pagal autorius" + +#~ msgid "Results by title" +#~ msgstr "Rezultatai pagal pavadinimÄ " + +#~ msgid "Results in text" +#~ msgstr "Rezultatai tekste" + +#~ msgid "Other results" +#~ msgstr "Kiti rezultatai" + +#~ msgid "Sorry! Search cirteria did not match any resources." +#~ msgstr "AtsipraÅ¡ome! Rezultatų, atitinkanÄių paieÅ¡kos kriterijus nÄra." + +#~ msgid "" +#~ "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 "" +#~ "PaieÅ¡kos sistema palaiko nurodytus kriterijus: pavadinimas, autorius, " +#~ "tema, epocha, rÅ«Å¡is ir žanras.\n" +#~ "\t\t Kol kas negalima atlikti viso teksto paieÅ¡kos." + +#~ msgid "Sorry! Search query must have at least two characters." +#~ msgstr "" +#~ "AtsipraÅ¡ome! PaieÅ¡kos užklausa turi susidÄti mažiausiai iÅ¡ dviejų " +#~ "simbolių." + +#~ msgid "in Lektury.Gazeta.pl" +#~ msgstr "Lektury.Gazeta.pl interneto svetainÄje" + +#~ msgid "in Wikipedia" +#~ msgstr "Vikipedijoje" + +#~ msgid "Your shelves with books" +#~ msgstr "Tavo lentynos su knygomis" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "" +#~ "Neturite nei vienos lentynos. Jei norite, galite sukurti naujÄ lentynÄ " +#~ "žemiau." + +#~ msgid "Create shelf" +#~ msgstr "Sukurti lentynÄ " + +#~ msgid "author" +#~ msgstr "autorius" + +#~ msgid "Hand-outs for teachers" +#~ msgstr "Dalijamoji medžiaga mokytojams" + +#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" +#~ msgstr "" +#~ "Skaitykite Å¡io autoriaus kÅ«rinio apraÅ¡ymÄ interneto svetainÄje Lektury." +#~ "Gazeta.pl" + +#~ msgid "Read article about this author on Wikipedia" +#~ msgstr "Skaitykite straipsnį apie šį autorių Vikipedijoje" + +#~ msgid "This author's works are copyrighted." +#~ msgstr "Å io autoriaus kÅ«riniai yra autorinių teisių saugomi ." + +#~ msgid "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries can't publish this author's works." +#~ msgstr "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" +#~ "publiczna/'>Sužinokite</a> kodÄl Å¡io autoriaus kÅ«riniai negali bÅ«ti " +#~ "publikuojami internetinÄje bibliotekoje." + +#~ msgid "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet school library of Wolne Lektury soon." +#~ msgstr "" +#~ "Å io autoriaus kÅ«riniai yra vieÅ¡ai prieinami ir netrukus bus publikuoti " +#~ "interneto svetainÄs Wolne Lektury internetinÄje bibliotekoje. " + +#~ msgid "" +#~ "This author's works will become part of public domain and will be allowed " +#~ "to be published without restrictions in" +#~ msgstr "" +#~ "Å io autoriaus kÅ«riniai netrukus bus vieÅ¡ai prieinami ir galÄs bÅ«ti " +#~ "publikuojami be apribojimų" + +#~ msgid "" +#~ "This work is in public domain and will be published on Internet school " +#~ "library of Wolne Lektury soon." +#~ msgstr "" +#~ "Å is kÅ«rinys yra vieÅ¡ai prieinamas ir netrukus bus publikuotas interneto " +#~ "svetainÄs Wolne Lektury internetinÄje bibliotekoje." + +#~ msgid "" +#~ "This work will become part of public domain and will be allowed to be " +#~ "published without restrictions in" +#~ msgstr "" +#~ "Å is kÅ«rinys netrukus bus vieÅ¡ai prieinamas ir galÄs bÅ«ti publikuojamas be " +#~ "apribojimų" + +#~ msgid "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries can't publish this work." +#~ msgstr "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" +#~ "publiczna/'>Sužinokite</a> kodÄl Å¡is kÅ«rinys negali bÅ«ti publikuojamas " +#~ "internetinÄje bibliotekoje." + +#~ msgid "This work is copyrighted." +#~ msgstr "Å is kÅ«rinis yra autorinių teisių saugomas." + +#~ msgid "Login to Wolne Lektury" +#~ msgstr "Prisijungti prie Wolne Lektury interneto svetainÄs" + +#~ msgid "Login" +#~ msgstr "Prisijungti" + +#~ msgid "" +#~ "Internet Explorer cannot display this site properly. Click here to read " +#~ "more..." +#~ msgstr "" +#~ "Internet Explorer nie sugeba teisingai parodyti Å¡io tinklapio. Paspausti " +#~ "Äia, kad sužinoti daugiau..." + +#~ msgid "Your shelves" +#~ msgstr "Tavo lentynos" + +#~ msgid "Register on" +#~ msgstr "Registruotis į" + +#~ msgid "or" +#~ msgstr "arba" + +#~ msgid "return to main page" +#~ msgstr "gryžk į pagrindinį puslapį" + +#, fuzzy +#~ msgid "Listing of all audiobooks on WolneLektury.pl" +#~ msgstr "KÅ«riniu sÄ raÅ¡as LaisvojiLiteratura.lt" + +#~ msgid "Put a book" +#~ msgstr "Prijung literatÅ«rÄ " + +#~ msgid "on the shelf!" +#~ msgstr "į lentynÄ !" + +#~ msgid "for reading" +#~ msgstr "į skaitimÄ " + +#~ msgid "and printing using" +#~ msgstr "ir spausdinti su pagalbÄ " + +#~ msgid "Download EPUB" +#~ msgstr "atsisiųsk EPUB failÄ " + +#~ msgid "Download TXT" +#~ msgstr "atsisiųsk TXT failÄ " + +#~ msgid "on small displays, for example mobile phones" +#~ msgstr "ant displÄjaus, pvz. mobilaus telefono " + +#~ msgid "Download ODT" +#~ msgstr "atsisiųsk ODT failÄ " + +#~ msgid "and editing using" +#~ msgstr "ir edituoti su pagalbÄ " + +#~ msgid "Book on project's wiki" +#~ msgstr "Sukurk straipsnį apie knygÄ vikiprojekte" + +#~ msgid "on" +#~ msgstr "ant" + +#~ msgid "See description" +#~ msgstr "ApraÅ¡ymas" + +#, fuzzy +#~ msgid "Listing of all works on WolneLektury.pl" +#~ msgstr "KÅ«riniu sÄ raÅ¡as LaisvojiLiteratura.lt" + +#~ msgid "Jump to" +#~ msgstr "Santrumpa" + +#~ msgid "Categories" +#~ msgstr "KÅ«rinio kategorija " + +#, fuzzy +#~ msgid "Listing of all DAISY files on WolneLektury.pl" +#~ msgstr "KÅ«riniu sÄ raÅ¡as LaisvojiLiteratura.lt" + +#~ msgid "Show full category" +#~ msgstr "ApžiÅ«rek visÄ kategorijÄ " + +#~ msgid "Hide" +#~ msgstr "Suvyniok" + +#~ msgid "Browse books by categories" +#~ msgstr "Peržiurinek literaturÄ pagal iÅ¡rinktÄ kategorijÄ " + +#~ msgid "delete" +#~ msgstr "paÅ¡alink" + +#~ msgid "" +#~ "Create your own book set. You can share it with friends by sending them " +#~ "link to your shelf." +#~ msgstr "" +#~ "Sukurk savo knygų rinkiny. Gali juo veliau pasidalinti su kitais, " +#~ "persiÅ«sk jiems nuorodÄ i tavo lentynÄ ." + +#~ msgid "You need to " +#~ msgstr "Gali" + +#~ msgid "sign in" +#~ msgstr "Prisijungti " + +#~ msgid "to manage your shelves." +#~ msgstr "Kad valdti savo lentynom." + +#~ msgid "" +#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." +#~ msgstr "" +#~ "Pamokų scenarijai ir kiti sumanymai kaip panaudoti servisÄ " +#~ "LaisvojiLiteratura.lt mokslui." + +#~ msgid "" +#~ "are professional recordings of literary texts from our repository, " +#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " +#~ "DAISY system." +#~ msgstr "" +#~ "Tai profesjonalus literaturinių tekstų garso įraÅ¡ai, mÅ«sų rinkinių " +#~ "laisvai prieinami Å¡iuose įraÅ¡ymo formatouse: MP3, Ogg Vorbis ir sistema " +#~ "DAISY." + +#~ msgid "Themes groups" +#~ msgstr "Motyvų grupÄ" + +#~ msgid "See our blog" +#~ msgstr "Aplankyk mÅ«sų blogÄ " + +#~ msgid "You can help us!" +#~ msgstr "Gali mums padÄti!" + +#~ msgid "" +#~ "We try our best to elaborate works appended to our library. It is " +#~ "possible only due to support of our volunteers." +#~ msgstr "" +#~ "DÄka savanorių aprÅ¡ymai kÅ«riniu, kurie yra prijungemi i mÅ«sų bibliotekÄ " +#~ "yra kiekvienÄ kartÄ kruopÅ¡Äiai paruoÅ¡ti" + +#~ msgid "" +#~ "We invite people who want to take part in developing Internet school " +#~ "library Wolne Lektury." +#~ msgstr "" +#~ "KvieÄiame visus, kurie nori kartu su mumi kurti mokykline internetine " +#~ "bibliotekÄ Laisvoji Literatura." + +#~ msgid "About us" +#~ msgstr "Apie projektÄ " + +#~ msgid "" +#~ "\n" +#~ "\t\t\tInternet library with school readings âWolne Lekturyâ (<a href=" +#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) is a project made by " +#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " +#~ "which are recommended by Ministry of National Education and are in public " +#~ "domain.\n" +#~ "\t\t\t" +#~ msgstr "" +#~ "\n" +#~ "\t\t\tInternetine biblioteka \"Laisvoji Literatura\" (www." +#~ "laisvojiliteratura.lt) siÅ«lanti mokyklinÄ literaturÄ - tai " +#~ "Å iuolaikines Lenkijos Fondasto projektas. Fondas veike nou 2007 metų ir " +#~ "savo rinkinuose turi mokyklinÄ literaturÄ , kuri yra " +#~ "rekomenduojama per Å vietimo ir Mokslo MinisterijÄ ir kuri jau\tpateko į " +#~ "vieÅ¡iÄ Interneto svetainÄ.\n" +#~ "\t\t\t" + +#~ msgid "Searching in" +#~ msgstr "IeÅ¡koimas" + +#~ msgid "More than one result matching the criteria found." +#~ msgstr "Surasta daugiau nei vienas pajeÅ¡ku rezultatas" + +#~ msgid "Search in WolneLektury.pl" +#~ msgstr "IeÅ¡kok Å¡iame tinklapyje LasvojiLiteratura.lt " + +#~ msgid "Your shelf is empty" +#~ msgstr "Tavo lentyna yra tuÅ¡Äia" + +#~ msgid "" +#~ "You can put a book on a shelf by entering page of the reading and " +#~ "clicking 'Put on the shelf'." +#~ msgstr "" +#~ "Gali įmesti knygÄ Ä¯ lentynÄ , įeik į knygos tinklapį ir iÅ¡rink \"Ä® lentynÄ " +#~ "\". " + +#~ msgid "Choose books' formats which you want to download:" +#~ msgstr "Pasirink knygos persiuntimo formatÄ :" + +#~ msgid "for listening" +#~ msgstr "klausyti" + +#~ msgid "on favourite MP3 player" +#~ msgstr "numylÄtam MP3 grotuve" + +#~ msgid "open format" +#~ msgstr "atviras formatas" + +#~ msgid "Xiph.org Foundation" +#~ msgstr "Fondo Xiph.Org" + +#~ msgid "Updating list of books' formats on the shelf" +#~ msgstr "Atnaujinti knygų formatų sÄ raÅ¡Ä lentynose. " + +#~ msgid "cancel" +#~ msgstr "anuliuoti" + +#~ msgid "Share this shelf" +#~ msgstr "Pasidalink Å¡iÄ lentynÄ ." + +#~ msgid "" +#~ "Copy this link and share it with other people to let them see your shelf." +#~ msgstr "" +#~ "Sukopijuok Å¡iÄ nuorodÄ ir persiusk jÄ tiems, su kuriais noru pasidalinti " +#~ "savo lentynÄ ." + +#, fuzzy +#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Perskaityk Å¡io autoriaus apraÅ¡ymÄ tinklapį Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Perskaityk Å¡io autoriaus apraÅ¡ymÄ tinklapį Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "Perskaityk Å¡io autoriaus apraÅ¡ymÄ tinklapį Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read related study on Lektury.Gazeta.pl" +#~ msgstr "Perskaityk Å¡io autoriaus apraÅ¡ymÄ tinklapį Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" +#~ msgstr "Perskaityk straipsnį apie autorių Wikipedijoje" + +#, fuzzy +#~ msgid "Read article about kind %(last_tag)s on Wikipedia" +#~ msgstr "Perskaityk straipsnį apie autorių Wikipedijoje" + +#, fuzzy +#~ msgid "Read article about genre %(last_tag)s on Wikipedia" +#~ msgstr "Perskaityk straipsnį apie autorių Wikipedijoje" + +#, fuzzy +#~ msgid "Read related article on Wikipedia" +#~ msgstr "Perskaityk straipsnį apie autorių Wikipedijoje" + +#~ msgid "Delete" +#~ msgstr "paÅ¡alinti " + +#~ msgid "return to the main page" +#~ msgstr "sugryžk į pagrindinį puslapį " + +#~ msgid "return to list of materials" +#~ msgstr "gryžk i medžiagų saraÅ¡Ä " + +#~ msgid "Hand-outs for teachers on " +#~ msgstr "PagalbinÄs medžiagos mokytojams" + +#, fuzzy +#~ msgid "" +#~ "Download TXT - for reading on small displays, for example mobile phones" +#~ msgstr "ant displÄjaus, pvz. mobilaus telefono " + +#~ msgid "Polish" +#~ msgstr "Lenkų" + +#~ msgid "German" +#~ msgstr "VokieÄių" + +#~ msgid "English" +#~ msgstr "Anglų " + +#~ msgid "Lithuanian" +#~ msgstr "Lietuvių" + +#~ msgid "French" +#~ msgstr "PrancÅ«zų" + +#~ msgid "Russian" +#~ msgstr "Rusų" + +#~ msgid "Spanish" +#~ msgstr "Ispanų" + +#~ msgid "Ukrainian" +#~ msgstr "UkrainieÄių" + +#~ msgid "Choose your interface language: " +#~ msgstr "Pasirink sÄ sajos kalbÄ :" + +#~ msgid "Choose language" +#~ msgstr "Pasirink kalbÄ " + +#~ msgid "Hide description" +#~ msgstr "Suvyniok apraÅ¡ymÄ " + +#~ msgid "Download MP3" +#~ msgstr "atsisiųsk MP3 failÄ " + +#~ msgid "Download Ogg Vorbis" +#~ msgstr "atsisiųsk Ogg Vorbis failÄ " + +#~ msgid "Download DAISY" +#~ msgstr "atsisiųsk DAISY failÄ " + +#~ msgid "check list of books" +#~ msgstr "patikrink knygų sÄ raÅ¡Ä " + +#~ msgid "in our repository" +#~ msgstr "mÅ«sų knygų rinkiny" + +#~ msgid "Read study of epoch" +#~ msgstr "Perskaityk gadynÄs apraÅ¡ymÄ " + +#~ msgid "Read article about epoch" +#~ msgstr "Perskaityk straipsnį apie gadynÄ " diff --git a/src/wolnelektury/locale/pl/LC_MESSAGES/django.mo b/src/wolnelektury/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..b6919642f Binary files /dev/null and b/src/wolnelektury/locale/pl/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/pl/LC_MESSAGES/django.po b/src/wolnelektury/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..6a6ad3450 --- /dev/null +++ b/src/wolnelektury/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,1207 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: WolneLektury\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:43+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" +"X-Poedit-Language: Polish\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2)\n" + +#: views.py:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "Zaloguj siÄ" + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "Zalogowano jako %(user)s" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "ZaÅóż konto" + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr "Zaloguj siÄ, aby kontynuowaÄ" + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "Podana strona nie istnieje" + +#: templates/404.html:10 +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" + +#: templates/404.html:14 +msgid "main page" +msgstr "strony gÅównej" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "BÅÄ d serwera" + +#: templates/500.html:19 +msgid "" +"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " +"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " +"error.</p>" +msgstr "" +"<p>Serwis Wolnelektury.pl jest chwilowo niedostÄpny. Odwiedź naszego <a " +"href='http://nowoczesnapolska.org.pl'>bloga</a></p>\n" +"<p>Powiadom <a href='mailto:fundacja@nowoczesnapolska.org." +"pl'>administratorów</a> o bÅÄdzie.</p>" + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "Serwis niedostÄpny" + +#: 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." + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "Biblioteka internetowa Wolne Lektury" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "Co nowego?" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "Ostatnie publikacje" + +#: templates/main_page.html:41 +msgid "News" +msgstr "AktualnoÅci" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "NarzÄdzia" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "ZgÅoÅ bÅÄ d lub sugestiÄ" + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "Pobierz katalog w formacie PDF." + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "Widget" + +#: templates/main_page.html:59 +msgid "Missing a book?" +msgstr "Nie znalazÅeÅ/-aÅ utworu?" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "Plan publikacji" + +#: templates/main_page.html:71 +msgid "Information" +msgstr "Informacje" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "Polityka prywatnoÅci" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "Użyto obrazu:" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" <a href='%(b)s'>%(c)s</a> free reading you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgid_plural "" +"\n" +" <a href='%(b)s'>%(c)s</a> free readings you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgstr[0] "" +"\n" +" <a href='%(b)s'>%(c)s</a> darmowy utwór do której <a " +"href='%(r)s'>masz prawo</a>\n" +" " +msgstr[1] "" +"\n" +" <a href='%(b)s'>%(c)s</a> darmowe utwory do których <a " +"href='%(r)s'>masz prawo</a>\n" +" " +msgstr[2] "" +"\n" +" <a href='%(b)s'>%(c)s</a> darmowych utworów do których " +"<a href='%(r)s'>masz prawo</a>\n" +" " + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "Witaj" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "HasÅo" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "E-mail" + +#: templates/superbase.html:74 templates/user.html:14 +msgid "Social accounts" +msgstr "Konta spoÅecznoÅciowe" + +#: templates/superbase.html:77 +msgid "My shelf" +msgstr "Moja póÅka" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "Administracja" + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "Wyloguj" + +#: templates/superbase.html:111 +msgid "Search" +msgstr "Szukaj" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "Wersje jÄzykowe" + +#: templates/superbase.html:165 +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." +"org.pl/\">Modern Poland Foundation</a>.\n" +"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" +"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" +"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" +"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" +"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" +"\t\t\t\t" +msgstr "" +"\n" +"Wolne Lektury to projekt prowadzony przez <a href=\"http://nowoczesnapolska." +"org.pl/\">fundacjÄ Nowoczesna Polska</a>. \n" +"Reprodukcje cyfrowe wykonane przez <a href=\"http://www.bn.org.pl/" +"\">BibliotekÄ NarodowÄ </a>, <a href=\"http://www.bs.katowice.pl/" +"\">BibliotekÄ ÅlÄ skÄ </a> i <a href=\"http://www.bibliotekaelblaska.pl/" +"\">BibliotekÄ ElblÄ skÄ </a> z egzemplarzy pochodzÄ cych ze zbiorów BN, BÅ i " +"BE.\n" +"Hosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>." + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" +"\">fundacja@nowoczesnapolska.org.pl</a>\n" +"\t\t\t\t" +msgstr "" +"\n" +"Fundacja Nowoczesna Polska, 00-514 Warszawa, ul. MarszaÅkowska 84/92 lok. " +"125, tel/fax: (22) 621-30-17, e-mail: <a href=\"mailto:" +"fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "Zamknij" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "Åadowanie" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "Użytkownik" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "Administracja stronÄ " + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "TÅumaczenia" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "zaawansowane" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "uproszczone" + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "Importuj ksiÄ Å¼kÄ" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "Nie pamiÄtasz hasÅa?" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +msgid "Sign in using:" +msgstr "Zaloguj siÄ używajÄ c:" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "albo zaÅóż konto" + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgstr[0] "" +"\n" +"W serwisie Wolne Lektury już teraz opublikowany jest %(c)s utwór! Pomóż w " +"rozwijaniu biblioteki i uwalnianiu nowych lektur <a href=\"http://" +"nowoczesnapolska.org.pl/wesprzyj_nas/\">przekazujÄ c nam darowiznÄ lub 1% " +"podatku</a>.\n" +msgstr[1] "" +"\n" +"W serwisie Wolne Lektury już teraz opublikowane sÄ %(c)s utwory! Pomóż w " +"rozwijaniu biblioteki i uwalnianiu nowych lektur <a href=\"http://" +"nowoczesnapolska.org.pl/wesprzyj_nas/\">przekazujÄ c nam darowiznÄ lub 1% " +"podatku</a>.\n" +msgstr[2] "" +"\n" +"W serwisie Wolne Lektury już teraz opublikowanych jest %(c)s utworów! Pomóż " +"w rozwijaniu biblioteki i uwalnianiu nowych lektur <a href=\"http://" +"nowoczesnapolska.org.pl/wesprzyj_nas/\">przekazujÄ c nam darowiznÄ lub 1% " +"podatku</a>.\n" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +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..." +msgstr "WiÄcej..." + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "Logowanie 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" +msgstr "poprzedni" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "nastÄpny" + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "Zezwól na dostÄp do Wolnych Lektur" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" +"strong>." +msgstr "" +"Potwierdź dostÄp do Wolnych Lektur jako użytkownik <strong>%(user)s</strong>." + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "PowiÄ zania konta" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" +"Możesz siÄ zalogowaÄ na swoje konto używajÄ c nastÄpujÄ cych kont zewnÄtrznych:" + +#: templates/socialaccount/connections.html:36 +msgid "Remove" +msgstr "UsuÅ" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "Aktualnie do Twojego konta nie sÄ podÅÄ czone żadne konta zewnÄtrzne." + +#: templates/socialaccount/connections.html:47 +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:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" +"\">sign in</a>." +msgstr "" +"Logowanie przy użyciu zewnÄtrznego konta zostaÅo anulowane. JeÅli byÅ to " +"bÅÄ d, przejdź do <a href=\"%(login_url)s\">strony logowania</a>." + +#~ msgid "Listing of all audiobooks" +#~ msgstr "Spis wszystkich audiobooków" + +#~ msgid "Latest MP3 audiobooks" +#~ msgstr "Ostatnio dodane audiobooki w formacie MP3" + +#~ msgid "Latest Ogg Vorbis audiobooks" +#~ msgstr "Ostatnio dodane audiobooki w formacie Ogg Vorbis" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." +#~ msgstr "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." + +#~ msgid "See also" +#~ msgstr "Zobacz też" + +#~ msgid "Theme" +#~ msgstr "Motyw" + +#~ msgid "in work " +#~ msgstr "w utworze" + +#~ msgid "This work is licensed under:" +#~ msgstr "Utwór jest udostÄpniony na licencji:" + +#~ msgid "" +#~ "This work isn't covered by copyright and is part of the\n" +#~ " public domain, which means it can be freely used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" +#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" +#~ " 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 <a " +#~ "href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie " +#~ "autorstwa-Na tych samych warunkach 3.0</a>." + +#~ msgid "Text prepared based on:" +#~ msgstr "Tekst opracowany na podstawie:" + +#~ msgid "Edited and annotated by:" +#~ msgstr "Opracowanie redakcyjne i przypisy:" + +#~ msgid "Listing of all works" +#~ msgstr "Spis wszystkich utworów" + +#~ msgid "Table of Content" +#~ msgstr "Spis treÅci" + +#~ msgid "â top â" +#~ msgstr "â góra â" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "WrzuÄ lekturÄ na póÅkÄ!" + +#~ msgid "Create new shelf" +#~ msgstr "Utwórz nowÄ póÅkÄ" + +#~ 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." + +#~ msgid "Put on the shelf!" +#~ msgstr "WrzuÄ na póÅkÄ" + +#~ msgid "Epoch" +#~ msgstr "Epoka" + +#~ msgid "Kind" +#~ msgstr "Rodzaj" + +#~ msgid "Genre" +#~ msgstr "Gatunek" + +#~ msgid "Read online" +#~ msgstr "Czytaj online" + +#~ msgid "Download" +#~ msgstr "Pobierz" + +#~ msgid "to print" +#~ msgstr "do druku" + +#~ msgid "for an e-book reader" +#~ msgstr "na czytnik e-booków" + +#~ msgid "for Kindle" +#~ msgstr "na Kindle" + +#~ msgid "for advanced usage" +#~ msgstr "do zadaÅ specjalnych" + +#~ msgid "Listen" +#~ msgstr "SÅuchaj" + +#~ msgid "Table of contents" +#~ msgstr "Spis treÅci" + +#~ msgid "Themes" +#~ msgstr "Motywy" + +#~ msgid "Edit. note" +#~ msgstr "Nota red." + +#~ msgid "Infobox" +#~ msgstr "Informacje" + +#~ msgid "Book's page" +#~ msgstr "Strona utworu" + +#~ msgid "for a reader" +#~ msgstr "na czytnik" + +#~ msgid "Download a custom PDF" +#~ msgstr "Stwórz wÅasny plik PDF" + +#~ msgid "Motifs and themes" +#~ msgstr "Motywy i tematy" + +#~ msgid "See" +#~ msgstr "Zobacz" + +#~ msgid "Source" +#~ msgstr "ŹródÅo" + +#~ msgid "of the book" +#~ msgstr "utworu" + +#~ msgid "Source XML file" +#~ msgstr "ŹródÅowy plik XML" + +#~ msgid "Book on" +#~ msgstr "Utwór na" + +#~ msgid "Editor's Platform" +#~ msgstr "Platformie Redakcyjnej" + +#~ msgid "Book description on Lektury.Gazeta.pl" +#~ msgstr "Opis lektury w Lektury.Gazeta.pl" + +#~ msgid "Book description on Wikipedia" +#~ msgstr "Opis lektury w Wikipedii" + +#~ msgid "Mix this book" +#~ msgstr "Miksuj treÅÄ utworu" + +#~ msgid "Download all audiobooks for this book" +#~ msgstr "Pobierz wszystkie audiobooki tego utworu" + +#~ msgid "Catalogue" +#~ msgstr "Katalog" + +#~ msgid "Authors" +#~ msgstr "Autorzy" + +#~ msgid "Kinds" +#~ msgstr "Rodzaje" + +#~ msgid "Genres" +#~ msgstr "Gatunki" + +#~ msgid "Epochs" +#~ msgstr "Epoki" + +#~ msgid "Themes and topics" +#~ msgstr "Motywy i tematy" + +#~ msgid "Listing of all DAISY files" +#~ msgstr "Spis wszystkich plików DAISY" + +#~ msgid "Latest DAISY audiobooks" +#~ 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Å." +#~ 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Å." + +#~ 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:" + +#~ msgid "Shelves containing fragment" +#~ msgstr "PóÅki zawierajÄ ce fragment" + +#~ 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." + +#~ msgid "Save all shelves" +#~ msgstr "Zapisz póÅki" + +#~ msgid "Expand fragment" +#~ msgstr "RozwiÅ fragment" + +#~ msgid "Hide fragment" +#~ msgstr "ZwiÅ fragment" + +#~ msgid "See full category" +#~ msgstr "Zobacz caÅÄ kategoriÄ" + +#~ msgid "All books" +#~ msgstr "Wszystkie utwory" + +#~ msgid "Audiobooks" +#~ msgstr "Audiobooki" + +#~ msgid "DAISY" +#~ msgstr "DAISY" + +#~ msgid "Work is licensed under " +#~ msgstr "Utwór jest udostÄpniony na licencji" + +#~ msgid "Based on" +#~ msgstr "Na podstawie" + +#~ msgid "Details" +#~ msgstr "O utworze" + +#~ msgid "Author" +#~ msgstr "Autor" + +#~ msgid "Other resources" +#~ msgstr "W innych miejscach" + +#~ msgid "Source of the image" +#~ msgstr "ŹródÅo obrazu" + +#~ msgid "Image on the Editor's Platform" +#~ msgstr "Obraz na Platformie Redakcyjnej" + +#~ msgid "View XML source" +#~ msgstr "ŹródÅowy plik XML" + +#~ msgid "Work's themes " +#~ msgstr "Motywy w utworze" + +#~ msgid "Listing of all pictures" +#~ msgstr "Spis wszystkich obrazów" + +#~ msgid "Download as" +#~ msgstr "Pobierz jako" + +#~ msgid "Artist" +#~ msgstr "Czyta" + +#~ msgid "Director" +#~ msgstr "Reżyseruje" + +#~ msgid "Audiobooks were prepared as a part of the projects:" +#~ msgstr "Audiobooki przygotowane w ramach projektów:" + +#~ msgid "%(cs)s, funded by %(fb)s" +#~ msgstr "%(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." + +#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." +#~ msgstr "Audiobooki przygotowane w ramach projektu %(cs)s." + +#~ msgid "Did you mean" +#~ msgstr "Czy chodziÅo Ci o" + +#~ msgid "Results by authors" +#~ msgstr "Znalezieni autorzy" + +#~ msgid "Results by title" +#~ msgstr "Znalezione w tytuÅach" + +#~ msgid "Results in text" +#~ msgstr "Znalezione w treÅci" + +#~ msgid "Other results" +#~ msgstr "Inne wyniki" + +#~ msgid "Sorry! Search cirteria did not match any resources." +#~ msgstr "" +#~ "Przepraszamy! Brak wyników speÅniajÄ cych kryteria podane w zapytaniu." + +#~ msgid "" +#~ "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." + +#~ msgid "Sorry! Search query must have at least two characters." +#~ msgstr "Przepraszamy! Zapytanie musi zawieraÄ co najmniej dwa znaki." + +#~ msgid "in Lektury.Gazeta.pl" +#~ msgstr "w serwisie Lektury.Gazeta.pl" + +#~ msgid "in Wikipedia" +#~ msgstr "w Wikipedii" + +#~ msgid "Your shelves with books" +#~ msgstr "Twoje póÅki z lekturami" + +#~ msgid "remove" +#~ msgstr "usuÅ" + +#~ 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." + +#~ msgid "Create shelf" +#~ msgstr "Utwórz póÅkÄ" + +#~ msgid "author" +#~ msgstr "autor" + +#~ msgid "Hand-outs for teachers" +#~ msgstr "MateriaÅy pomocnicze dla nauczycieli" + +#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" +#~ msgstr "Przeczytaj omówienia utworów autora w serwisie Lektury.Gazeta.pl" + +#~ msgid "Read article about this author on Wikipedia" +#~ msgstr "Przeczytaj artykuÅ o autorze w Wikipedii" + +#~ msgid "This author's works are copyrighted." +#~ msgstr "DzieÅa tego autora objÄte sÄ prawem autorskim." + +#~ msgid "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries can't publish this author's works." +#~ msgstr "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Dowiedz " +#~ "siÄ</a>, dlaczego biblioteki internetowe nie mogÄ udostÄpniaÄ dzieÅ tego " +#~ "autora." + +#~ msgid "" +#~ "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 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 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 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 "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries can't publish this work." +#~ msgstr "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Dowiedz " +#~ "siÄ</a>, dlaczego biblioteki internetowe nie mogÄ udostÄpniaÄ tego dzieÅa." + +#~ msgid "This work is copyrighted." +#~ msgstr "To dzieÅo objÄte jest prawem autorskim." + +#, fuzzy +#~ msgid "for advanced usege" +#~ msgstr "zaawansowane" + +#~ msgid "Login to Wolne Lektury" +#~ msgstr "Zaloguj siÄ do Wolnych Lektur" + +#~ msgid "Login" +#~ msgstr "Zaloguj siÄ" + +#~ msgid "Mobile app" +#~ msgstr "Aplikacja mobilna" + +#~ msgid "See description" +#~ msgstr "Zobacz opis" + +#~ msgid "of the book " +#~ msgstr "utworu" + +#~ msgid "" +#~ "Internet Explorer cannot display this site properly. Click here to read " +#~ "more..." +#~ msgstr "" +#~ "Internet Explorer nie potrafi poprawnie wyÅwietliÄ tej strony. Kliknij " +#~ "tutaj, aby dowiedzieÄ siÄ wiÄcej..." + +#~ msgid "Your shelves" +#~ msgstr "Twoje póÅki" + +#~ msgid "Didn't find a book? Make a suggestion." +#~ msgstr "Nie znalazÅeÅ utworu na stronie? ZgÅoÅ sugestiÄ." + +#~ msgid "Register on" +#~ msgstr "Zarejestruj siÄ w" + +#~ msgid "or" +#~ msgstr "lub" + +#~ msgid "return to main page" +#~ msgstr "wrÃ³Ä do strony gÅównej" + +#~ msgid "Listing of all audiobooks on WolneLektury.pl" +#~ msgstr "Spis wszystkich audiobooków w WolneLektury.pl" + +#~ msgid "on WolneLektury.pl" +#~ msgstr "w WolneLektury.pl" + +#~ msgid "Put a book" +#~ msgstr "WrzuÄ lekturÄ" + +#~ msgid "on the shelf!" +#~ msgstr "na póÅkÄ!" + +#~ msgid "and printing using" +#~ msgstr "i drukowania przy pomocy" + +#~ msgid "Download EPUB" +#~ msgstr "Pobierz plik EPUB" + +#~ msgid "on mobile devices" +#~ msgstr "na urzÄ dzeniach mobilnych" + +#~ msgid "Download TXT" +#~ msgstr "Pobierz plik TXT" + +#~ msgid "on small displays, for example mobile phones" +#~ msgstr "na maÅych ekranach, np. na komórce" + +#~ msgid "Download ODT" +#~ msgstr "Pobierz plik ODT" + +#~ msgid "and editing using" +#~ msgstr "i edytowania przy pomocy" + +#~ msgid "on" +#~ msgstr "w" + +#~ msgid "Listing of all works on WolneLektury.pl" +#~ msgstr "Spis wszystkich utworów w WolneLektury.pl" + +#~ msgid "audiobooks" +#~ msgstr "audiobooki" + +#~ msgid "Jump to" +#~ msgstr "Na skróty" + +#~ msgid "Categories" +#~ msgstr "Utwór w kategoriach" + +#~ msgid "Listing of all DAISY files on WolneLektury.pl" +#~ msgstr "Spis wszystkich plików DAISY w WolneLektury.pl" + +#~ msgid "Show full category" +#~ msgstr "Zobacz caÅÄ kategoriÄ" + +#~ msgid "Hide" +#~ msgstr "ZwiÅ" + +#~ msgid "" +#~ "\n" +#~ "%(c)s book from <a href='http://domenapubliczna.org'>public domain</a> or " +#~ "under\n" +#~ "a <a href='http://creativecommons.org/licenses/by-sa/3.0/deed.pl'>free " +#~ "license</a>.\n" +#~ msgid_plural "" +#~ "\n" +#~ "%(c)s books from <a href='http://domenapubliczna.org'>public domain</a> " +#~ "or under\n" +#~ "a <a href='http://creativecommons.org/licenses/by-sa/3.0/deed.pl'>free " +#~ "license</a>.\n" +#~ msgstr[0] "" +#~ "\n" +#~ "%(c)s lektura z <a href='http://domenapubliczna.org'>domeny publicznej</" +#~ "a>\n" +#~ "lub na <a href='http://creativecommons.org/licenses/by-sa/3.0/deed." +#~ "pl'>wolnej licencji</a>.\n" +#~ msgstr[1] "" +#~ "\n" +#~ "%(c)s lektury z <a href='http://domenapubliczna.org'>domeny publicznej</" +#~ "a>\n" +#~ "i na <a href='http://creativecommons.org/licenses/by-sa/3.0/deed." +#~ "pl'>wolnej licencji</a>.\n" +#~ msgstr[2] "" +#~ "\n" +#~ "%(c)s lektur z <a href='http://domenapubliczna.org'>domeny publicznej</" +#~ "a>\n" +#~ "i na <a href='http://creativecommons.org/licenses/by-sa/3.0/deed." +#~ "pl'>wolnej licencji</a>.\n" + +#~ msgid "Browse books by categories" +#~ msgstr "PrzeglÄ daj lektury wedÅug wybranych kategorii" + +#~ msgid "Books for every school level" +#~ msgstr "Lektury na każdy poziom edukacji" + +#~ msgid "primary school" +#~ msgstr "szkoÅa podstawowa" + +#~ msgid "gymnasium" +#~ msgstr "gimnazjum" + +#~ msgid "high school" +#~ msgstr "szkoÅa Årednia" + +#~ msgid "delete" +#~ msgstr "usuÅ" + +#~ 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." + +#~ msgid "You need to " +#~ msgstr "Aby zarzÄ dzaÄ swoimi póÅkami, musisz siÄ" + +#~ msgid "sign in" +#~ msgstr "zalogowaÄ" + +#~ msgid "to manage your shelves." +#~ msgstr "." + +#~ 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Ä:" + +#~ msgid "Insert this element in place where you want display the widget" +#~ msgstr "UmieÅÄ ten element w miejscu gdzie chcesz wyÅwietliÄ widżet" + +#~ msgid "Place this element just before closing body tag: </body>" +#~ msgstr "UmieÅÄ ten element tuż przed zamkniÄciem taga body: </body>" + +#~ 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." + +#~ msgid "Themes groups" +#~ msgstr "Rodziny motywów" + +#~ msgid "See our blog" +#~ msgstr "Zobacz nasz blog" + +#~ msgid "You can help us!" +#~ msgstr "Możesz nam pomóc!" + +#~ msgid "Become a volunteer – an editor, developer or translator." +#~ msgstr "" +#~ "ZostaÅ naszym redaktorem, programistÄ lub tÅumaczem â wolontariuszem." + +#~ msgid "Gain new skills and experience." +#~ msgstr "ZdobÄ dź nowe umiejÄtnoÅci i doÅwiadczenie." + +#~ msgid "Join an open project of creating an innovative online library." +#~ msgstr "" +#~ "Weź udziaÅ w otwartym projekcie i twórz innowacyjnÄ bibliotekÄ " +#~ "internetowÄ ." + +#~ msgid "About us" +#~ msgstr "O projekcie" + +#~ msgid "" +#~ "\n" +#~ "\t\t\tInternet library with school readings âWolne Lekturyâ (<a href=" +#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) is a project made by " +#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " +#~ "which are recommended by Ministry of National Education and are in public " +#~ "domain.\n" +#~ "\t\t\t" +#~ msgstr "" +#~ "\n" +#~ "Biblioteka internetowa z lekturami szkolnymi âWolne Lekturyâ (<a href=" +#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) 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." + +#~ msgid "" +#~ "\n" +#~ "Portions of this page are modifications based on work created and <a href=" +#~ "\"http://code.google.com/policies.html\">shared by Google</a> and used\n" +#~ "according to terms described in the <a href=\"http://creativecommons.org/" +#~ "licenses/by/3.0/\">Creative Commons\n" +#~ "3.0 Attribution License</a>.\n" +#~ msgstr "" +#~ "\n" +#~ "Strona zawiera zmodyfikowane logo Androida, stworzone i <a href=\"http://" +#~ "code.google.com/policies.html\">udostÄpnione przez Google</a>\n" +#~ "na warunkach licencji <a href=\"http://creativecommons.org/licenses/" +#~ "by/3.0/\">Creative Commons 3.0 Uznanie Autorstwa</a>.\n" + +#~ msgid "return to the main page" +#~ msgstr "wrÃ³Ä do strony gÅównej" + +#~ msgid "Searching in" +#~ msgstr "Wyszukiwanie w" + +#~ msgid "More than one result matching the criteria found." +#~ msgstr "Znaleziono wiÄcej niż jeden wynik wyszukiwania." + +#~ msgid "Search in WolneLektury.pl" +#~ msgstr "Wyszukiwanie w WolneLektury.pl" + +#~ msgid "Your shelf is empty" +#~ msgstr "Twoja póÅka jest pusta" + +#~ msgid "" +#~ "You can put a book on a shelf by entering page of the reading and " +#~ "clicking 'Put on the shelf'." +#~ msgstr "" +#~ "Możesz wrzuciÄ ksiÄ Å¼kÄ na póÅkÄ, wchodzÄ c na stronÄ danej lektury i " +#~ "klikajÄ c na przycisk âNa póÅkÄ!â." + +#~ msgid "Choose books' formats which you want to download:" +#~ msgstr "Wybierz formaty ksiÄ Å¼ek, które chcesz pobraÄ:" + +#~ msgid "for listening" +#~ msgstr "do sÅuchania" + +#~ msgid "on favourite MP3 player" +#~ msgstr "w ulubionym odtwarzaczu MP3" + +#~ msgid "Xiph.org Foundation" +#~ msgstr "fundacji Xiph.Org" + +#~ msgid "Updating list of books' formats on the shelf" +#~ msgstr "Uaktualnianie listy formatów ksiÄ Å¼ek na póÅce." + +#~ msgid "cancel" +#~ msgstr "anuluj" + +#~ msgid "Share this shelf" +#~ msgstr "Podziel siÄ tÄ póÅkÄ " + +#~ 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Ä ." + +#~ 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" + +#~ 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" + +#~ 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" + +#~ msgid "Read related study on Lektury.Gazeta.pl" +#~ msgstr "Przeczytaj powiÄ zane omówienia w serwisie Lektury.Gazeta.pl" + +#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" +#~ msgstr "Przeczytaj artykuÅ o epoce %(last_tag)s w Wikipedii" + +#~ msgid "Read article about kind %(last_tag)s on Wikipedia" +#~ msgstr "Przeczytaj artykuÅ o rodzaju %(last_tag)s w Wikipedii" + +#~ msgid "Read article about genre %(last_tag)s on Wikipedia" +#~ msgstr "Przeczytaj artykuÅ o gatunku %(last_tag)s w Wikipedii" + +#~ msgid "Read related article on Wikipedia" +#~ msgstr "Przeczytaj powiÄ zany artykuÅ w Wikipedii" + +#~ msgid "Delete" +#~ msgstr "UsuÅ" + +#~ msgid "Hand-outs for teachers on " +#~ msgstr "MateriaÅy pomocnicze dla nauczycieli w " + +#~ msgid "" +#~ "We try our best to elaborate works appended to our library. It is " +#~ "possible only due to support of our volunteers." +#~ msgstr "" +#~ "Utwory wÅÄ czane sukcesywnie do naszej biblioteki staramy siÄ opracowywaÄ " +#~ "jak najdokÅadniej. Jest to możliwe tylko dziÄki wspóÅpracujÄ cym z nami " +#~ "wolontariuszom." + +#~ msgid "" +#~ "We invite people who want to take part in developing Internet school " +#~ "library Wolne Lektury." +#~ msgstr "" +#~ "Zapraszamy wszystkie osoby, które chcÄ wspóÅtworzyÄ szkolnÄ bibliotekÄ " +#~ "internetowÄ Wolne Lektury." + +#~ msgid "Latest audiobooks - all formats" +#~ msgstr "Ostatnio dodane audiobooki - wszystkie formaty" + +#~ msgid "return to list of materials" +#~ msgstr "wrÃ³Ä do listy materiaÅów" + +#~ msgid "Book on project's wiki" +#~ msgstr "Lektura na wiki projektu" + +#~ msgid "daisy" +#~ msgstr "daisy" + +#~ msgid "" +#~ "are professional recordings of literary texts from our repository, " +#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " +#~ "DAISY system." +#~ msgstr "" +#~ "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" + +#~ msgid "Download DAISY" +#~ msgstr "Pobierz plik DAISY" + +#~ msgid "check list of books" +#~ msgstr "zobacz spis utworów" + +#~ msgid "in our repository" +#~ msgstr "w naszym zbiorze" + +#~ msgid "Polish" +#~ msgstr "polski" + +#~ msgid "German" +#~ msgstr "niemiecki" + +#~ msgid "English" +#~ msgstr "angielski" + +#~ msgid "Lithuanian" +#~ msgstr "litewski" + +#~ msgid "French" +#~ msgstr "francuski" + +#~ msgid "Russian" +#~ msgstr "rosyjski" + +#~ msgid "Spanish" +#~ msgstr "hiszpaÅski" + +#~ msgid "Ukrainian" +#~ msgstr "ukraiÅski" + +#~ msgid "Choose your interface language: " +#~ msgstr "Wybierz jÄzyk interfejsu:" + +#~ msgid "Choose language" +#~ msgstr "Wybierz jÄzyk" + +#~ msgid "Hide description" +#~ msgstr "ZwiÅ opis" diff --git a/src/wolnelektury/locale/ru/LC_MESSAGES/django.mo b/src/wolnelektury/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..55de36919 Binary files /dev/null and b/src/wolnelektury/locale/ru/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/ru/LC_MESSAGES/django.po b/src/wolnelektury/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 000000000..f7eb548b3 --- /dev/null +++ b/src/wolnelektury/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,1122 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:43+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Translated-Using: django-rosetta 0.5.6\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: views.py:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "ÐÑ Ð¾Ð´" + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "ÐаÑегиÑÑÑоваÑÑÑÑ" + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²Ð¾Ð¹Ñи, ÑÑÐ¾Ð±Ñ Ð¿ÑодолжaÑÑ" + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "Ð¡Ð°Ð¹Ñ Ð½Ðµ ÑÑÑеÑÑвÑеÑ" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "Ð¡Ð°Ð¹Ñ Ð½Ðµ найден" + +#: 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 "" +"ÐзвиниÑе! ÐÑÐ¾Ñ ÑÐ°Ð¹Ñ Ð½Ðµ ÑÑÑеÑÑвÑеÑ. ÐÑовеÑÑÑе, пожалÑйÑÑа, набÑали ли Ð²Ñ " +"Ñ Ð¾ÑоÑий адÑÐµÑ Ð¸Ð»Ð¸ зайдиÑе на" + +#: templates/404.html:14 +msgid "main page" +msgstr "главнÑÑ ÑÑÑаниÑÑ" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "ÐÑибка ÑеÑвеÑа" + +#: templates/500.html:19 +msgid "" +"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " +"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " +"error.</p>" +msgstr "" +"<p> The Wolnelektury.pl вÑеменно не ÑабоÑаеÑ. Тем вÑемeнем зайдиÑе на <a " +"href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>СообÑиÑе наÑим<a " +"href='mailto:fundacja@nowoczesnapolska.org.pl'> админиÑÑÑаÑоÑам </a> об " +"оÑибке.</p>" + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "СеÑÐ²Ð¸Ñ Ð½ÐµÐ´Ð¾ÑÑÑпен" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "" +"Ðо Ð¿Ð¾Ð²Ð¾Ð´Ñ ÑÐµÑ Ð½Ð¸ÑеÑкой поддÑежки ÑÐ°Ð¹Ñ The Wolnelektury.pl вÑеменно не " +"ÑабоÑаеÑ." + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "WolneLektury инÑеÑÐ½ÐµÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "ÐоÑледние пÑбликаÑии" + +#: templates/main_page.html:41 +msgid "News" +msgstr "ÐовоÑÑи" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "УÑилиÑÑ" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "СообÑиÑÑ Ð¾Ð± оÑибке или пÑедложении" + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "СкаÑаÑÑ ÐºÐ°Ñалог в PDF ÑоÑмаÑе." + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "ÐиджеÑ" + +#: templates/main_page.html:59 +msgid "Missing a book?" +msgstr "ÐоÑеÑÑли книгÑ?" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "ÐздаÑелÑÑкий план" + +#: templates/main_page.html:71 +msgid "Information" +msgstr "ÐнÑоÑмаÑиÑ" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "ÐÑполÑзÑемÑе изобÑажениÑ:" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "на WolneLektury.pl" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" <a href='%(b)s'>%(c)s</a> free reading you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgid_plural "" +"\n" +" <a href='%(b)s'>%(c)s</a> free readings you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgstr[0] "" +"\n" +" <a href='%(b)s'>%(c)s</a> беÑплаÑное ÑÑение, коÑоÑом ÐÑ " +"<a href='%(r)s'>впÑаве полÑзоваÑÑÑÑ</a>\n" +" " +msgstr[1] "" +"\n" +" <a href='%(b)s'>%(c)s</a> беÑплаÑнÑе ÑÑениÑ, коÑоÑÑми ÐÑ " +"<a href='%(r)s'>впÑаве полÑзоваÑÑÑÑ </a>\n" +" " +msgstr[2] "" +"\n" +" <a href='%(b)s'>%(c)s</a> беÑплаÑнÑÑ ÑÑений, коÑоÑÑми ÐÑ " +"<a href='%(r)s'>впÑаве полÑзоваÑÑÑÑ </a>\n" +" " + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "ÐобÑо пожаловаÑÑ" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "" + +#: templates/superbase.html:74 templates/user.html:14 +#, fuzzy +msgid "Social accounts" +msgstr "или пÑиÑоединиÑеÑÑ Ðº полÑзоваÑелÑм" + +#: templates/superbase.html:77 +msgid "My shelf" +msgstr "СоздаÑÑ Ð¿Ð¾Ð»ÐºÑ" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "ÐдминиÑÑÑаÑиÑ" + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "ÐÑÑ Ð¾Ð´" + +#: templates/superbase.html:111 +msgid "Search" +msgstr "ÐоиÑк" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "ЯзÑковÑе веÑÑии" + +#: templates/superbase.html:165 +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." +"org.pl/\">Modern Poland Foundation</a>.\n" +"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" +"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" +"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" +"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" +"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tWolne Lektury - ÑÑо пÑÐ¾ÐµÐºÑ Ð¿Ð¾Ð´ ÑпÑавлением <a href=\"http://" +"nowoczesnapolska.org.pl/\"> Фонда Ðолодой ÐолÑÑи </a>.\n" +"\t\t\t\t ЦиÑÑовÑе копии ÑоздаÑÑÑÑ <a href=\"http://www.bn.org.pl/\"> " +"ÐаÑÐ¾Ð´Ð½Ð°Ñ ÐиблиоÑека </a>, <a href=\"http://www.bs.katowice.pl/\">СилезÑÐºÐ°Ñ " +"ÐиблиоÑека</a> and <a href=\"http://www.bibliotekaelblaska.pl/" +"\">ÐлÑблонгÑÐºÐ°Ñ ÐиблиоÑека, оÑнованнÑе на ÑеÑÑÑÑÐ°Ñ TNL. \n" +"\t\t\t\tHosting <a href=\"http://eo.pl/\">EO Networks</a>.\n" +"\t\t\t\t" + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" +"\">fundacja@nowoczesnapolska.org.pl</a>\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tФонд Ðолодой ÐолÑÑи, 00-514 ÐаÑÑава, ul. MarszaÅkowska 84/92 lok. " +"125, tel/fax: (22) 621-30-17\n" +" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" +"\">fundacja@nowoczesnapolska.org.pl</a>\n" +"\t\t\t\t" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "ÐакÑойÑе" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "ÐогÑÑзка" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "Ð¡Ð°Ð¹Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑии" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "ÐеÑевод" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "пÑодвинÑÑÑй" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "ÑпÑоÑеннÑй" + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "ÐмпоÑÑ ÐºÐ½Ð¸Ð³Ð¸" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +#, fuzzy +msgid "Sign in using:" +msgstr "ÐÑ Ð¾Ð´" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "или заÑегиÑÑÑиÑоваÑÑÑÑ" + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgstr[0] "" +"\n" +"У Ð½Ð°Ñ %(c)s пÑоизведение опÑбликованное на Wolne Lektury\n" +"ÐомогиÑе нам ÑаÑпÑоÑÑÑаниÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Ð¸ помеÑÑиÑÑ Ð½Ð¾Ð²Ñе беÑплаÑнÑе ÑÑениÑ\n" +"пÑи помоÑи <a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/" +"\">денежного пожеÑÑвованиÑ\n" +"или пеÑевода 1% ваÑего Ð¿Ð¾Ð´Ð¾Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ налога</a>.\n" +msgstr[1] "" +"\n" +"У Ð½Ð°Ñ %(c)s пÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑбликованнÑе на Wolne Lektury\n" +"ÐомогиÑе нам ÑаÑпÑоÑÑÑаниÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Ð¸ помеÑÑиÑÑ Ð½Ð¾Ð²Ñе беÑплаÑнÑе ÑÑениÑ\n" +"пÑи помоÑи <a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/" +"\">денежного пожеÑÑвованиÑ\n" +"или пеÑевода 1% ваÑего Ð¿Ð¾Ð´Ð¾Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ налога</a>.\n" +msgstr[2] "" +"\n" +"У Ð½Ð°Ñ %(c)s пÑоизведений опÑбликованнÑÑ Ð½Ð° Wolne Lektury\n" +"ÐомогиÑе нам ÑаÑпÑоÑÑÑаниÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Ð¸ помеÑÑиÑÑ Ð½Ð¾Ð²Ñе беÑплаÑнÑе ÑÑениÑ\n" +"пÑи помоÑи <a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/" +"\">денежного пожеÑÑвованиÑ\n" +"или пеÑевода 1% ваÑего Ð¿Ð¾Ð´Ð¾Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ налога</a>.\n" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +msgstr "" +"СÑанÑÑе ÑедакÑоÑом Wolne Lektury! УзанйÑе ÑабоÑаем ли\n" +"Ð¼Ñ ÑейÑÐ°Ñ Ð½Ð°Ð´ ÑÑением, коÑоÑoе Ð²Ñ Ð¸ÑиÑе и Ñами подгоÑовÑÑе\n" +"пÑбликаÑиÑ, Ð²Ñ Ð¾Ð´Ñ Ð² плаÑÑоÑÐ¼Ñ ÑедакÑиÑовки." + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "ÐодÑобнее..." + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "" + +#: templates/openid/login.html:27 +#, fuzzy +msgid "Sign In" +msgstr "ÐÑ Ð¾Ð´" + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "пÑедÑдÑÑаÑ" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "ÑледÑÑÑаÑ" + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "ÐвÑоÑизаÑÐ¸Ñ Ð´Ð¾ÑÑÑпа к Wolne Lektury" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" +"strong>." +msgstr "" +"ÐодÑвеÑждение Ð´Ð»Ñ Ð°Ð²ÑоÑизаÑии доÑÑÑпа к Wolne Lektury как полÑзоваÑÐµÐ»Ñ " +"<strong>%(user)s </strong>." + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" + +#: templates/socialaccount/connections.html:36 +#, fuzzy +msgid "Remove" +msgstr "ÑбÑаÑÑ" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "" + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" +"\">sign in</a>." +msgstr "" + +#~ msgid "Listing of all audiobooks" +#~ msgstr "СпиÑок ÑабоÑ" + +#~ msgid "Latest MP3 audiobooks" +#~ msgstr "ÐоÑледние MP3 аÑдиокниги" + +#~ msgid "Latest Ogg Vorbis audiobooks" +#~ msgstr "ÐоÑледние Ogg Vorbis аÑдиокниги" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." +#~ msgstr "" +#~ "ÐÑдиоÑека ÑколÑнÑÑ ÑÑений Фонда Nowoczesna Polska.\n" +#~ ". ÐожеÑе иÑполÑзоваÑÑ ÐµÐµ беÑплаÑно и без огÑаниÑений. \n" +#~ "ÐÑдиокниги запиÑÑваÑÑ Ð¸Ð·Ð²ÐµÑÑнÑе акÑеÑÑ, в Ñом ÑиÑле ÐанÑÑа СÑенка и Ян " +#~ "ÐеÑек." + +#~ msgid "See also" +#~ msgstr "ÐодÑобнее" + +#~ msgid "Theme" +#~ msgstr "ÐоÑив" + +#~ msgid "in work " +#~ msgstr "в ÑÑÑде" + +#~ msgid "This work is licensed under:" +#~ msgstr "РазÑеÑение на ÑабоÑÑ Ñо ÑÑоÑонÑ" + +#~ msgid "" +#~ "This work isn't covered by copyright and is part of the\n" +#~ " public domain, which means it can be freely used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" +#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" +#~ " license." +#~ msgstr "" +#~ "ÐÑÐ¾Ñ ÑÑÑд не заÑиÑен авÑоÑÑким пÑавом и ÑвлÑеÑÑÑ ÑаÑÑÑÑ \n" +#~ "        обÑеÑÑвенного домена, ÑÑо обознаÑаеÑ, нем можно Ñвободно " +#~ "ÑполÑзоваÑÑÑÑ, пÑбликоваÑÑ Ð¸ \n" +#~ "        ÑаÑпÑоÑÑÑанÑÑÑ. ÐÑли еÑÑÑ ÐºÐ°ÐºÐ¸Ðµ-либо дополниÑелÑнÑе маÑеÑиалÑ, " +#~ "заÑиÑеннÑе авÑоÑÑкими пÑавами \n" +#~ "        пÑедоÑÑавленнÑе Ñ ÑÑой ÑабоÑой (напÑимеÑ, анноÑаÑии, моÑÐ¸Ð²Ñ Ð¸ Ñ." +#~ "д.), ÑÑи \n" +#~ "        маÑеÑÐ¸Ð°Ð»Ñ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ð¿Ð¾ лиÑензией \n" +#~ "        <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\"> " +#~ "Creative Commons Attribution-ShareAlike 3.0 </ a>" + +#~ msgid "Text prepared based on:" +#~ msgstr "ТекÑÑ Ð¿Ð¾Ð´Ð³Ð¾Ñовлен на оÑнове:" + +#~ msgid "Edited and annotated by:" +#~ msgstr "Ðод ÑедакÑией и Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑиÑми:" + +#~ msgid "Listing of all works" +#~ msgstr "СпиÑок ÑабоÑ" + +#~ msgid "Table of Content" +#~ msgstr "Ðглавление" + +#~ msgid "â top â" +#~ msgstr "â Ñоп â" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "ÐоÑÑавÑÑе ÐºÐ½Ð¸Ð³Ñ Ð½Ð° полкÑ!" + +#~ msgid "Create new shelf" +#~ msgstr "СоздаÑÑ Ð½Ð¾Ð²ÑÑ Ð¿Ð¾Ð»ÐºÑ" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "У Ð²Ð°Ñ Ð½ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ Ð¿Ð¾Ð»Ð¾Ðº. ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð¾Ð´Ð½Ñ Ð½Ð¸Ð¶Ðµ." + +#~ msgid "Put on the shelf!" +#~ msgstr "ÐоÑÑавÑÑе на полкÑ!" + +#~ msgid "Epoch" +#~ msgstr "ÑÐ¿Ð¾Ñ Ð°" + +#~ msgid "Kind" +#~ msgstr "ÑоÑма" + +#~ msgid "Genre" +#~ msgstr "жанÑ" + +#~ msgid "Read online" +#~ msgstr "ЧиÑаÑÑ Ð¾Ð½Ð»Ð°Ð¹Ð½" + +#~ msgid "Download" +#~ msgstr "СкаÑаÑÑ" + +#~ msgid "to print" +#~ msgstr "пеÑаÑаÑÑ" + +#~ msgid "for an e-book reader" +#~ msgstr "Ð´Ð»Ñ ÑиÑаÑÐµÐ»Ñ ÑлекÑÑонной книги" + +#~ msgid "for Kindle" +#~ msgstr "Ð´Ð»Ñ Ðиндле" + +#~ msgid "for advanced usage" +#~ msgstr "пÑодвинÑÑое иÑполÑзование" + +#~ msgid "Listen" +#~ msgstr "ÐоÑлÑÑайÑе" + +#~ msgid "Table of contents" +#~ msgstr "Ðглавление" + +#~ msgid "Themes" +#~ msgstr "ÐоÑивÑ" + +#~ msgid "Edit. note" +#~ msgstr "ÐзмениÑÑ Ð¿ÑимеÑание" + +#~ msgid "Infobox" +#~ msgstr "ÐнÑобокÑ" + +#~ msgid "Book's page" +#~ msgstr "ÐозÑаÑиÑеÑÑ Ð½Ð° ÑÐ°Ð¹Ñ ÐºÐ½Ð¸Ð³Ð¸" + +#~ msgid "for a reader" +#~ msgstr "Ð´Ð»Ñ ÑиÑаÑелÑ" + +#, fuzzy +#~ msgid "for advanced usege" +#~ msgstr "пÑодвинÑÑÑй" + +#~ msgid "Download a custom PDF" +#~ msgstr "СкаÑаÑÑ PDF" + +#~ msgid "Motifs and themes" +#~ msgstr "ÐоÑÐ¸Ð²Ñ Ð¸ ÑемÑ" + +#~ msgid "See" +#~ msgstr "ÐоÑмоÑÑиÑе" + +#~ msgid "Source" +#~ msgstr "ÐÑÑоÑник" + +#~ msgid "of the book" +#~ msgstr "данной книги" + +#~ msgid "Source XML file" +#~ msgstr "ÐÑÑ Ð¾Ð´Ð½Ñй Ñайл" + +#~ msgid "Book on" +#~ msgstr "Ðнига на" + +#~ msgid "Editor's Platform" +#~ msgstr "ÐлаÑÑоÑма ÑедакÑоÑов" + +#~ msgid "Book description on Lektury.Gazeta.pl" +#~ msgstr "ÐпиÑание книги на Lektury.Gazeta.pl" + +#~ msgid "Book description on Wikipedia" +#~ msgstr "ÐпиÑание книги на Wikipedia" + +#~ msgid "Mix this book" +#~ msgstr "данной книги" + +#~ msgid "Download all audiobooks for this book" +#~ msgstr "СкаÑаÑÑ Ð²Ñе книги Ñ ÑÑой полки" + +#~ msgid "Catalogue" +#~ msgstr "ÐаÑалог" + +#~ msgid "Authors" +#~ msgstr "ÐвÑоÑÑ" + +#~ msgid "Kinds" +#~ msgstr "ФоÑмÑ" + +#~ msgid "Genres" +#~ msgstr "ÐанÑÑ" + +#~ msgid "Epochs" +#~ msgstr "ÐÐ¿Ð¾Ñ Ð¸" + +#~ msgid "Themes and topics" +#~ msgstr "ÐоÑÐ¸Ð²Ñ Ð¸ ÑемÑ" + +#~ msgid "Listing of all DAISY files" +#~ msgstr "СпиÑок вÑÐµÑ DAISY Ñайлов" + +#~ msgid "Latest DAISY audiobooks" +#~ msgstr "ÐоÑледние 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Å." +#~ msgstr "" +#~ "СиÑÑема DAISY ÑÑо извеÑÑнÑй во вÑем миÑе ÑоÑÐ¼Ð°Ñ Ð·Ð°Ð¿Ð¸Ñи книг\n" +#~ ", пÑедназнаÑен Ð´Ð»Ñ Ð»Ñдей Ñ Ð¿Ð»Ð¾Ñ Ð¸Ð¼ зÑением, Ð¿Ð»Ð¾Ñ Ð¾ видÑÑÐ¸Ñ Ð¸ дÑÑÐ³Ð¸Ñ Ð»Ð¸Ñ\n" +#~ ", имеÑÑÐ¸Ñ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ ÑÑением. Ðнигами можно полÑзоваÑÑÑÑ Ð±ÐµÑплаÑно и без " +#~ "огÑаниÑений." + +#~ msgid "" +#~ "The criteria are ambiguous. Please select one of the following options:" +#~ msgstr "" +#~ "ÐÑиÑеÑÐ¸Ñ ÑвлÑÑÑÑÑ Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°ÑнÑми. ÐожалÑйÑÑа, вÑбеÑиÑе один из ÑледÑÑÑÐ¸Ñ " +#~ "ваÑианÑов:" + +#~ msgid "Shelves containing fragment" +#~ msgstr "Ðолки Ñ ÑÑагменÑом" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "У Ð²Ð°Ñ Ð½ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð¹ полки. ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð¾Ð´Ð½Ñ Ð½Ð¸Ð¶Ðµ." + +#~ msgid "Save all shelves" +#~ msgstr "Ð¡Ð¾Ñ ÑаниÑÑ Ð²Ñе полки" + +#~ msgid "Expand fragment" +#~ msgstr "РаÑÑÑнÑÑÑ ÑÑагменÑ" + +#~ msgid "Hide fragment" +#~ msgstr "СкÑÑÑÑ ÑÑагменÑ" + +#~ msgid "See full category" +#~ msgstr "ÐÑÑ ÐºÐ°ÑегоÑиÑ" + +#~ msgid "All books" +#~ msgstr "ÐÑе книги" + +#~ msgid "Audiobooks" +#~ msgstr "ÐÑдиокниги" + +#~ msgid "DAISY" +#~ msgstr "ÐаиÑÑ" + +#~ msgid "Work is licensed under " +#~ msgstr "РазÑеÑение на ÑабоÑÑ Ñо ÑÑоÑонÑ" + +#~ msgid "Based on" +#~ msgstr "ÐÑнованнÑй на" + +#~ msgid "Details" +#~ msgstr "ÐодÑобнее" + +#~ msgid "Author" +#~ msgstr "ÐвÑоÑ" + +#~ msgid "Other resources" +#~ msgstr "дÑÑгие ÑеÑÑÑÑÑ" + +#~ msgid "Source of the image" +#~ msgstr "ÐÑÑоÑник книги" + +#~ msgid "Image on the Editor's Platform" +#~ msgstr "ÐзобÑажение на плаÑÑоÑме ÑедакÑоÑов" + +#~ msgid "View XML source" +#~ msgstr "ÐÑоÑмоÑÑ XML-иÑÑоÑник" + +#~ msgid "Work's themes " +#~ msgstr "Ð¢ÐµÐ¼Ñ ÑÑÑда" + +#~ msgid "Listing of all pictures" +#~ msgstr "СпиÑок ÑабоÑ" + +#~ msgid "Download as" +#~ msgstr "СкаÑаÑÑ" + +#~ msgid "Artist" +#~ msgstr "ÐÑÑиÑÑ" + +#~ msgid "Director" +#~ msgstr "ÑежиÑÑеÑ" + +#~ msgid "Audiobooks were prepared as a part of the projects:" +#~ msgstr "ÐÑдиокниги бÑли подгоÑÐ¾Ð²Ð»ÐµÐ½Ñ Ð² ÑÐ°Ð¼ÐºÐ°Ñ Ð¿ÑоекÑа:" + +#~ msgid "%(cs)s, funded by %(fb)s" +#~ msgstr "%(cs)s, ÑинанÑиÑÑемого %(fb)s" + +#~ msgid "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +#~ msgstr "" +#~ "ÐÑдиокниги бÑли подгоÑÐ¾Ð²Ð»ÐµÐ½Ñ Ð² ÑÐ°Ð¼ÐºÐ°Ñ %(cs)s пÑоекÑa, ÑинанÑиÑÑемого %(fb)" +#~ "s." + +#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." +#~ msgstr "ÐÑдиокниги бÑли подгоÑÐ¾Ð²Ð»ÐµÐ½Ñ Ð² ÑÐ°Ð¼ÐºÐ°Ñ %(cs)s пÑоекÑa." + +#~ msgid "Did you mean" +#~ msgstr "ÐÑ Ð¸Ð¼ÐµÐ»Ð¸ в видÑ" + +#~ msgid "Results by authors" +#~ msgstr "РезÑлÑÑаÑÑ Ð¿Ð¾ авÑоÑам" + +#~ msgid "Results by title" +#~ msgstr "РезÑлÑÑаÑÑ Ð¿Ð¾ заглавиÑм" + +#~ msgid "Results in text" +#~ msgstr "РезÑлÑÑаÑÑ Ð² ÑекÑÑÐ°Ñ " + +#~ msgid "Other results" +#~ msgstr "дÑÑгие ÑеÑÑÑÑÑ" + +#~ msgid "Sorry! Search cirteria did not match any resources." +#~ msgstr "ÐзвиниÑе! ÐÑиÑеÑий поиÑка не ÑооÑвеÑÑÑвÑÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ð¼ ÑеÑÑÑÑам." + +#~ msgid "" +#~ "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 "" +#~ "ÐÑкаÑÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ Ð´Ð²Ð¸Ð³Ð°ÑÐµÐ»Ñ Ð¸ÑполÑзÑÑ ÐºÑиÑеÑии: заглавие, авÑоÑ, Ñема/" +#~ "ÑÑжеÑ, ÑÐ¿Ð¾Ñ Ð°, ÑоÑма и жанÑ.\n" +#~ "\t\tÐока Ð¼Ñ Ð½Ðµ поддеÑживаем поиÑка вÑего ÑекÑÑа." + +#~ msgid "Sorry! Search query must have at least two characters." +#~ msgstr "" +#~ "ÐзвиниÑе! У иÑкаемого вопÑоÑа Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿Ð¾ кÑайней меÑе два ÑвойÑÑва." + +#~ msgid "in Lektury.Gazeta.pl" +#~ msgstr "на Lektury.Gazeta.pl" + +#~ msgid "in Wikipedia" +#~ msgstr "в Ðикипедии" + +#~ msgid "Your shelves with books" +#~ msgstr "ÐаÑи книжнÑе полки" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "У Ð²Ð°Ñ Ð½ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ Ð¿Ð¾Ð»Ð¾Ðº. ÐÑли Ñ Ð¾ÑиÑе, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð¾Ð´Ð½Ñ Ð½Ð¸Ð¶Ðµ." + +#~ msgid "Create shelf" +#~ msgstr "СоздаÑÑ Ð¿Ð¾Ð»ÐºÑ" + +#~ msgid "author" +#~ msgstr "авÑоÑ" + +#~ msgid "Hand-outs for teachers" +#~ msgstr "ХендаÑÑÑ Ð´Ð»Ñ ÑÑиÑелей" + +#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" +#~ msgstr "ЧиÑаÑÑ Ð¾ÑеÑк пÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ авÑоÑа на Lektury.Gazeta.pl" + +#~ msgid "Read article about this author on Wikipedia" +#~ msgstr "ÐÑоÑиÑайÑе ÑÑаÑÑÑ Ð¾Ð± авÑоÑе в Ðикипедии" + +#~ msgid "This author's works are copyrighted." +#~ msgstr "Ðа ÑабоÑÑ ÑÑого авÑоÑа ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð°Ð²ÑоÑÑкое пÑаво." + +#~ msgid "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries can't publish this author's works." +#~ msgstr "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" +#~ "publiczna/'>УзнайÑе</a>, поÑÐµÐ¼Ñ Ð¸Ð½ÑеÑнеÑ-библиоÑеки не могÑÑ Ð¸Ð·Ð´Ð°ÑÑ ÑÐ°Ð±Ð¾Ñ " +#~ "ÑÑого авÑоÑа." + +#~ msgid "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet school library of Wolne Lektury soon." +#~ msgstr "" +#~ "РабоÑÑ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ авÑоÑа Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ Ð² пÑблиÑной облаÑÑи и ÑкоÑо бÑдÑÑ Ð¸Ð·Ð´Ð°Ð½Ñ " +#~ "в ÑколÑной библиоÑеке ÐнÑеÑнеÑа." + +#~ msgid "" +#~ "This author's works will become part of public domain and will be allowed " +#~ "to be published without restrictions in" +#~ msgstr "" +#~ "ТÑÑÐ´Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ авÑоÑа бÑдÑÑ ÑаÑÑÑÑ Ð¿ÑблиÑной облаÑÑи и возможнÑм бÑÐ´ÐµÑ Ð¸Ñ " +#~ "издание без огÑаниÑений на" + +#~ msgid "" +#~ "This work is in public domain and will be published on Internet school " +#~ "library of Wolne Lektury soon." +#~ msgstr "" +#~ "ÐÑÐ¾Ñ ÑÑÑд Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² пÑблиÑной облаÑÑи. ÐÑ ÑкоÑо помеÑÑим его в ÑколÑной " +#~ "библиоÑеке Wolne Lektury." + +#~ msgid "" +#~ "This work will become part of public domain and will be allowed to be " +#~ "published without restrictions in" +#~ msgstr "" +#~ "ÐÑÐ¾Ñ ÑÑÑд бÑÐ´ÐµÑ ÑаÑÑÑÑ Ð¿ÑблиÑной ÑÑеÑÑ. Ðго издание бÑÐ´ÐµÑ ÑазÑеÑено без " +#~ "огÑаниÑений" + +#~ msgid "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries can't publish this work." +#~ msgstr "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" +#~ "publiczna/'>УзнайÑе</a>, поÑÐµÐ¼Ñ Ð¸Ð½ÑеÑнеÑ-библиоÑеки не могÑÑ Ð¸Ð·Ð´Ð°ÑÑ ÑÑого " +#~ "ÑÑÑда." + +#~ msgid "This work is copyrighted." +#~ msgstr "Ðа ÑÑÑ ÑабоÑÑ ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð°Ð²ÑоÑÑкое пÑаво." + +#~ msgid "Login to Wolne Lektury" +#~ msgstr "ÐойÑи на WolneLektury.pl" + +#~ msgid "Login" +#~ msgstr "ÐойÑи" + +#~ msgid "" +#~ "Internet Explorer cannot display this site properly. Click here to read " +#~ "more..." +#~ msgstr "" +#~ "Internet Explorer не Ð¼Ð¾Ð¶ÐµÑ Ñ Ð¾ÑоÑо показаÑÑ ÑайÑа. ЩелкниÑе здеÑÑ, ÑÑÐ¾Ð±Ñ " +#~ "пÑоÑиÑаÑÑ Ð±Ð¾Ð»ÑÑе..." + +#~ msgid "Your shelves" +#~ msgstr "ÐаÑи полки" + +#~ msgid "Register on" +#~ msgstr "РегиÑÑÑаÑÐ¸Ñ Ð½Ð°" + +#~ msgid "or" +#~ msgstr "или" + +#~ msgid "return to main page" +#~ msgstr "возвÑÐ°Ñ Ð½Ð° главнÑÑ ÑÑÑаниÑÑ" + +#, fuzzy +#~ msgid "Listing of all audiobooks on WolneLektury.pl" +#~ msgstr "СпиÑок ÑÐ°Ð±Ð¾Ñ Ð½Ð° WolneLektury.pl" + +#~ msgid "Put a book" +#~ msgstr "ÐоÑÑавÑÑе книгÑ" + +#~ msgid "on the shelf!" +#~ msgstr "на полкÑ" + +#~ msgid "and printing using" +#~ msgstr "и Ð´Ð»Ñ Ð¿ÐµÑаÑки" + +#~ msgid "Download EPUB" +#~ msgstr "СкаÑаÑÑ EPUB" + +#~ msgid "Download TXT" +#~ msgstr "СкаÑаÑÑ TXT" + +#~ msgid "on small displays, for example mobile phones" +#~ msgstr "на маленÑÐºÐ¸Ñ Ð´Ð¸ÑплеÑÑ , напÑ. мобилÑнÑÑ ÑелеÑонов" + +#~ msgid "Download ODT" +#~ msgstr "СкаÑаÑÑ ODT" + +#~ msgid "and editing using" +#~ msgstr "и Ð´Ð»Ñ ÑедакÑиÑованиÑ" + +#~ msgid "Book on project's wiki" +#~ msgstr "Ðнига по пÑоекÑÑ Ð²Ð¸ÐºÐ¸" + +#~ msgid "on" +#~ msgstr "на" + +#~ msgid "See description" +#~ msgstr "ÐоÑмоÑÑиÑе опиÑание" + +#~ msgid "Listing of all works on WolneLektury.pl" +#~ msgstr "СпиÑок ÑÐ°Ð±Ð¾Ñ Ð½Ð° WolneLektury.pl" + +#~ msgid "Jump to" +#~ msgstr "ÐеÑейдиÑе на" + +#~ msgid "Categories" +#~ msgstr "ÐаÑегоÑии" + +#, fuzzy +#~ msgid "Listing of all DAISY files on WolneLektury.pl" +#~ msgstr "СпиÑок ÑÐ°Ð±Ð¾Ñ Ð½Ð° WolneLektury.pl" + +#~ msgid "Show full category" +#~ msgstr "ÐоказаÑÑ Ð²ÑÑ ÐºÐ°ÑегоÑиÑ" + +#~ msgid "Hide" +#~ msgstr "СкÑÑÑÑ" + +#~ msgid "Browse books by categories" +#~ msgstr "ÐÑоÑмаÑÑиваÑÑ ÐºÐ½Ð¸Ð³Ð¸ по каÑегоÑиÑм" + +#~ msgid "delete" +#~ msgstr "ÑдалиÑÑ" + +#~ msgid "" +#~ "Create your own book set. You can share it with friends by sending them " +#~ "link to your shelf." +#~ msgstr "" +#~ "СоздаÑÑ ÑобÑÑвеннÑй Ð½Ð°Ð±Ð¾Ñ ÐºÐ½Ð¸Ð³. ÐÑ Ð¼Ð¾Ð¶ÐµÑе делиÑÑÑÑ Ð¸Ð¼Ð¸ Ñо Ñвоими " +#~ "дÑÑзÑÑми, поÑÑÐ»Ð°Ñ ÑÑÑÐ»ÐºÑ Ð½Ð° ÑÐ²Ð¾Ñ Ð¿Ð¾Ð»ÐºÑ." + +#~ msgid "You need to " +#~ msgstr "Ðам Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾" + +#~ msgid "sign in" +#~ msgstr "ÐойÑи в ÑиÑÑемÑ," + +#~ msgid "to manage your shelves." +#~ msgstr "ÑÑÐ¾Ð±Ñ ÑпÑавлÑÑÑ Ñвоими полками" + +#~ msgid "" +#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." +#~ msgstr "" +#~ "ÐонÑпекÑÑ ÑÑоков и дÑÑгие идеи иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Wolnelektury.pl ÑÑиÑелÑми." + +#~ msgid "" +#~ "are professional recordings of literary texts from our repository, " +#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " +#~ "DAISY system." +#~ msgstr "" +#~ "- ÑÑо пÑоÑеÑÑионалÑнÑе запиÑи лиÑеÑаÑÑÑнÑÑ ÑекÑÑов из наÑего Ñ ÑанилиÑа. " +#~ "Ðни доÑÑÑÐ¿Ð½Ñ Ð¿Ð¾ беÑплаÑÐ½Ð¾Ð¼Ñ ÑазÑеÑÐµÐ½Ð¸Ñ ? в ÑоÑмаÑÐ°Ñ MP3 и Ogg Vorbis, а " +#~ "Ñакже в ÑиÑÑеме DAISY." + +#~ msgid "Themes groups" +#~ msgstr "ТемаÑиÑеÑкие гÑÑппÑ" + +#~ msgid "See our blog" +#~ msgstr "ÐоÑмоÑÑиÑе Ð½Ð°Ñ Ð±Ð»Ð¾Ð³" + +#~ msgid "You can help us!" +#~ msgstr "ÐÑ Ð¼Ð¾Ð¶ÐµÑе нам помоÑÑ!" + +#~ msgid "" +#~ "We try our best to elaborate works appended to our library. It is " +#~ "possible only due to support of our volunteers." +#~ msgstr "" +#~ "ÐÑ ÑÑÑемимÑÑ ÑÑаÑелÑно ÑазÑабаÑÑваÑÑ ÑÑÑдÑ, пÑибавлÑемÑе в наÑÑ " +#~ "библиоÑекÑ. ÐÑо ÑвлÑеÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñм ÑолÑко благодаÑÑ Ð¿Ð¾Ð¼Ð¾Ñи наÑÐ¸Ñ " +#~ "волонÑеÑов." + +#~ msgid "" +#~ "We invite people who want to take part in developing Internet school " +#~ "library Wolne Lektury." +#~ msgstr "" +#~ "ÐÑ Ð¿ÑиглаÑаем лÑдей, коÑоÑÑе Ñ Ð¾ÑÑÑ Ð¿ÑинÑÑÑ ÑÑаÑÑие в ÑазвиÑии ÑколÑной " +#~ "библиоÑеки ÐнÑеÑнеÑа Wolne Lektury." + +#~ msgid "About us" +#~ msgstr "РнаÑ" + +#~ msgid "" +#~ "\n" +#~ "\t\t\tInternet library with school readings âWolne Lekturyâ (<a href=" +#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) is a project made by " +#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " +#~ "which are recommended by Ministry of National Education and are in public " +#~ "domain.\n" +#~ "\t\t\t" +#~ msgstr "" +#~ "\n" +#~ "\t\t\tÐнÑеÑнеÑ-библиоÑека Ñо ÑколÑнÑми ÑÑениÑми âWolne Lekturyâ (<a href=" +#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) ÑвлÑеÑÑÑ Ð¿ÑоекÑом, " +#~ "ÑозданнÑм Ñондом СовÑеменной ÐолÑÑи. ÐейÑÑвÑÑ Ñ 2007 г., библиоÑека " +#~ "Ð´ÐµÐ»Ð°ÐµÑ Ð´Ð¾ÑÑÑпнÑми ÑколÑнÑе ÑÑÐµÐ½Ð¸Ñ Ð¿ÑблиÑного домена, пÑедлагаемÑе " +#~ "миниÑÑÑом наÑодного обÑазованиÑ. \n" +#~ "\t\t\t" + +#~ msgid "Searching in" +#~ msgstr "ÐÑкаÑÑ Ð²" + +#~ msgid "More than one result matching the criteria found." +#~ msgstr "ÐолÑÑе Ñем один кÑиÑеÑий ÑооÑвеÑÑÑвÑÐµÑ Ð½Ð°Ð¹Ð´ÐµÐ½Ð½Ñм кÑиÑеÑиÑм." + +#~ msgid "Search in WolneLektury.pl" +#~ msgstr "ÐÑкаÑÑ Ð² WolneLektury.pl" + +#~ msgid "Your shelf is empty" +#~ msgstr "У ÑÐµÐ±Ñ Ð¿ÑÑÑÐ°Ñ Ð¿Ð¾Ð»ÐºÐ°" + +#~ msgid "" +#~ "You can put a book on a shelf by entering page of the reading and " +#~ "clicking 'Put on the shelf'." +#~ msgstr "" +#~ "ÐÑ Ð¼Ð¾Ð¶ÐµÑе поÑÑавиÑÑ ÐºÐ½Ð¸Ð³Ñ Ð½Ð° полкÑ, Ð·Ð°Ñ Ð¾Ð´Ñ Ð½Ð° ÑÐ°Ð¹Ñ Ð¿ÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ " +#~ "ÑелкнÑв 'ÐоÑÑавиÑÑ Ð½Ð° полкÑ'." + +#~ msgid "Choose books' formats which you want to download:" +#~ msgstr "ÐÑбÑаÑÑ ÑоÑÐ¼Ð°Ñ ÐºÐ½Ð¸Ð³, коÑоÑÑе Ð²Ñ Ñ Ð¾ÑиÑе ÑкаÑаÑÑ:" + +#~ msgid "for listening" +#~ msgstr "Ð´Ð»Ñ ÑлÑÑаниÑ" + +#~ msgid "on favourite MP3 player" +#~ msgstr "на лÑбимом MP3-плейеÑе" + +#~ msgid "Xiph.org Foundation" +#~ msgstr "Фонд Xiph.org" + +#~ msgid "Updating list of books' formats on the shelf" +#~ msgstr "ÐбновиÑÑ ÑпиÑок ÑоÑмаÑов книг на полке" + +#~ msgid "cancel" +#~ msgstr "ÐÑмениÑÑ" + +#~ msgid "Share this shelf" +#~ msgstr "ÐелиÑÑ ÑÑÑ Ð¿Ð¾Ð»ÐºÑ" + +#~ msgid "" +#~ "Copy this link and share it with other people to let them see your shelf." +#~ msgstr "" +#~ "ÐопиÑоваÑÑ ÑÑÑ ÑÑÑÐ»ÐºÑ Ð¸ делиÑÑ Ñ Ð´ÑÑгими полÑзоваÑелÑми, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ могли " +#~ "ÑвидеÑÑ Ð²Ð°ÑÑ Ð¿Ð¾Ð»ÐºÑ." + +#, fuzzy +#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "ЧиÑаÑÑ Ð¾ÑеÑк пÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ авÑоÑа на Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "ЧиÑаÑÑ Ð¾ÑеÑк пÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ авÑоÑа на Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "ЧиÑаÑÑ Ð¾ÑеÑк пÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ авÑоÑа на Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read related study on Lektury.Gazeta.pl" +#~ msgstr "ЧиÑаÑÑ Ð¾ÑеÑк пÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ авÑоÑа на Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" +#~ msgstr "ÐÑоÑиÑайÑе ÑÑаÑÑÑ Ð¾Ð± авÑоÑе в Ðикипедии" + +#, fuzzy +#~ msgid "Read article about kind %(last_tag)s on Wikipedia" +#~ msgstr "ÐÑоÑиÑайÑе ÑÑаÑÑÑ Ð¾Ð± авÑоÑе в Ðикипедии" + +#, fuzzy +#~ msgid "Read article about genre %(last_tag)s on Wikipedia" +#~ msgstr "ÐÑоÑиÑайÑе ÑÑаÑÑÑ Ð¾Ð± авÑоÑе в Ðикипедии" + +#, fuzzy +#~ msgid "Read related article on Wikipedia" +#~ msgstr "ÐÑоÑиÑайÑе ÑÑаÑÑÑ Ð¾Ð± авÑоÑе в Ðикипедии" + +#~ msgid "Delete" +#~ msgstr "УдалиÑÑ" + +#~ msgid "return to the main page" +#~ msgstr "возвÑаÑиÑеÑÑ Ð½Ð° главнÑÑ ÑÑÑаниÑÑ" + +#~ msgid "return to list of materials" +#~ msgstr "возвÑаÑиÑеÑÑ Ðº ÑпиÑÐºÑ Ð¼Ð°ÑеÑиалов" + +#~ msgid "Hand-outs for teachers on " +#~ msgstr "Ñ ÐµÐ½Ð´Ð°ÑÑÑ Ð´Ð»Ñ ÑÑиÑелей на" + +#, fuzzy +#~ msgid "" +#~ "Download TXT - for reading on small displays, for example mobile phones" +#~ msgstr "на маленÑÐºÐ¸Ñ Ð´Ð¸ÑплеÑÑ , напÑ. мобилÑнÑÑ ÑелеÑонов" + +#~ msgid "Download MP3" +#~ msgstr "ÑкаÑаÑÑ MP3" + +#~ msgid "Download Ogg Vorbis" +#~ msgstr "СкаÑаÑÑ Ogg Vorbis" + +#~ msgid "Download DAISY" +#~ msgstr "СкаÑаÑÑ DAISY" + +#~ msgid "check list of books" +#~ msgstr "пÑовеÑиÑÑ ÑпиÑок книг" + +#~ msgid "in our repository" +#~ msgstr "в наÑем Ñ ÑанилиÑе" + +#~ msgid "Polish" +#~ msgstr "полÑÑкий" + +#~ msgid "German" +#~ msgstr "немеÑкий" + +#~ msgid "English" +#~ msgstr "английÑкий" + +#~ msgid "Lithuanian" +#~ msgstr "лиÑовÑкий" + +#~ msgid "French" +#~ msgstr "ÑÑанÑÑзÑкий" + +#~ msgid "Russian" +#~ msgstr "ÑÑÑÑкий" + +#~ msgid "Spanish" +#~ msgstr "иÑпанÑкий" + +#~ msgid "Ukrainian" +#~ msgstr "ÑкÑаинÑкий" + +#~ msgid "Choose your interface language: " +#~ msgstr "ÐÑбеÑиÑе ÑзÑк инÑеÑÑейÑа" + +#~ msgid "Choose language" +#~ msgstr "ÐÑбеÑиÑе ÑзÑк" + +#~ msgid "Hide description" +#~ msgstr "СкÑÑÑÑ Ð¾Ð¿Ð¸Ñание" + +#~ msgid "Read study of epoch" +#~ msgstr "ÐÑоÑиÑайÑе оÑеÑк ÑÐ¿Ð¾Ñ Ð¸" + +#~ msgid "Read article about epoch" +#~ msgstr "ÐÑоÑиÑайÑе ÑÑаÑÑÑ Ð¾Ð± ÑÐ¿Ð¾Ñ Ðµ" diff --git a/src/wolnelektury/locale/uk/LC_MESSAGES/django.mo b/src/wolnelektury/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..a49a72656 Binary files /dev/null and b/src/wolnelektury/locale/uk/LC_MESSAGES/django.mo differ diff --git a/src/wolnelektury/locale/uk/LC_MESSAGES/django.po b/src/wolnelektury/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..e6f50aaff --- /dev/null +++ b/src/wolnelektury/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,1092 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-12-16 09:20+0100\n" +"PO-Revision-Date: 2013-04-09 10:43+0100\n" +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: views.py:34 views.py:35 templates/superbase.html:85 +msgid "Sign in" +msgstr "УвÑйÑи" + +#: views.py:41 views.py:62 +#, python-format +msgid "Already logged in as user %(user)s" +msgstr "Ðи вже ÑвÑйÑли Ñк коÑиÑÑÑÐ²Ð°Ñ %(user)s" + +#: views.py:53 views.py:54 views.py:82 templates/superbase.html:89 +msgid "Register" +msgstr "ÐаÑеÑÑÑÑÑваÑиÑÑ" + +#: views.py:77 +msgid "You have to be logged in to continue" +msgstr "Щоб пÑодовжиÑи, ÑвÑйдÑÑÑ Ð² ÑвÑй акаÑнÑ." + +#: templates/404.html:5 +msgid "Page does not exist" +msgstr "СÑоÑÑнка не ÑÑнÑÑ" + +#: templates/404.html:10 +msgid "Page not found" +msgstr "СÑоÑÑÐ½ÐºÑ Ð½Ðµ знайдено" + +#: 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 "" +"Ðа жалÑ, ÑÑ ÑÑоÑÑнка не ÑÑнÑÑ. ÐÑÐ´Ñ Ð»Ð°Ñка, пеÑевÑÑÑе пÑавилÑнÑÑÑÑ Ð°Ð´ÑеÑи або " +"пеÑейдÑÑÑ Ð½Ð°" + +#: templates/404.html:14 +msgid "main page" +msgstr "головна ÑÑоÑÑнка" + +#: templates/500.html:6 templates/500.html.py:17 +msgid "Server error" +msgstr "Ðомилка ÑеÑвеÑа" + +#: templates/500.html:19 +msgid "" +"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " +"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a " +"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the " +"error.</p>" +msgstr "" +"<p>СÑоÑÑнка Wolnelektury.pl ÑимÑаÑово недоÑÑÑпна. РмÑжÑаÑÑ, ÑвÑйдÑÑÑ Ð½Ð° Ð½Ð°Ñ " +"<a href='http://nowoczesnapolska.org.pl'>блог</a>.</p> <p>ÐовÑдомÑе наÑÐ¸Ñ <a " +"href='mailto:fundacja@nowoczesnapolska.org.pl'>адмÑнÑÑÑÑаÑоÑÑв</a> пÑо " +"помилкÑ.</p>" + +#: templates/503.html:6 templates/503.html.py:17 +msgid "Service unavailable" +msgstr "ÐоÑлÑга недоÑÑÑпна" + +#: templates/503.html:19 +msgid "The Wolnelektury.pl site is currently unavailable due to maintainance." +msgstr "" +"У зв'ÑÐ·ÐºÑ Ð· ÑÐµÑ Ð½ÑÑними ÑобоÑами ÑеÑвÑÑ Wolnelektury.pl ÑимÑаÑово недоÑÑÑпний." + +#: templates/main_page.html:6 templates/main_page.html.py:7 +msgid "Wolne Lektury internet library" +msgstr "ÐлекÑÑонна бÑблÑоÑека WolneLektury.pl" + +#: templates/main_page.html:23 +msgid "What's new?" +msgstr "Що нового?" + +#: templates/main_page.html:31 +msgid "Recent publications" +msgstr "оÑÑÐ°Ð½Ð½Ñ Ð¿ÑблÑкаÑÑÑ" + +#: templates/main_page.html:41 +msgid "News" +msgstr "ÐовоÑÑÑ" + +#: templates/main_page.html:50 +msgid "Utilities" +msgstr "ÑÑилÑÑи" + +#: templates/main_page.html:53 +msgid "Report a bug or suggestion" +msgstr "ÐовÑдомиÑи пÑо Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑ Ð°Ð±Ð¾ надÑÑлаÑи ÑÐ²Ð¾Ñ Ð¿ÑопозиÑÑÑ" + +#: templates/main_page.html:56 +msgid "Download the catalogue in PDF format." +msgstr "ÐаванÑажиÑи каÑалог Ñ ÑоÑмаÑÑ PDF." + +#: templates/main_page.html:58 +msgid "Widget" +msgstr "ÐÑджеÑ" + +#: templates/main_page.html:59 +msgid "Missing a book?" +msgstr "Ðе знайÑли книжки?" + +#: templates/main_page.html:60 templates/publish_plan.html:4 +#: templates/publish_plan.html.py:8 +msgid "Publishing plan" +msgstr "Ðлан пÑблÑкаÑÑÑ" + +#: templates/main_page.html:71 +msgid "Information" +msgstr "ÑнÑоÑмаÑÑÑ" + +#: templates/main_page.html:73 +msgid "Privacy policy" +msgstr "" + +#: templates/main_page.html:98 +msgid "Image used:" +msgstr "ÐикоÑиÑÑано гÑаÑÑкÑ:" + +#: templates/superbase.html:18 +msgid "Wolne Lektury" +msgstr "Wolne Lektury" + +#: templates/superbase.html:55 +#, python-format +msgid "" +"\n" +" <a href='%(b)s'>%(c)s</a> free reading you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgid_plural "" +"\n" +" <a href='%(b)s'>%(c)s</a> free readings you have <a " +"href='%(r)s'>right to</a>\n" +" " +msgstr[0] "" +"\n" +" <a href='%(b)s'>%(c)s</a> безкоÑÑовний ÑекÑÑ, до Ñкого " +"маÑÑ <a href='%(r)s'>пÑаво</a>\n" +" " +msgstr[1] "" +"\n" +" <a href='%(b)s'>%(c)s</a> безкоÑÑÐ¾Ð²Ð½Ñ ÑекÑÑи, до ÑÐºÐ¸Ñ " +"маÑÑ <a href='%(r)s'>пÑаво</a>\n" +" " +msgstr[2] "" +"\n" +" <a href='%(b)s'>%(c)s</a> безкоÑÑÐ¾Ð²Ð½Ñ ÑекÑÑи, до ÑÐºÐ¸Ñ " +"маÑÑ <a href='%(r)s'>пÑаво</a>\n" +" " + +#: templates/superbase.html:66 +msgid "Welcome" +msgstr "ÐаÑкаво пÑоÑимо" + +#: templates/superbase.html:72 templates/user.html:12 +msgid "Password" +msgstr "ÐаÑолÑ" + +#: templates/superbase.html:73 templates/user.html:13 +msgid "E-mail" +msgstr "ÐлекÑÑонна адÑеÑа" + +#: templates/superbase.html:74 templates/user.html:14 +msgid "Social accounts" +msgstr "ÐблÑÐºÐ¾Ð²Ñ Ð·Ð°Ð¿Ð¸Ñи в ÑоÑÑалÑÐ½Ð¸Ñ Ð¼ÐµÑÐµÐ¶Ð°Ñ " + +#: templates/superbase.html:77 +msgid "My shelf" +msgstr "ÐÐ¾Ñ Ð¿Ð¾Ð»Ð¸ÑÑ" + +#: templates/superbase.html:79 +msgid "Administration" +msgstr "ÐдмÑнÑÑÑÑаÑÑÑ" + +#: templates/superbase.html:81 +msgid "Logout" +msgstr "ÐийÑи " + +#: templates/superbase.html:111 +msgid "Search" +msgstr "ÐоÑÑк" + +#: templates/superbase.html:131 +msgid "Language versions" +msgstr "ÐÐ¾Ð²Ð½Ñ Ð²ÐµÑÑÑÑ" + +#: templates/superbase.html:165 +msgid "" +"\n" +"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska." +"org.pl/\">Modern Poland Foundation</a>.\n" +"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/" +"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/" +"\">Biblioteka ÅlÄ ska</a> and <a href=\"http://www.bibliotekaelblaska.pl/" +"\">Biblioteka ElblÄ ska</a>, based on TNL, BÅ and BE resources.\n" +"\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tWolne Lektury Ñе пÑÐ¾ÐµÐºÑ <a href=\"http://nowoczesnapolska.org.pl/" +"\">Ð¤Ð¾Ð½Ð´Ñ Ð¡ÑÑаÑна ÐолÑÑа (Fundacja Nowoczesna Polska)</a>.\n" +"\t\t\t\tЦиÑÑÐ¾Ð²Ñ ÑепÑодÑкÑÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ñ <a href=\"http://www.bn.org.pl/" +"\">ÐаÑÑоналÑÐ½Ð¾Ñ ÐÑблÑоÑекоÑ</a>, <a href=\"http://www.bs.katowice.pl/" +"\">СÑлезÑÐºÐ¾Ñ Ð±ÑблÑоÑекоÑ</a> Ñа <a href=\"http://www.bibliotekaelblaska.pl/" +"\">ÐлÑблонзÑÐºÐ¾Ñ Ð±ÑблÑоÑекоÑ</a>, на оÑÐ½Ð¾Ð²Ñ ÑÑ Ð·Ð°ÑобÑв.\n" +"\t\t\t\tХоÑÑинг: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n" +"\t\t\t\t" + +#: templates/superbase.html:172 +msgid "" +"\n" +"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. MarszaÅkowska 84/92 " +"lok. 125, tel/fax: (22) 621-30-17\n" +" e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl" +"\">fundacja@nowoczesnapolska.org.pl</a>\n" +"\t\t\t\t" +msgstr "" +"\n" +"\t\t\t\tFundacja Nowoczesna Polska (Фонд СÑÑаÑна ÐолÑÑа), 00-514 Warszawa, " +"ul. MarszaÅkowska 84/92 lok. 125, Ñел/ÑакÑ: (22) 621-30-17\n" +" eлекÑÑонна поÑÑа: <a href=\"mailto:fundacja@nowoczesnapolska." +"org.pl\">fundacja@nowoczesnapolska.org.pl</a>\n" +"\t\t\t\t" + +#: templates/superbase.html:189 +msgid "Close" +msgstr "ÐакÑиÑи" + +#: templates/superbase.html:191 +msgid "Loading" +msgstr "ÐаванÑажÑÑÑÑÑÑ" + +#: templates/user.html:5 templates/user.html.py:9 +msgid "User" +msgstr "ÐоÑиÑÑÑваÑ" + +#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7 +msgid "Site administration" +msgstr "ÐдмÑнÑÑÑÑаÑÑÑ ÑайÑÑ" + +#: templates/admin/base_site.html:9 +msgid "Translations" +msgstr "ÐеÑеклади" + +#: templates/admin/catalogue/book/change_form.html:6 +#: templates/admin/catalogue/book/change_form.html:35 +msgid "advanced" +msgstr "ÑозÑиÑений" + +#: templates/admin/catalogue/book/change_form.html:33 +msgid "simplified" +msgstr "ÑпÑоÑений" + +#: templates/admin/catalogue/book/change_list.html:7 +msgid "Import book" +msgstr "ÐмпоÑÑÑваÑи книжкÑ" + +#: templates/auth/login.html:10 +msgid "Forgot Password?" +msgstr "ÐабÑли паÑолÑ?" + +#: templates/auth/login.html:15 templates/auth/register.html:7 +msgid "Sign in using:" +msgstr "УвÑйÑи за допомогоÑ:" + +#: templates/auth/login_register.html:9 +msgid "or register" +msgstr "або заÑеÑÑÑÑÑваÑиÑÑ" + +#: templates/info/join_us.html:6 +#, python-format +msgid "" +"\n" +"We have %(c)s work published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgid_plural "" +"\n" +"We have %(c)s works published in Wolne Lektury!\n" +"Help us expand the library and set new readings free by\n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">making a donation\n" +"or transferring 1% of your income tax</a>.\n" +msgstr[0] "" +"\n" +"Ðа ÑайÑÑ Wolne Lektury опÑблÑковано вже %(c)s ÑвÑÑ!\n" +"ÐопоможÑÑÑ Ð½Ð°Ð¼ ÑозвиваÑи бÑблÑоÑÐµÐºÑ Ñ Ð½Ð°Ð´Ð°Ð²Ð°Ñи доÑÑÑп до Ð½Ð¾Ð²Ð¸Ñ ÑвоÑÑв - \n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">пеÑекажÑÑÑ Ð½Ð°Ð¼ " +"благодÑйний внеÑок\n" +"або 1% ваÑого подаÑÐºÑ Ð½Ð° пÑибÑÑок.</a>.\n" +msgstr[1] "" +"\n" +"Ðа ÑайÑÑ Wolne Lektury опÑблÑковано вже %(c)s ÑвоÑÑв!\n" +"ÐопоможÑÑÑ Ð½Ð°Ð¼ ÑозвиваÑи бÑблÑоÑÐµÐºÑ Ñ Ð½Ð°Ð´Ð°Ð²Ð°Ñи доÑÑÑп до Ð½Ð¾Ð²Ð¸Ñ ÑвоÑÑв - \n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">пеÑекажÑÑÑ Ð½Ð°Ð¼ " +"благодÑйний внеÑок\n" +"або 1% ваÑого подаÑÐºÑ Ð½Ð° пÑибÑÑок.</a>.\n" +msgstr[2] "" +"\n" +"Ðа ÑайÑÑ Wolne Lektury опÑблÑковано вже %(c)s ÑвÑÑ!\n" +"ÐопоможÑÑÑ Ð½Ð°Ð¼ ÑозвиваÑи бÑблÑоÑÐµÐºÑ Ñ Ð½Ð°Ð´Ð°Ð²Ð°Ñи доÑÑÑп до Ð½Ð¾Ð²Ð¸Ñ ÑвоÑÑв - \n" +"<a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">пеÑекажÑÑÑ Ð½Ð°Ð¼ " +"благодÑйний внеÑок\n" +"або 1% ваÑого подаÑÐºÑ Ð½Ð° пÑибÑÑок.</a>.\n" + +#: templates/info/join_us.html:20 +msgid "" +"Become an editor of Wolne Lektury! Find out if\n" +"we're currently working on a reading you're looking for and prepare\n" +"a publication by yourself by logging into the Editorial Platform." +msgstr "" +"СÑÐ°Ð½Ñ ÑедакÑоÑом Wolne Lektury! ÐÑзнайÑÑ Ñи\n" +"ми вже пÑаÑÑÑмо над ÑекÑÑом, Ñкого ÑÑкаÑÑ Ñа Ñам пÑдгоÑÑй\n" +"пÑблÑкаÑÑÑ, ÑеÑÑÑÑÑÑÑиÑÑ Ð½Ð° РедакÑоÑÑÑкÑй плаÑÑоÑмÑ." + +#: templates/info/join_us.html:23 +msgid "More..." +msgstr "ÐÑлÑÑе..." + +#: templates/openid/login.html:6 templates/openid/login.html.py:10 +msgid "OpenID Sign In" +msgstr "УвÑйÑи за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ OpenID" + +#: templates/openid/login.html:27 +msgid "Sign In" +msgstr "УвÑйÑи" + +#: templates/pagination/pagination.html:5 +#: templates/pagination/pagination.html:7 +msgid "previous" +msgstr "попеÑеднÑ" + +#: templates/pagination/pagination.html:21 +#: templates/pagination/pagination.html:23 +msgid "next" +msgstr "наÑÑÑпна" + +#: templates/piston/authorize_token.html:4 +#: templates/piston/authorize_token.html:7 +msgid "Authorize access to Wolne Lektury" +msgstr "ÐвÑоÑизÑваÑи доÑÑÑп до Wolne Lektury" + +#: templates/piston/authorize_token.html:10 +#, python-format +msgid "" +"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</" +"strong>." +msgstr "" +"ÐÑдÑвеÑдиÑи, Ñоб авÑоÑизÑваÑи доÑÑÑп до Wolne Lektury вÑд ÑÐ¼ÐµÐ½Ñ ÐºÐ¾ÑиÑÑÑваÑа " +"<strong>%(user)s</strong>." + +#: templates/socialaccount/connections.html:5 +#: templates/socialaccount/connections.html:8 +msgid "Account Connections" +msgstr "Ðов'ÑÐ·Ð°Ð½Ñ Ð°ÐºÐ°ÑнÑи" + +#: templates/socialaccount/connections.html:12 +msgid "" +"You can sign in to your account using any of the following third party " +"accounts:" +msgstr "" +"ÐожеÑе ÑвÑйÑи Ñ ÐÐ°Ñ Ð°ÐºÐ°ÑÐ½Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ ÑнÑÐ¸Ñ Ð¾Ð±Ð»ÑÐºÐ¾Ð²Ð¸Ñ Ð·Ð°Ð¿Ð¸ÑÑв ÑÐ°ÐºÐ¸Ñ , Ñк:" + +#: templates/socialaccount/connections.html:36 +msgid "Remove" +msgstr "ÐидалиÑи" + +#: templates/socialaccount/connections.html:44 +msgid "" +"You currently have no social network accounts connected to this account." +msgstr "У ÐÐ°Ñ Ð½ÐµÐ¼Ð°Ñ Ð·Ð°Ñаз Ð¶Ð¾Ð´Ð½Ð¸Ñ Ð¾Ð±Ð»ÑÐºÐ¾Ð²Ð¸Ñ Ð·Ð°Ð¿Ð¸ÑÑв пов'ÑÐ·Ð°Ð½Ð¸Ñ Ð· Ñим акаÑнÑом." + +#: templates/socialaccount/connections.html:47 +msgid "Add a 3rd Party Account" +msgstr "ÐодаÑи ÑнÑий облÑковий Ð·Ð°Ð¿Ð¸Ñ " + +#: templates/socialaccount/login_cancelled.html:5 +#: templates/socialaccount/login_cancelled.html:9 +msgid "Login Cancelled" +msgstr "РеÑÑÑÑаÑÑÑ ÑкаÑовано" + +#: templates/socialaccount/login_cancelled.html:15 +#, python-format +msgid "" +"You decided to cancel logging in to our site using one of your exisiting " +"accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s" +"\">sign in</a>." +msgstr "" +"РеÑÑÑÑаÑÑÑ Ð½Ð° ÑайÑÑ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ ÑÑнÑÑÑого облÑкового запиÑÑ Ð±Ñло ÑкаÑовано. " +"ЯкÑо Ñе помилка, пеÑейдÑÑÑ Ð´Ð¾ ÑÑоÑÑнки <a href=\"%(login_url)s\">ÑеÑÑÑÑаÑÑÑ</" +"a>." + +#~ msgid "Listing of all audiobooks" +#~ msgstr "СпиÑок ÑÑÑÑ Ð°ÑдÑокниг" + +#~ msgid "Latest MP3 audiobooks" +#~ msgstr "ÐÑÑÐ°Ð½Ð½Ñ Ð°ÑдÑокниги MP3" + +#~ msgid "Latest Ogg Vorbis audiobooks" +#~ msgstr "ÐÑÑÐ°Ð½Ð½Ñ Ð°ÑдÑокниги Ogg Vorbis" + +#~ msgid "" +#~ "Audioteka lektur szkolnych fundacji Nowoczesna Polska.\n" +#~ "Możecie z niej korzystaÄ bezpÅatnie i bez ograniczeÅ.\n" +#~ "Audiobooki nagrywajÄ znani aktorzy, wÅród nich Danuta Stenka i Jan Peszek." +#~ msgstr "" +#~ "ÐÑдÑоÑека ÑкÑлÑÐ½Ð¾Ñ Ð»ÑÑеÑаÑÑÑи Ð¤Ð¾Ð½Ð´Ñ Ð¡ÑÑаÑна ÐолÑÑа (Fundacja Nowoczesna " +#~ "Polska).\n" +#~ "Ðожна Ð½ÐµÑ ÐºÐ¾ÑиÑÑÑваÑиÑÑ Ð±ÐµÐ·ÐºÐ¾ÑÑовно Ñ Ð±ÐµÐ· обмеженÑ.\n" +#~ "ÐÑдÑокниги заÑиÑÑÑÑÑ Ð²ÑÐ´Ð¾Ð¼Ñ Ð°ÐºÑоÑи, ÑеÑед ÑÐºÐ¸Ñ ÐанÑÑа СÑенка Ñа Ян ÐеÑек." + +#~ msgid "See also" +#~ msgstr "ÐивиÑиÑÑ Ñакож" + +#~ msgid "Theme" +#~ msgstr "Тема" + +#~ msgid "in work " +#~ msgstr "Ñ ÑвоÑÑ" + +#~ msgid "This work is licensed under:" +#~ msgstr "Цей ÑвÑÑ Ð´Ð¾ÑÑÑпний на ÑÐ¼Ð¾Ð²Ð°Ñ Ð»ÑÑензÑÑ:" + +#~ msgid "" +#~ "This work isn't covered by copyright and is part of the\n" +#~ " public domain, which means it can be freely used, published and\n" +#~ " distributed. If there are any additional copyrighted materials\n" +#~ " provided with this work (such as annotations, motifs etc.), " +#~ "those\n" +#~ " materials are licensed under the \n" +#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" +#~ "\">Creative Commons Attribution-ShareAlike 3.0</a>\n" +#~ " license." +#~ msgstr "" +#~ "Цей ÑвÑÑ Ð½Ðµ Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом Ñ Ñ ÑаÑÑиноÑ\n" +#~ " ÑÑÑпÑлÑного надбаннÑ, ÑÐ¾Ð¼Ñ Ð¹Ð¾Ð³Ð¾ можна викоÑиÑÑовÑваÑи без " +#~ "обмеженÑ, пÑблÑкÑваÑи, Ñа\n" +#~ " ÑозповÑÑджÑваÑи. ЯкÑо ÑвÑÑ Ð¼ÑÑÑиÑÑ Ð´Ð¾Ð´Ð°ÑÐºÐ¾Ð²Ñ Ð¼Ð°ÑеÑÑали, коÑÑÑ " +#~ "Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом\n" +#~ " (напÑиклад пÑимÑÑки, моÑиви, ÑоÑо), доÑÑÑп до ÑÐ¸Ñ \n" +#~ " додаÑÐºÐ¾Ð²Ð¸Ñ Ð¼Ð°ÑеÑÑалÑв надаÑÑÑÑÑ Ð½Ð° ÑÐ¼Ð¾Ð²Ð°Ñ Ð»ÑÑензÑÑ \n" +#~ " <a href=\"http://creativecommons.org/licenses/by-sa/3.0/" +#~ "\">Creative Commons Ðз зазнаÑеннÑм ÑÐ¼ÐµÐ½Ñ Ð°Ð²ÑоÑа â Ðа ÑÐ¸Ñ Ð¶Ðµ ÑÐ¼Ð¾Ð²Ð°Ñ 3.0</" +#~ "a>\n" +#~ " ." + +#~ msgid "Text prepared based on:" +#~ msgstr "ТекÑÑ Ð¿ÑдгоÑовлено на оÑновÑ:" + +#~ msgid "Edited and annotated by:" +#~ msgstr "РедагÑÐ²Ð°Ð½Ð½Ñ Ñа пÑимÑÑки:" + +#~ msgid "Listing of all works" +#~ msgstr "СпиÑок ÑÑÑÑ ÑвоÑÑв" + +#~ msgid "Table of Content" +#~ msgstr "ÐмÑÑÑ" + +#~ msgid "â top â" +#~ msgstr "â вгоÑÑ â" + +#~ msgid "Put a book on the shelf!" +#~ msgstr "ÐоклаÑÑи ÐºÐ½Ð¸Ð¶ÐºÑ Ð½Ð° полиÑÑ!" + +#~ msgid "Create new shelf" +#~ msgstr "СÑвоÑиÑи Ð½Ð¾Ð²Ñ Ð¿Ð¾Ð»Ð¸ÑÑ" + +#~ msgid "" +#~ "You do not have any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "Ð Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ Ð¶Ð¾Ð´Ð½Ð¸Ñ Ð¿Ð¾Ð»Ð¸ÑÑ. ÐижÑе ви можеÑе ÑÑвоÑиÑи полиÑÑ, ÑкÑо бажаÑÑе." + +#~ msgid "Put on the shelf!" +#~ msgstr "ÐоклаÑÑи на полиÑÑ!" + +#~ msgid "Epoch" +#~ msgstr "ÐÐ¿Ð¾Ñ Ð°" + +#~ msgid "Kind" +#~ msgstr "Ð Ñд" + +#~ msgid "Genre" +#~ msgstr "ÐанÑ" + +#~ msgid "Read online" +#~ msgstr "ЧиÑаÑи онлайн" + +#~ msgid "Download" +#~ msgstr "ÐаванÑажиÑи" + +#~ msgid "to print" +#~ msgstr "дÑÑкÑваÑи" + +#~ msgid "for an e-book reader" +#~ msgstr "Ð´Ð»Ñ ÑнÑеÑнеÑного ÑиÑаÑа" + +#~ msgid "for Kindle" +#~ msgstr "Ð´Ð»Ñ Kindle" + +#~ msgid "for advanced usage" +#~ msgstr "Ð´Ð»Ñ Ð´Ð¾ÑвÑÑеного коÑиÑÑÑваÑа" + +#~ msgid "Listen" +#~ msgstr "СлÑÑ Ð°Ñи" + +#~ msgid "Table of contents" +#~ msgstr "ÐмÑÑÑ" + +#~ msgid "Themes" +#~ msgstr "Теми" + +#~ msgid "Edit. note" +#~ msgstr "ÐоменÑÐ°Ñ ÑедакÑоÑа" + +#~ msgid "Infobox" +#~ msgstr "ÐнÑобокÑ" + +#~ msgid "Book's page" +#~ msgstr "СÑоÑÑнка книжки" + +#~ msgid "for a reader" +#~ msgstr "Ð´Ð»Ñ ÑиÑаÑа" + +#, fuzzy +#~ msgid "for advanced usege" +#~ msgstr "ÑозÑиÑений" + +#~ msgid "Download a custom PDF" +#~ msgstr "ÐаванÑажиÑи PDF" + +#~ msgid "Motifs and themes" +#~ msgstr "ÐоÑиви Ñа Ñеми" + +#~ msgid "See" +#~ msgstr "ÐивиÑиÑÑ" + +#~ msgid "Source" +#~ msgstr "ÐжеÑело" + +#~ msgid "of the book" +#~ msgstr "книжки" + +#~ msgid "Source XML file" +#~ msgstr "ÐÐ¸Ñ Ñдний Ñайл XML" + +#~ msgid "Book on" +#~ msgstr "Ðнижка на" + +#~ msgid "Editor's Platform" +#~ msgstr "РедакÑоÑÑÑка плаÑÑоÑма" + +#~ msgid "Book description on Lektury.Gazeta.pl" +#~ msgstr "ÐÐ¿Ð¸Ñ ÐºÐ½Ð¸Ð¶ÐºÐ¸ на Lektury.Gazeta.pl" + +#~ msgid "Book description on Wikipedia" +#~ msgstr "ÐÐ¿Ð¸Ñ ÐºÐ½Ð¸Ð¶ÐºÐ¸ Ñ ÐÑкÑпедÑÑ" + +#~ msgid "Mix this book" +#~ msgstr "ÐÑкÑÑваÑи ÑÑ ÐºÐ½Ð¸Ð¶ÐºÑ" + +#~ msgid "Download all audiobooks for this book" +#~ msgstr "ÐаванÑажиÑи вÑÑ Ð°ÑдÑокниги Ð´Ð»Ñ ÑÑÑÑ ÐºÐ½Ð¸Ð¶ÐºÐ¸" + +#~ msgid "Catalogue" +#~ msgstr "ÐаÑалог" + +#~ msgid "Authors" +#~ msgstr "ÐвÑоÑи" + +#~ msgid "Kinds" +#~ msgstr "Роди" + +#~ msgid "Genres" +#~ msgstr "ÐанÑи" + +#~ msgid "Epochs" +#~ msgstr "ÐÐ¿Ð¾Ñ Ð¸" + +#~ msgid "Themes and topics" +#~ msgstr "Теми Ñа моÑиви" + +#~ msgid "Listing of all DAISY files" +#~ msgstr "СпиÑок ÑÑÑÑ ÑайлÑв DAISY" + +#~ msgid "Latest DAISY audiobooks" +#~ msgstr "ÐÑÑÐ°Ð½Ð½Ñ Ð°ÑдÑокниги 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Å." +#~ msgstr "" +#~ "СиÑÑема DAISY Ñе визнаний Ñ Ð²ÑÑÐ¾Ð¼Ñ ÑвÑÑÑ ÑоÑÐ¼Ð°Ñ Ð½Ð°Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð¾ÑÑÑÐ¿Ñ Ð´Ð¾ " +#~ "книжок,\n" +#~ "коÑÑий вÑдповÑÐ´Ð°Ñ Ð¿Ð¾ÑÑебам оÑÑб ÑлабозоÑÐ¸Ñ , ÑлÑÐ¿Ð¸Ñ , а Ñакож ÑнÑÐ¸Ñ Ð¾ÑÑб,\n" +#~ "ÑÐºÑ Ð¼Ð°ÑÑÑ ÑÑÑдноÑÑ Ð· ÑиÑаннÑм. ÐожеÑе ними коÑиÑÑÑваÑиÑÑ Ð±ÐµÐ·ÐºÐ¾ÑÑовно Ñ " +#~ "без обмеженÑ." + +#~ msgid "" +#~ "The criteria are ambiguous. Please select one of the following options:" +#~ msgstr "ÐибÑÐ°Ð½Ñ ÐºÑиÑеÑÑÑ Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°ÑнÑ. ÐибеÑÑÑÑ Ð¾Ð´Ð¸Ð½ з наÑÑÑÐ¿Ð½Ð¸Ñ Ð²Ð°ÑÑанÑÑв:" + +#~ msgid "Shelves containing fragment" +#~ msgstr "ÐолиÑÑ, ÑÐºÑ Ð¼ÑÑÑÑÑÑ ÑÑагменÑ" + +#~ msgid "" +#~ "You do not own any shelves. You can create one below, if you want to." +#~ msgstr "" +#~ "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ Ð¶Ð¾Ð´Ð½Ð¸Ñ Ð¿Ð¾Ð»Ð¸ÑÑ. ÐижÑе ви можеÑе ÑÑвоÑиÑи полиÑÑ, ÑкÑо бажаÑÑе." + +#~ msgid "Save all shelves" +#~ msgstr "ÐбеÑегÑи вÑÑ Ð¿Ð¾Ð»Ð¸ÑÑ" + +#~ msgid "Expand fragment" +#~ msgstr "ÐоказаÑи ÑÑагменÑ" + +#~ msgid "Hide fragment" +#~ msgstr "Ð¡Ñ Ð¾Ð²Ð°Ñи ÑÑагменÑ" + +#~ msgid "See full category" +#~ msgstr "ÐивиÑиÑÑ Ð²ÑÑ ÐºÐ°ÑегоÑÑÑ" + +#~ msgid "All books" +#~ msgstr "ÐÑÑ ÐºÐ½Ð¸Ð¶ÐºÐ¸" + +#~ msgid "Audiobooks" +#~ msgstr "ÐÑдÑокниги" + +#~ msgid "DAISY" +#~ msgstr "DAISY" + +#~ msgid "Work is licensed under " +#~ msgstr "ТвÑÑ Ð½Ð° ÑÐ¼Ð¾Ð²Ð°Ñ Ð»ÑÑензÑÑ" + +#~ msgid "Based on" +#~ msgstr "Ðа оÑновÑ" + +#~ msgid "Details" +#~ msgstr "ÐодÑобиÑÑ" + +#~ msgid "Author" +#~ msgstr "ÐвÑоÑ" + +#~ msgid "Other resources" +#~ msgstr "ÐнÑÑ Ð·Ð°Ñоби" + +#~ msgid "Source of the image" +#~ msgstr "ÐжеÑело гÑаÑÑки" + +#~ msgid "Image on the Editor's Platform" +#~ msgstr "ÐÑаÑÑка на РедакÑоÑÑÑкÑй плаÑÑоÑмÑ" + +#~ msgid "View XML source" +#~ msgstr "ÐивиÑиÑÑ Ð²Ð¸Ñ Ñдний XML" + +#~ msgid "Work's themes " +#~ msgstr "Теми ÑвоÑÑ" + +#~ msgid "Listing of all pictures" +#~ msgstr "СпиÑок вÑÑÑ Ð³ÑаÑÑк" + +#~ msgid "Download as" +#~ msgstr "ÐаванÑажиÑи Ñк" + +#~ msgid "Artist" +#~ msgstr "ÐиÑеÑÑ" + +#~ msgid "Director" +#~ msgstr "РежиÑеÑ" + +#~ msgid "Audiobooks were prepared as a part of the projects:" +#~ msgstr "ÐÑдÑокниги вигоÑовлено в ÑÐ°Ð¼Ð°Ñ Ð¿ÑоекÑÑв:" + +#~ msgid "%(cs)s, funded by %(fb)s" +#~ msgstr "%(cs)s, ÑÑнанÑованого з коÑÑÑв %(fb)s" + +#~ msgid "" +#~ "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s." +#~ msgstr "" +#~ "ÐÑдÑокниги вигоÑовлено в ÑÐ°Ð¼Ð°Ñ Ð¿ÑоекÑÑ %(cs)s, ÑÑнанÑованого з коÑÑÑв " +#~ "%(fb)s." + +#~ msgid "Audiobooks were prepared as a part of the %(cs)s project." +#~ msgstr "ÐÑдÑокниги вигоÑовлено в ÑÐ°Ð¼Ð°Ñ Ð¿ÑоекÑÑ %(cs)s." + +#~ msgid "Did you mean" +#~ msgstr "Чи йдеÑÑÑÑ Ð¿Ñо" + +#~ msgid "Results by authors" +#~ msgstr "РезÑлÑÑаÑи за авÑоÑом" + +#~ msgid "Results by title" +#~ msgstr "РезÑлÑÑаÑи за заголовком" + +#~ msgid "Results in text" +#~ msgstr "РезÑлÑÑаÑи в ÑекÑÑÑ" + +#~ msgid "Other results" +#~ msgstr "ÐнÑÑ ÑезÑлÑÑаÑи" + +#~ msgid "Sorry! Search cirteria did not match any resources." +#~ msgstr "Ðа жалÑ, кÑиÑеÑÑÑм поÑÑÐºÑ Ð½Ðµ вÑдповÑÐ´Ð°Ñ Ð¶Ð¾Ð´ÐµÐ½ ÑезÑлÑÑаÑ." + +#~ msgid "" +#~ "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 "" +#~ "РпоÑÑковÑй ÑиÑÑÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¸Ð¹ поÑÑк за кÑиÑеÑÑÑми: авÑоÑ, Ñема/моÑив, " +#~ "ÐµÐ¿Ð¾Ñ Ð°, ÑÑд Ñа жанÑ.\n" +#~ "\t\tÐоки Ñо неможливий поÑÑк в ÑÑÐ»Ð¾Ð¼Ñ ÑекÑÑÑ." + +#~ msgid "Sorry! Search query must have at least two characters." +#~ msgstr "Ðа жалÑ, Ð´Ð»Ñ Ð¿Ð¾ÑÑÐºÑ Ð¿Ð¾ÑÑÑбно ввеÑÑи ÑонайменÑе два знаки." + +#~ msgid "in Lektury.Gazeta.pl" +#~ msgstr "на Lektury.Gazeta.pl" + +#~ msgid "in Wikipedia" +#~ msgstr "Ñ ÐÑкÑпедÑÑ" + +#~ msgid "Your shelves with books" +#~ msgstr "ÐаÑÑ Ð¿Ð¾Ð»Ð¸ÑÑ Ð· книжками" + +#~ msgid "You do not own any shelves. You can create one below if you want to" +#~ msgstr "" +#~ "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ Ð¶Ð¾Ð´Ð½Ð¸Ñ Ð¿Ð¾Ð»Ð¸ÑÑ. ÐижÑе ви можеÑе ÑÑвоÑиÑи полиÑÑ, ÑкÑо бажаÑÑе" + +#~ msgid "Create shelf" +#~ msgstr "СÑвоÑиÑи полиÑÑ" + +#~ msgid "author" +#~ msgstr "авÑоÑ" + +#~ msgid "Hand-outs for teachers" +#~ msgstr "ÐаÑеÑÑали Ð´Ð»Ñ Ð²ÑиÑелÑв" + +#~ msgid "Read work's study of this author on Lektury.Gazeta.pl" +#~ msgstr "ÐÑоÑиÑаÑи обговоÑÐµÐ½Ð½Ñ ÑÑого авÑоÑа на Lektury.Gazeta.pl" + +#~ msgid "Read article about this author on Wikipedia" +#~ msgstr "ÐÑоÑиÑаÑи ÑÑаÑÑÑ Ð¿Ñо ÑÑого авÑоÑа Ñ ÐÑкÑпедÑÑ" + +#~ msgid "This author's works are copyrighted." +#~ msgstr "ТвоÑи ÑÑого авÑоÑа Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом." + +#~ msgid "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries can't publish this author's works." +#~ msgstr "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" +#~ "publiczna/'>ÐÑзнаÑиÑÑ</a> ÑÐ¾Ð¼Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ñ Ð±ÑблÑоÑеки не можÑÑÑ " +#~ "опÑблÑкÑваÑи ÑвоÑÑв ÑÑого авÑоÑа." + +#~ msgid "" +#~ "This author's works are in public domain and will be published on " +#~ "Internet school library of Wolne Lektury soon." +#~ msgstr "" +#~ "ТвоÑи ÑÑого авÑоÑа Ñ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного Ð½Ð°Ð´Ð±Ð°Ð½Ð½Ñ Ñ Ð½ÐµÐ·Ð°Ð±Ð°Ñом бÑдÑÑÑ " +#~ "опÑблÑÐºÐ¾Ð²Ð°Ð½Ñ Ð½Ð° Wolne Lektury." + +#~ msgid "" +#~ "This author's works will become part of public domain and will be allowed " +#~ "to be published without restrictions in" +#~ msgstr "" +#~ "ТвоÑи ÑÑого авÑоÑа ÑÑанÑÑÑ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного Ð½Ð°Ð´Ð±Ð°Ð½Ð½Ñ Ñ Ð¼Ð¾Ð¶Ð½Ð° бÑде ÑÑ " +#~ "пÑблÑкÑваÑи без Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ñ Ð²" + +#~ msgid "" +#~ "This work is in public domain and will be published on Internet school " +#~ "library of Wolne Lektury soon." +#~ msgstr "" +#~ "Цей ÑвÑÑ Ñ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного Ð½Ð°Ð´Ð±Ð°Ð½Ð½Ñ Ñ Ð½ÐµÐ·Ð°Ð±Ð°Ñом бÑде опÑблÑкований " +#~ "на Wolne Lektury" + +#~ msgid "" +#~ "This work will become part of public domain and will be allowed to be " +#~ "published without restrictions in" +#~ msgstr "" +#~ "Цей ÑвÑÑ ÑÑане ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного Ð½Ð°Ð´Ð±Ð°Ð½Ð½Ñ Ñ Ð¼Ð¾Ð¶Ð½Ð° бÑде його " +#~ "пÑблÑкÑваÑи без Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ñ Ñ" + +#~ msgid "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find " +#~ "out</a> why Internet libraries can't publish this work." +#~ msgstr "" +#~ "<a href='http://domenapubliczna.org/co-to-jest-domena-" +#~ "publiczna/'>ÐÑзнаÑиÑÑ</a>, ÑÐ¾Ð¼Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ñ Ð±ÑблÑоÑеки не можÑÑÑ " +#~ "опÑблÑкÑваÑи ÑÑого ÑвоÑÑ" + +#~ msgid "This work is copyrighted." +#~ msgstr "Цей ÑвÑÑ Ð¾Ñ Ð¾ÑонÑÑÑÑÑÑ Ð°Ð²ÑоÑÑÑким пÑавом" + +#~ msgid "Login to Wolne Lektury" +#~ msgstr "УвÑйÑи Ñ WolneLektury.pl" + +#~ msgid "Login" +#~ msgstr "УвÑйÑи" + +#~ msgid "" +#~ "Internet Explorer cannot display this site properly. Click here to read " +#~ "more..." +#~ msgstr "" +#~ "ÐнÑеÑÐ½ÐµÑ ÐкÑполоÑÐµÑ Ð½Ðµ може пÑавилÑно вÑдобÑазиÑи ÑÑÑÑ ÑÑоÑÑнки. " +#~ "ÐаÑиÑнÑÑÑ, Ñоб дÑзнаÑиÑÑ Ð±ÑлÑÑе..." + +#~ msgid "Your shelves" +#~ msgstr "ÐаÑÑ Ð¿Ð¾Ð»Ð¸ÑÑ" + +#~ msgid "Register on" +#~ msgstr "РеÑÑÑÑаÑÑÑ Ð½Ð°" + +#~ msgid "or" +#~ msgstr "або" + +#~ msgid "return to main page" +#~ msgstr "повеÑÐ½ÐµÐ½Ð½Ñ Ð½Ð° Ð³Ð¾Ð»Ð¾Ð²Ð½Ñ ÑÑоÑÑнкÑ" + +#, fuzzy +#~ msgid "Listing of all audiobooks on WolneLektury.pl" +#~ msgstr "ÐлÑавÑÑний ÑпиÑок ÑвоÑÑв на WolneLektury.pl" + +#~ msgid "Put a book" +#~ msgstr "ÐоклаÑÑи книжкÑ" + +#~ msgid "on the shelf!" +#~ msgstr "на полиÑÑ!" + +#~ msgid "and printing using" +#~ msgstr "Ñа дÑÑÐºÑ Ð· викоÑиÑÑаннÑм" + +#~ msgid "Download EPUB" +#~ msgstr "ÐаванÑажиÑи EPUB" + +#~ msgid "Download TXT" +#~ msgstr "ÐаванÑажиÑи TXT" + +#~ msgid "on small displays, for example mobile phones" +#~ msgstr "на Ð½ÐµÐ²ÐµÐ»Ð¸ÐºÐ¸Ñ ÐµÐºÑÐ°Ð½Ð°Ñ , на пÑиклад на мобÑлÑÐ½Ð¾Ð¼Ñ ÑелеÑонÑ" + +#~ msgid "Download ODT" +#~ msgstr "ÐаванÑажиÑи ODT" + +#~ msgid "and editing using" +#~ msgstr "Ñа едиÑÑÑ Ð· викоÑиÑÑаннÑм" + +#~ msgid "Book on project's wiki" +#~ msgstr "Ðнижка на вÑÐºÑ Ð¿ÑоекÑÑ" + +#~ msgid "on" +#~ msgstr "на" + +#~ msgid "See description" +#~ msgstr "ÐивиÑиÑÑ Ð¾Ð¿Ð¸Ñ" + +#~ msgid "Jump to" +#~ msgstr "ÐеÑейÑи до" + +#~ msgid "Categories" +#~ msgstr "ÐаÑегоÑÑÑ" + +#, fuzzy +#~ msgid "Listing of all DAISY files on WolneLektury.pl" +#~ msgstr "ÐлÑавÑÑний ÑпиÑок ÑвоÑÑв на WolneLektury.pl" + +#~ msgid "Show full category" +#~ msgstr "ÐоказаÑи вÑÑ ÐºÐ°ÑегоÑÑÑ" + +#~ msgid "Hide" +#~ msgstr "Ð¡Ñ Ð¾Ð²Ð°Ñи" + +#~ msgid "Browse books by categories" +#~ msgstr "ÐеÑеглÑдаÑи книжки за каÑегоÑÑÑми" + +#~ msgid "delete" +#~ msgstr "видалиÑи" + +#~ msgid "" +#~ "Create your own book set. You can share it with friends by sending them " +#~ "link to your shelf." +#~ msgstr "" +#~ "СÑвоÑиÑи ÑвÑй вибÑÑ ÐºÐ½Ð¸Ð¶Ð¾Ðº. Ðи можеÑе подÑлиÑиÑÑ Ð½Ð¸Ð¼ з дÑÑзÑми виÑилаÑÑи " +#~ "Ñм поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° ваÑÑ Ð¿Ð¾Ð»Ð¸ÑÑ." + +#~ msgid "You need to " +#~ msgstr "Ðам ÑÑеба" + +#~ msgid "sign in" +#~ msgstr "ÑвÑйÑи в акаÑнÑ" + +#~ msgid "to manage your shelves." +#~ msgstr "Ñоб ÑпÑавлÑÑи ÑвоÑми полиÑÑми" + +#~ msgid "" +#~ "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." +#~ msgstr "" +#~ "Ðлани ÑÑокÑв Ñа ÑнÑÑ ÑÐ´ÐµÑ Ñк коÑиÑÑÑваÑиÑÑ Wolnelektury.pl в навÑаннÑ" + +#~ msgid "" +#~ "are professional recordings of literary texts from our repository, " +#~ "available on free license in MP3 and Ogg Vorbis formats as well as in " +#~ "DAISY system." +#~ msgstr "" +#~ "Ñе пÑоÑеÑÑÐ¹Ð½Ñ Ð·Ð°Ð¿Ð¸Ñи ÑекÑÑÑв лÑÑеÑаÑÑÑи з наÑÐ¾Ñ Ð±Ð°Ð·Ð¸, доÑÑÑÐ¿Ð½Ñ Ð½Ð° вÑлÑнÑй " +#~ "лÑÑензÑÑ Ñ ÑоÑмаÑÐ°Ñ MP3 Ñа Ogg Vorbis, а Ñакож в ÑиÑÑÐµÐ¼Ñ DAISY." + +#~ msgid "Themes groups" +#~ msgstr "ÐÑÑпи моÑивÑв" + +#~ msgid "See our blog" +#~ msgstr "ÐивиÑиÑÑ Ð½Ð°Ñ Ð±Ð»Ð¾Ð³" + +#~ msgid "You can help us!" +#~ msgstr "ÐожеÑе нам допомогÑи!" + +#~ msgid "" +#~ "We try our best to elaborate works appended to our library. It is " +#~ "possible only due to support of our volunteers." +#~ msgstr "" +#~ "Ðи намагаÑмоÑÑ Ñкомога кÑаÑе пÑдгоÑÑваÑи ÑвоÑи, ÑÐºÑ Ð´Ð¾Ð´Ð°ÑÑÑÑÑ Ð´Ð¾ наÑÐ¾Ñ " +#~ "бÑблÑоÑеки. Це можливо ÑÑлÑки завдÑки наÑим волонÑеÑам." + +#~ msgid "" +#~ "We invite people who want to take part in developing Internet school " +#~ "library Wolne Lektury." +#~ msgstr "" +#~ "ÐапÑоÑÑÑмо вÑÑÑ , Ñ Ñо Ñ Ð¾Ñе бÑаÑи ÑÑаÑÑÑ Ñ ÑвоÑÐµÐ½Ð½Ñ ÑкÑлÑÐ½Ð¾Ñ ÑнÑеÑнеÑ-" +#~ "бÑблÑоÑеки Wolne Lektury." + +#~ msgid "About us" +#~ msgstr "ÐÑо наÑ" + +#~ msgid "" +#~ "\n" +#~ "\t\t\tInternet library with school readings âWolne Lekturyâ (<a href=" +#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) is a project made by " +#~ "Modern Poland Foundation. It started in 2007 and shares school readings, " +#~ "which are recommended by Ministry of National Education and are in public " +#~ "domain.\n" +#~ "\t\t\t" +#~ msgstr "" +#~ "\n" +#~ "\t\t\tÐнÑеÑнеÑ-бÑблÑоÑека ÑкÑлÑÐ½Ð¾Ñ Ð»ÑÑеÑаÑÑÑи âWolne Lekturyâ (<a href=" +#~ "\"http://wolnelektury.pl\">www.wolnelektury.pl</a>) Ñе пÑÐ¾ÐµÐºÑ " +#~ "ÑеалÑзований Фондом ÐодеÑна ÐолÑÑа. ÐÑÐ¾ÐµÐºÑ ÑÑаÑÑÑвав Ñ 2007 ÑоÑÑ Ñа Ð½Ð°Ð´Ð°Ñ " +#~ "доÑÑÑп до лÑÑеÑаÑÑÑи, ÑÐµÐºÐ¾Ð¼ÐµÐ½Ð´Ð¾Ð²Ð°Ð½Ð¾Ñ ÐÑнÑÑÑеÑÑÑвом наÑÑоналÑÐ½Ð¾Ñ Ð¾ÑвÑÑи, " +#~ "Ñка Ñ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑÑÑпÑлÑного надбаннÑ.\n" +#~ "\t\t\t" + +#~ msgid "Searching in" +#~ msgstr "ÐоÑÑк в" + +#~ msgid "More than one result matching the criteria found." +#~ msgstr "ÐÑлÑÑе нÑж один ÑезÑлÑÑÐ°Ñ Ð²ÑдповÑÐ´Ð°Ñ ÐºÑиÑеÑÑÑм." + +#~ msgid "Search in WolneLektury.pl" +#~ msgstr "ÐоÑÑк в WolneLektury.pl" + +#~ msgid "Your shelf is empty" +#~ msgstr "ÐаÑа полиÑÑ Ð¿Ð¾ÑожнÑ" + +#~ msgid "" +#~ "You can put a book on a shelf by entering page of the reading and " +#~ "clicking 'Put on the shelf'." +#~ msgstr "" +#~ "Щоб поклаÑÑи ÐºÐ½Ð¸Ð¶ÐºÑ Ð½Ð° полиÑÑ, ÑвÑйдÑÑÑ Ð½Ð° ÑÑоÑÑÐ½ÐºÑ ÐºÐ½Ð¸Ð¶ÐºÐ¸ Ñа наÑиÑнÑÑÑ " +#~ "\"ÐоклаÑÑи на полиÑÑ\"." + +#~ msgid "Choose books' formats which you want to download:" +#~ msgstr "ÐибÑаÑи ÑоÑмаÑ, в ÑÐºÐ¾Ð¼Ñ Ñ Ð¾ÑеÑе заванÑажиÑи книжкÑ:" + +#~ msgid "for listening" +#~ msgstr "Ð´Ð»Ñ ÑлÑÑ Ð°Ð½Ð½Ñ" + +#~ msgid "on favourite MP3 player" +#~ msgstr "на ÑлÑÐ±Ð»ÐµÐ½Ð¾Ð¼Ñ Ð¿Ð»ÐµÑÑÑ MP3" + +#~ msgid "Xiph.org Foundation" +#~ msgstr "Фонд Xiph.org" + +#~ msgid "Updating list of books' formats on the shelf" +#~ msgstr "ÐновиÑи ÑпиÑок ÑоÑмаÑÑв книжок, ÑÐºÑ Ð½Ð° полиÑÑ" + +#~ msgid "cancel" +#~ msgstr "вÑÐ´Ñ Ð¸Ð»Ð¸Ñи" + +#~ msgid "Share this shelf" +#~ msgstr "ÐодÑлиÑиÑÑ ÑÑÑÑ Ð¿Ð¾Ð»Ð¸ÑеÑ" + +#~ msgid "" +#~ "Copy this link and share it with other people to let them see your shelf." +#~ msgstr "ÐопÑÑваÑи Ñе поÑиланнÑ, Ñоб виÑлаÑи ÑнÑим, Ñа подÑлиÑиÑÑ Ð¿Ð¾Ð»Ð¸ÑеÑ." + +#, fuzzy +#~ msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "ÐÑоÑиÑаÑи обговоÑÐµÐ½Ð½Ñ ÑÑого авÑоÑа на Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "ÐÑоÑиÑаÑи обговоÑÐµÐ½Ð½Ñ ÑÑого авÑоÑа на Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" +#~ msgstr "ÐÑоÑиÑаÑи обговоÑÐµÐ½Ð½Ñ ÑÑого авÑоÑа на Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read related study on Lektury.Gazeta.pl" +#~ msgstr "ÐÑоÑиÑаÑи обговоÑÐµÐ½Ð½Ñ ÑÑого авÑоÑа на Lektury.Gazeta.pl" + +#, fuzzy +#~ msgid "Read article about epoch %(last_tag)s on Wikipedia" +#~ msgstr "ÐÑоÑиÑаÑи ÑÑаÑÑÑ Ð¿Ñо ÑÑого авÑоÑа на ÐÑкÑпедÑÑ" + +#, fuzzy +#~ msgid "Read article about kind %(last_tag)s on Wikipedia" +#~ msgstr "ÐÑоÑиÑаÑи ÑÑаÑÑÑ Ð¿Ñо ÑÑого авÑоÑа на ÐÑкÑпедÑÑ" + +#, fuzzy +#~ msgid "Read article about genre %(last_tag)s on Wikipedia" +#~ msgstr "ÐÑоÑиÑаÑи ÑÑаÑÑÑ Ð¿Ñо ÑÑого авÑоÑа на ÐÑкÑпедÑÑ" + +#, fuzzy +#~ msgid "Read related article on Wikipedia" +#~ msgstr "ÐÑоÑиÑаÑи ÑÑаÑÑÑ Ð¿Ñо ÑÑого авÑоÑа на ÐÑкÑпедÑÑ" + +#~ msgid "Delete" +#~ msgstr "ÐидалиÑи" + +#~ msgid "return to the main page" +#~ msgstr "повеÑÐ½ÐµÐ½Ð½Ñ Ð½Ð° головнÑ" + +#~ msgid "return to list of materials" +#~ msgstr "повеÑÐ½ÐµÐ½Ð½Ñ Ð´Ð¾ ÑпиÑÐºÑ Ð¼Ð°ÑеÑÑалÑв" + +#~ msgid "Hand-outs for teachers on " +#~ msgstr "ÐаÑеÑÑали Ð´Ð»Ñ Ð²ÑиÑелÑв Ñ" + +#, fuzzy +#~ msgid "" +#~ "Download TXT - for reading on small displays, for example mobile phones" +#~ msgstr "на Ð½ÐµÐ²ÐµÐ»Ð¸ÐºÐ¸Ñ ÐµÐºÑÐ°Ð½Ð°Ñ , на пÑиклад на мобÑлÑÐ½Ð¾Ð¼Ñ ÑелеÑонÑ" + +#~ msgid "Choose your interface language: " +#~ msgstr "ÐибÑаÑи Ð¼Ð¾Ð²Ñ ÑнÑеÑÑейÑÑ" + +#~ msgid "Choose language" +#~ msgstr "ÐибÑаÑи мовÑ" + +#~ msgid "Hide description" +#~ msgstr "Ð¡Ñ Ð¾Ð²Ð°Ñи опиÑ" + +#~ msgid "Download MP3" +#~ msgstr "ÐаванÑажиÑи MP3" + +#~ msgid "Download Ogg Vorbis" +#~ msgstr "ÐаванÑажиÑи Ogg Vorbis" + +#~ msgid "Download DAISY" +#~ msgstr "ÐаванÑажиÑи DAISY" + +#~ msgid "Alphabetical listing of works" +#~ msgstr "ÐлÑавÑÑний ÑпиÑок ÑвоÑÑв" + +#~ msgid "check list of books" +#~ msgstr "пеÑевÑÑиÑи ÑпиÑок книжок" + +#~ msgid "in our repository" +#~ msgstr "в наÑÑй базÑ" + +#~ msgid "Read study of epoch" +#~ msgstr "ÐÑоÑиÑаÑи обговоÑÐµÐ½Ð½Ñ ÐµÐ¿Ð¾Ñ Ð¸" + +#~ msgid "Read article about epoch" +#~ msgstr "ÐÑоÑиÑаÑи ÑÑаÑÑÑ Ð¿Ñо ÑÑ ÐµÐ¿Ð¾Ñ Ñ" diff --git a/src/wolnelektury/management/__init__.py b/src/wolnelektury/management/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/wolnelektury/management/commands/__init__.py b/src/wolnelektury/management/commands/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/wolnelektury/management/commands/localepack.py b/src/wolnelektury/management/commands/localepack.py new file mode 100644 index 000000000..bd631928c --- /dev/null +++ b/src/wolnelektury/management/commands/localepack.py @@ -0,0 +1,243 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from optparse import make_option +from django.conf import settings +from django.core.management.base import BaseCommand +from django.core.management import call_command +from .translation2po import get_languages + +import os +import shutil +import tempfile +import sys + +import allauth + +ROOT = os.path.dirname(settings.PROJECT_DIR) + + +def is_our_app(mod): + return mod.__path__[0].startswith(ROOT) + + +class Locale(object): + def save(self, output_directory, languages): + pass + + def generate(self, languages): + pass + +def copy_f(frm, to): + "I can create a necessary dest directiories, yey!" + if not os.path.exists(os.path.dirname(to)): + os.makedirs(os.path.dirname(to)) + shutil.copyfile(frm, to) + +class AppLocale(Locale): + def __init__(self, appmod): + self.app = appmod + if not os.path.exists(os.path.join(self.path, 'locale')): + raise LookupError('No locale for app %s' % appmod) + + @property + def path(self): + return self.app.__path__[0] + + @property + def name(self): + return self.app.__name__ + + def save(self, output_directory, languages): + for lc in languages: + lc = lc[0] + if os.path.exists(os.path.join(self.path, 'locale', lc)): + copy_f(os.path.join(self.path, 'locale', lc, 'LC_MESSAGES', 'django.po'), + os.path.join(output_directory, lc, self.name + '.po')) + + + def load(self, input_directory, languages): + for lc in zip(*languages)[0]: + if os.path.exists(os.path.join(input_directory, lc, self.name + '.po')): + out = os.path.join(self.path, 'locale', lc, 'LC_MESSAGES', 'django.po') + if not os.path.exists(os.path.dirname(out)): + os.makedirs(os.path.dirname(out)) + copy_f(os.path.join(input_directory, lc, self.name + '.po'), + out) + + wd = os.getcwd() + os.chdir(self.path) + try: + call_command('compilemessages', settings='wolnelektury.settings') + except: + pass + finally: + os.chdir(wd) + + + def generate(self, languages): + wd = os.getcwd() + os.chdir(self.path) + try: + call_command('makemessages', all=True) + except: + pass + finally: + os.chdir(wd) + + +class ModelTranslation(Locale): + def __init__(self, appname, poname=None): + self.appname = appname + self.poname = poname and poname or appname + + def save(self, output_directory, languages): + call_command('translation2po', self.appname, directory=output_directory, poname=self.poname) + + def load(self, input_directory, languages): + call_command('translation2po', self.appname, directory=input_directory, + load=True, lang=','.join(zip(*languages)[0]), poname=self.poname, keep_running=True) + + +class CustomLocale(Locale): + def __init__(self, app_dir, + config=os.path.join(ROOT, "babel.cfg"), + out_file=os.path.join(ROOT, 'wolnelektury/locale-contrib/django.pot'), + name=None): + self.app_dir = app_dir + self.config = config + self.out_file = out_file + self.name = name + + def generate(self, languages): + os.system('pybabel extract -F "%s" -o "%s" "%s"' % (self.config, self.out_file, self.app_dir)) + os.system('pybabel update -D django -i %s -d %s' % (self.out_file, os.path.dirname(self.out_file))) + + def po_file(self, language): + d = os.path.dirname(self.out_file) + n = os.path.basename(self.out_file).split('.')[0] + return os.path.join(d, language, 'LC_MESSAGES', n + '.po') + + def save(self, output_directory, languages): + for lc in zip(*languages)[0]: + if os.path.exists(self.po_file(lc)): + copy_f(self.po_file(lc), + os.path.join(output_directory, lc, self.name + '.po')) + + def load(self, input_directory, languages): + for lc in zip(*languages)[0]: + copy_f(os.path.join(input_directory, lc, self.name + '.po'), + self.po_file(lc)) + os.system('pybabel compile -D django -d %s' % os.path.dirname(self.out_file)) + + +SOURCES = [] + +for appn in settings.INSTALLED_APPS: + app = __import__(appn) + if is_our_app(app): + try: + SOURCES.append(AppLocale(app)) + except LookupError, e: + print "no locales in %s" % app.__name__ + +SOURCES.append(ModelTranslation('infopages', 'infopages_db')) +SOURCES.append(CustomLocale(os.path.dirname(allauth.__file__), name='contrib')) + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('-l', '--load', help='load locales back to source', action='store_true', dest='load', default=False), + make_option('-L', '--lang', help='load just one language', dest='lang', default=None), + make_option('-d', '--directory', help='load from this directory', dest='directory', default=None), + make_option('-o', '--outfile', help='Resulting zip file', dest='outfile', default='./wl-locale.zip'), + make_option('-m', '--merge', help='Use git to merge. Please use with clean working directory.', action='store_true', dest='merge', default=False), + make_option('-M', '--message', help='commit message', dest='message', default='New locale'), + + ) + help = 'Make a locale pack' + args = '' + + def current_rev(self): + return os.popen('git rev-parse HEAD').read() + + def current_branch(self): + return os.popen("git branch |grep '^[*]' | cut -c 3-").read() + + def save(self, options): + packname = options.get('outfile') + packname_b = os.path.basename(packname).split('.')[0] + fmt = '.'.join(os.path.basename(packname).split('.')[1:]) + + if fmt != 'zip': + raise NotImplementedError('Sorry. Only zip format supported at the moment.') + + tmp_dir = tempfile.mkdtemp('-wl-locale') + out_dir = os.path.join(tmp_dir, packname_b) + os.mkdir(out_dir) + + try: + for lang in settings.LANGUAGES: + os.mkdir(os.path.join(out_dir, lang[0])) + + for src in SOURCES: + src.generate(settings.LANGUAGES) + src.save(out_dir, settings.LANGUAGES) + # src.save(settings.LANGUAGES) + + # write out revision + rev = self.current_rev() + rf = open(os.path.join(out_dir, '.revision'), 'w') + rf.write(rev) + rf.close() + + + cwd = os.getcwd() + try: + os.chdir(os.path.dirname(out_dir)) + self.system('zip -r %s %s' % (os.path.join(cwd, packname_b+'.zip'), os.path.basename(out_dir))) + finally: + os.chdir(cwd) + # shutil.make_archive(packname_b, fmt, root_dir=os.path.dirname(out_dir), base_dir=os.path.basename(out_dir)) + finally: + shutil.rmtree(tmp_dir, ignore_errors=True) + + def load(self, options): + langs = get_languages(options['lang']) + + for src in SOURCES: + src.load(options['directory'], langs) + + def handle(self, *a, **options): + if options['load']: + if not options['directory'] or not os.path.exists(options['directory']): + print "Directory not provided or does not exist, please use -d" + sys.exit(1) + + if options['merge']: self.merge_setup(options['directory']) + self.load(options) + if options['merge']: self.merge_finish(options['message']) + else: + self.save(options) + + merge_branch = 'wl-locale-merge' + last_branch = None + + def merge_setup(self, directory): + self.last_branch = self.current_branch() + rev = open(os.path.join(directory, '.revision')).read() + + self.system('git checkout -b %s %s' % (self.merge_branch, rev)) + + def merge_finish(self, message): + self.system('git commit -a -m "%s"' % message.replace('"', '\\"')) + self.system('git checkout %s' % self.last_branch) + self.system('git merge -s recursive -X theirs %s' % self.merge_branch) + self.system('git branch -d %s' % self.merge_branch) + + def system(self, fmt, *args): + code = os.system(fmt % args) + if code != 0: + raise OSError('Command %s returned with exit code %d' % (fmt % args, code)) + return code diff --git a/src/wolnelektury/management/commands/translation2po.py b/src/wolnelektury/management/commands/translation2po.py new file mode 100644 index 000000000..6220006fe --- /dev/null +++ b/src/wolnelektury/management/commands/translation2po.py @@ -0,0 +1,135 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import os +import time +from optparse import make_option +from django.conf import settings +from django.core.management.base import BaseCommand +from django.core.management.color import color_style +from django.db import models + +import polib +import modeltranslation.models +from modeltranslation.translator import translator, NotRegistered + + +def metadata(language=''): + "get metadata for PO, given language code" + t = time.strftime('%Y-%m-%d %H:%M%z') + + return { + 'Project-Id-Version': '1.0', + 'Report-Msgid-Bugs-To': settings.CONTACT_EMAIL, + 'POT-Creation-Date': '%s' % t, + 'PO-Revision-Date': '%s' % t, + 'Last-Translator': 'you <you@example.com>', + 'Language-Team': '%s' % dict(settings.LANGUAGES).get(language, language), + 'MIME-Version': '1.0', + 'Content-Type': 'text/plain; charset=utf-8', + 'Content-Transfer-Encoding': '8bit', + } + + +def make_po(language=''): + "Create new POFile object for language code" + po = polib.POFile() + po.metadata = metadata(language) + return po + + +def get_languages(langs): + if not langs: return settings.LANGUAGES + langs = langs.split(',') + lm = dict(settings.LANGUAGES) + return map(lambda l: (l, lm.get(l, l)), langs) + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('-d', '--directory', help='Specify which directory should hold generated PO files', dest='directory', default=''), + make_option('-l', '--load', help='load locales back to source', action='store_true', dest='load', default=False), + make_option('-L', '--language', help='locales to load', dest='lang', default=None), + make_option('-n', '--poname', help='name of the po file [no extension]', dest='poname', default=None), + make_option('-k', '--keep-running', help='keep running even when missing an input file', dest='keep_running', default=False, action='store_true'), + ) + help = 'Export models from app to po files' + args = 'app' + + def get_models(self, app): + for mdname in dir(app.models): + if mdname[0] == '_': continue + md = getattr(app.models, mdname) + try: + assert issubclass(md, models.Model) + except (AssertionError, TypeError): + continue + + try: + opts = translator.get_options_for_model(md) + except NotRegistered: + continue + else: + yield (md, opts) + + def handle(self, appname, **options): + if not options['poname']: options['poname'] = appname + app = __import__(appname) + + if options['load']: + objects = {} + modmod = {} + for md, opts in self.get_models(app): + if not md.__name__ in objects: + objects[md.__name__] = {} + modmod['model'] = md + + languages = get_languages(options['lang']) + + for lng in zip(*languages)[0]: + pofile = os.path.join(options['directory'], lng, options['poname'] + '.po') + if not os.path.exists(pofile): + if options['keep_running']: + continue + else: + raise OSError('%s po file: %s not found' % (appname, pofile)) + po = polib.pofile(pofile) + for entry in po: + loc, _ignored = entry.occurrences[0] + _appname, modelname, fieldname, pk = loc.split('/') + try: + obj = objects[modelname][pk] + except KeyError: + obj = modmod['model'].objects.get(pk=pk) + objects[modelname][pk] = obj + setattr(obj, fieldname, entry.msgstr) + + for mod, objcs in objects.items(): + for o in objcs.values(): + o.save() + + else: + pofiles = {} + for md, opts in self.get_models(app): + for obj in md.objects.all().order_by('pk'): + for fld, locflds in opts.local_fields.items(): + k = getattr(obj, '%s_%s' % (fld, settings.LANGUAGE_CODE)) or '' + for locfld in locflds: + cur_lang = locfld.language + try: + po = pofiles[cur_lang] + except: + po = make_po(cur_lang) + pofiles[cur_lang] = po + v = locfld.value_from_object(obj) or '' + entry = polib.POEntry( + msgid=k, + msgstr=v, + occurrences=[('%s/%s/%s/%s' % (appname, md.__name__, locfld.name, str(obj.pk)), 0)]) + po.append(entry) + + directory = options['directory'] + for lng, po in pofiles.items(): + os.makedirs(os.path.join(directory, lng)) + po.save(os.path.join(directory, lng, '%s.po' % options['poname'])) diff --git a/src/wolnelektury/management/profile.py b/src/wolnelektury/management/profile.py new file mode 100644 index 000000000..90e5ec5f5 --- /dev/null +++ b/src/wolnelektury/management/profile.py @@ -0,0 +1,17 @@ + +import cProfile +import functools +import os + +_object = None + +def profile(meth): + def _wrapper(self, *args, **kwargs): + object = self + setattr(object, "__%s" % meth.__name__, meth) + cProfile.runctx('object.__%s(object, *args, **kwargs)' % (meth.__name__, ), globals(), locals(), + "profile.%d" % os.getpid()) + + functools.update_wrapper(_wrapper, meth) + return _wrapper + diff --git a/src/wolnelektury/middleware.py b/src/wolnelektury/middleware.py new file mode 100644 index 000000000..60b382cd3 --- /dev/null +++ b/src/wolnelektury/middleware.py @@ -0,0 +1,126 @@ +# Orignal version taken from http://www.djangosnippets.org/snippets/186/ +# Original author: udfalkso +# Modified by: Shwagroo Team + +import sys +import os +import re +import hotshot, hotshot.stats +import tempfile +import StringIO +import pprint + +from django.conf import settings +from django.db import connection + + +words_re = re.compile( r'\s+' ) + +group_prefix_re = [ + re.compile( "^.*/django/[^/]+" ), + re.compile( "^(.*)/[^/]+$" ), # extract module path + re.compile( ".*" ), # catch strange entries +] + + +class ProfileMiddleware(object): + """ + Displays hotshot profiling for any view. + http://yoursite.com/yourview/?prof + + Add the "prof" key to query string by appending ?prof (or &prof=) + and you'll see the profiling results in your browser. + It's set up to only be available in django's debug mode, is available for superuser otherwise, + but you really shouldn't add this middleware to any production configuration. + + WARNING: It uses hotshot profiler which is not thread safe. + """ + def process_request(self, request): + if (settings.DEBUG or request.user.is_superuser) and request.GET.has_key('prof'): + connection.queries = [] + self.tmpfile = tempfile.mktemp() + self.prof = hotshot.Profile(self.tmpfile) + + def process_view(self, request, callback, callback_args, callback_kwargs): + if (settings.DEBUG or request.user.is_superuser) and request.GET.has_key('prof'): + return self.prof.runcall(callback, request, *callback_args, **callback_kwargs) + + def get_group(self, file): + for g in group_prefix_re: + name = g.findall( file ) + if name: + return name[0] + + def get_summary(self, results_dict, sum): + list = [ (item[1], item[0]) for item in results_dict.items() ] + list.sort( reverse = True ) + list = list[:40] + + res = " tottime\n" + for item in list: + if sum == 0: + foo = 0 + else: + foo = 100*item[0]/sum + res += "%4.1f%% %7.3f %s\n" % (foo, item[0], item[1] ) + + return res + + def summary_for_files(self, stats_str): + stats_str = stats_str.split("\n")[5:] + + mystats = {} + mygroups = {} + + sum = 0 + + for s in stats_str: + fields = words_re.split(s); + if len(fields) == 7: + time = float(fields[2]) + sum += time + file = fields[6].split(":")[0] + + if not file in mystats: + mystats[file] = 0 + mystats[file] += time + + group = self.get_group(file) + if not group in mygroups: + mygroups[ group ] = 0 + mygroups[ group ] += time + + return "<pre>" + \ + " ---- By file ----\n\n" + self.get_summary(mystats,sum) + "\n" + \ + " ---- By group ---\n\n" + self.get_summary(mygroups,sum) + \ + "</pre>" + + def process_response(self, request, response): + if (settings.DEBUG or request.user.is_superuser) and request.GET.has_key('prof'): + self.prof.close() + + out = StringIO.StringIO() + old_stdout = sys.stdout + sys.stdout = out + + stats = hotshot.stats.load(self.tmpfile) + stats.sort_stats('time', 'calls') + stats.print_stats() + + sys.stdout = old_stdout + stats_str = out.getvalue() + + if response and response.content and stats_str: + response.content = "<pre>" + stats_str + "</pre>" + + response.content = "\n".join(response.content.split("\n")[:40]) + + response.content += self.summary_for_files(stats_str) + + os.unlink(self.tmpfile) + + response.content += '\n%d SQL Queries:\n' % len(connection.queries) + response.content += pprint.pformat(connection.queries) + + return response + diff --git a/src/wolnelektury/migrations/__init__.py b/src/wolnelektury/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/wolnelektury/migrations/getpaid/0001_initial.py b/src/wolnelektury/migrations/getpaid/0001_initial.py new file mode 100644 index 000000000..2ab2d3f64 --- /dev/null +++ b/src/wolnelektury/migrations/getpaid/0001_initial.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import getpaid.abstract_mixin + + +class Migration(migrations.Migration): + + dependencies = [ + ('funding', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Payment', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('amount', models.DecimalField(verbose_name='amount', max_digits=20, decimal_places=4)), + ('currency', models.CharField(max_length=3, verbose_name='currency')), + ('status', models.CharField(default=b'new', max_length=20, verbose_name='status', db_index=True, choices=[(b'new', 'new'), (b'in_progress', 'in progress'), (b'partially_paid', 'partially paid'), (b'paid', 'paid'), (b'failed', 'failed')])), + ('backend', models.CharField(max_length=50, verbose_name='backend')), + ('created_on', models.DateTimeField(auto_now_add=True, verbose_name='created on', db_index=True)), + ('paid_on', models.DateTimeField(default=None, null=True, verbose_name='paid on', db_index=True, blank=True)), + ('amount_paid', models.DecimalField(default=0, verbose_name='amount paid', max_digits=20, decimal_places=4)), + ('external_id', models.CharField(max_length=64, null=True, verbose_name='external id', blank=True)), + ('description', models.CharField(max_length=128, null=True, verbose_name='Description', blank=True)), + ('order', models.ForeignKey(related_name=b'payment', to='funding.Funding')), + ], + options={ + 'ordering': ('-created_on',), + 'verbose_name': 'Payment', + 'verbose_name_plural': 'Payments', + }, + bases=(models.Model, getpaid.abstract_mixin.AbstractMixin), + ), + ] diff --git a/src/wolnelektury/migrations/getpaid/0002_auto_20151221_1225.py b/src/wolnelektury/migrations/getpaid/0002_auto_20151221_1225.py new file mode 100644 index 000000000..c1a71771f --- /dev/null +++ b/src/wolnelektury/migrations/getpaid/0002_auto_20151221_1225.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('getpaid', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='payment', + name='description', + field=models.CharField(max_length=128, null=True, verbose_name='description', blank=True), + ), + migrations.AlterField( + model_name='payment', + name='status', + field=models.CharField(default=b'new', max_length=20, verbose_name='status', db_index=True, choices=[(b'new', 'new'), (b'in_progress', 'in progress'), (b'accepted_for_proc', 'accepted for processing'), (b'partially_paid', 'partially paid'), (b'paid', 'paid'), (b'cancelled', 'cancelled'), (b'failed', 'failed')]), + ), + ] diff --git a/src/wolnelektury/migrations/getpaid/__init__.py b/src/wolnelektury/migrations/getpaid/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/wolnelektury/migrations/piston/0001_initial.py b/src/wolnelektury/migrations/piston/0001_initial.py new file mode 100644 index 000000000..c2939b19a --- /dev/null +++ b/src/wolnelektury/migrations/piston/0001_initial.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Consumer', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=255)), + ('description', models.TextField()), + ('key', models.CharField(max_length=18)), + ('secret', models.CharField(max_length=32)), + ('status', models.CharField(default=b'pending', max_length=16, choices=[(b'pending', b'Pending approval'), (b'accepted', b'Accepted'), (b'canceled', b'Canceled')])), + ('user', models.ForeignKey(related_name='consumers', blank=True, to=settings.AUTH_USER_MODEL, null=True)), + ], + ), + migrations.CreateModel( + name='Nonce', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('token_key', models.CharField(max_length=18)), + ('consumer_key', models.CharField(max_length=18)), + ('key', models.CharField(max_length=255)), + ], + ), + migrations.CreateModel( + name='Resource', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=255)), + ('url', models.TextField(max_length=2047)), + ('is_readonly', models.BooleanField(default=True)), + ], + ), + migrations.CreateModel( + name='Token', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('key', models.CharField(max_length=18)), + ('secret', models.CharField(max_length=32)), + ('token_type', models.IntegerField(choices=[(1, 'Request'), (2, 'Access')])), + ('timestamp', models.IntegerField()), + ('is_approved', models.BooleanField(default=False)), + ('consumer', models.ForeignKey(to='piston.Consumer')), + ('user', models.ForeignKey(related_name='tokens', blank=True, to=settings.AUTH_USER_MODEL, null=True)), + ], + ), + ] diff --git a/src/wolnelektury/migrations/piston/__init__.py b/src/wolnelektury/migrations/piston/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/wolnelektury/settings/__init__.py b/src/wolnelektury/settings/__init__.py new file mode 100644 index 000000000..411202d6a --- /dev/null +++ b/src/wolnelektury/settings/__init__.py @@ -0,0 +1,117 @@ +# -*- coding: utf-8 -*- +# Django settings for wolnelektury project. +from os import path + +from .basic import * +from .auth import * +from .cache import * +from .celery import * +from .contrib import * +from .custom import * +from .locale import * +from .static import * + + +TEMPLATE_CONTEXT_PROCESSORS = ( + 'django.contrib.auth.context_processors.auth', + 'django.core.context_processors.debug', + 'django.core.context_processors.i18n', + 'django.core.context_processors.media', + 'django.core.context_processors.request', + 'wolnelektury.context_processors.extra_settings', + 'search.context_processors.search_form', +) + +MIDDLEWARE_CLASSES = [ + 'django.middleware.csrf.CsrfViewMiddleware', + 'ssify.middleware.SsiMiddleware', + 'django.middleware.cache.UpdateCacheMiddleware', + 'ssify.middleware.PrepareForCacheMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.admindocs.middleware.XViewMiddleware', + 'pagination.middleware.PaginationMiddleware', + 'ssify.middleware.LocaleMiddleware', + 'maintenancemode.middleware.MaintenanceModeMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'fnpdjango.middleware.SetRemoteAddrFromXRealIP', + 'django.middleware.cache.FetchFromCacheMiddleware', +] + +ROOT_URLCONF = 'wolnelektury.urls' + +# These are the ones we should test. +INSTALLED_APPS_OUR = [ + 'wolnelektury', + # our + 'ajaxable', + 'api', + 'catalogue', + 'chunks', + 'dictionary', + 'infopages', + 'lesmianator', + 'newtagging', + 'opds', + 'pdcounter', + 'reporting', + 'sponsors', + 'stats', + 'suggest', + 'picture', + 'social', + 'waiter', + 'search', + 'oai', + 'funding', + 'polls', + 'libraries', + ] + +GETPAID_BACKENDS = ( + 'getpaid.backends.payu', +) + +INSTALLED_APPS_CONTRIB = [ + # Should be before django.contrib.admin + 'modeltranslation', + + # external + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.sites', + 'django.contrib.admin', + 'django.contrib.admindocs', + 'django.contrib.staticfiles', + 'pagination', + 'pipeline', + 'piston', + 'piwik', + 'sorl.thumbnail', + 'kombu.transport.django', + 'honeypot', + 'fnpdjango', + 'getpaid', + 'getpaid.backends.payu', + 'ssify', + + #allauth stuff + 'uni_form', + 'allauth', + 'allauth.account', + 'allauth.socialaccount', + 'allauth.socialaccount.providers.openid', + 'allauth.socialaccount.providers.facebook', + #'allauth.socialaccount.providers.twitter', + ] + +INSTALLED_APPS = INSTALLED_APPS_OUR + INSTALLED_APPS_CONTRIB + +# Load localsettings, if they exist +try: + from wolnelektury.localsettings import * +except ImportError: + pass diff --git a/src/wolnelektury/settings/auth.py b/src/wolnelektury/settings/auth.py new file mode 100644 index 000000000..4d3ea224a --- /dev/null +++ b/src/wolnelektury/settings/auth.py @@ -0,0 +1,19 @@ +AUTHENTICATION_BACKENDS = [ + 'django.contrib.auth.backends.ModelBackend', + 'allauth.account.auth_backends.AuthenticationBackend', +] +ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 2 +LOGIN_URL = '/uzytkownik/login/' + +LOGIN_REDIRECT_URL = '/' + +SOCIALACCOUNT_AUTO_SIGNUP = False +SOCIALACCOUNT_QUERY_EMAIL = True + + +SOCIALACCOUNT_PROVIDERS = \ + { 'openid': + { 'SERVERS': + [dict(id='google', + name='Google', + openid_url='https://www.google.com/accounts/o8/id')]}} diff --git a/src/wolnelektury/settings/basic.py b/src/wolnelektury/settings/basic.py new file mode 100644 index 000000000..30812e516 --- /dev/null +++ b/src/wolnelektury/settings/basic.py @@ -0,0 +1,42 @@ +from os import path +from .paths import PROJECT_DIR + +DEBUG = False +TEMPLATE_DEBUG = DEBUG +MAINTENANCE_MODE = False + +ADMINS = [ + # ('Your Name', 'your_email@domain.com'), +] + +MANAGERS = ADMINS + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. + 'NAME': path.join(PROJECT_DIR, 'dev.db'), # Or path to database file if using sqlite3. + 'USER': '', # Not used with sqlite3. + 'PASSWORD': '', # Not used with sqlite3. + 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. + } +} + +SOLR = "http://localhost:8983/solr/wl/" +SOLR_TEST = "http://localhost:8983/solr/wl_test/" + +# Local time zone for this installation. Choices can be found here: +# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name +# although not all choices may be available on all operating systems. +# If running in a Windows environment this must be set to the same as your +# system time zone. +TIME_ZONE = 'Europe/Warsaw' +USE_TZ = True + +SITE_ID = 1 + +# List of callables that know how to import templates from various sources. +TEMPLATE_LOADERS = [ + 'django.template.loaders.filesystem.Loader', + 'django.template.loaders.app_directories.Loader', +# 'django.template.loaders.eggs.Loader', +] diff --git a/src/wolnelektury/settings/cache.py b/src/wolnelektury/settings/cache.py new file mode 100644 index 000000000..a9cc70f3b --- /dev/null +++ b/src/wolnelektury/settings/cache.py @@ -0,0 +1,18 @@ +CACHES = { + 'default': { + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', + 'LOCATION': [ + '127.0.0.1:11211', + ] + }, + 'ssify': { + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', + 'TIMEOUT': None, + 'KEY_PREFIX': 'ssify', + 'LOCATION': [ + '127.0.0.1:11211', + ], + }, +} + +CACHE_MIDDLEWARE_SECONDS = 24 * 60 * 60 diff --git a/src/wolnelektury/settings/celery.py b/src/wolnelektury/settings/celery.py new file mode 100644 index 000000000..77abfa658 --- /dev/null +++ b/src/wolnelektury/settings/celery.py @@ -0,0 +1,5 @@ +BROKER_URL = 'django://' + +CELERY_EAGER_PROPAGATES_EXCEPTIONS = True +CELERY_SEND_TASK_ERROR_EMAILS = True +CELERY_ACCEPT_CONTENT = ['pickle'] diff --git a/src/wolnelektury/settings/contrib.py b/src/wolnelektury/settings/contrib.py new file mode 100644 index 000000000..f0e8430a5 --- /dev/null +++ b/src/wolnelektury/settings/contrib.py @@ -0,0 +1,17 @@ +HONEYPOT_FIELD_NAME = 'miut' +PAGINATION_INVALID_PAGE_RAISES_404 = True +THUMBNAIL_QUALITY = 95 + +MODELTRANSLATION_DEFAULT_LANGUAGE = 'pl' +MODELTRANSLATION_PREPOPULATE_LANGUAGE = 'pl' + +MIGRATION_MODULES = { + 'getpaid' : 'wolnelektury.migrations.getpaid', + 'piston' : 'wolnelektury.migrations.piston', +} + +GETPAID_ORDER_DESCRIPTION = "{% load funding_tags %}{{ order|sanitize_payment_title }}" + +PIWIK_URL = '' +PIWIK_SITE_ID = 0 +PIWIK_TOKEN = '' diff --git a/src/wolnelektury/settings/custom.py b/src/wolnelektury/settings/custom.py new file mode 100644 index 000000000..8830ebe6f --- /dev/null +++ b/src/wolnelektury/settings/custom.py @@ -0,0 +1,17 @@ +# limit number of filtering tags +MAX_TAG_LIST = 6 + +NO_SEARCH_INDEX = False +NO_CUSTOM_PDF = True + +CATALOGUE_DEFAULT_LANGUAGE = 'pol' +PUBLISH_PLAN_FEED = 'http://redakcja.wolnelektury.pl/documents/track/editor-proofreading/?published=false' + +# limit rate for ebooks creation +CATALOGUE_CUSTOMPDF_RATE_LIMIT = '1/m' + +# set to 'new' or 'old' to skip time-consuming test +# for TeX morefloats library version +LIBRARIAN_PDF_MOREFLOATS = None + +LATEST_BLOG_POSTS = "http://nowoczesnapolska.org.pl/feed/?cat=-135" diff --git a/src/wolnelektury/settings/locale.py b/src/wolnelektury/settings/locale.py new file mode 100644 index 000000000..5069051f9 --- /dev/null +++ b/src/wolnelektury/settings/locale.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +from os import path +from .paths import PROJECT_DIR + +# If you set this to False, Django will make some optimizations so as not +# to load the internationalization machinery. +USE_I18N = True +USE_L10N = True + +LOCALE_PATHS = [ + path.join(PROJECT_DIR, 'locale-contrib') +] + +# Language code for this installation. All choices can be found here: +# http://www.i18nguy.com/unicode/language-identifiers.html +LANGUAGE_CODE = 'pl' + +gettext = lambda s: s + +LANGUAGES = tuple(sorted([ + ('pl', u'polski'), + ('de', u'Deutsch'), + ('en', u'English'), + ('lt', u'lietuvių'), + ('fr', u'français'), + ('ru', u'ÑÑÑÑкий'), + ('es', u'español'), + ('uk', u'ÑкÑаÑнÑÑка'), +# ('jp', u'æ¥æ¬èª'), + ('it', u'italiano'), +], key=lambda x: x[0])) diff --git a/src/wolnelektury/settings/paths.py b/src/wolnelektury/settings/paths.py new file mode 100644 index 000000000..dfb99de04 --- /dev/null +++ b/src/wolnelektury/settings/paths.py @@ -0,0 +1,6 @@ +from os import path + +PROJECT_DIR = path.dirname(path.dirname(path.abspath(__file__))) +ROOT_DIR = path.dirname(path.dirname(PROJECT_DIR)) +VAR_DIR = path.join(ROOT_DIR, 'var') + diff --git a/src/wolnelektury/settings/static.py b/src/wolnelektury/settings/static.py new file mode 100644 index 000000000..027879a33 --- /dev/null +++ b/src/wolnelektury/settings/static.py @@ -0,0 +1,174 @@ +from os import path +from .paths import VAR_DIR + +# Absolute path to the directory that holds media. +# Example: "/home/media/media.lawrence.com/" +MEDIA_ROOT = path.join(VAR_DIR, 'media/') +STATIC_ROOT = path.join(VAR_DIR, 'static/') +SEARCH_INDEX = path.join(VAR_DIR, 'search_index/') + +# URL that handles the media served from MEDIA_ROOT. Make sure to use a +# trailing slash if there is a path component (optional in other cases). +# Examples: "http://media.lawrence.com", "http://example.com/media/" +MEDIA_URL = '/media/' +STATIC_URL = '/static/' + +# CSS and JavaScript file groups + +PIPELINE = { + 'STYLESHEETS': { + 'main': { + # styles both for mobile and for big screen + 'source_filenames': [ + 'css/jquery.countdown.css', + + 'sponsors/css/sponsors.css', + + 'uni_form/uni-form.css', + 'uni_form/default.uni-form.css', + + 'css/ui-lightness/jquery-ui-1.8.16.custom.css', + + 'scss/main.scss', + ], + 'output_filename': 'css/compressed/main.css', + }, + 'book': { + 'source_filenames': [ + 'css/master.book.css', + ], + 'output_filename': 'css/compressed/book.css', + }, + 'book_text': { + 'source_filenames': [ + 'scss/book_text.scss', + 'css/new.book.css', + + 'css/master.picture.css', + ], + 'output_filename': 'css/compressed/book_text.css', + }, + 'picture': { + 'source_filenames': [ + 'css/master.book.css', + 'css/master.picture.css', + ], + 'output_filename': 'css/compressed/picture.css', + }, + 'player': { + 'source_filenames': [ + 'jplayer/jplayer.blue.monday.css', + 'player/player.css', + ], + 'output_filename': 'css/compressed/player.css', + }, + 'simple': { + 'source_filenames': ('css/simple.css',), + 'output_filename': 'css/compressed/simple.css', + }, + 'widget': { + 'source_filenames': ('scss/widget.scss',), + 'output_filename': 'css/compressed/widget.css', + }, + }, + 'JAVASCRIPT': { + 'base': { + 'source_filenames': ( + 'js/contrib/jquery.cycle.min.js', + 'js/contrib/jquery.jqmodal.js', + 'js/contrib/jquery.form.js', + 'js/contrib/jquery.countdown.js', 'js/contrib/jquery.countdown-pl.js', + 'js/contrib/jquery.countdown-de.js', 'js/contrib/jquery.countdown-uk.js', + 'js/contrib/jquery.countdown-es.js', 'js/contrib/jquery.countdown-lt.js', + 'js/contrib/jquery.countdown-ru.js', 'js/contrib/jquery.countdown-fr.js', + + 'js/contrib/jquery-ui-1.8.16.custom.min.js', + + 'js/locale.js', + 'js/dialogs.js', + 'js/base.js', + 'pdcounter/pdcounter.js', + 'sponsors/js/sponsors.js', + 'player/openplayer.js', + 'js/search.js', + 'funding/funding.js', + + 'uni_form/uni-form.js', + ), + 'output_filename': 'js/base.min.js', + }, + 'player': { + 'source_filenames': [ + 'jplayer/jquery.jplayer.min.js', + 'jplayer/jplayer.playlist.min.js', + 'player/player.js', + ], + 'output_filename': 'js/player.min.js', + }, + 'book': { + 'source_filenames': [ + 'js/contrib/jquery.eventdelegation.js', + 'js/contrib/jquery.scrollto.js', + 'js/contrib/jquery.highlightfade.js', + 'js/book_text/other.js', + 'js/book.js', + + 'js/contrib/raphael-min.js', + 'js/contrib/progressSpin.min.js', + 'js/picture.js', + ], + 'output_filename': 'js/book.min.js', + }, + 'book_text': { + 'source_filenames': [ + 'js/contrib/jquery.form.js', + 'js/contrib/jquery.jqmodal.js', + 'js/book_text/*.js', + 'js/locale.js', + 'js/dialogs.js', + + 'js/contrib/jquery.highlightfade.js', + 'js/contrib/raphael-min.js', + 'player/openplayer.js', + 'js/contrib/progressSpin.min.js', + 'js/picture.js', + ], + 'output_filename': 'js/book_text.js', + }, + 'book_ie': { + 'source_filenames': ('js/contrib/ierange-m2.js',), + 'output_filename': 'js/book_ie.min.js', + }, + 'widget': { + 'source_filenames': ( + 'js/contrib/jquery.js', + 'js/contrib/jquery-ui-1.8.16.custom.min.js', + 'js/search.js', + 'js/widget_run.js', + ), + 'output_filename': 'js/widget.min.js', + }, + }, + 'CSS_COMPRESSOR': None, + 'JS_COMPRESSOR': 'pipeline.compressors.jsmin.JSMinCompressor', + 'COMPILERS': ( + 'pipeline.compilers.sass.SASSCompiler', + # We could probably use PySCSS instead, + # but they have some serious problems, like: + # https://github.com/Kronuz/pyScss/issues/166 (empty list syntax) + # https://github.com/Kronuz/pyScss/issues/258 (bad @media order) + #'pyscss_compiler.PySCSSCompiler', + ) +} + +#~ STATICFILES_STORAGE = 'fnpdjango.utils.pipeline_storage.GzipPipelineCachedStorage' + +#PIPELINE_PYSCSS_BINARY = '/usr/bin/env pyscss' +#PIPELINE_PYSCSS_ARGUMENTS = '' + + +STATICFILES_FINDERS = [ + 'django.contrib.staticfiles.finders.FileSystemFinder', + 'django.contrib.staticfiles.finders.AppDirectoriesFinder', + 'pipeline.finders.PipelineFinder', +] diff --git a/src/wolnelektury/signals.py b/src/wolnelektury/signals.py new file mode 100644 index 000000000..5eb7e8847 --- /dev/null +++ b/src/wolnelektury/signals.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf import settings +from django.core.cache import caches +from django.db.models.signals import post_save, post_delete +from django.dispatch import receiver + +from funding.models import Spent +from infopages.models import InfoPage +from libraries.models import Catalog, Library +from pdcounter.models import Author, BookStub + + +@receiver([post_save, post_delete]) +def flush_views_after_manual_change(sender, **kwargs): + """Flushes views cache after changes with some models. + + Changes to those models happen infrequently, so we can afford + to just flush the cache on those instances. + + If changes become too often, relevant bits should be separated + as ssi_included views and flushed individually when needed. + + """ + if sender in (Catalog, Library, InfoPage, Author, BookStub, Spent): + caches[settings.CACHE_MIDDLEWARE_ALIAS].clear() diff --git a/src/wolnelektury/static/css/annoy.css b/src/wolnelektury/static/css/annoy.css new file mode 100755 index 000000000..7ffa414d5 --- /dev/null +++ b/src/wolnelektury/static/css/annoy.css @@ -0,0 +1,52 @@ +#annoy-on { + font-size: 13px; + line-height: 1.15em; + + padding: .1em 1em; + background: orange; + z-index: 200; + font-family: Arial, sans-serif; + display: block; + padding: 0 1em; + width: 1em; + text-align:center; + border-radius: 0 0 0 1em; + position: absolute; + top: 0; + right: 0; + color: black; +} + +#annoy { + font-size: 13px; + line-height: 1.15em; + padding: 1em 5em 1em 0; + display: none; + background: orange; + font-family: Arial, sans-serif; + position: relative; + z-index: 200; +} +#annoy p { + margin: 0 0 0 10em;; +} +#annoy a { + color: #4E56C8; +} + +#annoy a#annoy-off { + padding: .5em 1em .5em; + width: 1em; + text-align:center; + font-family: Arial, sans-serif; + display: block; + + border-radius: 0 0 0 1em; + position: absolute; + top: 0; + right: 0; + color: black; +} +#annoy a#annoy-off:hover { + cursor: pointer; +} diff --git a/src/wolnelektury/static/css/jquery.countdown.css b/src/wolnelektury/static/css/jquery.countdown.css new file mode 100644 index 000000000..3eca47676 --- /dev/null +++ b/src/wolnelektury/static/css/jquery.countdown.css @@ -0,0 +1,53 @@ +/* jQuery Countdown styles 1.5.7. */ +.hasCountdown { + /*border: 1px solid #ccc; + background-color: #eee;*/ + margin: 1em 0 7em 0; +} +.countdown_rtl { + direction: rtl; +} +.countdown_holding span { + background-color: #ccc; +} +.countdown_row { + clear: both; + width: 100%; + padding: 0px 2px; + text-align: center; +} +.countdown_show1 .countdown_section { + width: 98%; +} +.countdown_show2 .countdown_section { + width: 48%; +} +.countdown_show3 .countdown_section { + width: 32.5%; +} +.countdown_show4 .countdown_section { + width: 24.5%; +} +.countdown_show5 .countdown_section { + width: 19.5%; +} +.countdown_show6 .countdown_section { + width: 16.25%; +} +.countdown_show7 .countdown_section { + width: 14%; +} +.countdown_section { + display: block; + float: left; + font-size: 100%; + text-align: center; +} +.countdown_amount { + font-size: 3.5em; + line-height: 1.4em; +} +.countdown_descr { + display: block; + width: 100%; +} diff --git a/src/wolnelektury/static/css/master.book.css b/src/wolnelektury/static/css/master.book.css new file mode 100644 index 000000000..29c84765e --- /dev/null +++ b/src/wolnelektury/static/css/master.book.css @@ -0,0 +1,410 @@ +body { + font-size: 16px; + font: Georgia, "Times New Roman", serif; + line-height: 1.5em; + margin: 0; +} + +a { + color: blue; + text-decoration: none; +} + +#book-text { + margin: 0 3em; + max-width: 36em; +} + +#other-text #book-text { + width: 36em; +} + +/* ================================== */ +/* = Header with logo and menu = */ +/* ================================== */ +#header { + margin: 3.4em 0 0 1.4em; +} + +img { + border: none; +} + +#logo { + font-size: 1.5em; +} +#logo a { + color: black; +} + +#menu { + position: fixed; + left: 0em; + top: 0em; + width: 100%; + height: 1.5em; + background: #333; + color: #FFF; + opacity: 0.9; + z-index: 99; +} + +#menu ul { + list-style: none; + padding: 0; + margin: 0; +} + +#menu li a { + display: block; + float: left; + height: 1.5em; + margin-left: 0.5em; + text-align: center; + color: #FFF; + padding: 0 1em; +} +#menu li a.menu { + padding-right: 1.5em; +} + +#menu li a.menu:hover, #menu li a.menu:active { + color: #000; + background: #FFF url(/static/img/arrow-down.png) no-repeat center right; +} + +#menu li a.menu.selected { + color: #000; + background: #FFF url(/static/img/arrow-up.png) no-repeat center right; +} +#menu a.menu-link { + display: block; + float: left; + height: 1.5em; + margin-left: 0.5em; + text-align: center; + color: #FFF; +} +#menu span { + color: #888; + font-style: italic; + font-size: .75em; + margin-right: 0.5em; +} + + +#toc, #themes, #nota_red, #info, #other-versions, #objects { + position: fixed; + left: 0em; + top: 1.5em; + width: 37em; + padding: 1.5em; + background: #FFF; + border-bottom: 0.25em solid #DDD; + border-right: 0.25em solid #DDD; + display: none; + height: 16em; + overflow-x: hidden; + overflow-y: auto; + opacity: 0.9; + z-index: 99; +} +#download { + position: fixed; + left: 0em; + top: 1.5em; + width: 37em; + padding: 1.5em; + background: #FFF; + border-bottom: 0.25em solid #DDD; + border-right: 0.25em solid #DDD; + display: none; + height: 10em; + overflow-x: hidden; + overflow-y: auto; + opacity: 0.9; + z-index: 99; +} + +#toc ol, #themes ol, #objects ol { + list-style: none; + padding: 0; + margin: 0; +} + +#toc ol li { + font-weight: bold; +} + +#toc ol ol { + padding: 0 0 1.5em 1.5em; + margin: 0; +} + +#toc ol ol li { + font-weight: normal; +} + +#toc h2 { + display: none; +} + +#toc .anchor { + float: none; + margin: 0; + color: blue; + font-size: 16px; + position: inherit; +} + +#info p { + text-align: justify; + margin: 1.5em 0 0; +} + +/* =================================================== */ +/* = Common elements: headings, paragraphs and lines = */ +/* =================================================== */ +h1 { + font-size: 3em; + margin: 0 0 1.5em 0; + text-align: center; + line-height: 1.5em; + font-weight: bold; +} + +h2 { + font-size: 2em; + margin: 1.5em 0 0; + font-weight: bold; + line-height: 1.5em; +} + +h3 { + font-size: 1.5em; + margin: 1.5em 0 0; + font-weight: normal; + line-height: 1.5em; +} + +h4 { + font-size: 1em; + margin: 1.5em 0 0; + line-height: 1.5em; +} + +p { + margin: 0; +} + +/* ======================== */ +/* = Footnotes and themes = */ +/* ======================== */ +.theme-begin { + border-left: 0.1em solid #DDDDDD; + color: #777; + padding: 0 0.5em; + width: 7.5em; + + font-style: normal; + font-weight: normal; + font-variant: normal; + letter-spacing: 0; + text-transform: none; + text-decoration: none; + + font-size: 16px; + float: right; + margin-right: -9.5em; + margin-bottom: 0.5em; + clear: both; + left: 40em; + line-height: 1.5em; + text-align: left; +} + +.annotation { + font-style: normal; + font-weight: normal; + font-size: 12px; + padding-left: 2px; + position: relative; + top: -4px; +} + +#footnotes { + margin-top: 3em; +} + +#footnotes .annotation { + display: block; + float: left; + width: 2.5em; + clear: both; +} + +#footnotes div { + margin: 1.5em 0 0 0; +} + +#footnotes p, #footnotes ul { + margin-left: 2.5em; + font-size: 0.875em; +} + +#footnotes .permalink { + font-size: .75em; +} + +blockquote { + font-size: 0.875em; +} + +/* ============= */ +/* = Numbering = */ +/* ============= */ +.verse, .paragraph { + position:relative; +} +.anchor { + position: absolute; + margin: -0.25em -0.5em; + left: -3em; + color: #777; + font-size: 12px; + width: 2em; + text-align: center; + padding: 0.25em 0.5em; + line-height: 1.5em; +} + +.anchor:hover, #book-text .anchor:active { + color: #FFF; + background-color: #CCC; +} + +/* =================== */ +/* = Custom elements = */ +/* =================== */ +span.author { + font-size: 0.5em; + display: block; + line-height: 1.5em; + margin-bottom: 0.25em; +} + +span.collection { + font-size: 0.375em; + display: block; + line-height: 1.5em; + margin-bottom: -0.25em; +} + +span.subtitle { + font-size: 0.5em; + display: block; + line-height: 1.5em; + margin-top: -0.25em; +} + +span.translator { + font-size: 0.375em; + display: block; + line-height: 1.5em; + margin-top: 0.25em; +} + +div.didaskalia { + font-style: italic; + margin: 0.5em 0 0 1.5em; +} + +div.kwestia { + margin: 0.5em 0 0; +} + +div.stanza { + margin: 1.5em 0 0; +} + +div.kwestia div.stanza { + margin: 0; +} + +p.paragraph { + text-align: justify; + margin: 1.5em 0 0; +} + +p.motto { + text-align: justify; + font-style: italic; + margin: 1.5em 0 0; +} + +p.motto_podpis { + font-size: 0.875em; + text-align: right; +} + +div.fragment { + border-bottom: 0.1em solid #999; + padding-bottom: 1.5em; +} + +div.note p, div.dedication p, div.note p.paragraph, div.dedication p.paragraph { + text-align: right; + font-style: italic; +} + +hr.spacer { + height: 3em; + visibility: hidden; +} + +hr.spacer-line { + margin: 1.5em 0; + border: none; + border-bottom: 0.1em solid #000; +} + +p.spacer-asterisk { + padding: 0; + margin: 1.5em 0; + text-align: center; +} + +div.person-list ol { + list-style: none; + padding: 0 0 0 1.5em; +} + +p.place-and-time { + font-style: italic; +} + +em.math, em.foreign-word, em.book-title, em.didaskalia { + font-style: italic; +} + +em.author-emphasis { + letter-spacing: 0.1em; +} + +em.person { + font-style: normal; + font-variant: small-caps; +} + +.verse:after { + content: "\feff"; +} + + +/* =================================== */ +/* = Hide some elements for printing = */ +/* =================================== */ + +@media print { + #menu {display: none;} +} diff --git a/src/wolnelektury/static/css/master.picture.css b/src/wolnelektury/static/css/master.picture.css new file mode 100644 index 000000000..43abda40a --- /dev/null +++ b/src/wolnelektury/static/css/master.picture.css @@ -0,0 +1,60 @@ + +#picture-view { + left: 0; + right: 0; + position:absolute; + top: 0; + bottom: 0; + z-index: 10; +} + +#picture-view .picture-wrap { + background-repeat: no-repeat; + margin: 0 auto 0 auto; + display: block; + position: relative; + z-index: 10; +// cursor: move; + +} + +.picture-wrap .mark { + border: 2px solid rgba(200, 200, 200, 0.7); + position: absolute; + display: block; +} + +.picture-wrap .mark .label { + position: absolute; + display: block; + background-color: rgba(200, 200, 200, 0.7); + color: rgba(0,0,0,0.6); + font-size: 0.9rem; +// bottom: -1.5em; +} + +.button.inactive:active, +.button.inactive:link, +.button.inactive:visited +{ + color: #606060 !important; + cursor: not-allowed; +} + +#sponsors { + margin-top: 3em; +} +#sponsors img { + width: 100%; +} + +#spinner { + height: 1em; + z-index:10; +} + +.dropdown-body { + font-size: 0.8rem; + background-color: #444; +} + diff --git a/src/wolnelektury/static/css/new.book.css b/src/wolnelektury/static/css/new.book.css new file mode 100644 index 000000000..a5f4c0676 --- /dev/null +++ b/src/wolnelektury/static/css/new.book.css @@ -0,0 +1,275 @@ +body { + font-size: 16px; + font-family: Georgia, "Times New Roman", serif; + line-height: 1.5em; + margin: 0; +} + +a { + color: blue; + text-decoration: none; +} + +/* ================================== */ +/* = Header with logo and menu = */ +/* ================================== */ +#toc ol, #themes ol, #objects ol { + list-style: none; + padding: 0; + margin: 0; +} + +#toc ol li { + font-weight: bold; +} + +#toc ol ol { + padding: 0 0 1.5em 1.5em; + margin: 0; +} + +#toc ol ol li { + font-weight: normal; +} + +#toc h2 { + display: none; +} + +#toc .anchor { + float: none; + margin: 0; + color: blue; + font-size: 16px; + position: inherit; +} + +#info p { + margin: 1em 0 0; +} + +#info .sponsors img { + margin-bottom: 1em; +} + + +/* =================================================== */ +/* = Common elements: headings, paragraphs and lines = */ +/* =================================================== */ +h1 { + font-size: 3em; + margin: 1.5em 0; + text-align: center; + line-height: 1.5em; + font-weight: bold; +} + +h2 { + font-size: 2em; + margin: 1.5em 0 0; + font-weight: bold; + line-height: 1.5em; +} + +h3 { + font-size: 1.5em; + margin: 1.5em 0 0; + font-weight: normal; + line-height: 1.5em; +} + +h4 { + font-size: 1em; + margin: 1.5em 0 0; + line-height: 1.5em; +} + +p { + margin: 0; +} + +/* ======================== */ +/* = Footnotes and themes = */ +/* ======================== */ + +.annotation { + font-style: normal; + font-weight: normal; + font-size: .75em; + padding-left: 2px; + position: relative; + top: -4px; +} + +#footnotes { + margin-top: 3em; +} + +#footnotes .annotation { + display: block; + float: left; + width: 2.5em; + clear: both; +} + +#footnotes div { + margin: 1.5em 0 0 0; +} + +#footnotes p, #footnotes ul { + margin-left: 2.5em; + font-size: 0.875em; +} + +#footnotes .permalink { + font-size: .75em; +} + +blockquote { + font-size: 0.875em; +} + +/* ============= */ +/* = Numbering = */ +/* ============= */ +.verse, .paragraph { + position:relative; +} +/*.anchor { + position: absolute; + margin: -0.25em -0.5em; + color: #777; + font-size: 12px; + text-align: center; + padding: 0.25em 0.5em; + line-height: 1.5em; +}*/ + + +/* =================== */ +/* = Custom elements = */ +/* =================== */ +span.author { + font-size: 0.5em; + display: block; + line-height: 1.5em; + margin-bottom: 0.25em; +} + +span.collection { + font-size: 0.375em; + display: block; + line-height: 1.5em; + margin-bottom: -0.25em; +} + +span.subtitle { + font-size: 0.5em; + display: block; + line-height: 1.5em; + margin-top: -0.25em; +} + +span.translator { + font-size: 0.375em; + display: block; + line-height: 1.5em; + margin-top: 0.25em; +} + +div.didaskalia { + font-style: italic; + margin: 0.5em 0 0 1.5em; +} + +div.kwestia { + margin: 0.5em 0 0; +} + +div.stanza { + margin: 1.5em 0; +} + +div.kwestia div.stanza { + margin: 0; +} + +p.paragraph { + text-align: justify; + margin: 0; + text-indent: 1.5em; +} + +.motto { + text-align: justify; + font-style: italic; + margin: 1.5em 0 0; +} + +p.motto_podpis { + font-size: 0.875em; + text-align: right; + margin-bottom: 1.5em; +} + +div.fragment { + border-bottom: 0.1em solid #999; + padding-bottom: 1.5em; +} + +div.note p, div.dedication p, div.note p.paragraph, div.dedication p.paragraph { + text-align: right; + font-style: italic; +} + +hr.spacer { + height: 3em; + visibility: hidden; +} + +hr.spacer-line { + margin: 1.5em 0; + border: none; + border-bottom: 0.1em solid #000; +} + +p.spacer-asterisk { + padding: 0; + margin: 1.5em 0; + text-align: center; +} + +div.person-list ol { + list-style: none; + padding: 0 0 0 1.5em; +} + +p.place-and-time { + font-style: italic; +} + +em.math, em.foreign-word, em.book-title, em.didaskalia { + font-style: italic; +} + +em.author-emphasis { + letter-spacing: 0.1em; +} + +em.person { + font-style: normal; + font-variant: small-caps; +} + +.verse:after { + content: "\feff"; +} + + +/* =================================== */ +/* = Hide some elements for printing = */ +/* =================================== */ + +@media print { + #menu {display: none;} +} diff --git a/src/wolnelektury/static/css/picture_box.css b/src/wolnelektury/static/css/picture_box.css new file mode 100644 index 000000000..a2ab07d1f --- /dev/null +++ b/src/wolnelektury/static/css/picture_box.css @@ -0,0 +1,29 @@ +.book-wide-box.picture img.cover { + width: 53.5em; + height: auto; +} + +.picture.book-wide-box .book-box-tools { + margin-left: 50em; // 535px image + 15px margin @ 11pt +} + +.picture li.book-box-download { + width: 15em; +} + + +.Picture-item { + display: inline-block; + vertical-align: top; + float: left; +} + + +.picture.book-wide-box .other-tools { + margin: 5em 0 0 0; +} + + +.picture.book-wide-box #theme-list-wrapper { + margin-left: 55em; +} diff --git a/src/wolnelektury/static/css/simple.css b/src/wolnelektury/static/css/simple.css new file mode 100755 index 000000000..f723889a2 --- /dev/null +++ b/src/wolnelektury/static/css/simple.css @@ -0,0 +1,75 @@ +/* Legacy simple style for some very old pages. */ + +html { + margin: 0; +} + +body { + margin: 0; + padding: 1em; + color: #2F4110; + background: #FFF url(/static/img/bg.png) repeat-x; + font-size: .75em; + font-family: Verdana,Arial,Helvetica,sans-serif; +} + + + +#body { + margin-top: 2em; +/* + max-width: 900px; + margin:auto; +*/ + margin-left: 400px; +} + +#logo { + float: left; + margin-left: 100px; + margin-top: 4em; +} + +h1 { + font: bold 2.2em Arial,sans-serif; + padding-top: .7em; + margin-bottom: .2em; +} + + +h2 { + font-size: 1.1em; + margin:0; +} + +a { + color: #295158; + text-decoration: none; +} + + +.plain li { + list-style: none; +} + +li { + margin: 1em; +} + +.clr { + clear: both; +} + + +.more { + text-align: right; +} + +table { + margin-top: 1em; +} + +th { + font-weight: normal; + text-align: left; +} diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png new file mode 100644 index 000000000..954e22dbd Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png new file mode 100644 index 000000000..64ece5707 Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png new file mode 100644 index 000000000..abdc01082 Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png new file mode 100644 index 000000000..9b383f4d2 Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png new file mode 100644 index 000000000..a23baad25 Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 000000000..42ccba269 Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png new file mode 100644 index 000000000..1b1972b56 Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png new file mode 100644 index 000000000..f1273672d Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png new file mode 100644 index 000000000..359397acf Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-icons_222222_256x240.png b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_222222_256x240.png new file mode 100644 index 000000000..b273ff111 Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_222222_256x240.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_228ef1_256x240.png new file mode 100644 index 000000000..a641a371a Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_228ef1_256x240.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png new file mode 100644 index 000000000..85e63e9f6 Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png new file mode 100644 index 000000000..e117effa3 Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/images/ui-icons_ffffff_256x240.png b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_ffffff_256x240.png new file mode 100644 index 000000000..42f8f992c Binary files /dev/null and b/src/wolnelektury/static/css/ui-lightness/images/ui-icons_ffffff_256x240.png differ diff --git a/src/wolnelektury/static/css/ui-lightness/jquery-ui-1.8.16.custom.css b/src/wolnelektury/static/css/ui-lightness/jquery-ui-1.8.16.custom.css new file mode 100644 index 000000000..da10fff71 --- /dev/null +++ b/src/wolnelektury/static/css/ui-lightness/jquery-ui-1.8.16.custom.css @@ -0,0 +1,342 @@ +/* + * jQuery UI CSS Framework 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/* + * jQuery UI CSS Framework 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } +.ui-widget-content a { color: #333333; } +.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } +.ui-widget-header a { color: #ffffff; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } +.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; } +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } + +/* Overlays */ +.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } +.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* + * jQuery UI Autocomplete 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete#theming + */ +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu 1.8.16 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} diff --git a/src/wolnelektury/static/img/1percent-big.png b/src/wolnelektury/static/img/1percent-big.png new file mode 100644 index 000000000..333413ee6 Binary files /dev/null and b/src/wolnelektury/static/img/1percent-big.png differ diff --git a/src/wolnelektury/static/img/android-poster.png b/src/wolnelektury/static/img/android-poster.png new file mode 100644 index 000000000..a518650d4 Binary files /dev/null and b/src/wolnelektury/static/img/android-poster.png differ diff --git a/src/wolnelektury/static/img/arrow-down.png b/src/wolnelektury/static/img/arrow-down.png new file mode 100644 index 000000000..0e32315c0 Binary files /dev/null and b/src/wolnelektury/static/img/arrow-down.png differ diff --git a/src/wolnelektury/static/img/arrow-gray.png b/src/wolnelektury/static/img/arrow-gray.png new file mode 100644 index 000000000..b1c590d04 Binary files /dev/null and b/src/wolnelektury/static/img/arrow-gray.png differ diff --git a/src/wolnelektury/static/img/arrow-gray.svg b/src/wolnelektury/static/img/arrow-gray.svg new file mode 100644 index 000000000..02d7075c3 --- /dev/null +++ b/src/wolnelektury/static/img/arrow-gray.svg @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.1" + width="14.117774" + height="7.4593911" + id="svg6288"> + <defs + id="defs6290" /> + <metadata + id="metadata6293"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + transform="translate(-286.99505,-661.55707)" + id="layer1"> + <g + transform="matrix(0.52354174,0,0,0.52354174,92.72559,391.47243)" + id="layer1-0"> + <path + d="m 397.25241,515.87986 -12.65419,12.65419 -12.74921,-12.62294 -0.78125,0.78125 13.56171,13.43544 13.40419,-13.43544 z" + id="rect4090" + style="fill:#717171;fill-opacity:1;stroke:none" /> + </g> + </g> +</svg> diff --git a/src/wolnelektury/static/img/arrow-teal.png b/src/wolnelektury/static/img/arrow-teal.png new file mode 100644 index 000000000..ce406336b Binary files /dev/null and b/src/wolnelektury/static/img/arrow-teal.png differ diff --git a/src/wolnelektury/static/img/arrow-teal.svg b/src/wolnelektury/static/img/arrow-teal.svg new file mode 100644 index 000000000..478ed07c2 --- /dev/null +++ b/src/wolnelektury/static/img/arrow-teal.svg @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.1" + width="14.117774" + height="7.4593911" + id="svg6288"> + <defs + id="defs6290" /> + <metadata + id="metadata6293"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + transform="translate(-284.86155,-665.60555)" + id="layer1"> + <g + transform="matrix(0.52354174,0,0,0.52354174,90.59209,395.52091)" + id="g5216" + style="fill:#0d7e85;fill-opacity:1"> + <path + d="m 397.25241,515.87986 -12.65419,12.65419 -12.74921,-12.62294 -0.78125,0.78125 13.56171,13.43544 13.40419,-13.43544 z" + id="path5218" + style="fill:#0d7e85;fill-opacity:1;stroke:none" /> + </g> + </g> +</svg> diff --git a/src/wolnelektury/static/img/arrow-up.png b/src/wolnelektury/static/img/arrow-up.png new file mode 100644 index 000000000..cdf9cf635 Binary files /dev/null and b/src/wolnelektury/static/img/arrow-up.png differ diff --git a/src/wolnelektury/static/img/auth/facebook.png b/src/wolnelektury/static/img/auth/facebook.png new file mode 100644 index 000000000..f9b6e7149 Binary files /dev/null and b/src/wolnelektury/static/img/auth/facebook.png differ diff --git a/src/wolnelektury/static/img/auth/google.png b/src/wolnelektury/static/img/auth/google.png new file mode 100644 index 000000000..bf7d11240 Binary files /dev/null and b/src/wolnelektury/static/img/auth/google.png differ diff --git a/src/wolnelektury/static/img/auth/openid.png b/src/wolnelektury/static/img/auth/openid.png new file mode 100644 index 000000000..83e97691f Binary files /dev/null and b/src/wolnelektury/static/img/auth/openid.png differ diff --git a/src/wolnelektury/static/img/auth/twitter.png b/src/wolnelektury/static/img/auth/twitter.png new file mode 100644 index 000000000..d2a55029d Binary files /dev/null and b/src/wolnelektury/static/img/auth/twitter.png differ diff --git a/src/wolnelektury/static/img/backdrop/boltron-3212284622.jpg b/src/wolnelektury/static/img/backdrop/boltron-3212284622.jpg new file mode 100644 index 000000000..7fe148c19 Binary files /dev/null and b/src/wolnelektury/static/img/backdrop/boltron-3212284622.jpg differ diff --git a/src/wolnelektury/static/img/backdrop/book-drawer2.jpg b/src/wolnelektury/static/img/backdrop/book-drawer2.jpg new file mode 100644 index 000000000..88a1ee4be Binary files /dev/null and b/src/wolnelektury/static/img/backdrop/book-drawer2.jpg differ diff --git a/src/wolnelektury/static/img/backdrop/horiavarlan-4268896468.jpg b/src/wolnelektury/static/img/backdrop/horiavarlan-4268896468.jpg new file mode 100644 index 000000000..acc80b6e7 Binary files /dev/null and b/src/wolnelektury/static/img/backdrop/horiavarlan-4268896468.jpg differ diff --git a/src/wolnelektury/static/img/bg-header.png b/src/wolnelektury/static/img/bg-header.png new file mode 100644 index 000000000..4e4cdf9a7 Binary files /dev/null and b/src/wolnelektury/static/img/bg-header.png differ diff --git a/src/wolnelektury/static/img/bg.png b/src/wolnelektury/static/img/bg.png new file mode 100644 index 000000000..be7d63a7c Binary files /dev/null and b/src/wolnelektury/static/img/bg.png differ diff --git a/src/wolnelektury/static/img/book-parent.png b/src/wolnelektury/static/img/book-parent.png new file mode 100644 index 000000000..566859807 Binary files /dev/null and b/src/wolnelektury/static/img/book-parent.png differ diff --git a/src/wolnelektury/static/img/book.png b/src/wolnelektury/static/img/book.png new file mode 100644 index 000000000..f26483979 Binary files /dev/null and b/src/wolnelektury/static/img/book.png differ diff --git a/src/wolnelektury/static/img/doodle/20110908-android.png b/src/wolnelektury/static/img/doodle/20110908-android.png new file mode 100644 index 000000000..664b579f5 Binary files /dev/null and b/src/wolnelektury/static/img/doodle/20110908-android.png differ diff --git a/src/wolnelektury/static/img/doodle/20110908-logo.png b/src/wolnelektury/static/img/doodle/20110908-logo.png new file mode 100644 index 000000000..f4ab58319 Binary files /dev/null and b/src/wolnelektury/static/img/doodle/20110908-logo.png differ diff --git a/src/wolnelektury/static/img/download.png b/src/wolnelektury/static/img/download.png new file mode 100644 index 000000000..54d1bf904 Binary files /dev/null and b/src/wolnelektury/static/img/download.png differ diff --git a/src/wolnelektury/static/img/download.svg b/src/wolnelektury/static/img/download.svg new file mode 100644 index 000000000..cb49aa2ba --- /dev/null +++ b/src/wolnelektury/static/img/download.svg @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.1" + width="21.03125" + height="21.03125" + id="svg6288"> + <defs + id="defs6290" /> + <metadata + id="metadata6293"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + transform="translate(-232.34152,-641.84656)" + id="layer1"> + <g + transform="translate(-139.3058,123.6384)" + id="layer1-8" + style="fill:#0d7e85;fill-opacity:1"> + <path + d="m 382.14732,518.20816 c -5.80761,0 -10.5,4.69238 -10.5,10.5 0,5.80762 4.69239,10.53125 10.5,10.53125 5.80762,0 10.53125,-4.72363 10.53125,-10.53125 0,-5.80762 -4.72363,-10.5 -10.53125,-10.5 z m -3.21875,7.65625 3.21875,3.28125 3.21875,-3.25 0.6875,0.625 -3.9375,4 -3.875,-4 0.6875,-0.65625 z m -0.3125,6.28125 7.0625,0 0,0.96875 -7.0625,0 0,-0.96875 z" + id="path3167" + style="fill:#0d7e85;fill-opacity:1;stroke:none" /> + </g> + </g> +</svg> diff --git a/src/wolnelektury/static/img/epub-www.jpg b/src/wolnelektury/static/img/epub-www.jpg new file mode 100644 index 000000000..84016cf6e Binary files /dev/null and b/src/wolnelektury/static/img/epub-www.jpg differ diff --git a/src/wolnelektury/static/img/epub.png b/src/wolnelektury/static/img/epub.png new file mode 100644 index 000000000..32510fdfb Binary files /dev/null and b/src/wolnelektury/static/img/epub.png differ diff --git a/src/wolnelektury/static/img/favicon.ico b/src/wolnelektury/static/img/favicon.ico new file mode 100644 index 000000000..3f2aacc37 Binary files /dev/null and b/src/wolnelektury/static/img/favicon.ico differ diff --git a/src/wolnelektury/static/img/favicon.png b/src/wolnelektury/static/img/favicon.png new file mode 100644 index 000000000..9794f3588 Binary files /dev/null and b/src/wolnelektury/static/img/favicon.png differ diff --git a/src/wolnelektury/static/img/indicator.gif b/src/wolnelektury/static/img/indicator.gif new file mode 100644 index 000000000..085ccaeca Binary files /dev/null and b/src/wolnelektury/static/img/indicator.gif differ diff --git a/src/wolnelektury/static/img/kindle-poster-260.png b/src/wolnelektury/static/img/kindle-poster-260.png new file mode 100644 index 000000000..1fd435eee Binary files /dev/null and b/src/wolnelektury/static/img/kindle-poster-260.png differ diff --git a/src/wolnelektury/static/img/kindle-poster.png b/src/wolnelektury/static/img/kindle-poster.png new file mode 100644 index 000000000..63560d273 Binary files /dev/null and b/src/wolnelektury/static/img/kindle-poster.png differ diff --git a/src/wolnelektury/static/img/licenses/cc-by-sa.png b/src/wolnelektury/static/img/licenses/cc-by-sa.png new file mode 100644 index 000000000..7b15bc451 Binary files /dev/null and b/src/wolnelektury/static/img/licenses/cc-by-sa.png differ diff --git a/src/wolnelektury/static/img/licenses/cc-by-sa.svg b/src/wolnelektury/static/img/licenses/cc-by-sa.svg new file mode 100644 index 000000000..140e9b8c6 --- /dev/null +++ b/src/wolnelektury/static/img/licenses/cc-by-sa.svg @@ -0,0 +1,482 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.0" + width="651.2334" + height="150.00021" + id="svg1833" + sodipodi:version="0.32" + inkscape:version="0.48.3.1 r9886" + sodipodi:docname="cc-by-sa.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="/home/rczajka/workspace/wolnelektury/apps/wolnelektury_core/static/img/licenses/cc-by-sa.png" + inkscape:export-xdpi="12.599982" + inkscape:export-ydpi="12.599982"> + <metadata + id="metadata74"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <sodipodi:namedview + inkscape:window-height="425" + inkscape:window-width="569" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + guidetolerance="10.0" + gridtolerance="10.0" + objecttolerance="10.0" + borderopacity="1.0" + bordercolor="#666666" + pagecolor="#ffffff" + id="base" + showgrid="false" + inkscape:zoom="0.21950618" + inkscape:cx="378.75899" + inkscape:cy="295.52172" + inkscape:window-x="573" + inkscape:window-y="352" + inkscape:current-layer="svg1833" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" + inkscape:window-maximized="0" /> + <defs + id="defs1835"> + <linearGradient + id="linearGradient3117"> + <stop + style="stop-color:#000000;stop-opacity:0" + offset="0" + id="stop3131" /> + <stop + style="stop-color:#000000;stop-opacity:0.16494845" + offset="1" + id="stop3121" /> + </linearGradient> + <linearGradient + x1="233.35068" + y1="303.90625" + x2="315.43057" + y2="303.90625" + id="linearGradient3123" + xlink:href="#linearGradient3117" + gradientUnits="userSpaceOnUse" /> + <linearGradient + id="linearGradient15296"> + <stop + style="stop-color:#ff5959;stop-opacity:1" + offset="0" + id="stop15298" /> + <stop + style="stop-color:#df0000;stop-opacity:1" + offset="1" + id="stop15300" /> + </linearGradient> + <linearGradient + id="linearGradient17969"> + <stop + style="stop-color:#ffb73d;stop-opacity:1" + offset="0" + id="stop17971" /> + <stop + style="stop-color:#ffa000;stop-opacity:1" + offset="1" + id="stop17973" /> + </linearGradient> + <linearGradient + id="linearGradient18870"> + <stop + style="stop-color:#fff18d;stop-opacity:1" + offset="0" + id="stop18872" /> + <stop + style="stop-color:#ffcd01;stop-opacity:1" + offset="1" + id="stop18874" /> + </linearGradient> + <linearGradient + id="linearGradient23319"> + <stop + style="stop-color:#ffffff;stop-opacity:1" + offset="0" + id="stop23321" /> + <stop + style="stop-color:#ffffff;stop-opacity:0" + offset="1" + id="stop23323" /> + </linearGradient> + <linearGradient + id="linearGradient20648"> + <stop + style="stop-color:#00a000;stop-opacity:0.25892857" + offset="0" + id="stop20650" /> + <stop + style="stop-color:#008000;stop-opacity:1" + offset="1" + id="stop20652" /> + </linearGradient> + <linearGradient + id="linearGradient21541"> + <stop + style="stop-color:#263cce;stop-opacity:1" + offset="0" + id="stop21543" /> + <stop + style="stop-color:#263cce;stop-opacity:0" + offset="1" + id="stop21545" /> + </linearGradient> + <linearGradient + id="linearGradient25099"> + <stop + style="stop-color:#652f99;stop-opacity:1" + offset="0" + id="stop25101" /> + <stop + style="stop-color:#502679;stop-opacity:0.65178573" + offset="1" + id="stop25103" /> + </linearGradient> + <linearGradient + x1="89" + y1="118" + x2="126" + y2="155" + id="linearGradient3400" + xlink:href="#linearGradient15296" + gradientUnits="userSpaceOnUse" /> + <linearGradient + x1="89.626488" + y1="191.40311" + x2="126.02959" + y2="155" + id="linearGradient3402" + xlink:href="#linearGradient17969" + gradientUnits="userSpaceOnUse" /> + <linearGradient + x1="157.68582" + y1="186.68582" + x2="126" + y2="155" + id="linearGradient3404" + xlink:href="#linearGradient18870" + gradientUnits="userSpaceOnUse" /> + <linearGradient + x1="149.80643" + y1="178.80643" + x2="92.016411" + y2="121.01641" + id="linearGradient3406" + xlink:href="#linearGradient23319" + gradientUnits="userSpaceOnUse" /> + <linearGradient + x1="91.149223" + y1="189.85078" + x2="126" + y2="155" + id="linearGradient3408" + xlink:href="#linearGradient20648" + gradientUnits="userSpaceOnUse" /> + <linearGradient + x1="89" + y1="155" + x2="163" + y2="155" + id="linearGradient3410" + xlink:href="#linearGradient21541" + gradientUnits="userSpaceOnUse" /> + <linearGradient + x1="126" + y1="155" + x2="57.340927" + y2="115.35966" + id="linearGradient3412" + xlink:href="#linearGradient25099" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3117" + id="linearGradient3103" + gradientUnits="userSpaceOnUse" + x1="233.35068" + y1="303.90625" + x2="315.43057" + y2="303.90625" + gradientTransform="matrix(10,0,0,10,-2333.5067,-2872.5692)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient15296" + id="linearGradient3105" + gradientUnits="userSpaceOnUse" + x1="89" + y1="118" + x2="126" + y2="155" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient17969" + id="linearGradient3107" + gradientUnits="userSpaceOnUse" + x1="89.626488" + y1="191.40311" + x2="126.02959" + y2="155" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient18870" + id="linearGradient3109" + gradientUnits="userSpaceOnUse" + x1="157.68582" + y1="186.68582" + x2="126" + y2="155" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient23319" + id="linearGradient3111" + gradientUnits="userSpaceOnUse" + x1="149.80643" + y1="178.80643" + x2="92.016411" + y2="121.01641" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient20648" + id="linearGradient3113" + gradientUnits="userSpaceOnUse" + x1="91.149223" + y1="189.85078" + x2="126" + y2="155" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient21541" + id="linearGradient3115" + gradientUnits="userSpaceOnUse" + x1="89" + y1="155" + x2="163" + y2="155" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient25099" + id="linearGradient3118" + gradientUnits="userSpaceOnUse" + x1="126" + y1="155" + x2="57.340927" + y2="115.35966" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient15296" + id="linearGradient3181" + gradientUnits="userSpaceOnUse" + x1="89" + y1="118" + x2="126" + y2="155" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient17969" + id="linearGradient3183" + gradientUnits="userSpaceOnUse" + x1="89.626488" + y1="191.40311" + x2="126.02959" + y2="155" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient18870" + id="linearGradient3185" + gradientUnits="userSpaceOnUse" + x1="157.68582" + y1="186.68582" + x2="126" + y2="155" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient23319" + id="linearGradient3187" + gradientUnits="userSpaceOnUse" + x1="149.80643" + y1="178.80643" + x2="92.016411" + y2="121.01641" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient20648" + id="linearGradient3189" + gradientUnits="userSpaceOnUse" + x1="91.149223" + y1="189.85078" + x2="126" + y2="155" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient21541" + id="linearGradient3191" + gradientUnits="userSpaceOnUse" + x1="89" + y1="155" + x2="163" + y2="155" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient25099" + id="linearGradient3193" + gradientUnits="userSpaceOnUse" + x1="126" + y1="155" + x2="57.340927" + y2="115.35966" /> + </defs> + <g + id="g25107" + transform="matrix(0.69444443,0,0,0.69444443,-102.43055,-85.76383)" + inkscape:export-filename="/home/rczajka/workspace/wolnelektury/apps/wolnelektury_core/static/img/licenses/cc-by-sa.png" + inkscape:export-xdpi="8.9999876" + inkscape:export-ydpi="8.9999876"> + <path + id="path11693" + style="fill:url(#linearGradient3181);fill-opacity:1;fill-rule:nonzero;stroke:none" + transform="matrix(2.918919,0,0,2.918919,-112.2838,-220.9323)" + d="m 163,155 c 0,20.43454 -16.56546,37 -37,37 -20.43454,0 -37,-16.56546 -37,-37 0,-20.43454 16.56546,-37 37,-37 l 0,37 37,0 z" + inkscape:connector-curvature="0" /> + <path + id="path10806" + style="fill:url(#linearGradient3183);fill-opacity:1;fill-rule:nonzero;stroke:none" + transform="matrix(0,2.501931,-2.501931,0,643.2993,-83.74315)" + d="m 163,155 c 0,20.43454 -16.56546,37 -37,37 -20.43454,0 -37,-16.56546 -37,-37 0,-20.43454 16.56546,-37 37,-37 l 0,37 37,0 z" + inkscape:connector-curvature="0" /> + <path + id="path8149" + style="fill:url(#linearGradient3185);fill-opacity:1;fill-rule:nonzero;stroke:none" + transform="matrix(-2.084941,0,0,-2.084941,518.2029,554.6661)" + d="m 163,155 c 0,20.43454 -16.56546,37 -37,37 -20.43454,0 -37,-16.56546 -37,-37 0,-20.43454 16.56546,-37 37,-37 l 0,37 37,0 z" + inkscape:connector-curvature="0" /> + <path + id="path13467" + style="fill:url(#linearGradient3187);fill-opacity:1;fill-rule:nonzero;stroke:none" + transform="matrix(0,-1.667952,1.667952,0,-3.032742,441.6625)" + d="m 163,155 c 0,20.43454 -16.56546,37 -37,37 -20.43454,0 -37,-16.56546 -37,-37 0,-20.43454 16.56546,-37 37,-37 l 0,37 37,0 z" + inkscape:connector-curvature="0" /> + <path + id="path6377" + style="fill:url(#linearGradient3189);fill-opacity:1;fill-rule:nonzero;stroke:none" + transform="matrix(1.250965,0,0,1.250965,97.87857,37.60054)" + d="m 163,155 c 0,20.43454 -16.56546,37 -37,37 -20.43454,0 -37,-16.56546 -37,-37 0,-20.43454 16.56546,-37 37,-37 l 0,37 37,0 z" + inkscape:connector-curvature="0" /> + <path + id="path3654" + style="fill:url(#linearGradient3191);fill-opacity:1;fill-rule:nonzero;stroke:none" + transform="matrix(0,0.833976,-0.833976,0,384.7666,127.0362)" + d="m 163,155 c 0,20.43454 -16.56546,37 -37,37 -20.43454,0 -37,-16.56546 -37,-37 0,-20.43454 16.56546,-37 37,-37 l 0,37 37,0 z" + inkscape:connector-curvature="0" /> + <path + id="path3660" + style="fill:url(#linearGradient3193);fill-opacity:1;fill-rule:nonzero;stroke:none" + transform="matrix(-0.416988,0,0,-0.416988,308.0406,296.1335)" + d="m 163,155 c 0,20.43454 -16.56546,37 -37,37 -20.43454,0 -37,-16.56546 -37,-37 0,-20.43454 16.56546,-37 37,-37 20.43454,0 37,16.56546 37,37 z" + inkscape:connector-curvature="0" /> + </g> + <g + transform="matrix(10,0,0,10,-2483.3886,-2889.9518)" + id="g3877" + style="fill:#b3b3b3;fill-opacity:1" + inkscape:export-filename="/home/rczajka/workspace/wolnelektury/apps/wolnelektury_core/static/img/licenses/cc-by-sa.png" + inkscape:export-xdpi="12.64246" + inkscape:export-ydpi="12.64246"> + <g + transform="matrix(0.234375,0,0,0.234364,281.758,288.9959)" + style="display:inline;fill:#b3b3b3;fill-opacity:1" + id="layer3"> + <path + d="M 31.1875,0 C 13.904525,0.43835438 0,14.612004 0,32 0,49.663996 14.336004,64 32,64 49.663996,64 64,49.663996 64,32 64,14.336004 49.663996,0 32,0 31.724,0 31.461833,-0.00695801 31.1875,0 z M 31.15625,5.5 C 31.439783,5.49101 31.714297,5.5 32,5.5 46.628003,5.4999998 58.5,17.371998 58.5,32 58.499998,46.628001 46.628002,58.5 32,58.5 17.371999,58.499999 5.5,46.628002 5.5,32 5.4999999,17.657701 16.922915,5.9512829 31.15625,5.5 z" + style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path3742" + inkscape:connector-curvature="0" /> + <g + id="g6525" + style="fill:#b3b3b3;fill-opacity:1"> + <path + d="m 36.6875,15.75 c 0,2.554317 -2.070683,4.625 -4.625,4.625 -2.554317,0 -4.625,-2.070683 -4.625,-4.625 0,-2.554317 2.070683,-4.625 4.625,-4.625 2.554317,0 4.625,2.070683 4.625,4.625 l 0,0 z" + transform="translate(-0.0625,0.185547)" + style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none" + id="path2838" + inkscape:connector-curvature="0" /> + <path + d="m 27.215125,52.689453 9.56975,0 0,-15.378905 2.893008,0 c 0,0 -0.0011,-10.990367 0,-12.720111 -0.0028,-0.456306 0.04119,-1.365057 -0.620739,-2.026989 -0.661932,-0.661932 -1.555399,-0.621804 -2.02699,-0.620739 -0.47159,0.0011 -9.588717,0.0011 -10.060308,0 -0.471591,-0.0011 -1.365057,-0.04119 -2.026989,0.620739 -0.661933,0.661932 -0.617898,1.570683 -0.620739,2.026989 0.0011,1.729744 0,12.720111 0,12.720111 l 2.893007,0 0,15.378905 z" + style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none" + id="path3746" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + transform="matrix(0.236997,0,0,0.236675,265.0539,288.9952)" + id="g3561" + style="fill:#b3b3b3;fill-opacity:1"> + <g + id="Background" + style="fill:#b3b3b3;fill-opacity:1" /> + <g + id="Guides" + style="fill:#b3b3b3;fill-opacity:1" /> + <g + id="Foreground" + style="fill:#b3b3b3;fill-opacity:1"> + <g + id="g3566" + style="fill:#b3b3b3;fill-opacity:1"> + <path + d="M 31.603,0 C 22.92,0 15.28,3.213 9.376,9.203 3.299,15.368 0,23.355 0,31.69 c 0,8.421 3.212,16.235 9.29,22.312 6.078,6.078 13.978,9.376 22.313,9.376 8.334,0 16.409,-3.299 22.66,-9.463 5.904,-5.817 9.029,-13.544 9.029,-22.226 0,-8.595 -3.125,-16.409 -9.116,-22.4 C 48.098,3.213 40.285,0 31.603,0 z m 0.086,5.73 c 7.12,0 13.458,2.691 18.406,7.64 4.862,4.862 7.466,11.287 7.466,18.319 0,7.119 -2.518,13.37 -7.379,18.146 -5.123,5.036 -11.721,7.727 -18.493,7.727 -6.858,0 -13.283,-2.691 -18.232,-7.64 C 8.508,44.973 5.73,38.462 5.73,31.69 5.73,24.831 8.508,18.32 13.457,13.284 18.319,8.335 24.57,5.73 31.689,5.73 z" + style="fill-rule:evenodd;fill:#b3b3b3;fill-opacity:1" + id="path3568" + inkscape:connector-curvature="0" /> + <path + d="m 31.281,26.424 c -1.79,-3.264 -4.844,-4.563 -8.389,-4.563 -5.16,0 -9.267,3.65 -9.267,9.829 0,6.283 3.861,9.829 9.442,9.829 3.581,0 6.635,-1.966 8.319,-4.949 l -3.931,-2.001 c -0.878,2.106 -2.212,2.738 -3.896,2.738 -2.914,0 -4.248,-2.422 -4.248,-5.616 0,-3.194 1.124,-5.617 4.248,-5.617 0.842,0 2.527,0.457 3.51,2.562 l 4.212,-2.212 z" + style="fill-rule:evenodd;fill:#b3b3b3;fill-opacity:1" + id="path3570" + inkscape:connector-curvature="0" /> + <path + d="m 49.562,26.424 c -1.79,-3.264 -4.844,-4.563 -8.389,-4.563 -5.16,0 -9.267,3.65 -9.267,9.829 0,6.283 3.861,9.829 9.443,9.829 3.58,0 6.634,-1.966 8.319,-4.949 l -3.931,-2.001 c -0.878,2.106 -2.211,2.738 -3.896,2.738 -2.914,0 -4.248,-2.422 -4.248,-5.616 0,-3.194 1.124,-5.617 4.248,-5.617 0.842,0 2.527,0.457 3.51,2.562 l 4.211,-2.212 z" + style="fill-rule:evenodd;fill:#b3b3b3;fill-opacity:1" + id="path3572" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + <g + transform="matrix(0.234375,0,0,0.234364,298.4622,288.9959)" + id="g3832" + style="fill:#b3b3b3;fill-opacity:1"> + <path + d="M 31.1875,0 C 13.904525,0.43835438 0,14.612004 0,32 0,49.663996 14.336004,64 32,64 49.663996,64 64,49.663996 64,32 64,14.336004 49.663996,0 32,0 31.724,0 31.461833,-0.00695801 31.1875,0 z M 31.15625,5.5 C 31.439783,5.49101 31.714297,5.5 32,5.5 46.628003,5.4999998 58.5,17.371998 58.5,32 58.499998,46.628001 46.628002,58.5 32,58.5 17.371999,58.499999 5.5,46.628002 5.5,32 5.4999999,17.657701 16.922915,5.9512829 31.15625,5.5 z" + style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path1334" + inkscape:connector-curvature="0" /> + <path + d="m 18.115779,26.784547 -2.740778,0 6.21875,6.96875 6.21875,-6.96875 -2.243852,0 c 0.486099,-3.3998 3.476871,-5.586425 6.931352,-5.3125 0.136556,0.01083 0.267854,0 0.40625,0 5.62743,0 7.84682,4.255865 8.03125,10.53125 0.19247,6.549199 -3.60349,10.620376 -8.03125,10.53125 -4.673386,-0.09221 -6.444049,-2.32751 -7.125,-5.71875 l -8.34375,0 c 1.373177,7.811231 7.123855,12.392036 15.28125,12.40625 9.23458,0.01625 15.906248,-7.709347 15.906248,-17.21875 0,-10.154893 -6.669368,-17.21875 -15.906248,-17.21875 -0.274244,0 -0.541652,-0.01489 -0.8125,0 -0.0656,0.0036 -0.12197,-0.0011 -0.1875,0 -5.772209,0.09597 -13.602929,4.139742 -13.602972,12 z" + style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path2371" + inkscape:connector-curvature="0" /> + </g> + </g> +</svg> diff --git a/src/wolnelektury/static/img/listen.png b/src/wolnelektury/static/img/listen.png new file mode 100644 index 000000000..68627221c Binary files /dev/null and b/src/wolnelektury/static/img/listen.png differ diff --git a/src/wolnelektury/static/img/listen.svg b/src/wolnelektury/static/img/listen.svg new file mode 100644 index 000000000..714768f54 --- /dev/null +++ b/src/wolnelektury/static/img/listen.svg @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.1" + width="21.03125" + height="20.96875" + id="svg6288"> + <defs + id="defs6290" /> + <metadata + id="metadata6293"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + transform="translate(-267.1717,-650.13426)" + id="layer1"> + <g + transform="translate(-105.38857,136.37923)" + id="layer1-6" + style="fill:#0d7e85;fill-opacity:1"> + <path + d="m 383.09152,513.75503 c -5.80553,0 -10.53125,4.67683 -10.53125,10.46875 0,5.79192 4.72572,10.5 10.53125,10.5 5.80553,0 10.5,-4.70808 10.5,-10.5 -10e-4,-5.79103 -4.69536,-10.46875 -10.5,-10.46875 z m 3.5,6.59375 0,6.625 c 0.0276,0.0977 0.0625,0.20878 0.0625,0.3125 0,0.82986 -0.92754,1.5 -2.0625,1.5 -1.13496,0 -2.03125,-0.67014 -2.03125,-1.5 0,-0.82986 0.89629,-1.5 2.03125,-1.5 0.35672,0 0.67536,0.0709 0.96875,0.1875 l 0.0312,-4.1875 -4,0.96875 0.0312,4.1875 c 0.0276,0.0977 0.0312,0.20878 0.0312,0.3125 0,0.82986 -0.92754,1.5 -2.0625,1.5 -1.13496,0 -2.03125,-0.67014 -2.03125,-1.5 0,-0.82986 0.89629,-1.5 2.03125,-1.5 0.34893,0 0.67995,0.0756 0.96875,0.1875 l 0,-4.15625 6.03125,-1.4375 z m -7,6.375 c -0.56138,0 -1.03125,0.21931 -1.03125,0.5 0,0.28069 0.46987,0.53125 1.03125,0.53125 0.56138,0 1,-0.25056 1,-0.53125 -1.2e-4,-0.28065 -0.43871,-0.5 -1,-0.5 z m 5,0.0312 c -0.56138,0 -1.03125,0.21931 -1.03125,0.5 0,0.28069 0.46987,0.53125 1.03125,0.53125 0.56138,0 1,-0.25056 1,-0.53125 -1.2e-4,-0.28065 -0.43871,-0.5 -1,-0.5 z" + id="path3184" + style="fill:#0d7e85;fill-opacity:1;stroke:none" /> + </g> + </g> +</svg> diff --git a/src/wolnelektury/static/img/logo-220.png b/src/wolnelektury/static/img/logo-220.png new file mode 100644 index 000000000..9b15e88a3 Binary files /dev/null and b/src/wolnelektury/static/img/logo-220.png differ diff --git a/src/wolnelektury/static/img/logo-bez.png b/src/wolnelektury/static/img/logo-bez.png new file mode 100644 index 000000000..213c442d4 Binary files /dev/null and b/src/wolnelektury/static/img/logo-bez.png differ diff --git a/src/wolnelektury/static/img/logo-big.png b/src/wolnelektury/static/img/logo-big.png new file mode 100644 index 000000000..fae49ea96 Binary files /dev/null and b/src/wolnelektury/static/img/logo-big.png differ diff --git a/src/wolnelektury/static/img/logo-fbc.png b/src/wolnelektury/static/img/logo-fbc.png new file mode 100644 index 000000000..c7802d3d3 Binary files /dev/null and b/src/wolnelektury/static/img/logo-fbc.png differ diff --git a/src/wolnelektury/static/img/logo-neon.png b/src/wolnelektury/static/img/logo-neon.png new file mode 100644 index 000000000..c729463be Binary files /dev/null and b/src/wolnelektury/static/img/logo-neon.png differ diff --git a/src/wolnelektury/static/img/logo.png b/src/wolnelektury/static/img/logo.png new file mode 100644 index 000000000..398f45d01 Binary files /dev/null and b/src/wolnelektury/static/img/logo.png differ diff --git a/src/wolnelektury/static/img/logo_nck.jpg b/src/wolnelektury/static/img/logo_nck.jpg new file mode 100644 index 000000000..c030f6a9a Binary files /dev/null and b/src/wolnelektury/static/img/logo_nck.jpg differ diff --git a/src/wolnelektury/static/img/logo_nck_200horiz_trans.png b/src/wolnelektury/static/img/logo_nck_200horiz_trans.png new file mode 100644 index 000000000..897a8352b Binary files /dev/null and b/src/wolnelektury/static/img/logo_nck_200horiz_trans.png differ diff --git a/src/wolnelektury/static/img/logo_nck_200trans.png b/src/wolnelektury/static/img/logo_nck_200trans.png new file mode 100644 index 000000000..2731aacec Binary files /dev/null and b/src/wolnelektury/static/img/logo_nck_200trans.png differ diff --git a/src/wolnelektury/static/img/mobi.png b/src/wolnelektury/static/img/mobi.png new file mode 100644 index 000000000..1631b896d Binary files /dev/null and b/src/wolnelektury/static/img/mobi.png differ diff --git a/src/wolnelektury/static/img/odt.png b/src/wolnelektury/static/img/odt.png new file mode 100644 index 000000000..c0c2602f1 Binary files /dev/null and b/src/wolnelektury/static/img/odt.png differ diff --git a/src/wolnelektury/static/img/payu.png b/src/wolnelektury/static/img/payu.png new file mode 100644 index 000000000..2e8abf480 Binary files /dev/null and b/src/wolnelektury/static/img/payu.png differ diff --git a/src/wolnelektury/static/img/pdf.png b/src/wolnelektury/static/img/pdf.png new file mode 100644 index 000000000..5fe5bbe23 Binary files /dev/null and b/src/wolnelektury/static/img/pdf.png differ diff --git a/src/wolnelektury/static/img/procent.png b/src/wolnelektury/static/img/procent.png new file mode 100644 index 000000000..3d0f82d81 Binary files /dev/null and b/src/wolnelektury/static/img/procent.png differ diff --git a/src/wolnelektury/static/img/progress-pixel.png b/src/wolnelektury/static/img/progress-pixel.png new file mode 100644 index 000000000..5af1bfdfe Binary files /dev/null and b/src/wolnelektury/static/img/progress-pixel.png differ diff --git a/src/wolnelektury/static/img/read.png b/src/wolnelektury/static/img/read.png new file mode 100644 index 000000000..1d5ab0e7b Binary files /dev/null and b/src/wolnelektury/static/img/read.png differ diff --git a/src/wolnelektury/static/img/read.svg b/src/wolnelektury/static/img/read.svg new file mode 100644 index 000000000..f3fd5b65c --- /dev/null +++ b/src/wolnelektury/static/img/read.svg @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.1" + width="21.03125" + height="20.9375" + id="svg6288"> + <defs + id="defs6290" /> + <metadata + id="metadata6293"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + transform="translate(-225.71498,-640.7418)" + id="layer1"> + <g + transform="translate(-138.76939,118.84837)" + id="layer1-3" + style="fill:#0d7e85;fill-opacity:1"> + <path + d="m 375.01562,521.89343 c -5.80761,0 -10.53125,4.68702 -10.53125,10.46875 0,5.78173 4.72364,10.46875 10.53125,10.46875 5.80762,0 10.5,-4.68702 10.5,-10.46875 0,-5.78173 -4.69238,-10.46875 -10.5,-10.46875 z m -0.5,5.96875 c 0.15292,-0.0191 0.31239,0 0.46875,0 2.5018,0 4.52957,2.4714 6.5625,4.53125 -2.03293,2.12615 -4.0607,4.5 -6.5625,4.5 -2.5018,0 -4.46706,-2.44014 -6.5,-4.5 1.84373,-1.86896 3.73739,-4.2453 6.03125,-4.53125 z m 0.46875,1 c -2.5018,0 -3.50211,1.55979 -5.46875,3.53125 2.03294,2.05986 2.96695,3.4375 5.46875,3.4375 2.5018,0 3.46707,-1.31135 5.5,-3.4375 -2.03293,-2.05985 -2.9982,-3.53125 -5.5,-3.53125 z m 0.0312,1.03125 c 1.37294,0 2.5,1.12096 2.5,2.5 0,1.37904 -1.12706,2.46875 -2.5,2.46875 -1.37294,0 -2.46875,-1.08971 -2.46875,-2.46875 0,-1.37904 1.09581,-2.5 2.46875,-2.5 z m -0.0312,0.96875 c -0.82987,0 -1.5,0.67013 -1.5,1.5 0,0.82986 0.67013,1.5 1.5,1.5 0.82986,0 1.5,-0.67014 1.5,-1.5 0,-0.82987 -0.67014,-1.5 -1.5,-1.5 z" + id="path3144" + style="fill:#0d7e85;fill-opacity:1;stroke:none" /> + </g> + </g> +</svg> diff --git a/src/wolnelektury/static/img/s5/blank.gif b/src/wolnelektury/static/img/s5/blank.gif new file mode 100644 index 000000000..75b945d25 Binary files /dev/null and b/src/wolnelektury/static/img/s5/blank.gif differ diff --git a/src/wolnelektury/static/img/s5/bodybg.gif b/src/wolnelektury/static/img/s5/bodybg.gif new file mode 100755 index 000000000..5f448a16f Binary files /dev/null and b/src/wolnelektury/static/img/s5/bodybg.gif differ diff --git a/src/wolnelektury/static/img/s5/iepngfix.htc b/src/wolnelektury/static/img/s5/iepngfix.htc new file mode 100644 index 000000000..bba2db756 --- /dev/null +++ b/src/wolnelektury/static/img/s5/iepngfix.htc @@ -0,0 +1,42 @@ +<public:component> +<public:attach event="onpropertychange" onevent="doFix()" /> + +<script> + +// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com +// Free usage permitted as long as this notice remains intact. + +// This must be a path to a blank image. That's all the configuration you need here. +var blankImg = 'ui/default/blank.gif'; + +var f = 'DXImageTransform.Microsoft.AlphaImageLoader'; + +function filt(s, m) { + if (filters[f]) { + filters[f].enabled = s ? true : false; + if (s) with (filters[f]) { src = s; sizingMethod = m } + } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")'; +} + +function doFix() { + if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) || + (event && !/(background|src)/.test(event.propertyName))) return; + + if (tagName == 'IMG') { + if ((/\.png$/i).test(src)) { + filt(src, 'image'); // was 'scale' + src = blankImg; + } else if (src.indexOf(blankImg) < 0) filt(); + } else if (style.backgroundImage) { + if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) { + var s = RegExp.$1; + style.backgroundImage = ''; + filt(s, 'crop'); + } else filt(); + } +} + +doFix(); + +</script> +</public:component> \ No newline at end of file diff --git a/src/wolnelektury/static/img/search.png b/src/wolnelektury/static/img/search.png new file mode 100644 index 000000000..8f032bf0b Binary files /dev/null and b/src/wolnelektury/static/img/search.png differ diff --git a/src/wolnelektury/static/img/social/bigfacebook.png b/src/wolnelektury/static/img/social/bigfacebook.png new file mode 100644 index 000000000..630416cf2 Binary files /dev/null and b/src/wolnelektury/static/img/social/bigfacebook.png differ diff --git a/src/wolnelektury/static/img/social/biggoogle.png b/src/wolnelektury/static/img/social/biggoogle.png new file mode 100644 index 000000000..19ad19df5 Binary files /dev/null and b/src/wolnelektury/static/img/social/biggoogle.png differ diff --git a/src/wolnelektury/static/img/social/bignk.png b/src/wolnelektury/static/img/social/bignk.png new file mode 100644 index 000000000..c119cd117 Binary files /dev/null and b/src/wolnelektury/static/img/social/bignk.png differ diff --git a/src/wolnelektury/static/img/social/bigtwitter.png b/src/wolnelektury/static/img/social/bigtwitter.png new file mode 100644 index 000000000..fafbe6412 Binary files /dev/null and b/src/wolnelektury/static/img/social/bigtwitter.png differ diff --git a/src/wolnelektury/static/img/social/f.png b/src/wolnelektury/static/img/social/f.png new file mode 100644 index 000000000..3261c6d7f Binary files /dev/null and b/src/wolnelektury/static/img/social/f.png differ diff --git a/src/wolnelektury/static/img/social/f.svg b/src/wolnelektury/static/img/social/f.svg new file mode 100644 index 000000000..fd25a0b1e --- /dev/null +++ b/src/wolnelektury/static/img/social/f.svg @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.1" + width="27" + height="27" + id="svg6088"> + <defs + id="defs6090" /> + <metadata + id="metadata6093"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + transform="translate(-366.81409,-521.12423)" + id="layer1"> + <path + d="m 380.29848,521.12423 c -7.46076,0 -13.48439,6.0339 -13.48439,13.4844 0,7.4505 6.02363,13.5156 13.48439,13.5156 7.46077,0 13.51561,-6.0651 13.51561,-13.5156 0,-7.4505 -6.05484,-13.4844 -13.51561,-13.4844 z m 0.59307,9.489 2.15375,0 0,0.9989 -1.87283,0 c -0.48766,0 -0.99871,0.5039 -1.1237,0.9988 l 2.77804,0 0,1.0301 -2.80925,0 0,4.963 -1.1237,0 0,-4.963 -1.31099,0 0,-1.0301 1.31099,0 c 0,-0.9454 1.05229,-1.9977 1.99769,-1.9977 z" + id="path3774" + style="fill:#281d1c;fill-opacity:1;stroke:none" /> + </g> +</svg> diff --git a/src/wolnelektury/static/img/social/gplus.png b/src/wolnelektury/static/img/social/gplus.png new file mode 100644 index 000000000..c9a98cca4 Binary files /dev/null and b/src/wolnelektury/static/img/social/gplus.png differ diff --git a/src/wolnelektury/static/img/social/gplus.svg b/src/wolnelektury/static/img/social/gplus.svg new file mode 100644 index 000000000..ad8584c48 --- /dev/null +++ b/src/wolnelektury/static/img/social/gplus.svg @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.1" + width="27" + height="27" + id="svg6088"> + <defs + id="defs6090" /> + <metadata + id="metadata6093"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + transform="translate(-370.36041,-525.65913)" + id="layer1"> + <path + d="m 383.86041,525.65913 c -7.4541,0 -13.5,6.0409 -13.5,13.5 0,7.4591 6.0478,13.5 13.5,13.5 7.4541,0 13.5,-6.0409 13.5,-13.5 0,-7.4591 -6.0478,-13.5 -13.5,-13.5 z m -2.3072,9.9375 c 0.7663,0.052 1.408,0.3504 2.1513,0.7812 l -0.031,1.25 c -0.9815,-0.9169 -2.0284,-1.0444 -2.8372,-0.9687 -0.813,0 -2.1513,1.2073 -2.1513,2.375 0,1.0521 1.3098,2.5625 2.4007,2.5625 0.7638,0 1.1307,-0.01 1.5589,-0.125 l -0.031,-1.7812 -1.3095,0 0,-1.0313 2.3384,-0.031 0,3.8437 c -0.7977,0.1841 -1.8035,0.1925 -2.5255,0.1876 -2.1991,-0.015 -3.4719,-1.6067 -3.4919,-3.5313 0.1215,-1.9906 1.8329,-3.4278 3.1178,-3.5 0.2926,-0.04 0.5552,-0.049 0.8106,-0.031 z m 5.3003,1.0625 1.1224,0 0,1.9688 2.1201,0.031 0,1.0312 -2.1201,-0.031 0,2.4375 -1.1224,0 0,-2.4375 -2.1201,0.031 0,-1.0312 2.1201,-0.031 0,-1.9688 z" + id="path3822" + style="fill:#281d1c;fill-opacity:1;stroke:none" /> + </g> +</svg> diff --git a/src/wolnelektury/static/img/social/nk.png b/src/wolnelektury/static/img/social/nk.png new file mode 100644 index 000000000..736918565 Binary files /dev/null and b/src/wolnelektury/static/img/social/nk.png differ diff --git a/src/wolnelektury/static/img/social/nk.svg b/src/wolnelektury/static/img/social/nk.svg new file mode 100644 index 000000000..143701f10 --- /dev/null +++ b/src/wolnelektury/static/img/social/nk.svg @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.1" + width="27" + height="27" + id="svg6088"> + <defs + id="defs6090" /> + <metadata + id="metadata6093"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + transform="translate(-361.5,-518.86218)" + id="layer1"> + <path + d="m 375.01561,518.86218 c -7.46077,0 -13.51561,6.0409 -13.51561,13.5 0,7.4591 6.05484,13.5 13.51561,13.5 7.46077,0 13.48439,-6.0409 13.48439,-13.5 0,-7.4591 -6.02362,-13.5 -13.48439,-13.5 z m 0.78035,9.3437 0.93641,0 0,4.9063 2.80925,-2.5625 1.18613,0 -3.02774,2.7813 3.1526,3.1875 -1.21734,0 -2.9029,-2.9063 0,2.9063 -0.93641,0 0,-8.3126 z m -3.87052,2.1876 c 0.6577,0 1.16089,0.2286 1.49826,0.6562 0.33736,0.424 0.49942,1.0484 0.49943,1.875 l 0,3.5938 -0.93642,0 0,-3.5626 c 0,-0.5665 -0.10086,-0.9997 -0.31214,-1.2812 -0.21128,-0.2815 -0.51385,-0.4375 -0.93642,-0.4375 -0.50776,0 -0.92428,0.1928 -1.21734,0.5313 -0.29307,0.3385 -0.43699,0.7906 -0.43699,1.375 l 0,3.375 -0.93642,0 0,-5.9688 0.93642,0 0,0.9063 c 0.22491,-0.3599 0.47706,-0.6031 0.78035,-0.7813 0.30669,-0.1781 0.66256,-0.2812 1.06127,-0.2812 z" + id="path3781" + style="fill:#281d1c;fill-opacity:1;stroke:none" /> + </g> +</svg> diff --git a/src/wolnelektury/static/img/speaker.png b/src/wolnelektury/static/img/speaker.png new file mode 100644 index 000000000..5831f177a Binary files /dev/null and b/src/wolnelektury/static/img/speaker.png differ diff --git a/src/wolnelektury/static/img/turniej-maly.png b/src/wolnelektury/static/img/turniej-maly.png new file mode 100644 index 000000000..b11f0d676 Binary files /dev/null and b/src/wolnelektury/static/img/turniej-maly.png differ diff --git a/src/wolnelektury/static/img/txt.png b/src/wolnelektury/static/img/txt.png new file mode 100644 index 000000000..de699ea24 Binary files /dev/null and b/src/wolnelektury/static/img/txt.png differ diff --git a/src/wolnelektury/static/img/wiatrak.png b/src/wolnelektury/static/img/wiatrak.png new file mode 100644 index 000000000..e96a0c1a5 Binary files /dev/null and b/src/wolnelektury/static/img/wiatrak.png differ diff --git a/src/wolnelektury/static/img/wl_icon_64.png b/src/wolnelektury/static/img/wl_icon_64.png new file mode 100644 index 000000000..a9dded316 Binary files /dev/null and b/src/wolnelektury/static/img/wl_icon_64.png differ diff --git a/src/wolnelektury/static/img/zabawnik.png b/src/wolnelektury/static/img/zabawnik.png new file mode 100644 index 000000000..2a4621693 Binary files /dev/null and b/src/wolnelektury/static/img/zabawnik.png differ diff --git a/src/wolnelektury/static/js/annoy.js b/src/wolnelektury/static/js/annoy.js new file mode 100644 index 000000000..3104097a9 --- /dev/null +++ b/src/wolnelektury/static/js/annoy.js @@ -0,0 +1,29 @@ +(function($) { + $(function() { + + +$("#annoy-on").click(function(e) { + e.preventDefault(); + $("#annoy").slideDown('fast'); + $(this).hide(); + if (Modernizr.localstorage) localStorage.removeItem("annoyed2013"); +}); + +$("#annoy-off").click(function() { + $("#annoy").slideUp('fast'); + $("#annoy-on").show(); + if (Modernizr.localstorage) localStorage["annoyed2013"] = true; +}); + + +if (Modernizr.localstorage) { + if (!localStorage["annoyed2013"]) { + $("#annoy-on").hide(); + $("#annoy").show(); + } +} + + + + }); +})(jQuery); diff --git a/src/wolnelektury/static/js/base.js b/src/wolnelektury/static/js/base.js new file mode 100644 index 000000000..f2a8e262a --- /dev/null +++ b/src/wolnelektury/static/js/base.js @@ -0,0 +1,167 @@ +(function($) { + $(function() { + $.fn.toggle_slide = function(p) { + cont = $(this); + short_el = p['short_el'] || $(':first-child', this); + long_el = p['long_el'] || short_el.next(); + button = p['button']; + short_text = p['short_text'], + long_text = p['long_text']; + + var toggle_fun = function(cont, short_el, long_el, button, short_text, long_text) { + var toggle = function() { + if (cont.hasClass('short')) { + cont.animate({"height": long_el.attr("cont_h")+'px'}, {duration: "fast" }).removeClass('short'); + short_el.hide(); + long_el.show(); + if (button && long_text) button.html(long_text); + } else { + cont.animate({"height": short_el.attr("cont_h")+'px'}, {duration: "fast" }).addClass('short'); + long_el.hide(); + short_el.show(); + if (button && short_text) button.html(short_text); + } + return false; + } + return toggle; + } + if (long_el.html().length <= short_el.html().length) + return; + + // ensure long element shown first + long_el.show();short_el.hide(); + long_el.attr("cont_h", $(this).height()).hide(); + short_el.show().attr("cont_h", $(this).height()); + $(this).addClass('short'); + + if (button && short_text) button.html(short_text); + if (button) button.click(toggle_fun(cont, short_el, long_el, button, short_text, long_text)); + }; + + + // Fragments + $('.fragment-with-short').each(function() { + $(this).toggle_slide({ + short_el: $('.fragment-short-text', this), + long_el: $('.fragment-long-text', this), + button: $('.toggle', this) + }) + }); + $('#description').each(function() { + $(this).toggle_slide({ + short_el: $('#description-short', this), + long_el: $('#description-long', this), + button: $(this) + }) + }); + + + + (function() { + var $current = null; + var menu_loaded = false; + $('.hidden-box-wrapper').each(function() { + var $hidden = $('.hidden-box', this); + $('.hidden-box-trigger', this).click(function(event) { + event.preventDefault(); + if ($current == $hidden) { + $current = null; + $hidden.hide('fast'); + } else { + $current && $current.hide('fast'); + $hidden.show('fast'); + $current = $hidden; + if ($(this).hasClass('load-menu') && !menu_loaded) { + $.ajax({ + url: '/katalog/' + LANGUAGE_CODE + '.json', + dataType: "json", + }).done(function(data) { + $.each(data, function(index, value) { + var $menuitem = $('#menu-' + index); + $menuitem.html(value); + var $minisearch = $("<input class='mini-search' style='margin-bottom: 1em' />"); + $minisearch.keyup(function() { + var s = $(this).val().toLowerCase(); + if (s) { + $("li", $menuitem).each(function() { + if ($("a", this).text().toLowerCase().indexOf(s) != -1) + $(this).show(); + else $(this).hide(); + }); + } + else { + $("li", $menuitem).css("display", ""); + } + }); + $menuitem.prepend($minisearch); + }); + menu_loaded = true; + }); + } + } + }); + }); + /* this kinda breaks the whole page. */ + $('body').click(function(e) { + if ($current == null) return; + var p = $(e.target); + while (p.length) { + if (p == $current) + return; + if (p.hasClass('hidden-box-trigger') + || p.hasClass('simple-toggler') + || p.hasClass('mini-search')) + return; + p = p.parent(); + } + $current.hide('fast'); + $current = null; + }); + })(); + + +$('#show-menu').click(function(event) { + event.preventDefault(); + $('#menu').toggle('slow'); +}); +$('#book-list-nav h2').click(function(event) { + event.preventDefault(); + $('#book-list-nav-index').toggle(); +}); + + +$('#themes-list-toggle').click(function(event) { + event.preventDefault(); + $('#themes-list').toggle('slow'); +}); + + + $('.book-list-index').click(function(){ + $('.book-list-show-index').hide('slow'); + if($(this).parent().next('ul:not(:hidden)').length == 0){ + $(this).parent().next('ul').toggle('slow'); + } + return false; + }); + + $('.hoverclick').click(function() {$(this).closest('.hoverget').toggleClass('hover');}); + + $(function(){ + $("#search").search();}); + + $('body').on('click', '.simple-toggler' , function(ev) { + ev.preventDefault(); + var scope = $(this).closest('.simple-toggler-scope'); + scope.find('.simple-hidden-box').each(function(){ + var $this = $(this); + if ($this.is(':hidden')) { + $this.show(); + } else { + $this.hide(); + } + }); + }); + + }); +})(jQuery); + diff --git a/src/wolnelektury/static/js/book.js b/src/wolnelektury/static/js/book.js new file mode 100644 index 000000000..72d8174fc --- /dev/null +++ b/src/wolnelektury/static/js/book.js @@ -0,0 +1,64 @@ +$(function() { + function scrollToAnchor(anchor) { + if (anchor) { + var anchor_name = anchor.slice(1); + var element = $('a[name="' + anchor_name + '"]'); + if (element.length > 0) { + $.scrollTo(element, 500, {offset: {top: -50, left: 0}}); + foot_elem = $('#footnotes a[name="' + anchor_name + '"]'); + if (foot_elem.length > 0) { + $(element).parent().highlightFade('yellow'); + } + window.location.hash = anchor; + } + } + } + + $.highlightFade.defaults.speed = 3000; + $('#toc').hide(); + if ($('#toc li').length == 0) { + $('#menu li a[href="#toc"]').remove(); + } + if ($('#themes li').length == 0) { + $('#menu li a[href="#themes"]').remove(); + } + if ($('#nota_red').length == 0) { + $('#menu li a[href="#nota_red"]').remove(); + } + + // On page load, scroll to anchor + scrollToAnchor(window.location.hash) + + $('#toc, #themes, #book-text').delegate('click', 'a', function(event) { + event.preventDefault(); + $('#menu li a.selected').click(); + scrollToAnchor($(this).attr('href')); + }); + + $('#menu li a.menu').toggle(function() { + $('#menu li a.selected').click(); + $(this).addClass('selected'); + $($(this).attr('href')).slideDown('fast'); + }, function() { + $(this).removeClass('selected'); + $($(this).attr('href')).slideUp('fast'); + }); + + + if (window.getSelection) { + $('.theme-begin').click(function() { + var selection = window.getSelection(); + selection.removeAllRanges(); + var range = document.createRange(); + + var e = $(".theme-end[fid='" + $(this).attr('fid') + "']")[0]; + + if (e) { + range.setStartAfter(this); + range.setEndBefore(e); + selection.addRange(range); + } + }); + } + +}); diff --git a/src/wolnelektury/static/js/book_text/info.js b/src/wolnelektury/static/js/book_text/info.js new file mode 100644 index 000000000..e69de29bb diff --git a/src/wolnelektury/static/js/book_text/menu.js b/src/wolnelektury/static/js/book_text/menu.js new file mode 100644 index 000000000..5bbc1a8d8 --- /dev/null +++ b/src/wolnelektury/static/js/book_text/menu.js @@ -0,0 +1,151 @@ +(function($){$(function(){ + + +function hide_menu_boxes() { + /* Closes any open menu boxes. */ + $("#menu .active").each(function() { + $(this).removeClass("active"); + $("#" + $(this).attr("data-box")).hide(); + if ($(this).hasClass('dropdown')) { + $($(this).attr('href')).slideUp('fast'); + } + }); + $("#box-underlay").hide(); +} + +function release_menu() { + /* Exits the menu. It only really disappears on small screens. */ + hide_menu_boxes(); + $("body").removeClass("menu-showed"); +} + +/* Show menu */ +$('#menu-toggle-on').click(function(e) { + e.preventDefault(); + var body = $("body"); + /* Just stop hiding the menu. This way, after narrowing the browser, + * menu will still disappear normally. */ + body.removeClass("menu-hidden"); + /* Menu still not visible? Really open it then. */ + if (!$("#menu").is(":visible")) { + body.addClass("menu-showed"); + } +}); + +/* Hide menu */ +$('#menu-toggle-off').click(function(e) { + e.preventDefault(); + /* Just release the menu. This way, after widening the browser, + * menu will still appear normally. */ + release_menu(); + /* Menu still visible after releasing it? Really hide it then. */ + if ($("#menu").is(":visible")) { + $("body").addClass("menu-hidden"); + } +}); + + +/* Exit menu by clicking anywhere else. */ +$("#box-underlay").click(release_menu); + + +/* Toggle hidden box on click. */ +$("#menu a").each(function() { + var boxid = $(this).attr("data-box"); + if (boxid) { + $("#" + $(this).attr("data-box")).hide(); + + $(this).click(function(e) { + e.preventDefault(); + var showing = $(this).hasClass("active"); + hide_menu_boxes(); + if (!showing) { + $("body").addClass("menu-showed"); + $(this).addClass("active"); + $("#box-underlay").show(); + $("#" + $(this).attr("data-box")).show(); + } + }); + } + else if ($(this).hasClass('dropdown')) { + $(this).click(function(e) { + e.preventDefault(); + var showing = $(this).hasClass("active"); + hide_menu_boxes(); + if (!showing) { + $("body").addClass("menu-showed"); + $("#sponsors:not(:hidden)").fadeOut(); + $(this).addClass("active"); + $($(this).attr('href')).slideDown('fast'); + } + }); + } + else if (!$(this).hasClass('button')) { + $(this).click(release_menu); + } +}); + + +/* Show menu item for other versions of text. + * It's only present if there are any. */ +$("#menu-other").show(); + + +/* Load other version of text. */ +$(".display-other").click(function(e) { + e.preventDefault(); + release_menu(); + + $("#other-text").show(); + $("body").addClass('with-other-text'); + + $.ajax($(this).attr('data-other'), { + success: function(text) { + $("#other-text-body").html(text); + $("#other-text-waiter").hide(); + $("#other-text-body").show(); + loaded_text($("#other-text-body")); + } + }); +}); + + +/* Remove other version of text. */ +$(".other-text-close").click(function(e) { + release_menu(); + e.preventDefault(); + $("#other-text").hide(); + $("body").removeClass('with-other-text'); + $("#other-text-body").html(""); +}); + + +/* Release menu after clicking inside TOC. */ +$("#toc a").click(release_menu); + + +if ($('#nota_red').length > 0) { + $("#menu-nota_red").show(); +} + +/* Show themes menu item, if there are any. */ +if ($('#themes li').length > 0) { + $("#menu-themes").show(); +} + +function loaded_text(text) { + /* Attach events to elements inside book texts here. + * This way they'll work for the other text when it's loaded. */ + + $(".theme-begin", text).click(function(e) { + e.preventDefault(); + if ($(this).css("overflow") == "hidden" || $(this).hasClass('showing')) { + $(this).toggleClass("showing"); + } + }); + +} +loaded_text("#book-text"); + + +})})(jQuery); diff --git a/src/wolnelektury/static/js/book_text/note.js b/src/wolnelektury/static/js/book_text/note.js new file mode 100644 index 000000000..2f0feaaea --- /dev/null +++ b/src/wolnelektury/static/js/book_text/note.js @@ -0,0 +1,10 @@ +(function($){$(function(){ + + +if ($('#nota_red li').length > 0) { + $("#menu-nota_red").show(); +} + + + +})})(jQuery); diff --git a/src/wolnelektury/static/js/book_text/settings.js b/src/wolnelektury/static/js/book_text/settings.js new file mode 100644 index 000000000..e398ba3ed --- /dev/null +++ b/src/wolnelektury/static/js/book_text/settings.js @@ -0,0 +1,12 @@ +(function($){$(function(){ + + +$("#menu-settings").show(); + +$(".settings-switch").click(function(e) { + e.preventDefault(); + $("body").toggleClass($(this).attr("data-setting")); +}); + + +})})(jQuery); diff --git a/src/wolnelektury/static/js/book_text/toc.js b/src/wolnelektury/static/js/book_text/toc.js new file mode 100644 index 000000000..31f4e9ffc --- /dev/null +++ b/src/wolnelektury/static/js/book_text/toc.js @@ -0,0 +1,9 @@ +(function($){$(function(){ + + +if ($('#toc li').length > 0) { + $('#menu-toc').show(); +} + + +})})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/ierange-m2.js b/src/wolnelektury/static/js/contrib/ierange-m2.js new file mode 100644 index 000000000..e87738b0c --- /dev/null +++ b/src/wolnelektury/static/js/contrib/ierange-m2.js @@ -0,0 +1,502 @@ +/* + DOM Ranges for Internet Explorer (m2) + + Copyright (c) 2009 Tim Cameron Ryan + Released under the MIT/X License + */ + +/* + Range reference: + http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html + http://mxr.mozilla.org/mozilla-central/source/content/base/src/nsRange.cpp + https://developer.mozilla.org/En/DOM:Range + Selection reference: + http://trac.webkit.org/browser/trunk/WebCore/page/DOMSelection.cpp + TextRange reference: + http://msdn.microsoft.com/en-us/library/ms535872.aspx + Other links: + http://jorgenhorstink.nl/test/javascript/range/range.js + http://jorgenhorstink.nl/2006/07/05/dom-range-implementation-in-ecmascript-completed/ + http://dylanschiemann.com/articles/dom2Range/dom2RangeExamples.html +*/ + +//[TODO] better exception support + +(function () { // sandbox + +/* + DOM functions + */ + +var DOMUtils = { + findChildPosition: function (node) { + for (var i = 0; node = node.previousSibling; i++) + continue; + return i; + }, + isDataNode: function (node) { + return node && node.nodeValue !== null && node.data !== null; + }, + isAncestorOf: function (parent, node) { + return !DOMUtils.isDataNode(parent) && + (parent.contains(DOMUtils.isDataNode(node) ? node.parentNode : node) || + node.parentNode == parent); + }, + isAncestorOrSelf: function (root, node) { + return DOMUtils.isAncestorOf(root, node) || root == node; + }, + findClosestAncestor: function (root, node) { + if (DOMUtils.isAncestorOf(root, node)) + while (node && node.parentNode != root) + node = node.parentNode; + return node; + }, + getNodeLength: function (node) { + return DOMUtils.isDataNode(node) ? node.length : node.childNodes.length; + }, + splitDataNode: function (node, offset) { + if (!DOMUtils.isDataNode(node)) + return false; + var newNode = node.cloneNode(false); + node.deleteData(offset, node.length); + newNode.deleteData(0, offset); + node.parentNode.insertBefore(newNode, node.nextSibling); + } +}; + +/* + Text Range utilities + functions to simplify text range manipulation in ie + */ + +var TextRangeUtils = { + convertToDOMRange: function (textRange, document) { + function adoptBoundary(domRange, textRange, bStart) { + // iterate backwards through parent element to find anchor location + var cursorNode = document.createElement('a'), cursor = textRange.duplicate(); + cursor.collapse(bStart); + var parent = cursor.parentElement(); + do { + parent.insertBefore(cursorNode, cursorNode.previousSibling); + cursor.moveToElementText(cursorNode); + } while (cursor.compareEndPoints(bStart ? 'StartToStart' : 'StartToEnd', textRange) > 0 && cursorNode.previousSibling); + + // when we exceed or meet the cursor, we've found the node + if (cursor.compareEndPoints(bStart ? 'StartToStart' : 'StartToEnd', textRange) == -1 && cursorNode.nextSibling) { + // data node + cursor.setEndPoint(bStart ? 'EndToStart' : 'EndToEnd', textRange); + domRange[bStart ? 'setStart' : 'setEnd'](cursorNode.nextSibling, cursor.text.length); + } else { + // element + domRange[bStart ? 'setStartBefore' : 'setEndBefore'](cursorNode); + } + cursorNode.parentNode.removeChild(cursorNode); + } + + // return a DOM range + var domRange = new DOMRange(document); + adoptBoundary(domRange, textRange, true); + adoptBoundary(domRange, textRange, false); + return domRange; + }, + + convertFromDOMRange: function (domRange) { + function adoptEndPoint(textRange, domRange, bStart) { + // find anchor node and offset + var container = domRange[bStart ? 'startContainer' : 'endContainer']; + var offset = domRange[bStart ? 'startOffset' : 'endOffset'], textOffset = 0; + var anchorNode = DOMUtils.isDataNode(container) ? container : container.childNodes[offset]; + var anchorParent = DOMUtils.isDataNode(container) ? container.parentNode : container; + // visible data nodes need a text offset + if (container.nodeType == 3 || container.nodeType == 4) + textOffset = offset; + + // create a cursor element node to position range (since we can't select text nodes) + var cursorNode = domRange._document.createElement('a'); + anchorParent.insertBefore(cursorNode, anchorNode); + var cursor = domRange._document.body.createTextRange(); + cursor.moveToElementText(cursorNode); + cursorNode.parentNode.removeChild(cursorNode); + // move range + textRange.setEndPoint(bStart ? 'StartToStart' : 'EndToStart', cursor); + textRange[bStart ? 'moveStart' : 'moveEnd']('character', textOffset); + } + + // return an IE text range + var textRange = domRange._document.body.createTextRange(); + adoptEndPoint(textRange, domRange, true); + adoptEndPoint(textRange, domRange, false); + return textRange; + } +}; + +/* + DOM Range + */ + +function DOMRange(document) { + // save document parameter + this._document = document; + + // initialize range +//[TODO] this should be located at document[0], document[0] + this.startContainer = this.endContainer = document.body; + this.endOffset = DOMUtils.getNodeLength(document.body); +} +DOMRange.START_TO_START = 0; +DOMRange.START_TO_END = 1; +DOMRange.END_TO_END = 2; +DOMRange.END_TO_START = 3; + +DOMRange.prototype = { + // public properties + startContainer: null, + startOffset: 0, + endContainer: null, + endOffset: 0, + commonAncestorContainer: null, + collapsed: false, + // private properties + _document: null, + + // private methods + _refreshProperties: function () { + // collapsed attribute + this.collapsed = (this.startContainer == this.endContainer && this.startOffset == this.endOffset); + // find common ancestor + var node = this.startContainer; + while (node && node != this.endContainer && !DOMUtils.isAncestorOf(node, this.endContainer)) + node = node.parentNode; + this.commonAncestorContainer = node; + }, + + // range methods +//[TODO] collapse if start is after end, end is before start + setStart: function(container, offset) { + this.startContainer = container; + this.startOffset = offset; + this._refreshProperties(); + }, + setEnd: function(container, offset) { + this.endContainer = container; + this.endOffset = offset; + this._refreshProperties(); + }, + setStartBefore: function (refNode) { + // set start to beore this node + this.setStart(refNode.parentNode, DOMUtils.findChildPosition(refNode)); + }, + setStartAfter: function (refNode) { + // select next sibling + this.setStart(refNode.parentNode, DOMUtils.findChildPosition(refNode) + 1); + }, + setEndBefore: function (refNode) { + // set end to beore this node + this.setEnd(refNode.parentNode, DOMUtils.findChildPosition(refNode)); + }, + setEndAfter: function (refNode) { + // select next sibling + this.setEnd(refNode.parentNode, DOMUtils.findChildPosition(refNode) + 1); + }, + selectNode: function (refNode) { + this.setStartBefore(refNode); + this.setEndAfter(refNode); + }, + selectNodeContents: function (refNode) { + this.setStart(refNode, 0); + this.setEnd(refNode, DOMUtils.getNodeLength(refNode)); + }, + collapse: function (toStart) { + if (toStart) + this.setEnd(this.startContainer, this.startOffset); + else + this.setStart(this.endContainer, this.endOffset); + }, + + // editing methods + cloneContents: function () { + // clone subtree + return (function cloneSubtree(iterator) { + for (var node, frag = document.createDocumentFragment(); node = iterator.next(); ) { + node = node.cloneNode(!iterator.hasPartialSubtree()); + if (iterator.hasPartialSubtree()) + node.appendChild(cloneSubtree(iterator.getSubtreeIterator())); + frag.appendChild(node); + } + return frag; + })(new RangeIterator(this)); + }, + extractContents: function () { + // cache range and move anchor points + var range = this.cloneRange(); + if (this.startContainer != this.commonAncestorContainer) + this.setStartAfter(DOMUtils.findClosestAncestor(this.commonAncestorContainer, this.startContainer)); + this.collapse(true); + // extract range + return (function extractSubtree(iterator) { + for (var node, frag = document.createDocumentFragment(); node = iterator.next(); ) { + iterator.hasPartialSubtree() ? node = node.cloneNode(false) : iterator.remove(); + if (iterator.hasPartialSubtree()) + node.appendChild(extractSubtree(iterator.getSubtreeIterator())); + frag.appendChild(node); + } + return frag; + })(new RangeIterator(range)); + }, + deleteContents: function () { + // cache range and move anchor points + var range = this.cloneRange(); + if (this.startContainer != this.commonAncestorContainer) + this.setStartAfter(DOMUtils.findClosestAncestor(this.commonAncestorContainer, this.startContainer)); + this.collapse(true); + // delete range + (function deleteSubtree(iterator) { + while (iterator.next()) + iterator.hasPartialSubtree() ? deleteSubtree(iterator.getSubtreeIterator()) : iterator.remove(); + })(new RangeIterator(range)); + }, + insertNode: function (newNode) { + // set original anchor and insert node + if (DOMUtils.isDataNode(this.startContainer)) { + DOMUtils.splitDataNode(this.startContainer, this.startOffset); + this.startContainer.parentNode.insertBefore(newNode, this.startContainer.nextSibling); + } else { + this.startContainer.insertBefore(newNode, this.startContainer.childNodes[this.startOffset]); + } + // resync start anchor + this.setStart(this.startContainer, this.startOffset); + }, + surroundContents: function (newNode) { + // extract and surround contents + var content = this.extractContents(); + this.insertNode(newNode); + newNode.appendChild(content); + this.selectNode(newNode); + }, + + // other methods + compareBoundaryPoints: function (how, sourceRange) { + // get anchors + var containerA, offsetA, containerB, offsetB; + switch (how) { + case DOMRange.START_TO_START: + case DOMRange.START_TO_END: + containerA = this.startContainer; + offsetA = this.startOffset; + break; + case DOMRange.END_TO_END: + case DOMRange.END_TO_START: + containerA = this.endContainer; + offsetA = this.endOffset; + break; + } + switch (how) { + case DOMRange.START_TO_START: + case DOMRange.END_TO_START: + containerB = sourceRange.startContainer; + offsetB = sourceRange.startOffset; + break; + case DOMRange.START_TO_END: + case DOMRange.END_TO_END: + containerB = sourceRange.endContainer; + offsetB = sourceRange.endOffset; + break; + } + + // compare + return containerA.sourceIndex < containerB.sourceIndex ? -1 : + containerA.sourceIndex == containerB.sourceIndex ? + offsetA < offsetB ? -1 : offsetA == offsetB ? 0 : 1 + : 1; + }, + cloneRange: function () { + // return cloned range + var range = new DOMRange(this._document); + range.setStart(this.startContainer, this.startOffset); + range.setEnd(this.endContainer, this.endOffset); + return range; + }, + detach: function () { +//[TODO] Releases Range from use to improve performance. + }, + toString: function () { + return TextRangeUtils.convertFromDOMRange(this).text; + }, + createContextualFragment: function (tagString) { + // parse the tag string in a context node + var content = (DOMUtils.isDataNode(this.startContainer) ? this.startContainer.parentNode : this.startContainer).cloneNode(false); + content.innerHTML = tagString; + // return a document fragment from the created node + for (var fragment = this._document.createDocumentFragment(); content.firstChild; ) + fragment.appendChild(content.firstChild); + return fragment; + } +}; + +/* + Range iterator + */ + +function RangeIterator(range) { + this.range = range; + if (range.collapsed) + return; + +//[TODO] ensure this works + // get anchors + var root = range.commonAncestorContainer; + this._next = range.startContainer == root && !DOMUtils.isDataNode(range.startContainer) ? + range.startContainer.childNodes[range.startOffset] : + DOMUtils.findClosestAncestor(root, range.startContainer); + this._end = range.endContainer == root && !DOMUtils.isDataNode(range.endContainer) ? + range.endContainer.childNodes[range.endOffset] : + DOMUtils.findClosestAncestor(root, range.endContainer).nextSibling; +} + +RangeIterator.prototype = { + // public properties + range: null, + // private properties + _current: null, + _next: null, + _end: null, + + // public methods + hasNext: function () { + return !!this._next; + }, + next: function () { + // move to next node + var current = this._current = this._next; + this._next = this._current && this._current.nextSibling != this._end ? + this._current.nextSibling : null; + + // check for partial text nodes + if (DOMUtils.isDataNode(this._current)) { + if (this.range.endContainer == this._current) + (current = current.cloneNode(true)).deleteData(this.range.endOffset, current.length - this.range.endOffset); + if (this.range.startContainer == this._current) + (current = current.cloneNode(true)).deleteData(0, this.range.startOffset); + } + return current; + }, + remove: function () { + // check for partial text nodes + if (DOMUtils.isDataNode(this._current) && + (this.range.startContainer == this._current || this.range.endContainer == this._current)) { + var start = this.range.startContainer == this._current ? this.range.startOffset : 0; + var end = this.range.endContainer == this._current ? this.range.endOffset : this._current.length; + this._current.deleteData(start, end - start); + } else + this._current.parentNode.removeChild(this._current); + }, + hasPartialSubtree: function () { + // check if this node be partially selected + return !DOMUtils.isDataNode(this._current) && + (DOMUtils.isAncestorOrSelf(this._current, this.range.startContainer) || + DOMUtils.isAncestorOrSelf(this._current, this.range.endContainer)); + }, + getSubtreeIterator: function () { + // create a new range + var subRange = new DOMRange(this.range._document); + subRange.selectNodeContents(this._current); + // handle anchor points + if (DOMUtils.isAncestorOrSelf(this._current, this.range.startContainer)) + subRange.setStart(this.range.startContainer, this.range.startOffset); + if (DOMUtils.isAncestorOrSelf(this._current, this.range.endContainer)) + subRange.setEnd(this.range.endContainer, this.range.endOffset); + // return iterator + return new RangeIterator(subRange); + } +}; + +/* + DOM Selection + */ + +//[NOTE] This is a very shallow implementation of the Selection object, based on Webkit's +// implementation and without redundant features. Complete selection manipulation is still +// possible with just removeAllRanges/addRange/getRangeAt. + +function DOMSelection(document) { + // save document parameter + this._document = document; + + // add DOM selection handler + var selection = this; + document.attachEvent('onselectionchange', function () { selection._selectionChangeHandler(); }); +} + +DOMSelection.prototype = { + // public properties + rangeCount: 0, + // private properties + _document: null, + + // private methods + _selectionChangeHandler: function () { + // check if there exists a range + this.rangeCount = this._selectionExists(this._document.selection.createRange()) ? 1 : 0; + }, + _selectionExists: function (textRange) { + // checks if a created text range exists or is an editable cursor + return textRange.compareEndPoints('StartToEnd', textRange) != 0 || + textRange.parentElement().isContentEditable; + }, + + // public methods + addRange: function (range) { + // add range or combine with existing range + var selection = this._document.selection.createRange(), textRange = TextRangeUtils.convertFromDOMRange(range); + if (!this._selectionExists(selection)) + { + // select range + textRange.select(); + } + else + { + // only modify range if it intersects with current range + if (textRange.compareEndPoints('StartToStart', selection) == -1) + if (textRange.compareEndPoints('StartToEnd', selection) > -1 && + textRange.compareEndPoints('EndToEnd', selection) == -1) + selection.setEndPoint('StartToStart', textRange); + else + if (textRange.compareEndPoints('EndToStart', selection) < 1 && + textRange.compareEndPoints('EndToEnd', selection) > -1) + selection.setEndPoint('EndToEnd', textRange); + selection.select(); + } + }, + removeAllRanges: function () { + // remove all ranges + this._document.selection.empty(); + }, + getRangeAt: function (index) { + // return any existing selection, or a cursor position in content editable mode + var textRange = this._document.selection.createRange(); + if (this._selectionExists(textRange)) + return TextRangeUtils.convertToDOMRange(textRange, this._document); + return null; + }, + toString: function () { + // get selection text + return this._document.selection.createRange().text; + } +}; + +/* + scripting hooks + */ + +document.createRange = function () { + return new DOMRange(document); +}; + +var selection = new DOMSelection(document); +window.getSelection = function () { + return selection; +}; + +//[TODO] expose DOMRange/DOMSelection to window.? + +})(); diff --git a/src/wolnelektury/static/js/contrib/jquery-ui-1.8.16.custom.min.js b/src/wolnelektury/static/js/contrib/jquery-ui-1.8.16.custom.min.js new file mode 100644 index 000000000..a9c6fa316 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery-ui-1.8.16.custom.min.js @@ -0,0 +1,149 @@ +/*! + * jQuery UI 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.16", +keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({propAttr:c.fn.prop||c.fn.attr,_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d= +this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this, +"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart": +"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight, +outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a, +"tabindex"),d=isNaN(b);return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&& +a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&& +c.ui.isOverAxis(b,e,i)}})}})(jQuery); +;/*! + * jQuery UI Widget 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)try{b(d).triggerHandler("remove")}catch(e){}k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(d){}});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]= +function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)): +d;if(e&&d.charAt(0)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options= +b.extend(true,{},this.options,this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+ +"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled", +c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery); +;/*! + * jQuery UI Mouse 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(b){var d=false;b(document).mouseup(function(){d=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+ +this.widgetName)},_mouseDown:function(a){if(!d){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,f=a.which==1,g=typeof this.options.cancel=="string"&&a.target.nodeName?b(a.target).closest(this.options.cancel).length:false;if(!f||g||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted= +this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(e){return c._mouseMove(e)};this._mouseUpDelegate=function(e){return c._mouseUp(e)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return d=true}},_mouseMove:function(a){if(b.browser.msie&& +!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted= +false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); +;/* + * jQuery UI Position 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Position + */ +(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY, +left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+= +k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-= +m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left= +d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+= +a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b), +g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery); +;/* + * jQuery UI Draggable 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Draggables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== +"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b= +this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;if(b.iframeFix)d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options; +this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}); +this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);d.ui.ddmanager&&d.ui.ddmanager.dragStart(this,a);return true}, +_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b= +false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration, +10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});d.ui.ddmanager&&d.ui.ddmanager.dragStop(this,a);return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle|| +!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&& +a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent= +this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"), +10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"), +10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[a.containment=="document"?0:d(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,a.containment=="document"?0:d(window).scrollTop()-this.offset.relative.top-this.offset.parent.top, +(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!= +"hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"), +10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+ +this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&& +!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.left<g[0])e=g[0]+this.offset.click.left; +if(a.pageY-this.offset.click.top<g[1])h=g[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>g[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=b.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1]:this.originalPageY;h=g?!(h-this.offset.click.top<g[1]||h-this.offset.click.top>g[3])?h:!(h-this.offset.click.top<g[1])?h-b.grid[1]:h+b.grid[1]:h;e=b.grid[0]?this.originalPageX+Math.round((e-this.originalPageX)/ +b.grid[0])*b.grid[0]:this.originalPageX;e=g?!(e-this.offset.click.left<g[0]||e-this.offset.click.left>g[2])?e:!(e-this.offset.click.left<g[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version< +526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b, +c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.16"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert}); +h.refreshPositions();h._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval= +false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true); +this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top; +c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&& +this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity= +a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!= +"x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left< +c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()- +c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this, +width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,h=b.offset.left,g=h+c.helperProportions.width,n=b.offset.top,o=n+c.helperProportions.height,i=c.snapElements.length-1;i>=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e<h&&h<l+e&&k-e<n&&n<m+e||j-e<h&&h<l+e&&k-e<o&&o<m+e||j-e<g&&g<l+e&&k-e<n&&n<m+e||j-e<g&&g<l+e&&k-e<o&& +o<m+e){if(f.snapMode!="inner"){var p=Math.abs(k-o)<=e,q=Math.abs(m-n)<=e,r=Math.abs(j-g)<=e,s=Math.abs(l-h)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l}).left-c.margins.left}var t= +p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(k-n)<=e;q=Math.abs(m-o)<=e;r=Math.abs(j-h)<=e;s=Math.abs(l-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[i].snapping&& +(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=p||q||r||s||t}else{c.snapElements[i].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"), +10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery); +;/* + * jQuery UI Autocomplete 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.position.js + */ +(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.propAttr("readOnly"))){g= +false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!= +a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)}; +this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&& +a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"); +d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&& +b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source= +this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close(); +this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label|| +b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new d.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this; +d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, +"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery); +(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", +-1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); +this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b, +this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active|| +this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active|| +this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[d.fn.prop?"prop":"attr"]("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery); +; \ No newline at end of file diff --git a/src/wolnelektury/static/js/contrib/jquery.autocomplete.js b/src/wolnelektury/static/js/contrib/jquery.autocomplete.js new file mode 100644 index 000000000..6f46e1b9c --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.autocomplete.js @@ -0,0 +1,828 @@ +/* + * jQuery Autocomplete plugin 1.1 + * + * Copyright (c) 2009 Jörn Zaefferer + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $ + */ + +/* + * Modified by Radek Czajka, Fundacja Nowoczesna Polska, 2010-05-10: + * escape regex for word start checking in matchSubset + */ + +;(function($) { + +$.fn.extend({ + autocomplete: function(urlOrData, options) { + var isUrl = typeof urlOrData == "string"; + options = $.extend({}, $.Autocompleter.defaults, { + url: isUrl ? urlOrData : null, + data: isUrl ? null : urlOrData, + delay: isUrl ? $.Autocompleter.defaults.delay : 10, + max: options && !options.scroll ? 10 : 150 + }, options); + + // if highlight is set to false, replace it with a do-nothing function + options.highlight = options.highlight || function(value) { return value; }; + + // if the formatMatch option is not specified, then use formatItem for backwards compatibility + options.formatMatch = options.formatMatch || options.formatItem; + + return this.each(function() { + new $.Autocompleter(this, options); + }); + }, + result: function(handler) { + return this.bind("result", handler); + }, + search: function(handler) { + return this.trigger("search", [handler]); + }, + flushCache: function() { + return this.trigger("flushCache"); + }, + setOptions: function(options){ + return this.trigger("setOptions", [options]); + }, + unautocomplete: function() { + return this.trigger("unautocomplete"); + } +}); + +$.Autocompleter = function(input, options) { + + var KEY = { + UP: 38, + DOWN: 40, + DEL: 46, + TAB: 9, + RETURN: 13, + ESC: 27, + COMMA: 188, + PAGEUP: 33, + PAGEDOWN: 34, + BACKSPACE: 8 + }; + + // Create $ object for input element + var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass); + + var timeout; + var previousValue = ""; + var cache = $.Autocompleter.Cache(options); + var hasFocus = 0; + var lastKeyPressCode; + var config = { + mouseDownOnSelect: false + }; + var select = $.Autocompleter.Select(options, input, selectCurrent, config); + + var blockSubmit; + + // prevent form submit in opera when selecting with return key + $.browser.opera && $(input.form).bind("submit.autocomplete", function() { + if (blockSubmit) { + blockSubmit = false; + return false; + } + }); + + // only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all + $input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) { + // a keypress means the input has focus + // avoids issue where input had focus before the autocomplete was applied + hasFocus = 1; + // track last key pressed + lastKeyPressCode = event.keyCode; + switch(event.keyCode) { + + case KEY.UP: + event.preventDefault(); + if ( select.visible() ) { + select.prev(); + } else { + onChange(0, true); + } + break; + + case KEY.DOWN: + event.preventDefault(); + if ( select.visible() ) { + select.next(); + } else { + onChange(0, true); + } + break; + + case KEY.PAGEUP: + event.preventDefault(); + if ( select.visible() ) { + select.pageUp(); + } else { + onChange(0, true); + } + break; + + case KEY.PAGEDOWN: + event.preventDefault(); + if ( select.visible() ) { + select.pageDown(); + } else { + onChange(0, true); + } + break; + + // matches also semicolon + case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA: + case KEY.TAB: + case KEY.RETURN: + if( selectCurrent() ) { + // stop default to prevent a form submit, Opera needs special handling + event.preventDefault(); + blockSubmit = true; + return false; + } + break; + + case KEY.ESC: + select.hide(); + break; + + default: + clearTimeout(timeout); + timeout = setTimeout(onChange, options.delay); + break; + } + }).focus(function(){ + // track whether the field has focus, we shouldn't process any + // results if the field no longer has focus + hasFocus++; + }).blur(function() { + hasFocus = 0; + if (!config.mouseDownOnSelect) { + hideResults(); + } + }).click(function() { + // show select when clicking in a focused field + if ( hasFocus++ > 1 && !select.visible() ) { + onChange(0, true); + } + }).bind("search", function() { + // TODO why not just specifying both arguments? + var fn = (arguments.length > 1) ? arguments[1] : null; + function findValueCallback(q, data) { + var result; + if( data && data.length ) { + for (var i=0; i < data.length; i++) { + if( data[i].result.toLowerCase() == q.toLowerCase() ) { + result = data[i]; + break; + } + } + } + if( typeof fn == "function" ) fn(result); + else $input.trigger("result", result && [result.data, result.value]); + } + $.each(trimWords($input.val()), function(i, value) { + request(value, findValueCallback, findValueCallback); + }); + }).bind("flushCache", function() { + cache.flush(); + }).bind("setOptions", function() { + $.extend(options, arguments[1]); + // if we've updated the data, repopulate + if ( "data" in arguments[1] ) + cache.populate(); + }).bind("unautocomplete", function() { + select.unbind(); + $input.unbind(); + $(input.form).unbind(".autocomplete"); + }); + + + function selectCurrent() { + var selected = select.selected(); + if( !selected ) + return false; + + var v = selected.result; + previousValue = v; + + if ( options.multiple ) { + var words = trimWords($input.val()); + if ( words.length > 1 ) { + var seperator = options.multipleSeparator.length; + var cursorAt = $(input).selection().start; + var wordAt, progress = 0; + $.each(words, function(i, word) { + progress += word.length; + if (cursorAt <= progress) { + wordAt = i; + return false; + } + progress += seperator; + }); + words[wordAt] = v; + // TODO this should set the cursor to the right position, but it gets overriden somewhere + //$.Autocompleter.Selection(input, progress + seperator, progress + seperator); + v = words.join( options.multipleSeparator ); + } + v += options.multipleSeparator; + } + + $input.val(v); + hideResultsNow(); + $input.trigger("result", [selected.data, selected.value]); + return true; + } + + function onChange(crap, skipPrevCheck) { + if( lastKeyPressCode == KEY.DEL ) { + select.hide(); + return; + } + + var currentValue = $input.val(); + + if ( !skipPrevCheck && currentValue == previousValue ) + return; + + previousValue = currentValue; + + currentValue = lastWord(currentValue); + if ( currentValue.length >= options.minChars) { + $input.addClass(options.loadingClass); + if (!options.matchCase) + currentValue = currentValue.toLowerCase(); + request(currentValue, receiveData, hideResultsNow); + } else { + stopLoading(); + select.hide(); + } + }; + + function trimWords(value) { + if (!value) + return [""]; + if (!options.multiple) + return [$.trim(value)]; + return $.map(value.split(options.multipleSeparator), function(word) { + return $.trim(value).length ? $.trim(word) : null; + }); + } + + function lastWord(value) { + if ( !options.multiple ) + return value; + var words = trimWords(value); + if (words.length == 1) + return words[0]; + var cursorAt = $(input).selection().start; + if (cursorAt == value.length) { + words = trimWords(value) + } else { + words = trimWords(value.replace(value.substring(cursorAt), "")); + } + return words[words.length - 1]; + } + + // fills in the input box w/the first match (assumed to be the best match) + // q: the term entered + // sValue: the first matching result + function autoFill(q, sValue){ + // autofill in the complete box w/the first match as long as the user hasn't entered in more data + // if the last user key pressed was backspace, don't autofill + if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE ) { + // fill in the value (keep the case the user has typed) + $input.val($input.val() + sValue.substring(lastWord(previousValue).length)); + // select the portion of the value not typed by the user (so the next character will erase) + $(input).selection(previousValue.length, previousValue.length + sValue.length); + } + }; + + function hideResults() { + clearTimeout(timeout); + timeout = setTimeout(hideResultsNow, 200); + }; + + function hideResultsNow() { + var wasVisible = select.visible(); + select.hide(); + clearTimeout(timeout); + stopLoading(); + if (options.mustMatch) { + // call search and run callback + $input.search( + function (result){ + // if no value found, clear the input box + if( !result ) { + if (options.multiple) { + var words = trimWords($input.val()).slice(0, -1); + $input.val( words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : "") ); + } + else { + $input.val( "" ); + $input.trigger("result", null); + } + } + } + ); + } + }; + + function receiveData(q, data) { + if ( data && data.length && hasFocus ) { + stopLoading(); + select.display(data, q); + autoFill(q, data[0].value); + select.show(); + } else { + hideResultsNow(); + } + }; + + function request(term, success, failure) { + if (!options.matchCase) + term = term.toLowerCase(); + var data = cache.load(term); + // recieve the cached data + if (data && data.length) { + success(term, data); + // if an AJAX url has been supplied, try loading the data now + } else if( (typeof options.url == "string") && (options.url.length > 0) ){ + + var extraParams = { + timestamp: +new Date() + }; + $.each(options.extraParams, function(key, param) { + extraParams[key] = typeof param == "function" ? param() : param; + }); + + $.ajax({ + // try to leverage ajaxQueue plugin to abort previous requests + mode: "abort", + // limit abortion to this input + port: "autocomplete" + input.name, + dataType: options.dataType, + url: options.url, + data: $.extend({ + q: lastWord(term), + limit: options.max + }, extraParams), + success: function(data) { + var parsed = options.parse && options.parse(data) || parse(data); + cache.add(term, parsed); + success(term, parsed); + } + }); + } else { + // if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match + select.emptyList(); + failure(term); + } + }; + + function parse(data) { + var parsed = []; + var rows = data.split("\n"); + for (var i=0; i < rows.length; i++) { + var row = $.trim(rows[i]); + if (row) { + row = row.split("|"); + parsed[parsed.length] = { + data: row, + value: row[0], + result: options.formatResult && options.formatResult(row, row[0]) || row[0] + }; + } + } + return parsed; + }; + + function stopLoading() { + $input.removeClass(options.loadingClass); + }; + +}; + +$.Autocompleter.defaults = { + inputClass: "ac_input", + resultsClass: "ac_results", + loadingClass: "ac_loading", + minChars: 1, + delay: 400, + matchCase: false, + matchSubset: true, + matchContains: false, + cacheLength: 10, + max: 100, + mustMatch: false, + extraParams: {}, + selectFirst: true, + formatItem: function(row) { return row[0]; }, + formatMatch: null, + autoFill: false, + width: 0, + multiple: false, + multipleSeparator: ", ", + regex_escape: function(term) { + term = term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1"); + /* no polish diacritics; should be more locale-aware */ + term = term.replace(/a/g, '[aÄ ]') + .replace(/c/g, '[cÄ]') + .replace(/e/g, '[eÄ]') + .replace(/l/g, '[lÅ]') + .replace(/n/g, '[nÅ]') + .replace(/o/g, '[oó]') + .replace(/s/g, '[sÅ]') + .replace(/z/g, '[zźż]'); + return term; + }, + highlight: function(value, term) { + term = $.Autocompleter.defaults.regex_escape(term); + return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>"); + }, + scroll: true, + scrollHeight: 180 +}; + +$.Autocompleter.Cache = function(options) { + + var data = {}; + var length = 0; + + function matchSubset(s, sub) { + if (!options.matchCase) + s = s.toLowerCase(); + var i = s.indexOf(sub); + if (options.matchContains == "word"){ + query = $.Autocompleter.defaults.regex_escape(sub.toLowerCase()); + i = s.toLowerCase().search("\\b" + query); + } + if (i == -1) return false; + return i == 0 || options.matchContains; + }; + + function add(q, value) { + if (length > options.cacheLength){ + flush(); + } + if (!data[q]){ + length++; + } + data[q] = value; + } + + function populate(){ + if( !options.data ) return false; + // track the matches + var stMatchSets = {}, + nullData = 0; + + // no url was specified, we need to adjust the cache length to make sure it fits the local data store + if( !options.url ) options.cacheLength = 1; + + // track all options for minChars = 0 + stMatchSets[""] = []; + + // loop through the array and create a lookup structure + for ( var i = 0, ol = options.data.length; i < ol; i++ ) { + var rawValue = options.data[i]; + // if rawValue is a string, make an array otherwise just reference the array + rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue; + + var value = options.formatMatch(rawValue, i+1, options.data.length); + if ( value === false ) + continue; + + var firstChar = value.charAt(0).toLowerCase(); + // if no lookup array for this character exists, look it up now + if( !stMatchSets[firstChar] ) + stMatchSets[firstChar] = []; + + // if the match is a string + var row = { + value: value, + data: rawValue, + result: options.formatResult && options.formatResult(rawValue) || value + }; + + // push the current match into the set list + stMatchSets[firstChar].push(row); + + // keep track of minChars zero items + if ( nullData++ < options.max ) { + stMatchSets[""].push(row); + } + }; + + // add the data items to the cache + $.each(stMatchSets, function(i, value) { + // increase the cache size + options.cacheLength++; + // add to the cache + add(i, value); + }); + } + + // populate any existing data + setTimeout(populate, 25); + + function flush(){ + data = {}; + length = 0; + } + + return { + flush: flush, + add: add, + populate: populate, + load: function(q) { + if (!options.cacheLength || !length) + return null; + /* + * if dealing w/local data and matchContains than we must make sure + * to loop through all the data collections looking for matches + */ + if( !options.url && options.matchContains ){ + // track all matches + var csub = []; + // loop through all the data grids for matches + for( var k in data ){ + // don't search through the stMatchSets[""] (minChars: 0) cache + // this prevents duplicates + if( k.length > 0 ){ + var c = data[k]; + $.each(c, function(i, x) { + // if we've got a match, add it to the array + if (matchSubset(x.value, q)) { + csub.push(x); + } + }); + } + } + return csub; + } else + // if the exact item exists, use it + if (data[q]){ + return data[q]; + } else + if (options.matchSubset) { + for (var i = q.length - 1; i >= options.minChars; i--) { + var c = data[q.substr(0, i)]; + if (c) { + var csub = []; + $.each(c, function(i, x) { + if (matchSubset(x.value, q)) { + csub[csub.length] = x; + } + }); + return csub; + } + } + } + return null; + } + }; +}; + +$.Autocompleter.Select = function (options, input, select, config) { + var CLASSES = { + ACTIVE: "ac_over" + }; + + var listItems, + active = -1, + data, + term = "", + needsInit = true, + element, + list; + + // Create results + function init() { + if (!needsInit) + return; + element = $("<div/>") + .hide() + .addClass(options.resultsClass) + .css("position", "absolute") + .appendTo(document.body); + + list = $("<ul/>").appendTo(element).mouseover( function(event) { + if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') { + active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event)); + $(target(event)).addClass(CLASSES.ACTIVE); + } + }).click(function(event) { + $(target(event)).addClass(CLASSES.ACTIVE); + select(); + // TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus + input.focus(); + return false; + }).mousedown(function() { + config.mouseDownOnSelect = true; + }).mouseup(function() { + config.mouseDownOnSelect = false; + }); + + if( options.width > 0 ) + element.css("width", options.width); + + needsInit = false; + } + + function target(event) { + var element = event.target; + while(element && element.tagName != "LI") + element = element.parentNode; + // more fun with IE, sometimes event.target is empty, just ignore it then + if(!element) + return []; + return element; + } + + function moveSelect(step) { + listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE); + movePosition(step); + var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE); + if(options.scroll) { + var offset = 0; + listItems.slice(0, active).each(function() { + offset += this.offsetHeight; + }); + if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) { + list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight()); + } else if(offset < list.scrollTop()) { + list.scrollTop(offset); + } + } + }; + + function movePosition(step) { + active += step; + if (active < 0) { + active = listItems.size() - 1; + } else if (active >= listItems.size()) { + active = 0; + } + } + + function limitNumberOfItems(available) { + return options.max && options.max < available + ? options.max + : available; + } + + function fillList() { + list.empty(); + var max = limitNumberOfItems(data.length); + for (var i=0; i < max; i++) { + if (!data[i]) + continue; + var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term); + if ( formatted === false ) + continue; + var li = $("<li/>").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0]; + $.data(li, "ac_data", data[i]); + } + listItems = list.find("li"); + if ( options.selectFirst ) { + listItems.slice(0, 1).addClass(CLASSES.ACTIVE); + active = 0; + } + // apply bgiframe if available + if ( $.fn.bgiframe ) + list.bgiframe(); + } + + return { + display: function(d, q) { + init(); + data = d; + term = q; + fillList(); + }, + next: function() { + moveSelect(1); + }, + prev: function() { + moveSelect(-1); + }, + pageUp: function() { + if (active != 0 && active - 8 < 0) { + moveSelect( -active ); + } else { + moveSelect(-8); + } + }, + pageDown: function() { + if (active != listItems.size() - 1 && active + 8 > listItems.size()) { + moveSelect( listItems.size() - 1 - active ); + } else { + moveSelect(8); + } + }, + hide: function() { + element && element.hide(); + listItems && listItems.removeClass(CLASSES.ACTIVE); + active = -1; + }, + visible : function() { + return element && element.is(":visible"); + }, + current: function() { + return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]); + }, + show: function() { + var offset = $(input).offset(); + element.css({ + width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(), + top: offset.top + input.offsetHeight, + left: offset.left + }).show(); + if(options.scroll) { + list.scrollTop(0); + list.css({ + maxHeight: options.scrollHeight, + overflow: 'auto' + }); + + if($.browser.msie && typeof document.body.style.maxHeight === "undefined") { + var listHeight = 0; + listItems.each(function() { + listHeight += this.offsetHeight; + }); + var scrollbarsVisible = listHeight > options.scrollHeight; + list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight ); + if (!scrollbarsVisible) { + // IE doesn't recalculate width when scrollbar disappears + listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) ); + } + } + + } + }, + selected: function() { + var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE); + return selected && selected.length && $.data(selected[0], "ac_data"); + }, + emptyList: function (){ + list && list.empty(); + }, + unbind: function() { + element && element.remove(); + } + }; +}; + +$.fn.selection = function(start, end) { + if (start !== undefined) { + return this.each(function() { + if( this.createTextRange ){ + var selRange = this.createTextRange(); + if (end === undefined || start == end) { + selRange.move("character", start); + selRange.select(); + } else { + selRange.collapse(true); + selRange.moveStart("character", start); + selRange.moveEnd("character", end); + selRange.select(); + } + } else if( this.setSelectionRange ){ + this.setSelectionRange(start, end); + } else if( this.selectionStart ){ + this.selectionStart = start; + this.selectionEnd = end; + } + }); + } + var field = this[0]; + if ( field.createTextRange ) { + var range = document.selection.createRange(), + orig = field.value, + teststring = "<->", + textLength = range.text.length; + range.text = teststring; + var caretAt = field.value.indexOf(teststring); + field.value = orig; + this.selection(caretAt, caretAt + textLength); + return { + start: caretAt, + end: caretAt + textLength + } + } else if( field.selectionStart !== undefined ){ + return { + start: field.selectionStart, + end: field.selectionEnd + } + } +}; + +})(jQuery); \ No newline at end of file diff --git a/src/wolnelektury/static/js/contrib/jquery.countdown-de.js b/src/wolnelektury/static/js/contrib/jquery.countdown-de.js new file mode 100644 index 000000000..5a3f43d78 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.countdown-de.js @@ -0,0 +1,12 @@ +/* http://keith-wood.name/countdown.html + German initialisation for the jQuery countdown extension + Written by Keith Wood (kbwood@virginbroadband.com.au) Jan 2008. */ +(function($) { + $.countdown.regional['de'] = { + labels: ['Jahren', 'Monate', 'Wochen', 'Tage', 'Stunden', 'Minuten', 'Sekunden'], + labels1: ['Jahre', 'Monat', 'Woche', 'Tag', 'Stunde', 'Minute', 'Sekunde'], + compactLabels: ['J', 'M', 'W', 'T'], + whichLabels: null, + timeSeparator: ':', isRTL: false}; + $.countdown.setDefaults($.countdown.regional['de']); +})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/jquery.countdown-es.js b/src/wolnelektury/static/js/contrib/jquery.countdown-es.js new file mode 100644 index 000000000..362f58c7d --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.countdown-es.js @@ -0,0 +1,12 @@ +/* http://keith-wood.name/countdown.html + * Spanish initialisation for the jQuery countdown extension + * Written by Sergio Carracedo Martinez webmaster@neodisenoweb.com (2008) */ +(function($) { + $.countdown.regional['es'] = { + labels: ['Años', 'Meses', 'Semanas', 'Dias', 'Horas', 'Minutos', 'Segundos'], + labels1: ['Años', 'Meses', 'Semanas', 'Dias', 'Horas', 'Minutos', 'Segundos'], + compactLabels: ['a', 'm', 's', 'g'], + whichLabels: null, + timeSeparator: ':', isRTL: false}; + $.countdown.setDefaults($.countdown.regional['es']); +})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/jquery.countdown-fr.js b/src/wolnelektury/static/js/contrib/jquery.countdown-fr.js new file mode 100644 index 000000000..70e17def7 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.countdown-fr.js @@ -0,0 +1,12 @@ +/* http://keith-wood.name/countdown.html + French initialisation for the jQuery countdown extension + Written by Keith Wood (kbwood{at}iinet.com.au) Jan 2008. */ +(function($) { + $.countdown.regional['fr'] = { + labels: ['Années', 'Mois', 'Semaines', 'Jours', 'Heures', 'Minutes', 'Secondes'], + labels1: ['Année', 'Mois', 'Semaine', 'Jour', 'Heure', 'Minute', 'Seconde'], + compactLabels: ['a', 'm', 's', 'j'], + whichLabels: null, + timeSeparator: ':', isRTL: false}; + $.countdown.setDefaults($.countdown.regional['fr']); +})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/jquery.countdown-lt.js b/src/wolnelektury/static/js/contrib/jquery.countdown-lt.js new file mode 100644 index 000000000..ee11c71c5 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.countdown-lt.js @@ -0,0 +1,12 @@ +/* http://keith-wood.name/countdown.html + * Lithuanian localisation for the jQuery countdown extension + * Written by Moacir P. de Sá Pereira (moacir{at}gmail.com) (2009) */ +(function($) { + $.countdown.regional['lt'] = { + labels: ['Metų', 'MÄnesių', 'SavaiÄių', 'Dienų', 'Valandų', 'MinuÄių', 'Sekundžių'], + labels1: ['Metai', 'MÄnuo', 'SavaitÄ', 'Diena', 'Valanda', 'MinutÄ', 'SekundÄ'], + compactLabels: ['m', 'm', 's', 'd'], + whichLabels: null, + timeSeparator: ':', isRTL: false}; + $.countdown.setDefaults($.countdown.regional['lt']); +})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/jquery.countdown-pl.js b/src/wolnelektury/static/js/contrib/jquery.countdown-pl.js new file mode 100644 index 000000000..6860a4bab --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.countdown-pl.js @@ -0,0 +1,17 @@ +/* http://keith-wood.name/countdown.html + * Polish initialisation for the jQuery countdown extension + * Written by Pawel Lewtak lewtak@gmail.com (2008) */ +(function($) { + $.countdown.regional['pl'] = { + labels: ['lat', 'miesiÄcy', 'tygodni', 'dni', 'godzin', 'minut', 'sekund'], + labels1: ['rok', 'miesiÄ c', 'tydzieÅ', 'dzieÅ', 'godzina', 'minuta', 'sekunda'], + labels2: ['lata', 'miesiÄ ce', 'tygodnie', 'dni', 'godziny', 'minuty', 'sekundy'], + compactLabels: ['l', 'm', 't', 'd'], compactLabels1: ['r', 'm', 't', 'd'], + whichLabels: function(amount) { + var units = amount % 10; + var tens = Math.floor((amount % 100) / 10); + return (amount == 1 ? 1 : (units >= 2 && units <= 4 && tens != 1 ? 2 : 0)); + }, + timeSeparator: ':', isRTL: false}; + $.countdown.setDefaults($.countdown.regional['pl']); +})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/jquery.countdown-ru.js b/src/wolnelektury/static/js/contrib/jquery.countdown-ru.js new file mode 100644 index 000000000..badd3eb01 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.countdown-ru.js @@ -0,0 +1,12 @@ +/* http://keith-wood.name/countdown.html + * Russian initialisation for the jQuery countdown extension + * Written by Dominus i3rixon@gmail.com (2008) */ +(function($) { + $.countdown.regional['ru'] = { + labels: ['ÐеÑ', 'ÐеÑÑÑев', 'ÐеделÑ', 'Ðней', 'ЧаÑов', 'ÐинÑÑ', 'СекÑнд'], + labels1: ['Ðод', 'ÐеÑÑÑ', 'ÐеделÑ', 'ÐенÑ', 'ЧаÑ', 'ÐинÑÑа', 'СекÑнда'], + compactLabels: ['l', 'm', 'n', 'd'], compactLabels1: ['g', 'm', 'n', 'd'], + whichLabels: null, + timeSeparator: ':', isRTL: false}; + $.countdown.setDefaults($.countdown.regional['ru']); +})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/jquery.countdown-uk.js b/src/wolnelektury/static/js/contrib/jquery.countdown-uk.js new file mode 100644 index 000000000..c98791e53 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.countdown-uk.js @@ -0,0 +1,12 @@ +/* http://keith-wood.name/countdown.html + * Ukrainian initialisation for the jQuery countdown extension + * Written by Goloborodko M misha.gm@gmail.com (2009) */ +(function($) { + $.countdown.regional['uk'] = { + labels: ['РокÑв', 'ÐÑÑÑÑÑв', 'ТижднÑв', 'ÐнÑв', 'Ðодин', 'Хвилин', 'СекÑнд'], + labels1: ['Ð Ñк', 'ÐÑÑÑÑÑ', 'ТижденÑ', 'ÐенÑ', 'Ðодина', 'Хвилина', 'СекÑнда'], + compactLabels: ['r', 'm', 't', 'd'], + whichLabels: null, + timeSeparator: ':', isRTL: false}; + $.countdown.setDefaults($.countdown.regional['uk']); +})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/jquery.countdown.js b/src/wolnelektury/static/js/contrib/jquery.countdown.js new file mode 100644 index 000000000..f9c58d370 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.countdown.js @@ -0,0 +1,759 @@ +/* http://keith-wood.name/countdown.html + Countdown for jQuery v1.5.8. + Written by Keith Wood (kbwood{at}iinet.com.au) January 2008. + Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and + MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. + Please attribute the author if you use it. */ + +/* Display a countdown timer. + Attach it with options like: + $('div selector').countdown( + {until: new Date(2009, 1 - 1, 1, 0, 0, 0), onExpiry: happyNewYear}); */ + +(function($) { // Hide scope, no $ conflict + +/* Countdown manager. */ +function Countdown() { + this.regional = []; // Available regional settings, indexed by language code + this.regional[''] = { // Default regional settings + // The display texts for the counters + labels: ['Years', 'Months', 'Weeks', 'Days', 'Hours', 'Minutes', 'Seconds'], + // The display texts for the counters if only one + labels1: ['Year', 'Month', 'Week', 'Day', 'Hour', 'Minute', 'Second'], + compactLabels: ['y', 'm', 'w', 'd'], // The compact texts for the counters + whichLabels: null, // Function to determine which labels to use + timeSeparator: ':', // Separator for time periods + isRTL: false // True for right-to-left languages, false for left-to-right + }; + this._defaults = { + until: null, // new Date(year, mth - 1, day, hr, min, sec) - date/time to count down to + // or numeric for seconds offset, or string for unit offset(s): + // 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds + since: null, // new Date(year, mth - 1, day, hr, min, sec) - date/time to count up from + // or numeric for seconds offset, or string for unit offset(s): + // 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds + timezone: null, // The timezone (hours or minutes from GMT) for the target times, + // or null for client local + serverSync: null, // A function to retrieve the current server time for synchronisation + format: 'dHMS', // Format for display - upper case for always, lower case only if non-zero, + // 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds + layout: '', // Build your own layout for the countdown + compact: false, // True to display in a compact format, false for an expanded one + significant: 0, // The number of periods with values to show, zero for all + description: '', // The description displayed for the countdown + expiryUrl: '', // A URL to load upon expiry, replacing the current page + expiryText: '', // Text to display upon expiry, replacing the countdown + alwaysExpire: false, // True to trigger onExpiry even if never counted down + onExpiry: null, // Callback when the countdown expires - + // receives no parameters and 'this' is the containing division + onTick: null, // Callback when the countdown is updated - + // receives int[7] being the breakdown by period (based on format) + // and 'this' is the containing division + tickInterval: 1 // Interval (seconds) between onTick callbacks + }; + $.extend(this._defaults, this.regional['']); + this._serverSyncs = []; +} + +var PROP_NAME = 'countdown'; + +var Y = 0; // Years +var O = 1; // Months +var W = 2; // Weeks +var D = 3; // Days +var H = 4; // Hours +var M = 5; // Minutes +var S = 6; // Seconds + +$.extend(Countdown.prototype, { + /* Class name added to elements to indicate already configured with countdown. */ + markerClassName: 'hasCountdown', + + /* Shared timer for all countdowns. */ + _timer: setInterval(function() { $.countdown._updateTargets(); }, 980), + /* List of currently active countdown targets. */ + _timerTargets: [], + + /* Override the default settings for all instances of the countdown widget. + @param options (object) the new settings to use as defaults */ + setDefaults: function(options) { + this._resetExtraLabels(this._defaults, options); + extendRemove(this._defaults, options || {}); + }, + + /* Convert a date/time to UTC. + @param tz (number) the hour or minute offset from GMT, e.g. +9, -360 + @param year (Date) the date/time in that timezone or + (number) the year in that timezone + @param month (number, optional) the month (0 - 11) (omit if year is a Date) + @param day (number, optional) the day (omit if year is a Date) + @param hours (number, optional) the hour (omit if year is a Date) + @param mins (number, optional) the minute (omit if year is a Date) + @param secs (number, optional) the second (omit if year is a Date) + @param ms (number, optional) the millisecond (omit if year is a Date) + @return (Date) the equivalent UTC date/time */ + UTCDate: function(tz, year, month, day, hours, mins, secs, ms) { + if (typeof year == 'object' && year.constructor == Date) { + ms = year.getMilliseconds(); + secs = year.getSeconds(); + mins = year.getMinutes(); + hours = year.getHours(); + day = year.getDate(); + month = year.getMonth(); + year = year.getFullYear(); + } + var d = new Date(); + d.setUTCFullYear(year); + d.setUTCDate(1); + d.setUTCMonth(month || 0); + d.setUTCDate(day || 1); + d.setUTCHours(hours || 0); + d.setUTCMinutes((mins || 0) - (Math.abs(tz) < 30 ? tz * 60 : tz)); + d.setUTCSeconds(secs || 0); + d.setUTCMilliseconds(ms || 0); + return d; + }, + + /* Convert a set of periods into seconds. + Averaged for months and years. + @param periods (number[7]) the periods per year/month/week/day/hour/minute/second + @return (number) the corresponding number of seconds */ + periodsToSeconds: function(periods) { + return periods[0] * 31557600 + periods[1] * 2629800 + periods[2] * 604800 + + periods[3] * 86400 + periods[4] * 3600 + periods[5] * 60 + periods[6]; + }, + + /* Retrieve one or more settings values. + @param name (string, optional) the name of the setting to retrieve + or 'all' for all instance settings or omit for all default settings + @return (any) the requested setting(s) */ + _settingsCountdown: function(target, name) { + if (!name) { + return $.countdown._defaults; + } + var inst = $.data(target, PROP_NAME); + return (name == 'all' ? inst.options : inst.options[name]); + }, + + /* Attach the countdown widget to a div. + @param target (element) the containing division + @param options (object) the initial settings for the countdown */ + _attachCountdown: function(target, options) { + var $target = $(target); + if ($target.hasClass(this.markerClassName)) { + return; + } + $target.addClass(this.markerClassName); + var inst = {options: $.extend({}, options), + _periods: [0, 0, 0, 0, 0, 0, 0]}; + $.data(target, PROP_NAME, inst); + this._changeCountdown(target); + }, + + /* Add a target to the list of active ones. + @param target (element) the countdown target */ + _addTarget: function(target) { + if (!this._hasTarget(target)) { + this._timerTargets.push(target); + } + }, + + /* See if a target is in the list of active ones. + @param target (element) the countdown target + @return (boolean) true if present, false if not */ + _hasTarget: function(target) { + return ($.inArray(target, this._timerTargets) > -1); + }, + + /* Remove a target from the list of active ones. + @param target (element) the countdown target */ + _removeTarget: function(target) { + this._timerTargets = $.map(this._timerTargets, + function(value) { return (value == target ? null : value); }); // delete entry + }, + + /* Update each active timer target. */ + _updateTargets: function() { + for (var i = this._timerTargets.length - 1; i >= 0; i--) { + this._updateCountdown(this._timerTargets[i]); + } + }, + + /* Redisplay the countdown with an updated display. + @param target (jQuery) the containing division + @param inst (object) the current settings for this instance */ + _updateCountdown: function(target, inst) { + var $target = $(target); + inst = inst || $.data(target, PROP_NAME); + if (!inst) { + return; + } + $target.html(this._generateHTML(inst)); + $target[(this._get(inst, 'isRTL') ? 'add' : 'remove') + 'Class']('countdown_rtl'); + var onTick = this._get(inst, 'onTick'); + if (onTick) { + var periods = inst._hold != 'lap' ? inst._periods : + this._calculatePeriods(inst, inst._show, this._get(inst, 'significant'), new Date()); + var tickInterval = this._get(inst, 'tickInterval'); + if (tickInterval == 1 || this.periodsToSeconds(periods) % tickInterval == 0) { + onTick.apply(target, [periods]); + } + } + var expired = inst._hold != 'pause' && + (inst._since ? inst._now.getTime() < inst._since.getTime() : + inst._now.getTime() >= inst._until.getTime()); + if (expired && !inst._expiring) { + inst._expiring = true; + if (this._hasTarget(target) || this._get(inst, 'alwaysExpire')) { + this._removeTarget(target); + var onExpiry = this._get(inst, 'onExpiry'); + if (onExpiry) { + onExpiry.apply(target, []); + } + var expiryText = this._get(inst, 'expiryText'); + if (expiryText) { + var layout = this._get(inst, 'layout'); + inst.options.layout = expiryText; + this._updateCountdown(target, inst); + inst.options.layout = layout; + } + var expiryUrl = this._get(inst, 'expiryUrl'); + if (expiryUrl) { + window.location = expiryUrl; + } + } + inst._expiring = false; + } + else if (inst._hold == 'pause') { + this._removeTarget(target); + } + $.data(target, PROP_NAME, inst); + }, + + /* Reconfigure the settings for a countdown div. + @param target (element) the containing division + @param options (object) the new settings for the countdown or + (string) an individual property name + @param value (any) the individual property value + (omit if options is an object) */ + _changeCountdown: function(target, options, value) { + options = options || {}; + if (typeof options == 'string') { + var name = options; + options = {}; + options[name] = value; + } + var inst = $.data(target, PROP_NAME); + if (inst) { + this._resetExtraLabels(inst.options, options); + extendRemove(inst.options, options); + this._adjustSettings(target, inst); + $.data(target, PROP_NAME, inst); + var now = new Date(); + if ((inst._since && inst._since < now) || + (inst._until && inst._until > now)) { + this._addTarget(target); + } + this._updateCountdown(target, inst); + } + }, + + /* Reset any extra labelsn and compactLabelsn entries if changing labels. + @param base (object) the options to be updated + @param options (object) the new option values */ + _resetExtraLabels: function(base, options) { + var changingLabels = false; + for (var n in options) { + if (n != 'whichLabels' && n.match(/[Ll]abels/)) { + changingLabels = true; + break; + } + } + if (changingLabels) { + for (var n in base) { // Remove custom numbered labels + if (n.match(/[Ll]abels[0-9]/)) { + base[n] = null; + } + } + } + }, + + /* Calculate interal settings for an instance. + @param target (element) the containing division + @param inst (object) the current settings for this instance */ + _adjustSettings: function(target, inst) { + var now; + var serverSync = this._get(inst, 'serverSync'); + var serverOffset = 0; + var serverEntry = null; + for (var i = 0; i < this._serverSyncs.length; i++) { + if (this._serverSyncs[i][0] == serverSync) { + serverEntry = this._serverSyncs[i][1]; + break; + } + } + if (serverEntry != null) { + serverOffset = (serverSync ? serverEntry : 0); + now = new Date(); + } + else { + var serverResult = (serverSync ? serverSync.apply(target, []) : null); + now = new Date(); + serverOffset = (serverResult ? now.getTime() - serverResult.getTime() : 0); + this._serverSyncs.push([serverSync, serverOffset]); + } + var timezone = this._get(inst, 'timezone'); + timezone = (timezone == null ? -now.getTimezoneOffset() : timezone); + inst._since = this._get(inst, 'since'); + if (inst._since != null) { + inst._since = this.UTCDate(timezone, this._determineTime(inst._since, null)); + if (inst._since && serverOffset) { + inst._since.setMilliseconds(inst._since.getMilliseconds() + serverOffset); + } + } + inst._until = this.UTCDate(timezone, this._determineTime(this._get(inst, 'until'), now)); + if (serverOffset) { + inst._until.setMilliseconds(inst._until.getMilliseconds() + serverOffset); + } + inst._show = this._determineShow(inst); + }, + + /* Remove the countdown widget from a div. + @param target (element) the containing division */ + _destroyCountdown: function(target) { + var $target = $(target); + if (!$target.hasClass(this.markerClassName)) { + return; + } + this._removeTarget(target); + $target.removeClass(this.markerClassName).empty(); + $.removeData(target, PROP_NAME); + }, + + /* Pause a countdown widget at the current time. + Stop it running but remember and display the current time. + @param target (element) the containing division */ + _pauseCountdown: function(target) { + this._hold(target, 'pause'); + }, + + /* Pause a countdown widget at the current time. + Stop the display but keep the countdown running. + @param target (element) the containing division */ + _lapCountdown: function(target) { + this._hold(target, 'lap'); + }, + + /* Resume a paused countdown widget. + @param target (element) the containing division */ + _resumeCountdown: function(target) { + this._hold(target, null); + }, + + /* Pause or resume a countdown widget. + @param target (element) the containing division + @param hold (string) the new hold setting */ + _hold: function(target, hold) { + var inst = $.data(target, PROP_NAME); + if (inst) { + if (inst._hold == 'pause' && !hold) { + inst._periods = inst._savePeriods; + var sign = (inst._since ? '-' : '+'); + inst[inst._since ? '_since' : '_until'] = + this._determineTime(sign + inst._periods[0] + 'y' + + sign + inst._periods[1] + 'o' + sign + inst._periods[2] + 'w' + + sign + inst._periods[3] + 'd' + sign + inst._periods[4] + 'h' + + sign + inst._periods[5] + 'm' + sign + inst._periods[6] + 's'); + this._addTarget(target); + } + inst._hold = hold; + inst._savePeriods = (hold == 'pause' ? inst._periods : null); + $.data(target, PROP_NAME, inst); + this._updateCountdown(target, inst); + } + }, + + /* Return the current time periods. + @param target (element) the containing division + @return (number[7]) the current periods for the countdown */ + _getTimesCountdown: function(target) { + var inst = $.data(target, PROP_NAME); + return (!inst ? null : (!inst._hold ? inst._periods : + this._calculatePeriods(inst, inst._show, this._get(inst, 'significant'), new Date()))); + }, + + /* Get a setting value, defaulting if necessary. + @param inst (object) the current settings for this instance + @param name (string) the name of the required setting + @return (any) the setting's value or a default if not overridden */ + _get: function(inst, name) { + return (inst.options[name] != null ? + inst.options[name] : $.countdown._defaults[name]); + }, + + /* A time may be specified as an exact value or a relative one. + @param setting (string or number or Date) - the date/time value + as a relative or absolute value + @param defaultTime (Date) the date/time to use if no other is supplied + @return (Date) the corresponding date/time */ + _determineTime: function(setting, defaultTime) { + var offsetNumeric = function(offset) { // e.g. +300, -2 + var time = new Date(); + time.setTime(time.getTime() + offset * 1000); + return time; + }; + var offsetString = function(offset) { // e.g. '+2d', '-4w', '+3h +30m' + offset = offset.toLowerCase(); + var time = new Date(); + var year = time.getFullYear(); + var month = time.getMonth(); + var day = time.getDate(); + var hour = time.getHours(); + var minute = time.getMinutes(); + var second = time.getSeconds(); + var pattern = /([+-]?[0-9]+)\s*(s|m|h|d|w|o|y)?/g; + var matches = pattern.exec(offset); + while (matches) { + switch (matches[2] || 's') { + case 's': second += parseInt(matches[1], 10); break; + case 'm': minute += parseInt(matches[1], 10); break; + case 'h': hour += parseInt(matches[1], 10); break; + case 'd': day += parseInt(matches[1], 10); break; + case 'w': day += parseInt(matches[1], 10) * 7; break; + case 'o': + month += parseInt(matches[1], 10); + day = Math.min(day, $.countdown._getDaysInMonth(year, month)); + break; + case 'y': + year += parseInt(matches[1], 10); + day = Math.min(day, $.countdown._getDaysInMonth(year, month)); + break; + } + matches = pattern.exec(offset); + } + return new Date(year, month, day, hour, minute, second, 0); + }; + var time = (setting == null ? defaultTime : + (typeof setting == 'string' ? offsetString(setting) : + (typeof setting == 'number' ? offsetNumeric(setting) : setting))); + if (time) time.setMilliseconds(0); + return time; + }, + + /* Determine the number of days in a month. + @param year (number) the year + @param month (number) the month + @return (number) the days in that month */ + _getDaysInMonth: function(year, month) { + return 32 - new Date(year, month, 32).getDate(); + }, + + /* Determine which set of labels should be used for an amount. + @param num (number) the amount to be displayed + @return (number) the set of labels to be used for this amount */ + _normalLabels: function(num) { + return num; + }, + + /* Generate the HTML to display the countdown widget. + @param inst (object) the current settings for this instance + @return (string) the new HTML for the countdown display */ + _generateHTML: function(inst) { + // Determine what to show + var significant = this._get(inst, 'significant'); + inst._periods = (inst._hold ? inst._periods : + this._calculatePeriods(inst, inst._show, significant, new Date())); + // Show all 'asNeeded' after first non-zero value + var shownNonZero = false; + var showCount = 0; + var sigCount = significant; + var show = $.extend({}, inst._show); + for (var period = Y; period <= S; period++) { + shownNonZero |= (inst._show[period] == '?' && inst._periods[period] > 0); + show[period] = (inst._show[period] == '?' && !shownNonZero ? null : inst._show[period]); + showCount += (show[period] ? 1 : 0); + sigCount -= (inst._periods[period] > 0 ? 1 : 0); + } + var showSignificant = [false, false, false, false, false, false, false]; + for (var period = S; period >= Y; period--) { // Determine significant periods + if (inst._show[period]) { + if (inst._periods[period]) { + showSignificant[period] = true; + } + else { + showSignificant[period] = sigCount > 0; + sigCount--; + } + } + } + var compact = this._get(inst, 'compact'); + var layout = this._get(inst, 'layout'); + var labels = (compact ? this._get(inst, 'compactLabels') : this._get(inst, 'labels')); + var whichLabels = this._get(inst, 'whichLabels') || this._normalLabels; + var timeSeparator = this._get(inst, 'timeSeparator'); + var description = this._get(inst, 'description') || ''; + var showCompact = function(period) { + var labelsNum = $.countdown._get(inst, + 'compactLabels' + whichLabels(inst._periods[period])); + return (show[period] ? inst._periods[period] + + (labelsNum ? labelsNum[period] : labels[period]) + ' ' : ''); + }; + var showFull = function(period) { + var labelsNum = $.countdown._get(inst, 'labels' + whichLabels(inst._periods[period])); + return ((!significant && show[period]) || (significant && showSignificant[period]) ? + '<span class="countdown_section"><span class="countdown_amount">' + + inst._periods[period] + '</span><br/>' + + (labelsNum ? labelsNum[period] : labels[period]) + '</span>' : ''); + }; + return (layout ? this._buildLayout(inst, show, layout, compact, significant, showSignificant) : + ((compact ? // Compact version + '<span class="countdown_row countdown_amount' + + (inst._hold ? ' countdown_holding' : '') + '">' + + showCompact(Y) + showCompact(O) + showCompact(W) + showCompact(D) + + (show[H] ? this._minDigits(inst._periods[H], 2) : '') + + (show[M] ? (show[H] ? timeSeparator : '') + + this._minDigits(inst._periods[M], 2) : '') + + (show[S] ? (show[H] || show[M] ? timeSeparator : '') + + this._minDigits(inst._periods[S], 2) : '') : + // Full version + '<span class="countdown_row countdown_show' + (significant || showCount) + + (inst._hold ? ' countdown_holding' : '') + '">' + + showFull(Y) + showFull(O) + showFull(W) + showFull(D) + + showFull(H) + showFull(M) + showFull(S)) + '</span>' + + (description ? '<span class="countdown_row countdown_descr">' + description + '</span>' : ''))); + }, + + /* Construct a custom layout. + @param inst (object) the current settings for this instance + @param show (string[7]) flags indicating which periods are requested + @param layout (string) the customised layout + @param compact (boolean) true if using compact labels + @param significant (number) the number of periods with values to show, zero for all + @param showSignificant (boolean[7]) other periods to show for significance + @return (string) the custom HTML */ + _buildLayout: function(inst, show, layout, compact, significant, showSignificant) { + var labels = this._get(inst, (compact ? 'compactLabels' : 'labels')); + var whichLabels = this._get(inst, 'whichLabels') || this._normalLabels; + var labelFor = function(index) { + return ($.countdown._get(inst, + (compact ? 'compactLabels' : 'labels') + whichLabels(inst._periods[index])) || + labels)[index]; + }; + var digit = function(value, position) { + return Math.floor(value / position) % 10; + }; + var subs = {desc: this._get(inst, 'description'), sep: this._get(inst, 'timeSeparator'), + yl: labelFor(Y), yn: inst._periods[Y], ynn: this._minDigits(inst._periods[Y], 2), + ynnn: this._minDigits(inst._periods[Y], 3), y1: digit(inst._periods[Y], 1), + y10: digit(inst._periods[Y], 10), y100: digit(inst._periods[Y], 100), + y1000: digit(inst._periods[Y], 1000), + ol: labelFor(O), on: inst._periods[O], onn: this._minDigits(inst._periods[O], 2), + onnn: this._minDigits(inst._periods[O], 3), o1: digit(inst._periods[O], 1), + o10: digit(inst._periods[O], 10), o100: digit(inst._periods[O], 100), + o1000: digit(inst._periods[O], 1000), + wl: labelFor(W), wn: inst._periods[W], wnn: this._minDigits(inst._periods[W], 2), + wnnn: this._minDigits(inst._periods[W], 3), w1: digit(inst._periods[W], 1), + w10: digit(inst._periods[W], 10), w100: digit(inst._periods[W], 100), + w1000: digit(inst._periods[W], 1000), + dl: labelFor(D), dn: inst._periods[D], dnn: this._minDigits(inst._periods[D], 2), + dnnn: this._minDigits(inst._periods[D], 3), d1: digit(inst._periods[D], 1), + d10: digit(inst._periods[D], 10), d100: digit(inst._periods[D], 100), + d1000: digit(inst._periods[D], 1000), + hl: labelFor(H), hn: inst._periods[H], hnn: this._minDigits(inst._periods[H], 2), + hnnn: this._minDigits(inst._periods[H], 3), h1: digit(inst._periods[H], 1), + h10: digit(inst._periods[H], 10), h100: digit(inst._periods[H], 100), + h1000: digit(inst._periods[H], 1000), + ml: labelFor(M), mn: inst._periods[M], mnn: this._minDigits(inst._periods[M], 2), + mnnn: this._minDigits(inst._periods[M], 3), m1: digit(inst._periods[M], 1), + m10: digit(inst._periods[M], 10), m100: digit(inst._periods[M], 100), + m1000: digit(inst._periods[M], 1000), + sl: labelFor(S), sn: inst._periods[S], snn: this._minDigits(inst._periods[S], 2), + snnn: this._minDigits(inst._periods[S], 3), s1: digit(inst._periods[S], 1), + s10: digit(inst._periods[S], 10), s100: digit(inst._periods[S], 100), + s1000: digit(inst._periods[S], 1000)}; + var html = layout; + // Replace period containers: {p<}...{p>} + for (var i = Y; i <= S; i++) { + var period = 'yowdhms'.charAt(i); + var re = new RegExp('\\{' + period + '<\\}(.*)\\{' + period + '>\\}', 'g'); + html = html.replace(re, ((!significant && show[i]) || + (significant && showSignificant[i]) ? '$1' : '')); + } + // Replace period values: {pn} + $.each(subs, function(n, v) { + var re = new RegExp('\\{' + n + '\\}', 'g'); + html = html.replace(re, v); + }); + return html; + }, + + /* Ensure a numeric value has at least n digits for display. + @param value (number) the value to display + @param len (number) the minimum length + @return (string) the display text */ + _minDigits: function(value, len) { + value = '' + value; + if (value.length >= len) { + return value; + } + value = '0000000000' + value; + return value.substr(value.length - len); + }, + + /* Translate the format into flags for each period. + @param inst (object) the current settings for this instance + @return (string[7]) flags indicating which periods are requested (?) or + required (!) by year, month, week, day, hour, minute, second */ + _determineShow: function(inst) { + var format = this._get(inst, 'format'); + var show = []; + show[Y] = (format.match('y') ? '?' : (format.match('Y') ? '!' : null)); + show[O] = (format.match('o') ? '?' : (format.match('O') ? '!' : null)); + show[W] = (format.match('w') ? '?' : (format.match('W') ? '!' : null)); + show[D] = (format.match('d') ? '?' : (format.match('D') ? '!' : null)); + show[H] = (format.match('h') ? '?' : (format.match('H') ? '!' : null)); + show[M] = (format.match('m') ? '?' : (format.match('M') ? '!' : null)); + show[S] = (format.match('s') ? '?' : (format.match('S') ? '!' : null)); + return show; + }, + + /* Calculate the requested periods between now and the target time. + @param inst (object) the current settings for this instance + @param show (string[7]) flags indicating which periods are requested/required + @param significant (number) the number of periods with values to show, zero for all + @param now (Date) the current date and time + @return (number[7]) the current time periods (always positive) + by year, month, week, day, hour, minute, second */ + _calculatePeriods: function(inst, show, significant, now) { + // Find endpoints + inst._now = now; + inst._now.setMilliseconds(0); + var until = new Date(inst._now.getTime()); + if (inst._since) { + if (now.getTime() < inst._since.getTime()) { + inst._now = now = until; + } + else { + now = inst._since; + } + } + else { + until.setTime(inst._until.getTime()); + if (now.getTime() > inst._until.getTime()) { + inst._now = now = until; + } + } + // Calculate differences by period + var periods = [0, 0, 0, 0, 0, 0, 0]; + if (show[Y] || show[O]) { + // Treat end of months as the same + var lastNow = $.countdown._getDaysInMonth(now.getFullYear(), now.getMonth()); + var lastUntil = $.countdown._getDaysInMonth(until.getFullYear(), until.getMonth()); + var sameDay = (until.getDate() == now.getDate() || + (until.getDate() >= Math.min(lastNow, lastUntil) && + now.getDate() >= Math.min(lastNow, lastUntil))); + var getSecs = function(date) { + return (date.getHours() * 60 + date.getMinutes()) * 60 + date.getSeconds(); + }; + var months = Math.max(0, + (until.getFullYear() - now.getFullYear()) * 12 + until.getMonth() - now.getMonth() + + ((until.getDate() < now.getDate() && !sameDay) || + (sameDay && getSecs(until) < getSecs(now)) ? -1 : 0)); + periods[Y] = (show[Y] ? Math.floor(months / 12) : 0); + periods[O] = (show[O] ? months - periods[Y] * 12 : 0); + // Adjust for months difference and end of month if necessary + now = new Date(now.getTime()); + var wasLastDay = (now.getDate() == lastNow); + var lastDay = $.countdown._getDaysInMonth(now.getFullYear() + periods[Y], + now.getMonth() + periods[O]); + if (now.getDate() > lastDay) { + now.setDate(lastDay); + } + now.setFullYear(now.getFullYear() + periods[Y]); + now.setMonth(now.getMonth() + periods[O]); + if (wasLastDay) { + now.setDate(lastDay); + } + } + var diff = Math.floor((until.getTime() - now.getTime()) / 1000); + var extractPeriod = function(period, numSecs) { + periods[period] = (show[period] ? Math.floor(diff / numSecs) : 0); + diff -= periods[period] * numSecs; + }; + extractPeriod(W, 604800); + extractPeriod(D, 86400); + extractPeriod(H, 3600); + extractPeriod(M, 60); + extractPeriod(S, 1); + if (diff > 0 && !inst._since) { // Round up if left overs + var multiplier = [1, 12, 4.3482, 7, 24, 60, 60]; + var lastShown = S; + var max = 1; + for (var period = S; period >= Y; period--) { + if (show[period]) { + if (periods[lastShown] >= max) { + periods[lastShown] = 0; + diff = 1; + } + if (diff > 0) { + periods[period]++; + diff = 0; + lastShown = period; + max = 1; + } + } + max *= multiplier[period]; + } + } + if (significant) { // Zero out insignificant periods + for (var period = Y; period <= S; period++) { + if (significant && periods[period]) { + significant--; + } + else if (!significant) { + periods[period] = 0; + } + } + } + return periods; + } +}); + +/* jQuery extend now ignores nulls! + @param target (object) the object to update + @param props (object) the new settings + @return (object) the updated object */ +function extendRemove(target, props) { + $.extend(target, props); + for (var name in props) { + if (props[name] == null) { + target[name] = null; + } + } + return target; +} + +/* Process the countdown functionality for a jQuery selection. + @param command (string) the command to run (optional, default 'attach') + @param options (object) the new settings to use for these countdown instances + @return (jQuery) for chaining further calls */ +$.fn.countdown = function(options) { + var otherArgs = Array.prototype.slice.call(arguments, 1); + if (options == 'getTimes' || options == 'settings') { + return $.countdown['_' + options + 'Countdown']. + apply($.countdown, [this[0]].concat(otherArgs)); + } + return this.each(function() { + if (typeof options == 'string') { + $.countdown['_' + options + 'Countdown'].apply($.countdown, [this].concat(otherArgs)); + } + else { + $.countdown._attachCountdown(this, options); + } + }); +}; + +/* Initialise the countdown functionality. */ +$.countdown = new Countdown(); // singleton instance + +})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/jquery.cycle.min.js b/src/wolnelektury/static/js/contrib/jquery.cycle.min.js new file mode 100644 index 000000000..9311b63fe --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.cycle.min.js @@ -0,0 +1,11 @@ +/*! + * jQuery Cycle Lite Plugin + * http://malsup.com/jquery/cycle/lite/ + * Copyright (c) 2008 M. Alsup + * Version: 1.0 (06/08/2008) + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * Requires: jQuery v1.2.3 or later + */ +(function(D){var A="Lite-1.0";D.fn.cycle=function(E){return this.each(function(){E=E||{};if(this.cycleTimeout){clearTimeout(this.cycleTimeout)}this.cycleTimeout=0;this.cyclePause=0;var I=D(this);var J=E.slideExpr?D(E.slideExpr,this):I.children();var G=J.get();if(G.length<2){if(window.console&&window.console.log){window.console.log("terminating; too few slides: "+G.length)}return }var H=D.extend({},D.fn.cycle.defaults,E||{},D.metadata?I.metadata():D.meta?I.data():{});H.before=H.before?[H.before]:[];H.after=H.after?[H.after]:[];H.after.unshift(function(){H.busy=0});var F=this.className;H.width=parseInt((F.match(/w:(\d+)/)||[])[1])||H.width;H.height=parseInt((F.match(/h:(\d+)/)||[])[1])||H.height;H.timeout=parseInt((F.match(/t:(\d+)/)||[])[1])||H.timeout;if(I.css("position")=="static"){I.css("position","relative")}if(H.width){I.width(H.width)}if(H.height&&H.height!="auto"){I.height(H.height)}var K=0;J.css({position:"absolute",top:0,left:0}).hide().each(function(M){D(this).css("z-index",G.length-M)});D(G[K]).css("opacity",1).show();if(D.browser.msie){G[K].style.removeAttribute("filter")}if(H.fit&&H.width){J.width(H.width)}if(H.fit&&H.height&&H.height!="auto"){J.height(H.height)}if(H.pause){I.hover(function(){this.cyclePause=1},function(){this.cyclePause=0})}D.fn.cycle.transitions.fade(I,J,H);J.each(function(){var M=D(this);this.cycleH=(H.fit&&H.height)?H.height:M.height();this.cycleW=(H.fit&&H.width)?H.width:M.width()});J.not(":eq("+K+")").css({opacity:0});if(H.cssFirst){D(J[K]).css(H.cssFirst)}if(H.timeout){if(H.speed.constructor==String){H.speed={slow:600,fast:200}[H.speed]||400}if(!H.sync){H.speed=H.speed/2}while((H.timeout-H.speed)<250){H.timeout+=H.speed}}H.speedIn=H.speed;H.speedOut=H.speed;H.slideCount=G.length;H.currSlide=K;H.nextSlide=1;var L=J[K];if(H.before.length){H.before[0].apply(L,[L,L,H,true])}if(H.after.length>1){H.after[1].apply(L,[L,L,H,true])}if(H.click&&!H.next){H.next=H.click}if(H.next){D(H.next).bind("click",function(){return C(G,H,H.rev?-1:1)})}if(H.prev){D(H.prev).bind("click",function(){return C(G,H,H.rev?1:-1)})}if(H.timeout){this.cycleTimeout=setTimeout(function(){B(G,H,0,!H.rev)},H.timeout+(H.delay||0))}})};function B(J,E,I,K){if(E.busy){return }var H=J[0].parentNode,M=J[E.currSlide],L=J[E.nextSlide];if(H.cycleTimeout===0&&!I){return }if(I||!H.cyclePause){if(E.before.length){D.each(E.before,function(N,O){O.apply(L,[M,L,E,K])})}var F=function(){if(D.browser.msie){this.style.removeAttribute("filter")}D.each(E.after,function(N,O){O.apply(L,[M,L,E,K])})};if(E.nextSlide!=E.currSlide){E.busy=1;D.fn.cycle.custom(M,L,E,F)}var G=(E.nextSlide+1)==J.length;E.nextSlide=G?0:E.nextSlide+1;E.currSlide=G?J.length-1:E.nextSlide-1}if(E.timeout){H.cycleTimeout=setTimeout(function(){B(J,E,0,!E.rev)},E.timeout)}}function C(E,F,I){var H=E[0].parentNode,G=H.cycleTimeout;if(G){clearTimeout(G);H.cycleTimeout=0}F.nextSlide=F.currSlide+I;if(F.nextSlide<0){F.nextSlide=E.length-1}else{if(F.nextSlide>=E.length){F.nextSlide=0}}B(E,F,1,I>=0);return false}D.fn.cycle.custom=function(K,H,I,E){var J=D(K),G=D(H);G.css({opacity:0});var F=function(){G.animate({opacity:1},I.speedIn,I.easeIn,E)};J.animate({opacity:0},I.speedOut,I.easeOut,function(){J.css({display:"none"});if(!I.sync){F()}});if(I.sync){F()}};D.fn.cycle.transitions={fade:function(F,G,E){G.not(":eq(0)").css("opacity",0);E.before.push(function(){D(this).show()})}};D.fn.cycle.ver=function(){return A};D.fn.cycle.defaults={timeout:4000,speed:1000,next:null,prev:null,before:null,after:null,height:"auto",sync:1,fit:0,pause:0,delay:0,slideExpr:null}})(jQuery); \ No newline at end of file diff --git a/src/wolnelektury/static/js/contrib/jquery.eventdelegation.js b/src/wolnelektury/static/js/contrib/jquery.eventdelegation.js new file mode 100644 index 000000000..52fce074a --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.eventdelegation.js @@ -0,0 +1,55 @@ +/* + * jQuery Event Delegation Plugin - jquery.eventdelegation.js + * Fast flexible event handling + * + * January 2008 - Randy Morey (http://dev.distilldesign.com/) + */ + +(function ($) { + /* setup list of allowed events for event delegation + * only events that bubble are appropriate + */ + var allowed = {}; + $.each([ + 'click', + 'dblclick', + 'mousedown', + 'mouseup', + 'mousemove', + 'mouseover', + 'mouseout', + 'keydown', + 'keypress', + 'keyup' + ], function(i, eventName) { + allowed[eventName] = true; + }); + + $.fn.extend({ + delegate: function (event, selector, f) { + return $(this).each(function () { + if (allowed[event]) + $(this).bind(event, function (e) { + var el = $(e.target), + result = false; + + while (!$(el).is('body')) { + if ($(el).is(selector)) { + result = f.apply($(el)[0], [e]); + if (result === false) + e.preventDefault(); + return; + } + + el = $(el).parent(); + } + }); + }); + }, + undelegate: function (event) { + return $(this).each(function () { + $(this).unbind(event); + }); + } + }); +})(jQuery); \ No newline at end of file diff --git a/src/wolnelektury/static/js/contrib/jquery.form.js b/src/wolnelektury/static/js/contrib/jquery.form.js new file mode 100644 index 000000000..36af6b199 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.form.js @@ -0,0 +1,601 @@ +/* + * jQuery Form Plugin + * version: 2.12 (06/07/2008) + * @requires jQuery v1.2.2 or later + * + * Examples and documentation at: http://malsup.com/jquery/form/ + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * Revision: $Id$ + */ +(function($) { + +/* + Usage Note: + ----------- + Do not use both ajaxSubmit and ajaxForm on the same form. These + functions are intended to be exclusive. Use ajaxSubmit if you want + to bind your own submit handler to the form. For example, + + $(document).ready(function() { + $('#myForm').bind('submit', function() { + $(this).ajaxSubmit({ + target: '#output' + }); + return false; // <-- important! + }); + }); + + Use ajaxForm when you want the plugin to manage all the event binding + for you. For example, + + $(document).ready(function() { + $('#myForm').ajaxForm({ + target: '#output' + }); + }); + + When using ajaxForm, the ajaxSubmit function will be invoked for you + at the appropriate time. +*/ + +/** + * ajaxSubmit() provides a mechanism for immediately submitting + * an HTML form using AJAX. + */ +$.fn.ajaxSubmit = function(options) { + // fast fail if nothing selected (http://dev.jquery.com/ticket/2752) + if (!this.length) { + log('ajaxSubmit: skipping submit process - no element selected'); + return this; + } + + if (typeof options == 'function') + options = { success: options }; + + options = $.extend({ + url: this.attr('action') || window.location.toString(), + type: this.attr('method') || 'GET' + }, options || {}); + + // hook for manipulating the form data before it is extracted; + // convenient for use with rich editors like tinyMCE or FCKEditor + var veto = {}; + this.trigger('form-pre-serialize', [this, options, veto]); + if (veto.veto) { + log('ajaxSubmit: submit vetoed via form-pre-serialize trigger'); + return this; + } + + var a = this.formToArray(options.semantic); + if (options.data) { + options.extraData = options.data; + for (var n in options.data) + a.push( { name: n, value: options.data[n] } ); + } + + // give pre-submit callback an opportunity to abort the submit + if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) { + log('ajaxSubmit: submit aborted via beforeSubmit callback'); + return this; + } + + // fire vetoable 'validate' event + this.trigger('form-submit-validate', [a, this, options, veto]); + if (veto.veto) { + log('ajaxSubmit: submit vetoed via form-submit-validate trigger'); + return this; + } + + var q = $.param(a); + + if (options.type.toUpperCase() == 'GET') { + options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q; + options.data = null; // data is null for 'get' + } + else + options.data = q; // data is the query string for 'post' + + var $form = this, callbacks = []; + if (options.resetForm) callbacks.push(function() { $form.resetForm(); }); + if (options.clearForm) callbacks.push(function() { $form.clearForm(); }); + + // perform a load on the target only if dataType is not provided + if (!options.dataType && options.target) { + var oldSuccess = options.success || function(){}; + callbacks.push(function(data) { + $(options.target).html(data).each(oldSuccess, arguments); + }); + } + else if (options.success) + callbacks.push(options.success); + + options.success = function(data, status) { + for (var i=0, max=callbacks.length; i < max; i++) + callbacks[i](data, status, $form); + }; + + // are there files to upload? + var files = $('input:file', this).fieldValue(); + var found = false; + for (var j=0; j < files.length; j++) + if (files[j]) + found = true; + + // options.iframe allows user to force iframe mode + if (options.iframe || found) { + // hack to fix Safari hang (thanks to Tim Molendijk for this) + // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d + if ($.browser.safari && options.closeKeepAlive) + $.get(options.closeKeepAlive, fileUpload); + else + fileUpload(); + } + else + $.ajax(options); + + // fire 'notify' event + this.trigger('form-submit-notify', [this, options]); + return this; + + + // private function for handling file uploads (hat tip to YAHOO!) + function fileUpload() { + var form = $form[0]; + + if ($(':input[@name=submit]', form).length) { + alert('Error: Form elements must not be named "submit".'); + return; + } + + var opts = $.extend({}, $.ajaxSettings, options); + + var id = 'jqFormIO' + (new Date().getTime()); + var $io = $('<iframe id="' + id + '" name="' + id + '" />'); + var io = $io[0]; + + if ($.browser.msie || $.browser.opera) + io.src = 'javascript:false;document.write("");'; + $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' }); + + var xhr = { // mock object + responseText: null, + responseXML: null, + status: 0, + statusText: 'n/a', + getAllResponseHeaders: function() {}, + getResponseHeader: function() {}, + setRequestHeader: function() {} + }; + + var g = opts.global; + // trigger ajax global events so that activity/block indicators work like normal + if (g && ! $.active++) $.event.trigger("ajaxStart"); + if (g) $.event.trigger("ajaxSend", [xhr, opts]); + + var cbInvoked = 0; + var timedOut = 0; + + // add submitting element to data if we know it + var sub = form.clk; + if (sub) { + var n = sub.name; + if (n && !sub.disabled) { + options.extraData = options.extraData || {}; + options.extraData[n] = sub.value; + if (sub.type == "image") { + options.extraData[name+'.x'] = form.clk_x; + options.extraData[name+'.y'] = form.clk_y; + } + } + } + + // take a breath so that pending repaints get some cpu time before the upload starts + setTimeout(function() { + // make sure form attrs are set + var t = $form.attr('target'), a = $form.attr('action'); + $form.attr({ + target: id, + encoding: 'multipart/form-data', + enctype: 'multipart/form-data', + method: 'POST', + action: opts.url + }); + + // support timout + if (opts.timeout) + setTimeout(function() { timedOut = true; cb(); }, opts.timeout); + + // add "extra" data to form if provided in options + var extraInputs = []; + try { + if (options.extraData) + for (var n in options.extraData) + extraInputs.push( + $('<input type="hidden" name="'+n+'" value="'+options.extraData[n]+'" />') + .appendTo(form)[0]); + + // add iframe to doc and submit the form + $io.appendTo('body'); + io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false); + form.submit(); + } + finally { + // reset attrs and remove "extra" input elements + $form.attr('action', a); + t ? $form.attr('target', t) : $form.removeAttr('target'); + $(extraInputs).remove(); + } + }, 10); + + function cb() { + if (cbInvoked++) return; + + io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false); + + var operaHack = 0; + var ok = true; + try { + if (timedOut) throw 'timeout'; + // extract the server response from the iframe + var data, doc; + + doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document; + + if (doc.body == null && !operaHack && $.browser.opera) { + // In Opera 9.2.x the iframe DOM is not always traversable when + // the onload callback fires so we give Opera 100ms to right itself + operaHack = 1; + cbInvoked--; + setTimeout(cb, 100); + return; + } + + xhr.responseText = doc.body ? doc.body.innerHTML : null; + xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc; + xhr.getResponseHeader = function(header){ + var headers = {'content-type': opts.dataType}; + return headers[header]; + }; + + if (opts.dataType == 'json' || opts.dataType == 'script') { + var ta = doc.getElementsByTagName('textarea')[0]; + xhr.responseText = ta ? ta.value : xhr.responseText; + } + else if (opts.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) { + xhr.responseXML = toXml(xhr.responseText); + } + data = $.httpData(xhr, opts.dataType); + } + catch(e){ + ok = false; + $.handleError(opts, xhr, 'error', e); + } + + // ordering of these callbacks/triggers is odd, but that's how $.ajax does it + if (ok) { + opts.success(data, 'success'); + if (g) $.event.trigger("ajaxSuccess", [xhr, opts]); + } + if (g) $.event.trigger("ajaxComplete", [xhr, opts]); + if (g && ! --$.active) $.event.trigger("ajaxStop"); + if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error'); + + // clean up + setTimeout(function() { + $io.remove(); + xhr.responseXML = null; + }, 100); + }; + + function toXml(s, doc) { + if (window.ActiveXObject) { + doc = new ActiveXObject('Microsoft.XMLDOM'); + doc.async = 'false'; + doc.loadXML(s); + } + else + doc = (new DOMParser()).parseFromString(s, 'text/xml'); + return (doc && doc.documentElement && doc.documentElement.tagName != 'parsererror') ? doc : null; + }; + }; +}; + +/** + * ajaxForm() provides a mechanism for fully automating form submission. + * + * The advantages of using this method instead of ajaxSubmit() are: + * + * 1: This method will include coordinates for <input type="image" /> elements (if the element + * is used to submit the form). + * 2. This method will include the submit element's name/value data (for the element that was + * used to submit the form). + * 3. This method binds the submit() method to the form for you. + * + * The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely + * passes the options argument along after properly binding events for submit elements and + * the form itself. + */ +$.fn.ajaxForm = function(options) { + return this.ajaxFormUnbind().bind('submit.form-plugin',function() { + $(this).ajaxSubmit(options); + return false; + }).each(function() { + // store options in hash + $(":submit,input:image", this).bind('click.form-plugin',function(e) { + var $form = this.form; + $form.clk = this; + if (this.type == 'image') { + if (e.offsetX != undefined) { + $form.clk_x = e.offsetX; + $form.clk_y = e.offsetY; + } else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin + var offset = $(this).offset(); + $form.clk_x = e.pageX - offset.left; + $form.clk_y = e.pageY - offset.top; + } else { + $form.clk_x = e.pageX - this.offsetLeft; + $form.clk_y = e.pageY - this.offsetTop; + } + } + // clear form vars + setTimeout(function() { $form.clk = $form.clk_x = $form.clk_y = null; }, 10); + }); + }); +}; + +// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm +$.fn.ajaxFormUnbind = function() { + this.unbind('submit.form-plugin'); + return this.each(function() { + $(":submit,input:image", this).unbind('click.form-plugin'); + }); + +}; + +/** + * formToArray() gathers form element data into an array of objects that can + * be passed to any of the following ajax functions: $.get, $.post, or load. + * Each object in the array has both a 'name' and 'value' property. An example of + * an array for a simple login form might be: + * + * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ] + * + * It is this array that is passed to pre-submit callback functions provided to the + * ajaxSubmit() and ajaxForm() methods. + */ +$.fn.formToArray = function(semantic) { + var a = []; + if (this.length == 0) return a; + + var form = this[0]; + var els = semantic ? form.getElementsByTagName('*') : form.elements; + if (!els) return a; + for(var i=0, max=els.length; i < max; i++) { + var el = els[i]; + var n = el.name; + if (!n) continue; + + if (semantic && form.clk && el.type == "image") { + // handle image inputs on the fly when semantic == true + if(!el.disabled && form.clk == el) + a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y}); + continue; + } + + var v = $.fieldValue(el, true); + if (v && v.constructor == Array) { + for(var j=0, jmax=v.length; j < jmax; j++) + a.push({name: n, value: v[j]}); + } + else if (v !== null && typeof v != 'undefined') + a.push({name: n, value: v}); + } + + if (!semantic && form.clk) { + // input type=='image' are not found in elements array! handle them here + var inputs = form.getElementsByTagName("input"); + for(var i=0, max=inputs.length; i < max; i++) { + var input = inputs[i]; + var n = input.name; + if(n && !input.disabled && input.type == "image" && form.clk == input) + a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y}); + } + } + return a; +}; + +/** + * Serializes form data into a 'submittable' string. This method will return a string + * in the format: name1=value1&name2=value2 + */ +$.fn.formSerialize = function(semantic) { + //hand off to jQuery.param for proper encoding + return $.param(this.formToArray(semantic)); +}; + +/** + * Serializes all field elements in the jQuery object into a query string. + * This method will return a string in the format: name1=value1&name2=value2 + */ +$.fn.fieldSerialize = function(successful) { + var a = []; + this.each(function() { + var n = this.name; + if (!n) return; + var v = $.fieldValue(this, successful); + if (v && v.constructor == Array) { + for (var i=0,max=v.length; i < max; i++) + a.push({name: n, value: v[i]}); + } + else if (v !== null && typeof v != 'undefined') + a.push({name: this.name, value: v}); + }); + //hand off to jQuery.param for proper encoding + return $.param(a); +}; + +/** + * Returns the value(s) of the element in the matched set. For example, consider the following form: + * + * <form><fieldset> + * <input name="A" type="text" /> + * <input name="A" type="text" /> + * <input name="B" type="checkbox" value="B1" /> + * <input name="B" type="checkbox" value="B2"/> + * <input name="C" type="radio" value="C1" /> + * <input name="C" type="radio" value="C2" /> + * </fieldset></form> + * + * var v = $(':text').fieldValue(); + * // if no values are entered into the text inputs + * v == ['',''] + * // if values entered into the text inputs are 'foo' and 'bar' + * v == ['foo','bar'] + * + * var v = $(':checkbox').fieldValue(); + * // if neither checkbox is checked + * v === undefined + * // if both checkboxes are checked + * v == ['B1', 'B2'] + * + * var v = $(':radio').fieldValue(); + * // if neither radio is checked + * v === undefined + * // if first radio is checked + * v == ['C1'] + * + * The successful argument controls whether or not the field element must be 'successful' + * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls). + * The default value of the successful argument is true. If this value is false the value(s) + * for each element is returned. + * + * Note: This method *always* returns an array. If no valid value can be determined the + * array will be empty, otherwise it will contain one or more values. + */ +$.fn.fieldValue = function(successful) { + for (var val=[], i=0, max=this.length; i < max; i++) { + var el = this[i]; + var v = $.fieldValue(el, successful); + if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) + continue; + v.constructor == Array ? $.merge(val, v) : val.push(v); + } + return val; +}; + +/** + * Returns the value of the field element. + */ +$.fieldValue = function(el, successful) { + var n = el.name, t = el.type, tag = el.tagName.toLowerCase(); + if (typeof successful == 'undefined') successful = true; + + if (successful && (!n || el.disabled || t == 'reset' || t == 'button' || + (t == 'checkbox' || t == 'radio') && !el.checked || + (t == 'submit' || t == 'image') && el.form && el.form.clk != el || + tag == 'select' && el.selectedIndex == -1)) + return null; + + if (tag == 'select') { + var index = el.selectedIndex; + if (index < 0) return null; + var a = [], ops = el.options; + var one = (t == 'select-one'); + var max = (one ? index+1 : ops.length); + for(var i=(one ? index : 0); i < max; i++) { + var op = ops[i]; + if (op.selected) { + // extra pain for IE... + var v = $.browser.msie && !(op.attributes['value'].specified) ? op.text : op.value; + if (one) return v; + a.push(v); + } + } + return a; + } + return el.value; +}; + +/** + * Clears the form data. Takes the following actions on the form's input fields: + * - input text fields will have their 'value' property set to the empty string + * - select elements will have their 'selectedIndex' property set to -1 + * - checkbox and radio inputs will have their 'checked' property set to false + * - inputs of type submit, button, reset, and hidden will *not* be effected + * - button elements will *not* be effected + */ +$.fn.clearForm = function() { + return this.each(function() { + $('input,select,textarea', this).clearFields(); + }); +}; + +/** + * Clears the selected form elements. + */ +$.fn.clearFields = $.fn.clearInputs = function() { + return this.each(function() { + var t = this.type, tag = this.tagName.toLowerCase(); + if (t == 'text' || t == 'password' || tag == 'textarea') + this.value = ''; + else if (t == 'checkbox' || t == 'radio') + this.checked = false; + else if (tag == 'select') + this.selectedIndex = -1; + }); +}; + +/** + * Resets the form data. Causes all form elements to be reset to their original value. + */ +$.fn.resetForm = function() { + return this.each(function() { + // guard against an input with the name of 'reset' + // note that IE reports the reset function as an 'object' + if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) + this.reset(); + }); +}; + +/** + * Enables or disables any matching elements. + */ +$.fn.enable = function(b) { + if (b == undefined) b = true; + return this.each(function() { + this.disabled = !b + }); +}; + +/** + * Checks/unchecks any matching checkboxes or radio buttons and + * selects/deselects and matching option elements. + */ +$.fn.select = function(select) { + if (select == undefined) select = true; + return this.each(function() { + var t = this.type; + if (t == 'checkbox' || t == 'radio') + this.checked = select; + else if (this.tagName.toLowerCase() == 'option') { + var $sel = $(this).parent('select'); + if (select && $sel[0] && $sel[0].type == 'select-one') { + // deselect all other options + $sel.find('option').select(false); + } + this.selected = select; + } + }); +}; + +// helper fn for console logging +// set $.fn.ajaxSubmit.debug to true to enable debug logging +function log() { + if ($.fn.ajaxSubmit.debug && window.console && window.console.log) + window.console.log('[jquery.form] ' + Array.prototype.join.call(arguments,'')); +}; + +})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/jquery.highlightfade.js b/src/wolnelektury/static/js/contrib/jquery.highlightfade.js new file mode 100644 index 000000000..bbe39f074 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.highlightfade.js @@ -0,0 +1,150 @@ +/** + * jQuery Plugin highlightFade (jquery.offput.ca/highlightFade) + * (c) 2006 Blair Mitchelmore (offput.ca) blair@offput.ca + */ +/** + * This is version 0.7 of my highlightFade plugin. It follows the yellow fade technique of Web 2.0 fame + * but expands it to allow any starting colour and allows you to specify the end colour as well. + * + * For the moment, I'm done with this plug-in. Unless I come upon a really cool feature it should have + * this plug-in will only receive updates to ensure future compatibility with jQuery. + * + * As of now (Aug. 16, 2006) the plugin has been written with the 1.0.1 release of jQuery (rev 249) which + * is available from http://jquery.com/src/jquery-1.0.1.js + * + * A note regarding rgb() syntax: I noticed that most browsers implement rgb syntax as either an integer + * (0-255) or percentage (0-100%) value for each field, that is, rgb(i/p,i/p,i/p); however, the W3C + * standard clearly defines it as "either three integer values or three percentage values" [http://www.w3.org/TR/CSS21/syndata.html] + * which I choose to follow despite the error redundancy of the typical behaviour browsers employ. + * + * Changelog: + * + * 0.7: + * - Added the awesome custom attribute support written by George Adamson (slightly modified) + * - Removed bgColor plugin dependency seeing as attr is customizable now... + * 0.6: + * - Abstracted getBGColor into its own plugin with optional test and data retrieval functions + * - Converted all $ references to jQuery references as John's code seems to be shifting away + * from that and I don't want to have to update this for a long time. + * 0.5: + * - Added simple argument syntax for only specifying start colour of event + * - Removed old style argument syntax + * - Added 'interval', 'final, and 'end' properties + * - Renamed 'color' property to 'start' + * - Added second argument to $.highlightFade.getBGColor to bypass the e.highlighting check + * 0.4: + * - Added rgb(%,%,%) color syntax + * 0.3: + * - Fixed bug when event was called while parent was also running event corrupting the + * the background colour of the child + * 0.2: + * - Fixed bug where an unspecified onComplete function made the page throw continuous errors + * - Fixed bug where multiple events on the same element would speed each subsequent event + * 0.1: + * - Initial Release + * + * @author Blair Mitchelmore (blair@offput.ca) + * @version 0.5 + */ +jQuery.fn.highlightFade = function(settings) { + var o = (settings && settings.constructor == String) ? {start: settings} : settings || {}; + var d = jQuery.highlightFade.defaults; + var i = o['interval'] || d['interval']; + var a = o['attr'] || d['attr']; + var ts = { + 'linear': function(s,e,t,c) { return parseInt(s+(c/t)*(e-s)); }, + 'sinusoidal': function(s,e,t,c) { return parseInt(s+Math.sin(((c/t)*90)*(Math.PI/180))*(e-s)); }, + 'exponential': function(s,e,t,c) { return parseInt(s+(Math.pow(c/t,2))*(e-s)); } + }; + var t = (o['iterator'] && o['iterator'].constructor == Function) ? o['iterator'] : ts[o['iterator']] || ts[d['iterator']] || ts['linear']; + if (d['iterator'] && d['iterator'].constructor == Function) t = d['iterator']; + return this.each(function() { + if (!this.highlighting) this.highlighting = {}; + var e = (this.highlighting[a]) ? this.highlighting[a].end : jQuery.highlightFade.getBaseValue(this,a) || [255,255,255]; + var c = jQuery.highlightFade.getRGB(o['start'] || o['colour'] || o['color'] || d['start'] || [255,255,128]); + var s = jQuery.speed(o['speed'] || d['speed']); + var r = o['final'] || (this.highlighting[a] && this.highlighting[a].orig) ? this.highlighting[a].orig : jQuery.curCSS(this,a); + if (o['end'] || d['end']) r = jQuery.highlightFade.asRGBString(e = jQuery.highlightFade.getRGB(o['end'] || d['end'])); + if (typeof o['final'] != 'undefined') r = o['final']; + if (this.highlighting[a] && this.highlighting[a].timer) window.clearInterval(this.highlighting[a].timer); + this.highlighting[a] = { steps: ((s.duration) / i), interval: i, currentStep: 0, start: c, end: e, orig: r, attr: a }; + jQuery.highlightFade(this,a,o['complete'],t); + }); +}; + +jQuery.highlightFade = function(e,a,o,t) { + e.highlighting[a].timer = window.setInterval(function() { + var newR = t(e.highlighting[a].start[0],e.highlighting[a].end[0],e.highlighting[a].steps,e.highlighting[a].currentStep); + var newG = t(e.highlighting[a].start[1],e.highlighting[a].end[1],e.highlighting[a].steps,e.highlighting[a].currentStep); + var newB = t(e.highlighting[a].start[2],e.highlighting[a].end[2],e.highlighting[a].steps,e.highlighting[a].currentStep); + jQuery(e).css(a,jQuery.highlightFade.asRGBString([newR,newG,newB])); + if (e.highlighting[a].currentStep++ >= e.highlighting[a].steps) { + jQuery(e).css(a,e.highlighting[a].orig || ''); + window.clearInterval(e.highlighting[a].timer); + e.highlighting[a] = null; + if (o && o.constructor == Function) o.call(e); + } + },e.highlighting[a].interval); +}; + +jQuery.highlightFade.defaults = { + start: [255,255,128], + interval: 50, + speed: 400, + attr: 'backgroundColor' +}; + +jQuery.highlightFade.getRGB = function(c,d) { + var result; + if (c && c.constructor == Array && c.length == 3) return c; + if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c)) + return [parseInt(result[1]),parseInt(result[2]),parseInt(result[3])]; + else if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c)) + return [parseFloat(result[1])*2.55,parseFloat(result[2])*2.55,parseFloat(result[3])*2.55]; + else if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c)) + return [parseInt("0x" + result[1]),parseInt("0x" + result[2]),parseInt("0x" + result[3])]; + else if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c)) + return [parseInt("0x"+ result[1] + result[1]),parseInt("0x" + result[2] + result[2]),parseInt("0x" + result[3] + result[3])]; + else + return jQuery.highlightFade.checkColorName(c) || d || null; +}; + +jQuery.highlightFade.asRGBString = function(a) { + return "rgb(" + a.join(",") + ")"; +}; + +jQuery.highlightFade.getBaseValue = function(e,a,b) { + var s, t; + b = b || false; + t = a = a || jQuery.highlightFade.defaults['attr']; + do { + s = jQuery(e).css(t || 'backgroundColor'); + if ((s != '' && s != 'transparent') || (e.tagName.toLowerCase() == "body") || (!b && e.highlighting && e.highlighting[a] && e.highlighting[a].end)) break; + t = false; + } while (e = e.parentNode); + if (!b && e.highlighting && e.highlighting[a] && e.highlighting[a].end) s = e.highlighting[a].end; + if (s == undefined || s == '' || s == 'transparent') s = [255,255,255]; + return jQuery.highlightFade.getRGB(s); +}; + +jQuery.highlightFade.checkColorName = function(c) { + if (!c) return null; + switch(c.replace(/^\s*|\s*$/g,'').toLowerCase()) { + case 'aqua': return [0,255,255]; + case 'black': return [0,0,0]; + case 'blue': return [0,0,255]; + case 'fuchsia': return [255,0,255]; + case 'gray': return [128,128,128]; + case 'green': return [0,128,0]; + case 'lime': return [0,255,0]; + case 'maroon': return [128,0,0]; + case 'navy': return [0,0,128]; + case 'olive': return [128,128,0]; + case 'purple': return [128,0,128]; + case 'red': return [255,0,0]; + case 'silver': return [192,192,192]; + case 'teal': return [0,128,128]; + case 'white': return [255,255,255]; + case 'yellow': return [255,255,0]; + } +}; diff --git a/src/wolnelektury/static/js/contrib/jquery.jqmodal.js b/src/wolnelektury/static/js/contrib/jquery.jqmodal.js new file mode 100644 index 000000000..3aac816e7 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.jqmodal.js @@ -0,0 +1,69 @@ +/* + * jqModal - Minimalist Modaling with jQuery + * (http://dev.iceburg.net/jquery/jqModal/) + * + * Copyright (c) 2007,2008 Brice Burgess <bhb@iceburg.net> + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * $Version: 03/01/2009 +r14 + */ +(function($) { +$.fn.jqm=function(o){ +var p={ +overlay: 50, +overlayClass: 'jqmOverlay', +closeClass: 'jqmClose', +trigger: '.jqModal', +ajax: F, +ajaxText: '', +target: F, +modal: F, +toTop: F, +onShow: F, +onHide: F, +onLoad: F +}; +return this.each(function(){if(this._jqm)return H[this._jqm].c=$.extend({},H[this._jqm].c,o);s++;this._jqm=s; +H[s]={c:$.extend(p,$.jqm.params,o),a:F,w:$(this).addClass('jqmID'+s),s:s}; +if(p.trigger)$(this).jqmAddTrigger(p.trigger); +});}; + +$.fn.jqmAddClose=function(e){return hs(this,e,'jqmHide');}; +$.fn.jqmAddTrigger=function(e){return hs(this,e,'jqmShow');}; +$.fn.jqmShow=function(t){return this.each(function(){t=t||window.event;$.jqm.open(this._jqm,t);});}; +$.fn.jqmHide=function(t){return this.each(function(){t=t||window.event;$.jqm.close(this._jqm,t)});}; + +$.jqm = { +hash:{}, +open:function(s,t){var h=H[s],c=h.c,cc='.'+c.closeClass,z=(parseInt(h.w.css('z-index'))),z=(z>0)?z:3000,o=$('<div></div>').css({height:'100%',width:'100%',position:'fixed',left:0,top:0,'z-index':z-1,opacity:c.overlay/100});if(h.a)return F;h.t=t;h.a=true;h.w.css('z-index',z); + if(c.modal) {if(!A[0])L('bind');A.push(s);} + else if(c.overlay > 0)h.w.jqmAddClose(o); + else o=F; + + h.o=(o)?o.addClass(c.overlayClass).prependTo('body'):F; + if(ie6){$('html,body').css({height:'100%',width:'100%'});if(o){o=o.css({position:'absolute'})[0];for(var y in {Top:1,Left:1})o.style.setExpression(y.toLowerCase(),"(_=(document.documentElement.scroll"+y+" || document.body.scroll"+y+"))+'px'");}} + + if(c.ajax) {var r=c.target||h.w,u=c.ajax,r=(typeof r == 'string')?$(r,h.w):$(r),u=(u.substr(0,1) == '@')?$(t).attr(u.substring(1)):u; + r.html(c.ajaxText).load(u,function(){if(c.onLoad)c.onLoad.call(this,h);if(cc)h.w.jqmAddClose($(cc,h.w));e(h);});} + else if(cc)h.w.jqmAddClose($(cc,h.w)); + + if(c.toTop&&h.o)h.w.before('<span id="jqmP'+h.w[0]._jqm+'"></span>').insertAfter(h.o); + (c.onShow)?c.onShow(h):h.w.show();e(h);return F; +}, +close:function(s){var h=H[s];if(!h.a)return F;h.a=F; + if(A[0]){A.pop();if(!A[0])L('unbind');} + if(h.c.toTop&&h.o)$('#jqmP'+h.w[0]._jqm).after(h.w).remove(); + if(h.c.onHide)h.c.onHide(h);else{h.w.hide();if(h.o)h.o.remove();} return F; +}, +params:{}}; +var s=0,H=$.jqm.hash,A=[],ie6=$.browser.msie&&($.browser.version == "6.0"),F=false, +i=$('<iframe src="javascript:false;document.write(\'\');" class="jqm"></iframe>').css({opacity:0}), +e=function(h){if(ie6)if(h.o)h.o.html('<p style="width:100%;height:100%"/>').prepend(i);else if(!$('iframe.jqm',h.w)[0])h.w.prepend(i); f(h);}, +f=function(h){try{$(':input:visible',h.w)[0].focus();}catch(_){}}, +L=function(t){$()[t]("keypress",m)[t]("keydown",m)[t]("mousedown",m);}, +m=function(e){var h=H[A[A.length-1]],r=(!$(e.target).parents('.jqmID'+h.s)[0]);if(r)f(h);return !r;}, +hs=function(w,t,c){return w.each(function(){var s=this._jqm;$(t).each(function() { + if(!this[c]){this[c]=[];$(this).click(function(){for(var i in {jqmShow:1,jqmHide:1})for(var s in this[i])if(H[this[i][s]])H[this[i][s]].w[i](this);return F;});}this[c].push(s);});});}; +})(jQuery); \ No newline at end of file diff --git a/src/wolnelektury/static/js/contrib/jquery.js b/src/wolnelektury/static/js/contrib/jquery.js new file mode 100644 index 000000000..7c2430802 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.js @@ -0,0 +1,154 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i? +e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r= +j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g, +"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e= +true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)|| +c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded", +L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype, +"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+ +a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f], +d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]=== +a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&& +!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari= +true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>"; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ", +i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ", +" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className= +this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i= +e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!= +null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), +fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop|| +d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this, +"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent= +a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y, +isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit= +{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}}; +if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&& +!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}}, +toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector, +u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "), +function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q]; +if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[]; +for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length- +1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, +CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}}, +relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]= +l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[]; +h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m= +m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition|| +!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m= +h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>"; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/, +gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length; +c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)? +a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&& +this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]|| +u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length=== +1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay"); +this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a], +"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)}, +animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing= +j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]); +this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length|| +c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement? +function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b= +this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle; +k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&& +f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>"; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/src/wolnelektury/static/js/contrib/jquery.scrollto.js b/src/wolnelektury/static/js/contrib/jquery.scrollto.js new file mode 100644 index 000000000..c403ab9df --- /dev/null +++ b/src/wolnelektury/static/js/contrib/jquery.scrollto.js @@ -0,0 +1,194 @@ +/** + * jQuery.ScrollTo + * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com + * Dual licensed under MIT and GPL. + * Date: 9/11/2008 + * + * @projectDescription Easy element scrolling using jQuery. + * http://flesler.blogspot.com/2007/10/jqueryscrollto.html + * Tested with jQuery 1.2.6. On FF 2/3, IE 6/7, Opera 9.2/5 and Safari 3. on Windows. + * + * @author Ariel Flesler + * @version 1.4 + * + * @id jQuery.scrollTo + * @id jQuery.fn.scrollTo + * @param {String, Number, DOMElement, jQuery, Object} target Where to scroll the matched elements. + * The different options for target are: + * - A number position (will be applied to all axes). + * - A string position ('44', '100px', '+=90', etc ) will be applied to all axes + * - A jQuery/DOM element ( logically, child of the element to scroll ) + * - A string selector, that will be relative to the element to scroll ( 'li:eq(2)', etc ) + * - A hash { top:x, left:y }, x and y can be any kind of number/string like above. + * @param {Number} duration The OVERALL length of the animation, this argument can be the settings object instead. + * @param {Object,Function} settings Optional set of settings or the onAfter callback. + * @option {String} axis Which axis must be scrolled, use 'x', 'y', 'xy' or 'yx'. + * @option {Number} duration The OVERALL length of the animation. + * @option {String} easing The easing method for the animation. + * @option {Boolean} margin If true, the margin of the target element will be deducted from the final position. + * @option {Object, Number} offset Add/deduct from the end position. One number for both axes or { top:x, left:y }. + * @option {Object, Number} over Add/deduct the height/width multiplied by 'over', can be { top:x, left:y } when using both axes. + * @option {Boolean} queue If true, and both axis are given, the 2nd axis will only be animated after the first one ends. + * @option {Function} onAfter Function to be called after the scrolling ends. + * @option {Function} onAfterFirst If queuing is activated, this function will be called after the first scrolling ends. + * @return {jQuery} Returns the same jQuery object, for chaining. + * + * @desc Scroll to a fixed position + * @example $('div').scrollTo( 340 ); + * + * @desc Scroll relatively to the actual position + * @example $('div').scrollTo( '+=340px', { axis:'y' } ); + * + * @dec Scroll using a selector (relative to the scrolled element) + * @example $('div').scrollTo( 'p.paragraph:eq(2)', 500, { easing:'swing', queue:true, axis:'xy' } ); + * + * @ Scroll to a DOM element (same for jQuery object) + * @example var second_child = document.getElementById('container').firstChild.nextSibling; + * $('#container').scrollTo( second_child, { duration:500, axis:'x', onAfter:function(){ + * alert('scrolled!!'); + * }}); + * + * @desc Scroll on both axes, to different values + * @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } ); + */ +;(function( $ ){ + + var $scrollTo = $.scrollTo = function( target, duration, settings ){ + $(window).scrollTo( target, duration, settings ); + }; + + $scrollTo.defaults = { + axis:'y', + duration:1 + }; + + // Returns the element that needs to be animated to scroll the window. + // Kept for backwards compatibility (specially for localScroll & serialScroll) + $scrollTo.window = function( scope ){ + return $(window).scrollable(); + }; + + // Hack, hack, hack... stay away! + // Returns the real elements to scroll (supports window/iframes, documents and regular nodes) + $.fn.scrollable = function(){ + return this.map(function(){ + // Just store it, we might need it + var win = this.parentWindow || this.defaultView, + // If it's a document, get its iframe or the window if it's THE document + elem = this.nodeName == '#document' ? win.frameElement || win : this, + // Get the corresponding document + doc = elem.contentDocument || (elem.contentWindow || elem).document, + isWin = elem.setInterval; + + return elem.nodeName == 'IFRAME' || isWin && $.browser.safari ? doc.body + : isWin ? doc.documentElement + : this; + }); + }; + + $.fn.scrollTo = function( target, duration, settings ){ + if( typeof duration == 'object' ){ + settings = duration; + duration = 0; + } + if( typeof settings == 'function' ) + settings = { onAfter:settings }; + + settings = $.extend( {}, $scrollTo.defaults, settings ); + // Speed is still recognized for backwards compatibility + duration = duration || settings.speed || settings.duration; + // Make sure the settings are given right + settings.queue = settings.queue && settings.axis.length > 1; + + if( settings.queue ) + // Let's keep the overall duration + duration /= 2; + settings.offset = both( settings.offset ); + settings.over = both( settings.over ); + + return this.scrollable().each(function(){ + var elem = this, + $elem = $(elem), + targ = target, toff, attr = {}, + win = $elem.is('html,body'); + + switch( typeof targ ){ + // A number will pass the regex + case 'number': + case 'string': + if( /^([+-]=)?\d+(px)?$/.test(targ) ){ + targ = both( targ ); + // We are done + break; + } + // Relative selector, no break! + targ = $(targ,this); + case 'object': + // DOMElement / jQuery + if( targ.is || targ.style ) + // Get the real position of the target + toff = (targ = $(targ)).offset(); + } + $.each( settings.axis.split(''), function( i, axis ){ + var Pos = axis == 'x' ? 'Left' : 'Top', + pos = Pos.toLowerCase(), + key = 'scroll' + Pos, + old = elem[key], + Dim = axis == 'x' ? 'Width' : 'Height', + dim = Dim.toLowerCase(); + + if( toff ){// jQuery / DOMElement + attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] ); + + // If it's a dom element, reduce the margin + if( settings.margin ){ + attr[key] -= parseInt(targ.css('margin'+Pos)) || 0; + attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0; + } + + attr[key] += settings.offset[pos] || 0; + + if( settings.over[pos] ) + // Scroll to a fraction of its width/height + attr[key] += targ[dim]() * settings.over[pos]; + }else + attr[key] = targ[pos]; + + // Number or 'number' + if( /^\d+$/.test(attr[key]) ) + // Check the limits + attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max(Dim) ); + + // Queueing axes + if( !i && settings.queue ){ + // Don't waste time animating, if there's no need. + if( old != attr[key] ) + // Intermediate animation + animate( settings.onAfterFirst ); + // Don't animate this axis again in the next iteration. + delete attr[key]; + } + }); + animate( settings.onAfter ); + + function animate( callback ){ + $elem.animate( attr, duration, settings.easing, callback && function(){ + callback.call(this, target, settings); + }); + }; + function max( Dim ){ + var attr ='scroll'+Dim, + doc = elem.ownerDocument; + + return win + ? Math.max( doc.documentElement[attr], doc.body[attr] ) + : elem[attr]; + }; + }).end(); + }; + + function both( val ){ + return typeof val == 'object' ? val : { top:val, left:val }; + }; + +})( jQuery ); \ No newline at end of file diff --git a/src/wolnelektury/static/js/contrib/modernizr.custom.19652.js b/src/wolnelektury/static/js/contrib/modernizr.custom.19652.js new file mode 100644 index 000000000..7ad5743b9 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/modernizr.custom.19652.js @@ -0,0 +1,4 @@ +/* Modernizr 2.6.2 (Custom Build) | MIT & BSD + * Build: http://modernizr.com/download/#-input-localstorage + */ +;window.Modernizr=function(a,b,c){function t(a){i.cssText=a}function u(a,b){return t(prefixes.join(a+";")+(b||""))}function v(a,b){return typeof a===b}function w(a,b){return!!~(""+a).indexOf(b)}function x(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:v(f,"function")?f.bind(d||b):f}return!1}function y(){e.input=function(c){for(var d=0,e=c.length;d<e;d++)n[c[d]]=c[d]in j;return n.list&&(n.list=!!b.createElement("datalist")&&!!a.HTMLDataListElement),n}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" "))}var d="2.6.2",e={},f=b.documentElement,g="modernizr",h=b.createElement(g),i=h.style,j=b.createElement("input"),k={}.toString,l={},m={},n={},o=[],p=o.slice,q,r={}.hasOwnProperty,s;!v(r,"undefined")&&!v(r.call,"undefined")?s=function(a,b){return r.call(a,b)}:s=function(a,b){return b in a&&v(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=p.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(p.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(p.call(arguments)))};return e}),l.localstorage=function(){try{return localStorage.setItem(g,g),localStorage.removeItem(g),!0}catch(a){return!1}};for(var z in l)s(l,z)&&(q=z.toLowerCase(),e[q]=l[z](),o.push((e[q]?"":"no-")+q));return e.input||y(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)s(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof enableClasses!="undefined"&&enableClasses&&(f.className+=" "+(b?"":"no-")+a),e[a]=b}return e},t(""),h=j=null,e._version=d,e}(this,this.document); diff --git a/src/wolnelektury/static/js/contrib/progressSpin.min.js b/src/wolnelektury/static/js/contrib/progressSpin.min.js new file mode 100644 index 000000000..57b590786 --- /dev/null +++ b/src/wolnelektury/static/js/contrib/progressSpin.min.js @@ -0,0 +1 @@ +/* https://github.com/mateagar/progressSpin */(function(e){e.fn.progressSpin=function(t){function f(e,t){var i=1-t;var s=Raphael.getRGB(n.activeColor);var o=Raphael.getRGB(n.fillColor);var u=Math.floor(s.r*t+o.r*i);var a=Math.floor(s.g*t+o.g*i);var f=Math.floor(s.b*t+o.b*i);var l=Raphael.rgb(u,a,f);r[e].attr("fill",l)}function l(e){e=e%12;if(e<0){e+=12}return e}if(this.getOptions){return this}var n=e.extend({},e.fn.progressSpin.defaults,t);var r=[];var i=false;var s=null;var o=0;var u=null;var a=this;this.getOptions=function(){return n};this.getVisible=function(){return i};this.getAnimating=function(){return s!=null};this.getCurrentStep=function(){return o};this.setCurrentStep=function(e){if(this.getAnimating()){this.stop(false);o=l(e);this.start()}else{o=l(e)}};this.start=function(){if(this.getAnimating()){}else{this.show();f(o,1);var e=1/(n.tailCount+1);var t=0;var r=n.tailCount;s=setInterval(function(){if(t<r){t++}o=l(o+1);var n=1;for(var i=0;i<=t+1;i++){var s=l(o-i);f(s,1-i*e)}},Math.floor(n.cycleTime/12))}};this.stop=function(e){if(e==null){e=true}if(s){clearInterval(s);s=null}var t=n.fillColor;r.forEach(function(e){e.attr("fill",t)});if(e){this.hide()}};this.show=function(){if(r.length==0){this.render()}else{if(i){}else{r.forEach(function(e){e.show()});i=true}}};this.hide=function(){if(this.getAnimating()){this.stop(false)}if(i){r.forEach(function(e){e.hide()})}i=false};this.render=function(){if(this.getAnimating()){this.stop(false)}if(u){r=[];u.clear();u.setSize(this.width(),this.height())}else{u=Raphael(this.get(0),this.width(),this.height())}var e=Math.floor(this.width()/2);var t=Math.floor(this.height()/2);var s=e;if(t<s){s=t}var o=e-Math.floor(n.stepWidth/2);var a=t-s;var f=s-Math.floor(s*n.knockOutRatio);var l=u.rect(o,a,n.stepWidth,f,n.cornerRadius);l.attr("fill",n.fillColor);l.attr("stroke-width",0);r[0]=l;var c=30;for(var h=1;h<=11;h++){var p=l.clone();p.transform("r"+c+","+e+","+t);r[h]=p;c+=30}i=true};return this};e.fn.progressSpin.defaults={activeColor:"#000000",fillColor:"#aaaaaa",cycleTime:1e3,tailCount:6,stepWidth:5,cornerRadius:2,knockOutRatio:.5}})(jQuery); diff --git a/src/wolnelektury/static/js/contrib/raphael-min.js b/src/wolnelektury/static/js/contrib/raphael-min.js new file mode 100644 index 000000000..404f8b24b --- /dev/null +++ b/src/wolnelektury/static/js/contrib/raphael-min.js @@ -0,0 +1,11 @@ +// ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ \\ +// â Raphaël 2.1.2 - JavaScript Vector Library â \\ +// âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⤠\\ +// â Copyright © 2008-2012 Dmitry Baranovskiy (http://raphaeljs.com) â \\ +// â Copyright © 2008-2012 Sencha Labs (http://sencha.com) â \\ +// âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⤠\\ +// â Licensed under the MIT (http://raphaeljs.com/license.html) license.â \\ +// ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ \\ +!function(a){var b,c,d="0.4.2",e="hasOwnProperty",f=/[\.\/]/,g="*",h=function(){},i=function(a,b){return a-b},j={n:{}},k=function(a,d){a=String(a);var e,f=c,g=Array.prototype.slice.call(arguments,2),h=k.listeners(a),j=0,l=[],m={},n=[],o=b;b=a,c=0;for(var p=0,q=h.length;q>p;p++)"zIndex"in h[p]&&(l.push(h[p].zIndex),h[p].zIndex<0&&(m[h[p].zIndex]=h[p]));for(l.sort(i);l[j]<0;)if(e=m[l[j++]],n.push(e.apply(d,g)),c)return c=f,n;for(p=0;q>p;p++)if(e=h[p],"zIndex"in e)if(e.zIndex==l[j]){if(n.push(e.apply(d,g)),c)break;do if(j++,e=m[l[j]],e&&n.push(e.apply(d,g)),c)break;while(e)}else m[e.zIndex]=e;else if(n.push(e.apply(d,g)),c)break;return c=f,b=o,n.length?n:null};k._events=j,k.listeners=function(a){var b,c,d,e,h,i,k,l,m=a.split(f),n=j,o=[n],p=[];for(e=0,h=m.length;h>e;e++){for(l=[],i=0,k=o.length;k>i;i++)for(n=o[i].n,c=[n[m[e]],n[g]],d=2;d--;)b=c[d],b&&(l.push(b),p=p.concat(b.f||[]));o=l}return p},k.on=function(a,b){if(a=String(a),"function"!=typeof b)return function(){};for(var c=a.split(f),d=j,e=0,g=c.length;g>e;e++)d=d.n,d=d.hasOwnProperty(c[e])&&d[c[e]]||(d[c[e]]={n:{}});for(d.f=d.f||[],e=0,g=d.f.length;g>e;e++)if(d.f[e]==b)return h;return d.f.push(b),function(a){+a==+a&&(b.zIndex=+a)}},k.f=function(a){var b=[].slice.call(arguments,1);return function(){k.apply(null,[a,null].concat(b).concat([].slice.call(arguments,0)))}},k.stop=function(){c=1},k.nt=function(a){return a?new RegExp("(?:\\.|\\/|^)"+a+"(?:\\.|\\/|$)").test(b):b},k.nts=function(){return b.split(f)},k.off=k.unbind=function(a,b){if(!a)return k._events=j={n:{}},void 0;var c,d,h,i,l,m,n,o=a.split(f),p=[j];for(i=0,l=o.length;l>i;i++)for(m=0;m<p.length;m+=h.length-2){if(h=[m,1],c=p[m].n,o[i]!=g)c[o[i]]&&h.push(c[o[i]]);else for(d in c)c[e](d)&&h.push(c[d]);p.splice.apply(p,h)}for(i=0,l=p.length;l>i;i++)for(c=p[i];c.n;){if(b){if(c.f){for(m=0,n=c.f.length;n>m;m++)if(c.f[m]==b){c.f.splice(m,1);break}!c.f.length&&delete c.f}for(d in c.n)if(c.n[e](d)&&c.n[d].f){var q=c.n[d].f;for(m=0,n=q.length;n>m;m++)if(q[m]==b){q.splice(m,1);break}!q.length&&delete c.n[d].f}}else{delete c.f;for(d in c.n)c.n[e](d)&&c.n[d].f&&delete c.n[d].f}c=c.n}},k.once=function(a,b){var c=function(){return k.unbind(a,c),b.apply(this,arguments)};return k.on(a,c)},k.version=d,k.toString=function(){return"You are running Eve "+d},"undefined"!=typeof module&&module.exports?module.exports=k:"undefined"!=typeof define?define("eve",[],function(){return k}):a.eve=k}(this),function(a,b){"function"==typeof define&&define.amd?define(["eve"],function(c){return b(a,c)}):b(a,a.eve)}(this,function(a,b){function c(a){if(c.is(a,"function"))return u?a():b.on("raphael.DOMload",a);if(c.is(a,V))return c._engine.create[D](c,a.splice(0,3+c.is(a[0],T))).add(a);var d=Array.prototype.slice.call(arguments,0);if(c.is(d[d.length-1],"function")){var e=d.pop();return u?e.call(c._engine.create[D](c,d)):b.on("raphael.DOMload",function(){e.call(c._engine.create[D](c,d))})}return c._engine.create[D](c,arguments)}function d(a){if("function"==typeof a||Object(a)!==a)return a;var b=new a.constructor;for(var c in a)a[z](c)&&(b[c]=d(a[c]));return b}function e(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return a.push(a.splice(c,1)[0])}function f(a,b,c){function d(){var f=Array.prototype.slice.call(arguments,0),g=f.join("â"),h=d.cache=d.cache||{},i=d.count=d.count||[];return h[z](g)?(e(i,g),c?c(h[g]):h[g]):(i.length>=1e3&&delete h[i.shift()],i.push(g),h[g]=a[D](b,f),c?c(h[g]):h[g])}return d}function g(){return this.hex}function h(a,b){for(var c=[],d=0,e=a.length;e-2*!b>d;d+=2){var f=[{x:+a[d-2],y:+a[d-1]},{x:+a[d],y:+a[d+1]},{x:+a[d+2],y:+a[d+3]},{x:+a[d+4],y:+a[d+5]}];b?d?e-4==d?f[3]={x:+a[0],y:+a[1]}:e-2==d&&(f[2]={x:+a[0],y:+a[1]},f[3]={x:+a[2],y:+a[3]}):f[0]={x:+a[e-2],y:+a[e-1]}:e-4==d?f[3]=f[2]:d||(f[0]={x:+a[d],y:+a[d+1]}),c.push(["C",(-f[0].x+6*f[1].x+f[2].x)/6,(-f[0].y+6*f[1].y+f[2].y)/6,(f[1].x+6*f[2].x-f[3].x)/6,(f[1].y+6*f[2].y-f[3].y)/6,f[2].x,f[2].y])}return c}function i(a,b,c,d,e){var f=-3*b+9*c-9*d+3*e,g=a*f+6*b-12*c+6*d;return a*g-3*b+3*c}function j(a,b,c,d,e,f,g,h,j){null==j&&(j=1),j=j>1?1:0>j?0:j;for(var k=j/2,l=12,m=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],n=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],o=0,p=0;l>p;p++){var q=k*m[p]+k,r=i(q,a,c,e,g),s=i(q,b,d,f,h),t=r*r+s*s;o+=n[p]*N.sqrt(t)}return k*o}function k(a,b,c,d,e,f,g,h,i){if(!(0>i||j(a,b,c,d,e,f,g,h)<i)){var k,l=1,m=l/2,n=l-m,o=.01;for(k=j(a,b,c,d,e,f,g,h,n);Q(k-i)>o;)m/=2,n+=(i>k?1:-1)*m,k=j(a,b,c,d,e,f,g,h,n);return n}}function l(a,b,c,d,e,f,g,h){if(!(O(a,c)<P(e,g)||P(a,c)>O(e,g)||O(b,d)<P(f,h)||P(b,d)>O(f,h))){var i=(a*d-b*c)*(e-g)-(a-c)*(e*h-f*g),j=(a*d-b*c)*(f-h)-(b-d)*(e*h-f*g),k=(a-c)*(f-h)-(b-d)*(e-g);if(k){var l=i/k,m=j/k,n=+l.toFixed(2),o=+m.toFixed(2);if(!(n<+P(a,c).toFixed(2)||n>+O(a,c).toFixed(2)||n<+P(e,g).toFixed(2)||n>+O(e,g).toFixed(2)||o<+P(b,d).toFixed(2)||o>+O(b,d).toFixed(2)||o<+P(f,h).toFixed(2)||o>+O(f,h).toFixed(2)))return{x:l,y:m}}}}function m(a,b,d){var e=c.bezierBBox(a),f=c.bezierBBox(b);if(!c.isBBoxIntersect(e,f))return d?0:[];for(var g=j.apply(0,a),h=j.apply(0,b),i=O(~~(g/5),1),k=O(~~(h/5),1),m=[],n=[],o={},p=d?0:[],q=0;i+1>q;q++){var r=c.findDotsAtSegment.apply(c,a.concat(q/i));m.push({x:r.x,y:r.y,t:q/i})}for(q=0;k+1>q;q++)r=c.findDotsAtSegment.apply(c,b.concat(q/k)),n.push({x:r.x,y:r.y,t:q/k});for(q=0;i>q;q++)for(var s=0;k>s;s++){var t=m[q],u=m[q+1],v=n[s],w=n[s+1],x=Q(u.x-t.x)<.001?"y":"x",y=Q(w.x-v.x)<.001?"y":"x",z=l(t.x,t.y,u.x,u.y,v.x,v.y,w.x,w.y);if(z){if(o[z.x.toFixed(4)]==z.y.toFixed(4))continue;o[z.x.toFixed(4)]=z.y.toFixed(4);var A=t.t+Q((z[x]-t[x])/(u[x]-t[x]))*(u.t-t.t),B=v.t+Q((z[y]-v[y])/(w[y]-v[y]))*(w.t-v.t);A>=0&&1.001>=A&&B>=0&&1.001>=B&&(d?p++:p.push({x:z.x,y:z.y,t1:P(A,1),t2:P(B,1)}))}}return p}function n(a,b,d){a=c._path2curve(a),b=c._path2curve(b);for(var e,f,g,h,i,j,k,l,n,o,p=d?0:[],q=0,r=a.length;r>q;q++){var s=a[q];if("M"==s[0])e=i=s[1],f=j=s[2];else{"C"==s[0]?(n=[e,f].concat(s.slice(1)),e=n[6],f=n[7]):(n=[e,f,e,f,i,j,i,j],e=i,f=j);for(var t=0,u=b.length;u>t;t++){var v=b[t];if("M"==v[0])g=k=v[1],h=l=v[2];else{"C"==v[0]?(o=[g,h].concat(v.slice(1)),g=o[6],h=o[7]):(o=[g,h,g,h,k,l,k,l],g=k,h=l);var w=m(n,o,d);if(d)p+=w;else{for(var x=0,y=w.length;y>x;x++)w[x].segment1=q,w[x].segment2=t,w[x].bez1=n,w[x].bez2=o;p=p.concat(w)}}}}}return p}function o(a,b,c,d,e,f){null!=a?(this.a=+a,this.b=+b,this.c=+c,this.d=+d,this.e=+e,this.f=+f):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function p(){return this.x+H+this.y+H+this.width+" à "+this.height}function q(a,b,c,d,e,f){function g(a){return((l*a+k)*a+j)*a}function h(a,b){var c=i(a,b);return((o*c+n)*c+m)*c}function i(a,b){var c,d,e,f,h,i;for(e=a,i=0;8>i;i++){if(f=g(e)-a,Q(f)<b)return e;if(h=(3*l*e+2*k)*e+j,Q(h)<1e-6)break;e-=f/h}if(c=0,d=1,e=a,c>e)return c;if(e>d)return d;for(;d>c;){if(f=g(e),Q(f-a)<b)return e;a>f?c=e:d=e,e=(d-c)/2+c}return e}var j=3*b,k=3*(d-b)-j,l=1-j-k,m=3*c,n=3*(e-c)-m,o=1-m-n;return h(a,1/(200*f))}function r(a,b){var c=[],d={};if(this.ms=b,this.times=1,a){for(var e in a)a[z](e)&&(d[_(e)]=a[e],c.push(_(e)));c.sort(lb)}this.anim=d,this.top=c[c.length-1],this.percents=c}function s(a,d,e,f,g,h){e=_(e);var i,j,k,l,m,n,p=a.ms,r={},s={},t={};if(f)for(v=0,x=ic.length;x>v;v++){var u=ic[v];if(u.el.id==d.id&&u.anim==a){u.percent!=e?(ic.splice(v,1),k=1):j=u,d.attr(u.totalOrigin);break}}else f=+s;for(var v=0,x=a.percents.length;x>v;v++){if(a.percents[v]==e||a.percents[v]>f*a.top){e=a.percents[v],m=a.percents[v-1]||0,p=p/a.top*(e-m),l=a.percents[v+1],i=a.anim[e];break}f&&d.attr(a.anim[a.percents[v]])}if(i){if(j)j.initstatus=f,j.start=new Date-j.ms*f;else{for(var y in i)if(i[z](y)&&(db[z](y)||d.paper.customAttributes[z](y)))switch(r[y]=d.attr(y),null==r[y]&&(r[y]=cb[y]),s[y]=i[y],db[y]){case T:t[y]=(s[y]-r[y])/p;break;case"colour":r[y]=c.getRGB(r[y]);var A=c.getRGB(s[y]);t[y]={r:(A.r-r[y].r)/p,g:(A.g-r[y].g)/p,b:(A.b-r[y].b)/p};break;case"path":var B=Kb(r[y],s[y]),C=B[1];for(r[y]=B[0],t[y]=[],v=0,x=r[y].length;x>v;v++){t[y][v]=[0];for(var D=1,F=r[y][v].length;F>D;D++)t[y][v][D]=(C[v][D]-r[y][v][D])/p}break;case"transform":var G=d._,H=Pb(G[y],s[y]);if(H)for(r[y]=H.from,s[y]=H.to,t[y]=[],t[y].real=!0,v=0,x=r[y].length;x>v;v++)for(t[y][v]=[r[y][v][0]],D=1,F=r[y][v].length;F>D;D++)t[y][v][D]=(s[y][v][D]-r[y][v][D])/p;else{var K=d.matrix||new o,L={_:{transform:G.transform},getBBox:function(){return d.getBBox(1)}};r[y]=[K.a,K.b,K.c,K.d,K.e,K.f],Nb(L,s[y]),s[y]=L._.transform,t[y]=[(L.matrix.a-K.a)/p,(L.matrix.b-K.b)/p,(L.matrix.c-K.c)/p,(L.matrix.d-K.d)/p,(L.matrix.e-K.e)/p,(L.matrix.f-K.f)/p]}break;case"csv":var M=I(i[y])[J](w),N=I(r[y])[J](w);if("clip-rect"==y)for(r[y]=N,t[y]=[],v=N.length;v--;)t[y][v]=(M[v]-r[y][v])/p;s[y]=M;break;default:for(M=[][E](i[y]),N=[][E](r[y]),t[y]=[],v=d.paper.customAttributes[y].length;v--;)t[y][v]=((M[v]||0)-(N[v]||0))/p}var O=i.easing,P=c.easing_formulas[O];if(!P)if(P=I(O).match(Z),P&&5==P.length){var Q=P;P=function(a){return q(a,+Q[1],+Q[2],+Q[3],+Q[4],p)}}else P=nb;if(n=i.start||a.start||+new Date,u={anim:a,percent:e,timestamp:n,start:n+(a.del||0),status:0,initstatus:f||0,stop:!1,ms:p,easing:P,from:r,diff:t,to:s,el:d,callback:i.callback,prev:m,next:l,repeat:h||a.times,origin:d.attr(),totalOrigin:g},ic.push(u),f&&!j&&!k&&(u.stop=!0,u.start=new Date-p*f,1==ic.length))return kc();k&&(u.start=new Date-u.ms*f),1==ic.length&&jc(kc)}b("raphael.anim.start."+d.id,d,a)}}function t(a){for(var b=0;b<ic.length;b++)ic[b].el.paper==a&&ic.splice(b--,1)}c.version="2.1.2",c.eve=b;var u,v,w=/[, ]+/,x={circle:1,rect:1,path:1,ellipse:1,text:1,image:1},y=/\{(\d+)\}/g,z="hasOwnProperty",A={doc:document,win:a},B={was:Object.prototype[z].call(A.win,"Raphael"),is:A.win.Raphael},C=function(){this.ca=this.customAttributes={}},D="apply",E="concat",F="ontouchstart"in A.win||A.win.DocumentTouch&&A.doc instanceof DocumentTouch,G="",H=" ",I=String,J="split",K="click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel"[J](H),L={mousedown:"touchstart",mousemove:"touchmove",mouseup:"touchend"},M=I.prototype.toLowerCase,N=Math,O=N.max,P=N.min,Q=N.abs,R=N.pow,S=N.PI,T="number",U="string",V="array",W=Object.prototype.toString,X=(c._ISURL=/^url\(['"]?([^\)]+?)['"]?\)$/i,/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i),Y={NaN:1,Infinity:1,"-Infinity":1},Z=/^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/,$=N.round,_=parseFloat,ab=parseInt,bb=I.prototype.toUpperCase,cb=c._availableAttrs={"arrow-end":"none","arrow-start":"none",blur:0,"clip-rect":"0 0 1e9 1e9",cursor:"default",cx:0,cy:0,fill:"#fff","fill-opacity":1,font:'10px "Arial"',"font-family":'"Arial"',"font-size":"10","font-style":"normal","font-weight":400,gradient:0,height:0,href:"http://raphaeljs.com/","letter-spacing":0,opacity:1,path:"M0,0",r:0,rx:0,ry:0,src:"",stroke:"#000","stroke-dasharray":"","stroke-linecap":"butt","stroke-linejoin":"butt","stroke-miterlimit":0,"stroke-opacity":1,"stroke-width":1,target:"_blank","text-anchor":"middle",title:"Raphael",transform:"",width:0,x:0,y:0},db=c._availableAnimAttrs={blur:T,"clip-rect":"csv",cx:T,cy:T,fill:"colour","fill-opacity":T,"font-size":T,height:T,opacity:T,path:"path",r:T,rx:T,ry:T,stroke:"colour","stroke-opacity":T,"stroke-width":T,transform:"transform",width:T,x:T,y:T},eb=/[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/,fb={hs:1,rg:1},gb=/,?([achlmqrstvxz]),?/gi,hb=/([achlmrqstvz])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/gi,ib=/([rstm])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/gi,jb=/(-?\d*\.?\d*(?:e[\-+]?\d+)?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/gi,kb=(c._radial_gradient=/^r(?:\(([^,]+?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*([^\)]+?)\))?/,{}),lb=function(a,b){return _(a)-_(b)},mb=function(){},nb=function(a){return a},ob=c._rectPath=function(a,b,c,d,e){return e?[["M",a+e,b],["l",c-2*e,0],["a",e,e,0,0,1,e,e],["l",0,d-2*e],["a",e,e,0,0,1,-e,e],["l",2*e-c,0],["a",e,e,0,0,1,-e,-e],["l",0,2*e-d],["a",e,e,0,0,1,e,-e],["z"]]:[["M",a,b],["l",c,0],["l",0,d],["l",-c,0],["z"]]},pb=function(a,b,c,d){return null==d&&(d=c),[["M",a,b],["m",0,-d],["a",c,d,0,1,1,0,2*d],["a",c,d,0,1,1,0,-2*d],["z"]]},qb=c._getPath={path:function(a){return a.attr("path")},circle:function(a){var b=a.attrs;return pb(b.cx,b.cy,b.r)},ellipse:function(a){var b=a.attrs;return pb(b.cx,b.cy,b.rx,b.ry)},rect:function(a){var b=a.attrs;return ob(b.x,b.y,b.width,b.height,b.r)},image:function(a){var b=a.attrs;return ob(b.x,b.y,b.width,b.height)},text:function(a){var b=a._getBBox();return ob(b.x,b.y,b.width,b.height)},set:function(a){var b=a._getBBox();return ob(b.x,b.y,b.width,b.height)}},rb=c.mapPath=function(a,b){if(!b)return a;var c,d,e,f,g,h,i;for(a=Kb(a),e=0,g=a.length;g>e;e++)for(i=a[e],f=1,h=i.length;h>f;f+=2)c=b.x(i[f],i[f+1]),d=b.y(i[f],i[f+1]),i[f]=c,i[f+1]=d;return a};if(c._g=A,c.type=A.win.SVGAngle||A.doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")?"SVG":"VML","VML"==c.type){var sb,tb=A.doc.createElement("div");if(tb.innerHTML='<v:shape adj="1"/>',sb=tb.firstChild,sb.style.behavior="url(#default#VML)",!sb||"object"!=typeof sb.adj)return c.type=G;tb=null}c.svg=!(c.vml="VML"==c.type),c._Paper=C,c.fn=v=C.prototype=c.prototype,c._id=0,c._oid=0,c.is=function(a,b){return b=M.call(b),"finite"==b?!Y[z](+a):"array"==b?a instanceof Array:"null"==b&&null===a||b==typeof a&&null!==a||"object"==b&&a===Object(a)||"array"==b&&Array.isArray&&Array.isArray(a)||W.call(a).slice(8,-1).toLowerCase()==b},c.angle=function(a,b,d,e,f,g){if(null==f){var h=a-d,i=b-e;return h||i?(180+180*N.atan2(-i,-h)/S+360)%360:0}return c.angle(a,b,f,g)-c.angle(d,e,f,g)},c.rad=function(a){return a%360*S/180},c.deg=function(a){return 180*a/S%360},c.snapTo=function(a,b,d){if(d=c.is(d,"finite")?d:10,c.is(a,V)){for(var e=a.length;e--;)if(Q(a[e]-b)<=d)return a[e]}else{a=+a;var f=b%a;if(d>f)return b-f;if(f>a-d)return b-f+a}return b},c.createUUID=function(a,b){return function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(a,b).toUpperCase()}}(/[xy]/g,function(a){var b=0|16*N.random(),c="x"==a?b:8|3&b;return c.toString(16)}),c.setWindow=function(a){b("raphael.setWindow",c,A.win,a),A.win=a,A.doc=A.win.document,c._engine.initWin&&c._engine.initWin(A.win)};var ub=function(a){if(c.vml){var b,d=/^\s+|\s+$/g;try{var e=new ActiveXObject("htmlfile");e.write("<body>"),e.close(),b=e.body}catch(g){b=createPopup().document.body}var h=b.createTextRange();ub=f(function(a){try{b.style.color=I(a).replace(d,G);var c=h.queryCommandValue("ForeColor");return c=(255&c)<<16|65280&c|(16711680&c)>>>16,"#"+("000000"+c.toString(16)).slice(-6)}catch(e){return"none"}})}else{var i=A.doc.createElement("i");i.title="Raphaël Colour Picker",i.style.display="none",A.doc.body.appendChild(i),ub=f(function(a){return i.style.color=a,A.doc.defaultView.getComputedStyle(i,G).getPropertyValue("color")})}return ub(a)},vb=function(){return"hsb("+[this.h,this.s,this.b]+")"},wb=function(){return"hsl("+[this.h,this.s,this.l]+")"},xb=function(){return this.hex},yb=function(a,b,d){if(null==b&&c.is(a,"object")&&"r"in a&&"g"in a&&"b"in a&&(d=a.b,b=a.g,a=a.r),null==b&&c.is(a,U)){var e=c.getRGB(a);a=e.r,b=e.g,d=e.b}return(a>1||b>1||d>1)&&(a/=255,b/=255,d/=255),[a,b,d]},zb=function(a,b,d,e){a*=255,b*=255,d*=255;var f={r:a,g:b,b:d,hex:c.rgb(a,b,d),toString:xb};return c.is(e,"finite")&&(f.opacity=e),f};c.color=function(a){var b;return c.is(a,"object")&&"h"in a&&"s"in a&&"b"in a?(b=c.hsb2rgb(a),a.r=b.r,a.g=b.g,a.b=b.b,a.hex=b.hex):c.is(a,"object")&&"h"in a&&"s"in a&&"l"in a?(b=c.hsl2rgb(a),a.r=b.r,a.g=b.g,a.b=b.b,a.hex=b.hex):(c.is(a,"string")&&(a=c.getRGB(a)),c.is(a,"object")&&"r"in a&&"g"in a&&"b"in a?(b=c.rgb2hsl(a),a.h=b.h,a.s=b.s,a.l=b.l,b=c.rgb2hsb(a),a.v=b.b):(a={hex:"none"},a.r=a.g=a.b=a.h=a.s=a.v=a.l=-1)),a.toString=xb,a},c.hsb2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"b"in a&&(c=a.b,b=a.s,a=a.h,d=a.o),a*=360;var e,f,g,h,i;return a=a%360/60,i=c*b,h=i*(1-Q(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a],zb(e,f,g,d)},c.hsl2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"l"in a&&(c=a.l,b=a.s,a=a.h),(a>1||b>1||c>1)&&(a/=360,b/=100,c/=100),a*=360;var e,f,g,h,i;return a=a%360/60,i=2*b*(.5>c?c:1-c),h=i*(1-Q(a%2-1)),e=f=g=c-i/2,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a],zb(e,f,g,d)},c.rgb2hsb=function(a,b,c){c=yb(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;return f=O(a,b,c),g=f-P(a,b,c),d=0==g?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=60*((d+360)%6)/360,e=0==g?0:g/f,{h:d,s:e,b:f,toString:vb}},c.rgb2hsl=function(a,b,c){c=yb(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;return g=O(a,b,c),h=P(a,b,c),i=g-h,d=0==i?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=60*((d+360)%6)/360,f=(g+h)/2,e=0==i?0:.5>f?i/(2*f):i/(2-2*f),{h:d,s:e,l:f,toString:wb}},c._path2string=function(){return this.join(",").replace(gb,"$1")},c._preload=function(a,b){var c=A.doc.createElement("img");c.style.cssText="position:absolute;left:-9999em;top:-9999em",c.onload=function(){b.call(this),this.onload=null,A.doc.body.removeChild(this)},c.onerror=function(){A.doc.body.removeChild(this)},A.doc.body.appendChild(c),c.src=a},c.getRGB=f(function(a){if(!a||(a=I(a)).indexOf("-")+1)return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:g};if("none"==a)return{r:-1,g:-1,b:-1,hex:"none",toString:g};!(fb[z](a.toLowerCase().substring(0,2))||"#"==a.charAt())&&(a=ub(a));var b,d,e,f,h,i,j=a.match(X);return j?(j[2]&&(e=ab(j[2].substring(5),16),d=ab(j[2].substring(3,5),16),b=ab(j[2].substring(1,3),16)),j[3]&&(e=ab((h=j[3].charAt(3))+h,16),d=ab((h=j[3].charAt(2))+h,16),b=ab((h=j[3].charAt(1))+h,16)),j[4]&&(i=j[4][J](eb),b=_(i[0]),"%"==i[0].slice(-1)&&(b*=2.55),d=_(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=_(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),"rgba"==j[1].toLowerCase().slice(0,4)&&(f=_(i[3])),i[3]&&"%"==i[3].slice(-1)&&(f/=100)),j[5]?(i=j[5][J](eb),b=_(i[0]),"%"==i[0].slice(-1)&&(b*=2.55),d=_(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=_(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),("deg"==i[0].slice(-3)||"°"==i[0].slice(-1))&&(b/=360),"hsba"==j[1].toLowerCase().slice(0,4)&&(f=_(i[3])),i[3]&&"%"==i[3].slice(-1)&&(f/=100),c.hsb2rgb(b,d,e,f)):j[6]?(i=j[6][J](eb),b=_(i[0]),"%"==i[0].slice(-1)&&(b*=2.55),d=_(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=_(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),("deg"==i[0].slice(-3)||"°"==i[0].slice(-1))&&(b/=360),"hsla"==j[1].toLowerCase().slice(0,4)&&(f=_(i[3])),i[3]&&"%"==i[3].slice(-1)&&(f/=100),c.hsl2rgb(b,d,e,f)):(j={r:b,g:d,b:e,toString:g},j.hex="#"+(16777216|e|d<<8|b<<16).toString(16).slice(1),c.is(f,"finite")&&(j.opacity=f),j)):{r:-1,g:-1,b:-1,hex:"none",error:1,toString:g}},c),c.hsb=f(function(a,b,d){return c.hsb2rgb(a,b,d).hex}),c.hsl=f(function(a,b,d){return c.hsl2rgb(a,b,d).hex}),c.rgb=f(function(a,b,c){return"#"+(16777216|c|b<<8|a<<16).toString(16).slice(1)}),c.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||.75},c=this.hsb2rgb(b.h,b.s,b.b);return b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b})),c.hex},c.getColor.reset=function(){delete this.start},c.parsePathString=function(a){if(!a)return null;var b=Ab(a);if(b.arr)return Cb(b.arr);var d={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},e=[];return c.is(a,V)&&c.is(a[0],V)&&(e=Cb(a)),e.length||I(a).replace(hb,function(a,b,c){var f=[],g=b.toLowerCase();if(c.replace(jb,function(a,b){b&&f.push(+b)}),"m"==g&&f.length>2&&(e.push([b][E](f.splice(0,2))),g="l",b="m"==b?"l":"L"),"r"==g)e.push([b][E](f));else for(;f.length>=d[g]&&(e.push([b][E](f.splice(0,d[g]))),d[g]););}),e.toString=c._path2string,b.arr=Cb(e),e},c.parseTransformString=f(function(a){if(!a)return null;var b=[];return c.is(a,V)&&c.is(a[0],V)&&(b=Cb(a)),b.length||I(a).replace(ib,function(a,c,d){var e=[];M.call(c),d.replace(jb,function(a,b){b&&e.push(+b)}),b.push([c][E](e))}),b.toString=c._path2string,b});var Ab=function(a){var b=Ab.ps=Ab.ps||{};return b[a]?b[a].sleep=100:b[a]={sleep:100},setTimeout(function(){for(var c in b)b[z](c)&&c!=a&&(b[c].sleep--,!b[c].sleep&&delete b[c])}),b[a]};c.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=R(j,3),l=R(j,2),m=i*i,n=m*i,o=k*a+3*l*i*c+3*j*i*i*e+n*g,p=k*b+3*l*i*d+3*j*i*i*f+n*h,q=a+2*i*(c-a)+m*(e-2*c+a),r=b+2*i*(d-b)+m*(f-2*d+b),s=c+2*i*(e-c)+m*(g-2*e+c),t=d+2*i*(f-d)+m*(h-2*f+d),u=j*a+i*c,v=j*b+i*d,w=j*e+i*g,x=j*f+i*h,y=90-180*N.atan2(q-s,r-t)/S;return(q>s||t>r)&&(y+=180),{x:o,y:p,m:{x:q,y:r},n:{x:s,y:t},start:{x:u,y:v},end:{x:w,y:x},alpha:y}},c.bezierBBox=function(a,b,d,e,f,g,h,i){c.is(a,"array")||(a=[a,b,d,e,f,g,h,i]);var j=Jb.apply(null,a);return{x:j.min.x,y:j.min.y,x2:j.max.x,y2:j.max.y,width:j.max.x-j.min.x,height:j.max.y-j.min.y}},c.isPointInsideBBox=function(a,b,c){return b>=a.x&&b<=a.x2&&c>=a.y&&c<=a.y2},c.isBBoxIntersect=function(a,b){var d=c.isPointInsideBBox;return d(b,a.x,a.y)||d(b,a.x2,a.y)||d(b,a.x,a.y2)||d(b,a.x2,a.y2)||d(a,b.x,b.y)||d(a,b.x2,b.y)||d(a,b.x,b.y2)||d(a,b.x2,b.y2)||(a.x<b.x2&&a.x>b.x||b.x<a.x2&&b.x>a.x)&&(a.y<b.y2&&a.y>b.y||b.y<a.y2&&b.y>a.y)},c.pathIntersection=function(a,b){return n(a,b)},c.pathIntersectionNumber=function(a,b){return n(a,b,1)},c.isPointInsidePath=function(a,b,d){var e=c.pathBBox(a);return c.isPointInsideBBox(e,b,d)&&1==n(a,[["M",b,d],["H",e.x2+10]],1)%2},c._removedFactory=function(a){return function(){b("raphael.log",null,"Raphaël: you are calling to method â"+a+"â of removed object",a)}};var Bb=c.pathBBox=function(a){var b=Ab(a);if(b.bbox)return d(b.bbox);if(!a)return{x:0,y:0,width:0,height:0,x2:0,y2:0};a=Kb(a);for(var c,e=0,f=0,g=[],h=[],i=0,j=a.length;j>i;i++)if(c=a[i],"M"==c[0])e=c[1],f=c[2],g.push(e),h.push(f);else{var k=Jb(e,f,c[1],c[2],c[3],c[4],c[5],c[6]);g=g[E](k.min.x,k.max.x),h=h[E](k.min.y,k.max.y),e=c[5],f=c[6]}var l=P[D](0,g),m=P[D](0,h),n=O[D](0,g),o=O[D](0,h),p=n-l,q=o-m,r={x:l,y:m,x2:n,y2:o,width:p,height:q,cx:l+p/2,cy:m+q/2};return b.bbox=d(r),r},Cb=function(a){var b=d(a);return b.toString=c._path2string,b},Db=c._pathToRelative=function(a){var b=Ab(a);if(b.rel)return Cb(b.rel);c.is(a,V)&&c.is(a&&a[0],V)||(a=c.parsePathString(a));var d=[],e=0,f=0,g=0,h=0,i=0;"M"==a[0][0]&&(e=a[0][1],f=a[0][2],g=e,h=f,i++,d.push(["M",e,f]));for(var j=i,k=a.length;k>j;j++){var l=d[j]=[],m=a[j];if(m[0]!=M.call(m[0]))switch(l[0]=M.call(m[0]),l[0]){case"a":l[1]=m[1],l[2]=m[2],l[3]=m[3],l[4]=m[4],l[5]=m[5],l[6]=+(m[6]-e).toFixed(3),l[7]=+(m[7]-f).toFixed(3);break;case"v":l[1]=+(m[1]-f).toFixed(3);break;case"m":g=m[1],h=m[2];default:for(var n=1,o=m.length;o>n;n++)l[n]=+(m[n]-(n%2?e:f)).toFixed(3)}else{l=d[j]=[],"m"==m[0]&&(g=m[1]+e,h=m[2]+f);for(var p=0,q=m.length;q>p;p++)d[j][p]=m[p]}var r=d[j].length;switch(d[j][0]){case"z":e=g,f=h;break;case"h":e+=+d[j][r-1];break;case"v":f+=+d[j][r-1];break;default:e+=+d[j][r-2],f+=+d[j][r-1]}}return d.toString=c._path2string,b.rel=Cb(d),d},Eb=c._pathToAbsolute=function(a){var b=Ab(a);if(b.abs)return Cb(b.abs);if(c.is(a,V)&&c.is(a&&a[0],V)||(a=c.parsePathString(a)),!a||!a.length)return[["M",0,0]];var d=[],e=0,f=0,g=0,i=0,j=0;"M"==a[0][0]&&(e=+a[0][1],f=+a[0][2],g=e,i=f,j++,d[0]=["M",e,f]);for(var k,l,m=3==a.length&&"M"==a[0][0]&&"R"==a[1][0].toUpperCase()&&"Z"==a[2][0].toUpperCase(),n=j,o=a.length;o>n;n++){if(d.push(k=[]),l=a[n],l[0]!=bb.call(l[0]))switch(k[0]=bb.call(l[0]),k[0]){case"A":k[1]=l[1],k[2]=l[2],k[3]=l[3],k[4]=l[4],k[5]=l[5],k[6]=+(l[6]+e),k[7]=+(l[7]+f);break;case"V":k[1]=+l[1]+f;break;case"H":k[1]=+l[1]+e;break;case"R":for(var p=[e,f][E](l.slice(1)),q=2,r=p.length;r>q;q++)p[q]=+p[q]+e,p[++q]=+p[q]+f;d.pop(),d=d[E](h(p,m));break;case"M":g=+l[1]+e,i=+l[2]+f;default:for(q=1,r=l.length;r>q;q++)k[q]=+l[q]+(q%2?e:f)}else if("R"==l[0])p=[e,f][E](l.slice(1)),d.pop(),d=d[E](h(p,m)),k=["R"][E](l.slice(-2));else for(var s=0,t=l.length;t>s;s++)k[s]=l[s];switch(k[0]){case"Z":e=g,f=i;break;case"H":e=k[1];break;case"V":f=k[1];break;case"M":g=k[k.length-2],i=k[k.length-1];default:e=k[k.length-2],f=k[k.length-1]}}return d.toString=c._path2string,b.abs=Cb(d),d},Fb=function(a,b,c,d){return[a,b,c,d,c,d]},Gb=function(a,b,c,d,e,f){var g=1/3,h=2/3;return[g*a+h*c,g*b+h*d,g*e+h*c,g*f+h*d,e,f]},Hb=function(a,b,c,d,e,g,h,i,j,k){var l,m=120*S/180,n=S/180*(+e||0),o=[],p=f(function(a,b,c){var d=a*N.cos(c)-b*N.sin(c),e=a*N.sin(c)+b*N.cos(c);return{x:d,y:e}});if(k)y=k[0],z=k[1],w=k[2],x=k[3];else{l=p(a,b,-n),a=l.x,b=l.y,l=p(i,j,-n),i=l.x,j=l.y;var q=(N.cos(S/180*e),N.sin(S/180*e),(a-i)/2),r=(b-j)/2,s=q*q/(c*c)+r*r/(d*d);s>1&&(s=N.sqrt(s),c=s*c,d=s*d);var t=c*c,u=d*d,v=(g==h?-1:1)*N.sqrt(Q((t*u-t*r*r-u*q*q)/(t*r*r+u*q*q))),w=v*c*r/d+(a+i)/2,x=v*-d*q/c+(b+j)/2,y=N.asin(((b-x)/d).toFixed(9)),z=N.asin(((j-x)/d).toFixed(9));y=w>a?S-y:y,z=w>i?S-z:z,0>y&&(y=2*S+y),0>z&&(z=2*S+z),h&&y>z&&(y-=2*S),!h&&z>y&&(z-=2*S)}var A=z-y;if(Q(A)>m){var B=z,C=i,D=j;z=y+m*(h&&z>y?1:-1),i=w+c*N.cos(z),j=x+d*N.sin(z),o=Hb(i,j,c,d,e,0,h,C,D,[z,B,w,x])}A=z-y;var F=N.cos(y),G=N.sin(y),H=N.cos(z),I=N.sin(z),K=N.tan(A/4),L=4/3*c*K,M=4/3*d*K,O=[a,b],P=[a+L*G,b-M*F],R=[i+L*I,j-M*H],T=[i,j];if(P[0]=2*O[0]-P[0],P[1]=2*O[1]-P[1],k)return[P,R,T][E](o);o=[P,R,T][E](o).join()[J](",");for(var U=[],V=0,W=o.length;W>V;V++)U[V]=V%2?p(o[V-1],o[V],n).y:p(o[V],o[V+1],n).x;return U},Ib=function(a,b,c,d,e,f,g,h,i){var j=1-i;return{x:R(j,3)*a+3*R(j,2)*i*c+3*j*i*i*e+R(i,3)*g,y:R(j,3)*b+3*R(j,2)*i*d+3*j*i*i*f+R(i,3)*h}},Jb=f(function(a,b,c,d,e,f,g,h){var i,j=e-2*c+a-(g-2*e+c),k=2*(c-a)-2*(e-c),l=a-c,m=(-k+N.sqrt(k*k-4*j*l))/2/j,n=(-k-N.sqrt(k*k-4*j*l))/2/j,o=[b,h],p=[a,g];return Q(m)>"1e12"&&(m=.5),Q(n)>"1e12"&&(n=.5),m>0&&1>m&&(i=Ib(a,b,c,d,e,f,g,h,m),p.push(i.x),o.push(i.y)),n>0&&1>n&&(i=Ib(a,b,c,d,e,f,g,h,n),p.push(i.x),o.push(i.y)),j=f-2*d+b-(h-2*f+d),k=2*(d-b)-2*(f-d),l=b-d,m=(-k+N.sqrt(k*k-4*j*l))/2/j,n=(-k-N.sqrt(k*k-4*j*l))/2/j,Q(m)>"1e12"&&(m=.5),Q(n)>"1e12"&&(n=.5),m>0&&1>m&&(i=Ib(a,b,c,d,e,f,g,h,m),p.push(i.x),o.push(i.y)),n>0&&1>n&&(i=Ib(a,b,c,d,e,f,g,h,n),p.push(i.x),o.push(i.y)),{min:{x:P[D](0,p),y:P[D](0,o)},max:{x:O[D](0,p),y:O[D](0,o)}}}),Kb=c._path2curve=f(function(a,b){var c=!b&&Ab(a);if(!b&&c.curve)return Cb(c.curve);for(var d=Eb(a),e=b&&Eb(b),f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},h=(function(a,b,c){var d,e;if(!a)return["C",b.x,b.y,b.x,b.y,b.x,b.y];switch(!(a[0]in{T:1,Q:1})&&(b.qx=b.qy=null),a[0]){case"M":b.X=a[1],b.Y=a[2];break;case"A":a=["C"][E](Hb[D](0,[b.x,b.y][E](a.slice(1))));break;case"S":"C"==c||"S"==c?(d=2*b.x-b.bx,e=2*b.y-b.by):(d=b.x,e=b.y),a=["C",d,e][E](a.slice(1));break;case"T":"Q"==c||"T"==c?(b.qx=2*b.x-b.qx,b.qy=2*b.y-b.qy):(b.qx=b.x,b.qy=b.y),a=["C"][E](Gb(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case"Q":b.qx=a[1],b.qy=a[2],a=["C"][E](Gb(b.x,b.y,a[1],a[2],a[3],a[4]));break;case"L":a=["C"][E](Fb(b.x,b.y,a[1],a[2]));break;case"H":a=["C"][E](Fb(b.x,b.y,a[1],b.y));break;case"V":a=["C"][E](Fb(b.x,b.y,b.x,a[1]));break;case"Z":a=["C"][E](Fb(b.x,b.y,b.X,b.Y))}return a}),i=function(a,b){if(a[b].length>7){a[b].shift();for(var c=a[b];c.length;)a.splice(b++,0,["C"][E](c.splice(0,6)));a.splice(b,1),l=O(d.length,e&&e.length||0)}},j=function(a,b,c,f,g){a&&b&&"M"==a[g][0]&&"M"!=b[g][0]&&(b.splice(g,0,["M",f.x,f.y]),c.bx=0,c.by=0,c.x=a[g][1],c.y=a[g][2],l=O(d.length,e&&e.length||0))},k=0,l=O(d.length,e&&e.length||0);l>k;k++){d[k]=h(d[k],f),i(d,k),e&&(e[k]=h(e[k],g)),e&&i(e,k),j(d,e,f,g,k),j(e,d,g,f,k);var m=d[k],n=e&&e[k],o=m.length,p=e&&n.length;f.x=m[o-2],f.y=m[o-1],f.bx=_(m[o-4])||f.x,f.by=_(m[o-3])||f.y,g.bx=e&&(_(n[p-4])||g.x),g.by=e&&(_(n[p-3])||g.y),g.x=e&&n[p-2],g.y=e&&n[p-1]}return e||(c.curve=Cb(d)),e?[d,e]:d},null,Cb),Lb=(c._parseDots=f(function(a){for(var b=[],d=0,e=a.length;e>d;d++){var f={},g=a[d].match(/^([^:]*):?([\d\.]*)/);if(f.color=c.getRGB(g[1]),f.color.error)return null;f.color=f.color.hex,g[2]&&(f.offset=g[2]+"%"),b.push(f)}for(d=1,e=b.length-1;e>d;d++)if(!b[d].offset){for(var h=_(b[d-1].offset||0),i=0,j=d+1;e>j;j++)if(b[j].offset){i=b[j].offset;break}i||(i=100,j=e),i=_(i);for(var k=(i-h)/(j-d+1);j>d;d++)h+=k,b[d].offset=h+"%"}return b}),c._tear=function(a,b){a==b.top&&(b.top=a.prev),a==b.bottom&&(b.bottom=a.next),a.next&&(a.next.prev=a.prev),a.prev&&(a.prev.next=a.next)}),Mb=(c._tofront=function(a,b){b.top!==a&&(Lb(a,b),a.next=null,a.prev=b.top,b.top.next=a,b.top=a)},c._toback=function(a,b){b.bottom!==a&&(Lb(a,b),a.next=b.bottom,a.prev=null,b.bottom.prev=a,b.bottom=a)},c._insertafter=function(a,b,c){Lb(a,c),b==c.top&&(c.top=a),b.next&&(b.next.prev=a),a.next=b.next,a.prev=b,b.next=a},c._insertbefore=function(a,b,c){Lb(a,c),b==c.bottom&&(c.bottom=a),b.prev&&(b.prev.next=a),a.prev=b.prev,b.prev=a,a.next=b},c.toMatrix=function(a,b){var c=Bb(a),d={_:{transform:G},getBBox:function(){return c}};return Nb(d,b),d.matrix}),Nb=(c.transformPath=function(a,b){return rb(a,Mb(a,b))},c._extractTransform=function(a,b){if(null==b)return a._.transform;b=I(b).replace(/\.{3}|\u2026/g,a._.transform||G);var d=c.parseTransformString(b),e=0,f=0,g=0,h=1,i=1,j=a._,k=new o;if(j.transform=d||[],d)for(var l=0,m=d.length;m>l;l++){var n,p,q,r,s,t=d[l],u=t.length,v=I(t[0]).toLowerCase(),w=t[0]!=v,x=w?k.invert():0;"t"==v&&3==u?w?(n=x.x(0,0),p=x.y(0,0),q=x.x(t[1],t[2]),r=x.y(t[1],t[2]),k.translate(q-n,r-p)):k.translate(t[1],t[2]):"r"==v?2==u?(s=s||a.getBBox(1),k.rotate(t[1],s.x+s.width/2,s.y+s.height/2),e+=t[1]):4==u&&(w?(q=x.x(t[2],t[3]),r=x.y(t[2],t[3]),k.rotate(t[1],q,r)):k.rotate(t[1],t[2],t[3]),e+=t[1]):"s"==v?2==u||3==u?(s=s||a.getBBox(1),k.scale(t[1],t[u-1],s.x+s.width/2,s.y+s.height/2),h*=t[1],i*=t[u-1]):5==u&&(w?(q=x.x(t[3],t[4]),r=x.y(t[3],t[4]),k.scale(t[1],t[2],q,r)):k.scale(t[1],t[2],t[3],t[4]),h*=t[1],i*=t[2]):"m"==v&&7==u&&k.add(t[1],t[2],t[3],t[4],t[5],t[6]),j.dirtyT=1,a.matrix=k}a.matrix=k,j.sx=h,j.sy=i,j.deg=e,j.dx=f=k.e,j.dy=g=k.f,1==h&&1==i&&!e&&j.bbox?(j.bbox.x+=+f,j.bbox.y+=+g):j.dirtyT=1}),Ob=function(a){var b=a[0];switch(b.toLowerCase()){case"t":return[b,0,0];case"m":return[b,1,0,0,1,0,0];case"r":return 4==a.length?[b,0,a[2],a[3]]:[b,0];case"s":return 5==a.length?[b,1,1,a[3],a[4]]:3==a.length?[b,1,1]:[b,1]}},Pb=c._equaliseTransform=function(a,b){b=I(b).replace(/\.{3}|\u2026/g,a),a=c.parseTransformString(a)||[],b=c.parseTransformString(b)||[];for(var d,e,f,g,h=O(a.length,b.length),i=[],j=[],k=0;h>k;k++){if(f=a[k]||Ob(b[k]),g=b[k]||Ob(f),f[0]!=g[0]||"r"==f[0].toLowerCase()&&(f[2]!=g[2]||f[3]!=g[3])||"s"==f[0].toLowerCase()&&(f[3]!=g[3]||f[4]!=g[4]))return;for(i[k]=[],j[k]=[],d=0,e=O(f.length,g.length);e>d;d++)d in f&&(i[k][d]=f[d]),d in g&&(j[k][d]=g[d]) +}return{from:i,to:j}};c._getContainer=function(a,b,d,e){var f;return f=null!=e||c.is(a,"object")?a:A.doc.getElementById(a),null!=f?f.tagName?null==b?{container:f,width:f.style.pixelWidth||f.offsetWidth,height:f.style.pixelHeight||f.offsetHeight}:{container:f,width:b,height:d}:{container:1,x:a,y:b,width:d,height:e}:void 0},c.pathToRelative=Db,c._engine={},c.path2curve=Kb,c.matrix=function(a,b,c,d,e,f){return new o(a,b,c,d,e,f)},function(a){function b(a){return a[0]*a[0]+a[1]*a[1]}function d(a){var c=N.sqrt(b(a));a[0]&&(a[0]/=c),a[1]&&(a[1]/=c)}a.add=function(a,b,c,d,e,f){var g,h,i,j,k=[[],[],[]],l=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1]],m=[[a,c,e],[b,d,f],[0,0,1]];for(a&&a instanceof o&&(m=[[a.a,a.c,a.e],[a.b,a.d,a.f],[0,0,1]]),g=0;3>g;g++)for(h=0;3>h;h++){for(j=0,i=0;3>i;i++)j+=l[g][i]*m[i][h];k[g][h]=j}this.a=k[0][0],this.b=k[1][0],this.c=k[0][1],this.d=k[1][1],this.e=k[0][2],this.f=k[1][2]},a.invert=function(){var a=this,b=a.a*a.d-a.b*a.c;return new o(a.d/b,-a.b/b,-a.c/b,a.a/b,(a.c*a.f-a.d*a.e)/b,(a.b*a.e-a.a*a.f)/b)},a.clone=function(){return new o(this.a,this.b,this.c,this.d,this.e,this.f)},a.translate=function(a,b){this.add(1,0,0,1,a,b)},a.scale=function(a,b,c,d){null==b&&(b=a),(c||d)&&this.add(1,0,0,1,c,d),this.add(a,0,0,b,0,0),(c||d)&&this.add(1,0,0,1,-c,-d)},a.rotate=function(a,b,d){a=c.rad(a),b=b||0,d=d||0;var e=+N.cos(a).toFixed(9),f=+N.sin(a).toFixed(9);this.add(e,f,-f,e,b,d),this.add(1,0,0,1,-b,-d)},a.x=function(a,b){return a*this.a+b*this.c+this.e},a.y=function(a,b){return a*this.b+b*this.d+this.f},a.get=function(a){return+this[I.fromCharCode(97+a)].toFixed(4)},a.toString=function(){return c.svg?"matrix("+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+")":[this.get(0),this.get(2),this.get(1),this.get(3),0,0].join()},a.toFilter=function(){return"progid:DXImageTransform.Microsoft.Matrix(M11="+this.get(0)+", M12="+this.get(2)+", M21="+this.get(1)+", M22="+this.get(3)+", Dx="+this.get(4)+", Dy="+this.get(5)+", sizingmethod='auto expand')"},a.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]},a.split=function(){var a={};a.dx=this.e,a.dy=this.f;var e=[[this.a,this.c],[this.b,this.d]];a.scalex=N.sqrt(b(e[0])),d(e[0]),a.shear=e[0][0]*e[1][0]+e[0][1]*e[1][1],e[1]=[e[1][0]-e[0][0]*a.shear,e[1][1]-e[0][1]*a.shear],a.scaley=N.sqrt(b(e[1])),d(e[1]),a.shear/=a.scaley;var f=-e[0][1],g=e[1][1];return 0>g?(a.rotate=c.deg(N.acos(g)),0>f&&(a.rotate=360-a.rotate)):a.rotate=c.deg(N.asin(f)),a.isSimple=!(+a.shear.toFixed(9)||a.scalex.toFixed(9)!=a.scaley.toFixed(9)&&a.rotate),a.isSuperSimple=!+a.shear.toFixed(9)&&a.scalex.toFixed(9)==a.scaley.toFixed(9)&&!a.rotate,a.noRotation=!+a.shear.toFixed(9)&&!a.rotate,a},a.toTransformString=function(a){var b=a||this[J]();return b.isSimple?(b.scalex=+b.scalex.toFixed(4),b.scaley=+b.scaley.toFixed(4),b.rotate=+b.rotate.toFixed(4),(b.dx||b.dy?"t"+[b.dx,b.dy]:G)+(1!=b.scalex||1!=b.scaley?"s"+[b.scalex,b.scaley,0,0]:G)+(b.rotate?"r"+[b.rotate,0,0]:G)):"m"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)]}}(o.prototype);var Qb=navigator.userAgent.match(/Version\/(.*?)\s/)||navigator.userAgent.match(/Chrome\/(\d+)/);v.safari="Apple Computer, Inc."==navigator.vendor&&(Qb&&Qb[1]<4||"iP"==navigator.platform.slice(0,2))||"Google Inc."==navigator.vendor&&Qb&&Qb[1]<8?function(){var a=this.rect(-99,-99,this.width+99,this.height+99).attr({stroke:"none"});setTimeout(function(){a.remove()})}:mb;for(var Rb=function(){this.returnValue=!1},Sb=function(){return this.originalEvent.preventDefault()},Tb=function(){this.cancelBubble=!0},Ub=function(){return this.originalEvent.stopPropagation()},Vb=function(a){var b=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,c=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft;return{x:a.clientX+c,y:a.clientY+b}},Wb=function(){return A.doc.addEventListener?function(a,b,c,d){var e=function(a){var b=Vb(a);return c.call(d,a,b.x,b.y)};if(a.addEventListener(b,e,!1),F&&L[b]){var f=function(b){for(var e=Vb(b),f=b,g=0,h=b.targetTouches&&b.targetTouches.length;h>g;g++)if(b.targetTouches[g].target==a){b=b.targetTouches[g],b.originalEvent=f,b.preventDefault=Sb,b.stopPropagation=Ub;break}return c.call(d,b,e.x,e.y)};a.addEventListener(L[b],f,!1)}return function(){return a.removeEventListener(b,e,!1),F&&L[b]&&a.removeEventListener(L[b],e,!1),!0}}:A.doc.attachEvent?function(a,b,c,d){var e=function(a){a=a||A.win.event;var b=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,e=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft,f=a.clientX+e,g=a.clientY+b;return a.preventDefault=a.preventDefault||Rb,a.stopPropagation=a.stopPropagation||Tb,c.call(d,a,f,g)};a.attachEvent("on"+b,e);var f=function(){return a.detachEvent("on"+b,e),!0};return f}:void 0}(),Xb=[],Yb=function(a){for(var c,d=a.clientX,e=a.clientY,f=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,g=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft,h=Xb.length;h--;){if(c=Xb[h],F&&a.touches){for(var i,j=a.touches.length;j--;)if(i=a.touches[j],i.identifier==c.el._drag.id){d=i.clientX,e=i.clientY,(a.originalEvent?a.originalEvent:a).preventDefault();break}}else a.preventDefault();var k,l=c.el.node,m=l.nextSibling,n=l.parentNode,o=l.style.display;A.win.opera&&n.removeChild(l),l.style.display="none",k=c.el.paper.getElementByPoint(d,e),l.style.display=o,A.win.opera&&(m?n.insertBefore(l,m):n.appendChild(l)),k&&b("raphael.drag.over."+c.el.id,c.el,k),d+=g,e+=f,b("raphael.drag.move."+c.el.id,c.move_scope||c.el,d-c.el._drag.x,e-c.el._drag.y,d,e,a)}},Zb=function(a){c.unmousemove(Yb).unmouseup(Zb);for(var d,e=Xb.length;e--;)d=Xb[e],d.el._drag={},b("raphael.drag.end."+d.el.id,d.end_scope||d.start_scope||d.move_scope||d.el,a);Xb=[]},$b=c.el={},_b=K.length;_b--;)!function(a){c[a]=$b[a]=function(b,d){return c.is(b,"function")&&(this.events=this.events||[],this.events.push({name:a,f:b,unbind:Wb(this.shape||this.node||A.doc,a,b,d||this)})),this},c["un"+a]=$b["un"+a]=function(b){for(var d=this.events||[],e=d.length;e--;)d[e].name!=a||!c.is(b,"undefined")&&d[e].f!=b||(d[e].unbind(),d.splice(e,1),!d.length&&delete this.events);return this}}(K[_b]);$b.data=function(a,d){var e=kb[this.id]=kb[this.id]||{};if(0==arguments.length)return e;if(1==arguments.length){if(c.is(a,"object")){for(var f in a)a[z](f)&&this.data(f,a[f]);return this}return b("raphael.data.get."+this.id,this,e[a],a),e[a]}return e[a]=d,b("raphael.data.set."+this.id,this,d,a),this},$b.removeData=function(a){return null==a?kb[this.id]={}:kb[this.id]&&delete kb[this.id][a],this},$b.getData=function(){return d(kb[this.id]||{})},$b.hover=function(a,b,c,d){return this.mouseover(a,c).mouseout(b,d||c)},$b.unhover=function(a,b){return this.unmouseover(a).unmouseout(b)};var ac=[];$b.drag=function(a,d,e,f,g,h){function i(i){(i.originalEvent||i).preventDefault();var j=i.clientX,k=i.clientY,l=A.doc.documentElement.scrollTop||A.doc.body.scrollTop,m=A.doc.documentElement.scrollLeft||A.doc.body.scrollLeft;if(this._drag.id=i.identifier,F&&i.touches)for(var n,o=i.touches.length;o--;)if(n=i.touches[o],this._drag.id=n.identifier,n.identifier==this._drag.id){j=n.clientX,k=n.clientY;break}this._drag.x=j+m,this._drag.y=k+l,!Xb.length&&c.mousemove(Yb).mouseup(Zb),Xb.push({el:this,move_scope:f,start_scope:g,end_scope:h}),d&&b.on("raphael.drag.start."+this.id,d),a&&b.on("raphael.drag.move."+this.id,a),e&&b.on("raphael.drag.end."+this.id,e),b("raphael.drag.start."+this.id,g||f||this,i.clientX+m,i.clientY+l,i)}return this._drag={},ac.push({el:this,start:i}),this.mousedown(i),this},$b.onDragOver=function(a){a?b.on("raphael.drag.over."+this.id,a):b.unbind("raphael.drag.over."+this.id)},$b.undrag=function(){for(var a=ac.length;a--;)ac[a].el==this&&(this.unmousedown(ac[a].start),ac.splice(a,1),b.unbind("raphael.drag.*."+this.id));!ac.length&&c.unmousemove(Yb).unmouseup(Zb),Xb=[]},v.circle=function(a,b,d){var e=c._engine.circle(this,a||0,b||0,d||0);return this.__set__&&this.__set__.push(e),e},v.rect=function(a,b,d,e,f){var g=c._engine.rect(this,a||0,b||0,d||0,e||0,f||0);return this.__set__&&this.__set__.push(g),g},v.ellipse=function(a,b,d,e){var f=c._engine.ellipse(this,a||0,b||0,d||0,e||0);return this.__set__&&this.__set__.push(f),f},v.path=function(a){a&&!c.is(a,U)&&!c.is(a[0],V)&&(a+=G);var b=c._engine.path(c.format[D](c,arguments),this);return this.__set__&&this.__set__.push(b),b},v.image=function(a,b,d,e,f){var g=c._engine.image(this,a||"about:blank",b||0,d||0,e||0,f||0);return this.__set__&&this.__set__.push(g),g},v.text=function(a,b,d){var e=c._engine.text(this,a||0,b||0,I(d));return this.__set__&&this.__set__.push(e),e},v.set=function(a){!c.is(a,"array")&&(a=Array.prototype.splice.call(arguments,0,arguments.length));var b=new mc(a);return this.__set__&&this.__set__.push(b),b.paper=this,b.type="set",b},v.setStart=function(a){this.__set__=a||this.set()},v.setFinish=function(){var a=this.__set__;return delete this.__set__,a},v.setSize=function(a,b){return c._engine.setSize.call(this,a,b)},v.setViewBox=function(a,b,d,e,f){return c._engine.setViewBox.call(this,a,b,d,e,f)},v.top=v.bottom=null,v.raphael=c;var bc=function(a){var b=a.getBoundingClientRect(),c=a.ownerDocument,d=c.body,e=c.documentElement,f=e.clientTop||d.clientTop||0,g=e.clientLeft||d.clientLeft||0,h=b.top+(A.win.pageYOffset||e.scrollTop||d.scrollTop)-f,i=b.left+(A.win.pageXOffset||e.scrollLeft||d.scrollLeft)-g;return{y:h,x:i}};v.getElementByPoint=function(a,b){var c=this,d=c.canvas,e=A.doc.elementFromPoint(a,b);if(A.win.opera&&"svg"==e.tagName){var f=bc(d),g=d.createSVGRect();g.x=a-f.x,g.y=b-f.y,g.width=g.height=1;var h=d.getIntersectionList(g,null);h.length&&(e=h[h.length-1])}if(!e)return null;for(;e.parentNode&&e!=d.parentNode&&!e.raphael;)e=e.parentNode;return e==c.canvas.parentNode&&(e=d),e=e&&e.raphael?c.getById(e.raphaelid):null},v.getElementsByBBox=function(a){var b=this.set();return this.forEach(function(d){c.isBBoxIntersect(d.getBBox(),a)&&b.push(d)}),b},v.getById=function(a){for(var b=this.bottom;b;){if(b.id==a)return b;b=b.next}return null},v.forEach=function(a,b){for(var c=this.bottom;c;){if(a.call(b,c)===!1)return this;c=c.next}return this},v.getElementsByPoint=function(a,b){var c=this.set();return this.forEach(function(d){d.isPointInside(a,b)&&c.push(d)}),c},$b.isPointInside=function(a,b){var d=this.realPath=qb[this.type](this);return this.attr("transform")&&this.attr("transform").length&&(d=c.transformPath(d,this.attr("transform"))),c.isPointInsidePath(d,a,b)},$b.getBBox=function(a){if(this.removed)return{};var b=this._;return a?((b.dirty||!b.bboxwt)&&(this.realPath=qb[this.type](this),b.bboxwt=Bb(this.realPath),b.bboxwt.toString=p,b.dirty=0),b.bboxwt):((b.dirty||b.dirtyT||!b.bbox)&&((b.dirty||!this.realPath)&&(b.bboxwt=0,this.realPath=qb[this.type](this)),b.bbox=Bb(rb(this.realPath,this.matrix)),b.bbox.toString=p,b.dirty=b.dirtyT=0),b.bbox)},$b.clone=function(){if(this.removed)return null;var a=this.paper[this.type]().attr(this.attr());return this.__set__&&this.__set__.push(a),a},$b.glow=function(a){if("text"==this.type)return null;a=a||{};var b={width:(a.width||10)+(+this.attr("stroke-width")||1),fill:a.fill||!1,opacity:a.opacity||.5,offsetx:a.offsetx||0,offsety:a.offsety||0,color:a.color||"#000"},c=b.width/2,d=this.paper,e=d.set(),f=this.realPath||qb[this.type](this);f=this.matrix?rb(f,this.matrix):f;for(var g=1;c+1>g;g++)e.push(d.path(f).attr({stroke:b.color,fill:b.fill?b.color:"none","stroke-linejoin":"round","stroke-linecap":"round","stroke-width":+(b.width/c*g).toFixed(3),opacity:+(b.opacity/c).toFixed(3)}));return e.insertBefore(this).translate(b.offsetx,b.offsety)};var cc=function(a,b,d,e,f,g,h,i,l){return null==l?j(a,b,d,e,f,g,h,i):c.findDotsAtSegment(a,b,d,e,f,g,h,i,k(a,b,d,e,f,g,h,i,l))},dc=function(a,b){return function(d,e,f){d=Kb(d);for(var g,h,i,j,k,l="",m={},n=0,o=0,p=d.length;p>o;o++){if(i=d[o],"M"==i[0])g=+i[1],h=+i[2];else{if(j=cc(g,h,i[1],i[2],i[3],i[4],i[5],i[6]),n+j>e){if(b&&!m.start){if(k=cc(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),l+=["C"+k.start.x,k.start.y,k.m.x,k.m.y,k.x,k.y],f)return l;m.start=l,l=["M"+k.x,k.y+"C"+k.n.x,k.n.y,k.end.x,k.end.y,i[5],i[6]].join(),n+=j,g=+i[5],h=+i[6];continue}if(!a&&!b)return k=cc(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),{x:k.x,y:k.y,alpha:k.alpha}}n+=j,g=+i[5],h=+i[6]}l+=i.shift()+i}return m.end=l,k=a?n:b?m:c.findDotsAtSegment(g,h,i[0],i[1],i[2],i[3],i[4],i[5],1),k.alpha&&(k={x:k.x,y:k.y,alpha:k.alpha}),k}},ec=dc(1),fc=dc(),gc=dc(0,1);c.getTotalLength=ec,c.getPointAtLength=fc,c.getSubpath=function(a,b,c){if(this.getTotalLength(a)-c<1e-6)return gc(a,b).end;var d=gc(a,c,1);return b?gc(d,b).end:d},$b.getTotalLength=function(){var a=this.getPath();if(a)return this.node.getTotalLength?this.node.getTotalLength():ec(a)},$b.getPointAtLength=function(a){var b=this.getPath();if(b)return fc(b,a)},$b.getPath=function(){var a,b=c._getPath[this.type];if("text"!=this.type&&"set"!=this.type)return b&&(a=b(this)),a},$b.getSubpath=function(a,b){var d=this.getPath();if(d)return c.getSubpath(d,a,b)};var hc=c.easing_formulas={linear:function(a){return a},"<":function(a){return R(a,1.7)},">":function(a){return R(a,.48)},"<>":function(a){var b=.48-a/1.04,c=N.sqrt(.1734+b*b),d=c-b,e=R(Q(d),1/3)*(0>d?-1:1),f=-c-b,g=R(Q(f),1/3)*(0>f?-1:1),h=e+g+.5;return 3*(1-h)*h*h+h*h*h},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a-=1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){return a==!!a?a:R(2,-10*a)*N.sin((a-.075)*2*S/.3)+1},bounce:function(a){var b,c=7.5625,d=2.75;return 1/d>a?b=c*a*a:2/d>a?(a-=1.5/d,b=c*a*a+.75):2.5/d>a?(a-=2.25/d,b=c*a*a+.9375):(a-=2.625/d,b=c*a*a+.984375),b}};hc.easeIn=hc["ease-in"]=hc["<"],hc.easeOut=hc["ease-out"]=hc[">"],hc.easeInOut=hc["ease-in-out"]=hc["<>"],hc["back-in"]=hc.backIn,hc["back-out"]=hc.backOut;var ic=[],jc=a.requestAnimationFrame||a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame||a.msRequestAnimationFrame||function(a){setTimeout(a,16)},kc=function(){for(var a=+new Date,d=0;d<ic.length;d++){var e=ic[d];if(!e.el.removed&&!e.paused){var f,g,h=a-e.start,i=e.ms,j=e.easing,k=e.from,l=e.diff,m=e.to,n=(e.t,e.el),o={},p={};if(e.initstatus?(h=(e.initstatus*e.anim.top-e.prev)/(e.percent-e.prev)*i,e.status=e.initstatus,delete e.initstatus,e.stop&&ic.splice(d--,1)):e.status=(e.prev+(e.percent-e.prev)*(h/i))/e.anim.top,!(0>h))if(i>h){var q=j(h/i);for(var r in k)if(k[z](r)){switch(db[r]){case T:f=+k[r]+q*i*l[r];break;case"colour":f="rgb("+[lc($(k[r].r+q*i*l[r].r)),lc($(k[r].g+q*i*l[r].g)),lc($(k[r].b+q*i*l[r].b))].join(",")+")";break;case"path":f=[];for(var t=0,u=k[r].length;u>t;t++){f[t]=[k[r][t][0]];for(var v=1,w=k[r][t].length;w>v;v++)f[t][v]=+k[r][t][v]+q*i*l[r][t][v];f[t]=f[t].join(H)}f=f.join(H);break;case"transform":if(l[r].real)for(f=[],t=0,u=k[r].length;u>t;t++)for(f[t]=[k[r][t][0]],v=1,w=k[r][t].length;w>v;v++)f[t][v]=k[r][t][v]+q*i*l[r][t][v];else{var x=function(a){return+k[r][a]+q*i*l[r][a]};f=[["m",x(0),x(1),x(2),x(3),x(4),x(5)]]}break;case"csv":if("clip-rect"==r)for(f=[],t=4;t--;)f[t]=+k[r][t]+q*i*l[r][t];break;default:var y=[][E](k[r]);for(f=[],t=n.paper.customAttributes[r].length;t--;)f[t]=+y[t]+q*i*l[r][t]}o[r]=f}n.attr(o),function(a,c,d){setTimeout(function(){b("raphael.anim.frame."+a,c,d)})}(n.id,n,e.anim)}else{if(function(a,d,e){setTimeout(function(){b("raphael.anim.frame."+d.id,d,e),b("raphael.anim.finish."+d.id,d,e),c.is(a,"function")&&a.call(d)})}(e.callback,n,e.anim),n.attr(m),ic.splice(d--,1),e.repeat>1&&!e.next){for(g in m)m[z](g)&&(p[g]=e.totalOrigin[g]);e.el.attr(p),s(e.anim,e.el,e.anim.percents[0],null,e.totalOrigin,e.repeat-1)}e.next&&!e.stop&&s(e.anim,e.el,e.next,null,e.totalOrigin,e.repeat)}}}c.svg&&n&&n.paper&&n.paper.safari(),ic.length&&jc(kc)},lc=function(a){return a>255?255:0>a?0:a};$b.animateWith=function(a,b,d,e,f,g){var h=this;if(h.removed)return g&&g.call(h),h;var i=d instanceof r?d:c.animation(d,e,f,g);s(i,h,i.percents[0],null,h.attr());for(var j=0,k=ic.length;k>j;j++)if(ic[j].anim==b&&ic[j].el==a){ic[k-1].start=ic[j].start;break}return h},$b.onAnimation=function(a){return a?b.on("raphael.anim.frame."+this.id,a):b.unbind("raphael.anim.frame."+this.id),this},r.prototype.delay=function(a){var b=new r(this.anim,this.ms);return b.times=this.times,b.del=+a||0,b},r.prototype.repeat=function(a){var b=new r(this.anim,this.ms);return b.del=this.del,b.times=N.floor(O(a,0))||1,b},c.animation=function(a,b,d,e){if(a instanceof r)return a;(c.is(d,"function")||!d)&&(e=e||d||null,d=null),a=Object(a),b=+b||0;var f,g,h={};for(g in a)a[z](g)&&_(g)!=g&&_(g)+"%"!=g&&(f=!0,h[g]=a[g]);return f?(d&&(h.easing=d),e&&(h.callback=e),new r({100:h},b)):new r(a,b)},$b.animate=function(a,b,d,e){var f=this;if(f.removed)return e&&e.call(f),f;var g=a instanceof r?a:c.animation(a,b,d,e);return s(g,f,g.percents[0],null,f.attr()),f},$b.setTime=function(a,b){return a&&null!=b&&this.status(a,P(b,a.ms)/a.ms),this},$b.status=function(a,b){var c,d,e=[],f=0;if(null!=b)return s(a,this,-1,P(b,1)),this;for(c=ic.length;c>f;f++)if(d=ic[f],d.el.id==this.id&&(!a||d.anim==a)){if(a)return d.status;e.push({anim:d.anim,status:d.status})}return a?0:e},$b.pause=function(a){for(var c=0;c<ic.length;c++)ic[c].el.id!=this.id||a&&ic[c].anim!=a||b("raphael.anim.pause."+this.id,this,ic[c].anim)!==!1&&(ic[c].paused=!0);return this},$b.resume=function(a){for(var c=0;c<ic.length;c++)if(ic[c].el.id==this.id&&(!a||ic[c].anim==a)){var d=ic[c];b("raphael.anim.resume."+this.id,this,d.anim)!==!1&&(delete d.paused,this.status(d.anim,d.status))}return this},$b.stop=function(a){for(var c=0;c<ic.length;c++)ic[c].el.id!=this.id||a&&ic[c].anim!=a||b("raphael.anim.stop."+this.id,this,ic[c].anim)!==!1&&ic.splice(c--,1);return this},b.on("raphael.remove",t),b.on("raphael.clear",t),$b.toString=function(){return"Raphaëlâs object"};var mc=function(a){if(this.items=[],this.length=0,this.type="set",a)for(var b=0,c=a.length;c>b;b++)!a[b]||a[b].constructor!=$b.constructor&&a[b].constructor!=mc||(this[this.items.length]=this.items[this.items.length]=a[b],this.length++)},nc=mc.prototype;nc.push=function(){for(var a,b,c=0,d=arguments.length;d>c;c++)a=arguments[c],!a||a.constructor!=$b.constructor&&a.constructor!=mc||(b=this.items.length,this[b]=this.items[b]=a,this.length++);return this},nc.pop=function(){return this.length&&delete this[this.length--],this.items.pop()},nc.forEach=function(a,b){for(var c=0,d=this.items.length;d>c;c++)if(a.call(b,this.items[c],c)===!1)return this;return this};for(var oc in $b)$b[z](oc)&&(nc[oc]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a][D](c,b)})}}(oc));return nc.attr=function(a,b){if(a&&c.is(a,V)&&c.is(a[0],"object"))for(var d=0,e=a.length;e>d;d++)this.items[d].attr(a[d]);else for(var f=0,g=this.items.length;g>f;f++)this.items[f].attr(a,b);return this},nc.clear=function(){for(;this.length;)this.pop()},nc.splice=function(a,b){a=0>a?O(this.length+a,0):a,b=O(0,P(this.length-a,b));var c,d=[],e=[],f=[];for(c=2;c<arguments.length;c++)f.push(arguments[c]);for(c=0;b>c;c++)e.push(this[a+c]);for(;c<this.length-a;c++)d.push(this[a+c]);var g=f.length;for(c=0;c<g+d.length;c++)this.items[a+c]=this[a+c]=g>c?f[c]:d[c-g];for(c=this.items.length=this.length-=b-g;this[c];)delete this[c++];return new mc(e)},nc.exclude=function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]==a)return this.splice(b,1),!0},nc.animate=function(a,b,d,e){(c.is(d,"function")||!d)&&(e=d||null);var f,g,h=this.items.length,i=h,j=this;if(!h)return this;e&&(g=function(){!--h&&e.call(j)}),d=c.is(d,U)?d:g;var k=c.animation(a,b,d,g);for(f=this.items[--i].animate(k);i--;)this.items[i]&&!this.items[i].removed&&this.items[i].animateWith(f,k,k),this.items[i]&&!this.items[i].removed||h--;return this},nc.insertAfter=function(a){for(var b=this.items.length;b--;)this.items[b].insertAfter(a);return this},nc.getBBox=function(){for(var a=[],b=[],c=[],d=[],e=this.items.length;e--;)if(!this.items[e].removed){var f=this.items[e].getBBox();a.push(f.x),b.push(f.y),c.push(f.x+f.width),d.push(f.y+f.height)}return a=P[D](0,a),b=P[D](0,b),c=O[D](0,c),d=O[D](0,d),{x:a,y:b,x2:c,y2:d,width:c-a,height:d-b}},nc.clone=function(a){a=this.paper.set();for(var b=0,c=this.items.length;c>b;b++)a.push(this.items[b].clone());return a},nc.toString=function(){return"Raphaëlâs set"},nc.glow=function(a){var b=this.paper.set();return this.forEach(function(c){var d=c.glow(a);null!=d&&d.forEach(function(a){b.push(a)})}),b},nc.isPointInside=function(a,b){var c=!1;return this.forEach(function(d){return d.isPointInside(a,b)?(console.log("runned"),c=!0,!1):void 0}),c},c.registerFont=function(a){if(!a.face)return a;this.fonts=this.fonts||{};var b={w:a.w,face:{},glyphs:{}},c=a.face["font-family"];for(var d in a.face)a.face[z](d)&&(b.face[d]=a.face[d]);if(this.fonts[c]?this.fonts[c].push(b):this.fonts[c]=[b],!a.svg){b.face["units-per-em"]=ab(a.face["units-per-em"],10);for(var e in a.glyphs)if(a.glyphs[z](e)){var f=a.glyphs[e];if(b.glyphs[e]={w:f.w,k:{},d:f.d&&"M"+f.d.replace(/[mlcxtrv]/g,function(a){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[a]||"M"})+"z"},f.k)for(var g in f.k)f[z](g)&&(b.glyphs[e].k[g]=f.k[g])}}return a},v.getFont=function(a,b,d,e){if(e=e||"normal",d=d||"normal",b=+b||{normal:400,bold:700,lighter:300,bolder:800}[b]||400,c.fonts){var f=c.fonts[a];if(!f){var g=new RegExp("(^|\\s)"+a.replace(/[^\w\d\s+!~.:_-]/g,G)+"(\\s|$)","i");for(var h in c.fonts)if(c.fonts[z](h)&&g.test(h)){f=c.fonts[h];break}}var i;if(f)for(var j=0,k=f.length;k>j&&(i=f[j],i.face["font-weight"]!=b||i.face["font-style"]!=d&&i.face["font-style"]||i.face["font-stretch"]!=e);j++);return i}},v.print=function(a,b,d,e,f,g,h,i){g=g||"middle",h=O(P(h||0,1),-1),i=O(P(i||1,3),1);var j,k=I(d)[J](G),l=0,m=0,n=G;if(c.is(e,"string")&&(e=this.getFont(e)),e){j=(f||16)/e.face["units-per-em"];for(var o=e.face.bbox[J](w),p=+o[0],q=o[3]-o[1],r=0,s=+o[1]+("baseline"==g?q+ +e.face.descent:q/2),t=0,u=k.length;u>t;t++){if("\n"==k[t])l=0,x=0,m=0,r+=q*i;else{var v=m&&e.glyphs[k[t-1]]||{},x=e.glyphs[k[t]];l+=m?(v.w||e.w)+(v.k&&v.k[k[t]]||0)+e.w*h:0,m=1}x&&x.d&&(n+=c.transformPath(x.d,["t",l*j,r*j,"s",j,j,p,s,"t",(a-p)/j,(b-s)/j]))}}return this.path(n).attr({fill:"#000",stroke:"none"})},v.add=function(a){if(c.is(a,"array"))for(var b,d=this.set(),e=0,f=a.length;f>e;e++)b=a[e]||{},x[z](b.type)&&d.push(this[b.type]().attr(b));return d},c.format=function(a,b){var d=c.is(b,V)?[0][E](b):arguments;return a&&c.is(a,U)&&d.length-1&&(a=a.replace(y,function(a,b){return null==d[++b]?G:d[b]})),a||G},c.fullfill=function(){var a=/\{([^\}]+)\}/g,b=/(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g,c=function(a,c,d){var e=d;return c.replace(b,function(a,b,c,d,f){b=b||d,e&&(b in e&&(e=e[b]),"function"==typeof e&&f&&(e=e()))}),e=(null==e||e==d?a:e)+""};return function(b,d){return String(b).replace(a,function(a,b){return c(a,b,d)})}}(),c.ninja=function(){return B.was?A.win.Raphael=B.is:delete Raphael,c},c.st=nc,function(a,b,d){function e(){/in/.test(a.readyState)?setTimeout(e,9):c.eve("raphael.DOMload")}null==a.readyState&&a.addEventListener&&(a.addEventListener(b,d=function(){a.removeEventListener(b,d,!1),a.readyState="complete"},!1),a.readyState="loading"),e()}(document,"DOMContentLoaded"),b.on("raphael.DOMload",function(){u=!0}),function(){if(c.svg){var a="hasOwnProperty",b=String,d=parseFloat,e=parseInt,f=Math,g=f.max,h=f.abs,i=f.pow,j=/[, ]+/,k=c.eve,l="",m=" ",n="http://www.w3.org/1999/xlink",o={block:"M5,0 0,2.5 5,5z",classic:"M5,0 0,2.5 5,5 3.5,3 3.5,2z",diamond:"M2.5,0 5,2.5 2.5,5 0,2.5z",open:"M6,1 1,3.5 6,6",oval:"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z"},p={};c.toString=function(){return"Your browser supports SVG.\nYou are running Raphaël "+this.version};var q=function(d,e){if(e){"string"==typeof d&&(d=q(d));for(var f in e)e[a](f)&&("xlink:"==f.substring(0,6)?d.setAttributeNS(n,f.substring(6),b(e[f])):d.setAttribute(f,b(e[f])))}else d=c._g.doc.createElementNS("http://www.w3.org/2000/svg",d),d.style&&(d.style.webkitTapHighlightColor="rgba(0,0,0,0)");return d},r=function(a,e){var j="linear",k=a.id+e,m=.5,n=.5,o=a.node,p=a.paper,r=o.style,s=c._g.doc.getElementById(k);if(!s){if(e=b(e).replace(c._radial_gradient,function(a,b,c){if(j="radial",b&&c){m=d(b),n=d(c);var e=2*(n>.5)-1;i(m-.5,2)+i(n-.5,2)>.25&&(n=f.sqrt(.25-i(m-.5,2))*e+.5)&&.5!=n&&(n=n.toFixed(5)-1e-5*e)}return l}),e=e.split(/\s*\-\s*/),"linear"==j){var t=e.shift();if(t=-d(t),isNaN(t))return null;var u=[0,0,f.cos(c.rad(t)),f.sin(c.rad(t))],v=1/(g(h(u[2]),h(u[3]))||1);u[2]*=v,u[3]*=v,u[2]<0&&(u[0]=-u[2],u[2]=0),u[3]<0&&(u[1]=-u[3],u[3]=0)}var w=c._parseDots(e);if(!w)return null;if(k=k.replace(/[\(\)\s,\xb0#]/g,"_"),a.gradient&&k!=a.gradient.id&&(p.defs.removeChild(a.gradient),delete a.gradient),!a.gradient){s=q(j+"Gradient",{id:k}),a.gradient=s,q(s,"radial"==j?{fx:m,fy:n}:{x1:u[0],y1:u[1],x2:u[2],y2:u[3],gradientTransform:a.matrix.invert()}),p.defs.appendChild(s);for(var x=0,y=w.length;y>x;x++)s.appendChild(q("stop",{offset:w[x].offset?w[x].offset:x?"100%":"0%","stop-color":w[x].color||"#fff"}))}}return q(o,{fill:"url(#"+k+")",opacity:1,"fill-opacity":1}),r.fill=l,r.opacity=1,r.fillOpacity=1,1},s=function(a){var b=a.getBBox(1);q(a.pattern,{patternTransform:a.matrix.invert()+" translate("+b.x+","+b.y+")"})},t=function(d,e,f){if("path"==d.type){for(var g,h,i,j,k,m=b(e).toLowerCase().split("-"),n=d.paper,r=f?"end":"start",s=d.node,t=d.attrs,u=t["stroke-width"],v=m.length,w="classic",x=3,y=3,z=5;v--;)switch(m[v]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":w=m[v];break;case"wide":y=5;break;case"narrow":y=2;break;case"long":x=5;break;case"short":x=2}if("open"==w?(x+=2,y+=2,z+=2,i=1,j=f?4:1,k={fill:"none",stroke:t.stroke}):(j=i=x/2,k={fill:t.stroke,stroke:"none"}),d._.arrows?f?(d._.arrows.endPath&&p[d._.arrows.endPath]--,d._.arrows.endMarker&&p[d._.arrows.endMarker]--):(d._.arrows.startPath&&p[d._.arrows.startPath]--,d._.arrows.startMarker&&p[d._.arrows.startMarker]--):d._.arrows={},"none"!=w){var A="raphael-marker-"+w,B="raphael-marker-"+r+w+x+y;c._g.doc.getElementById(A)?p[A]++:(n.defs.appendChild(q(q("path"),{"stroke-linecap":"round",d:o[w],id:A})),p[A]=1);var C,D=c._g.doc.getElementById(B);D?(p[B]++,C=D.getElementsByTagName("use")[0]):(D=q(q("marker"),{id:B,markerHeight:y,markerWidth:x,orient:"auto",refX:j,refY:y/2}),C=q(q("use"),{"xlink:href":"#"+A,transform:(f?"rotate(180 "+x/2+" "+y/2+") ":l)+"scale("+x/z+","+y/z+")","stroke-width":(1/((x/z+y/z)/2)).toFixed(4)}),D.appendChild(C),n.defs.appendChild(D),p[B]=1),q(C,k);var E=i*("diamond"!=w&&"oval"!=w);f?(g=d._.arrows.startdx*u||0,h=c.getTotalLength(t.path)-E*u):(g=E*u,h=c.getTotalLength(t.path)-(d._.arrows.enddx*u||0)),k={},k["marker-"+r]="url(#"+B+")",(h||g)&&(k.d=c.getSubpath(t.path,g,h)),q(s,k),d._.arrows[r+"Path"]=A,d._.arrows[r+"Marker"]=B,d._.arrows[r+"dx"]=E,d._.arrows[r+"Type"]=w,d._.arrows[r+"String"]=e}else f?(g=d._.arrows.startdx*u||0,h=c.getTotalLength(t.path)-g):(g=0,h=c.getTotalLength(t.path)-(d._.arrows.enddx*u||0)),d._.arrows[r+"Path"]&&q(s,{d:c.getSubpath(t.path,g,h)}),delete d._.arrows[r+"Path"],delete d._.arrows[r+"Marker"],delete d._.arrows[r+"dx"],delete d._.arrows[r+"Type"],delete d._.arrows[r+"String"];for(k in p)if(p[a](k)&&!p[k]){var F=c._g.doc.getElementById(k);F&&F.parentNode.removeChild(F)}}},u={"":[0],none:[0],"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},v=function(a,c,d){if(c=u[b(c).toLowerCase()]){for(var e=a.attrs["stroke-width"]||"1",f={round:e,square:e,butt:0}[a.attrs["stroke-linecap"]||d["stroke-linecap"]]||0,g=[],h=c.length;h--;)g[h]=c[h]*e+(h%2?1:-1)*f;q(a.node,{"stroke-dasharray":g.join(",")})}},w=function(d,f){var i=d.node,k=d.attrs,m=i.style.visibility;i.style.visibility="hidden";for(var o in f)if(f[a](o)){if(!c._availableAttrs[a](o))continue;var p=f[o];switch(k[o]=p,o){case"blur":d.blur(p);break;case"href":case"title":var u=q("title"),w=c._g.doc.createTextNode(p);u.appendChild(w),i.appendChild(u);break;case"target":var x=i.parentNode;if("a"!=x.tagName.toLowerCase()){var u=q("a");x.insertBefore(u,i),u.appendChild(i),x=u}"target"==o?x.setAttributeNS(n,"show","blank"==p?"new":p):x.setAttributeNS(n,o,p);break;case"cursor":i.style.cursor=p;break;case"transform":d.transform(p);break;case"arrow-start":t(d,p);break;case"arrow-end":t(d,p,1);break;case"clip-rect":var z=b(p).split(j);if(4==z.length){d.clip&&d.clip.parentNode.parentNode.removeChild(d.clip.parentNode);var A=q("clipPath"),B=q("rect");A.id=c.createUUID(),q(B,{x:z[0],y:z[1],width:z[2],height:z[3]}),A.appendChild(B),d.paper.defs.appendChild(A),q(i,{"clip-path":"url(#"+A.id+")"}),d.clip=B}if(!p){var C=i.getAttribute("clip-path");if(C){var D=c._g.doc.getElementById(C.replace(/(^url\(#|\)$)/g,l));D&&D.parentNode.removeChild(D),q(i,{"clip-path":l}),delete d.clip}}break;case"path":"path"==d.type&&(q(i,{d:p?k.path=c._pathToAbsolute(p):"M0,0"}),d._.dirty=1,d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1)));break;case"width":if(i.setAttribute(o,p),d._.dirty=1,!k.fx)break;o="x",p=k.x;case"x":k.fx&&(p=-k.x-(k.width||0));case"rx":if("rx"==o&&"rect"==d.type)break;case"cx":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case"height":if(i.setAttribute(o,p),d._.dirty=1,!k.fy)break;o="y",p=k.y;case"y":k.fy&&(p=-k.y-(k.height||0));case"ry":if("ry"==o&&"rect"==d.type)break;case"cy":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case"r":"rect"==d.type?q(i,{rx:p,ry:p}):i.setAttribute(o,p),d._.dirty=1;break;case"src":"image"==d.type&&i.setAttributeNS(n,"href",p);break;case"stroke-width":(1!=d._.sx||1!=d._.sy)&&(p/=g(h(d._.sx),h(d._.sy))||1),d.paper._vbSize&&(p*=d.paper._vbSize),i.setAttribute(o,p),k["stroke-dasharray"]&&v(d,k["stroke-dasharray"],f),d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"stroke-dasharray":v(d,p,f);break;case"fill":var E=b(p).match(c._ISURL);if(E){A=q("pattern");var F=q("image");A.id=c.createUUID(),q(A,{x:0,y:0,patternUnits:"userSpaceOnUse",height:1,width:1}),q(F,{x:0,y:0,"xlink:href":E[1]}),A.appendChild(F),function(a){c._preload(E[1],function(){var b=this.offsetWidth,c=this.offsetHeight;q(a,{width:b,height:c}),q(F,{width:b,height:c}),d.paper.safari()})}(A),d.paper.defs.appendChild(A),q(i,{fill:"url(#"+A.id+")"}),d.pattern=A,d.pattern&&s(d);break}var G=c.getRGB(p);if(G.error){if(("circle"==d.type||"ellipse"==d.type||"r"!=b(p).charAt())&&r(d,p)){if("opacity"in k||"fill-opacity"in k){var H=c._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l));if(H){var I=H.getElementsByTagName("stop");q(I[I.length-1],{"stop-opacity":("opacity"in k?k.opacity:1)*("fill-opacity"in k?k["fill-opacity"]:1)})}}k.gradient=p,k.fill="none";break}}else delete f.gradient,delete k.gradient,!c.is(k.opacity,"undefined")&&c.is(f.opacity,"undefined")&&q(i,{opacity:k.opacity}),!c.is(k["fill-opacity"],"undefined")&&c.is(f["fill-opacity"],"undefined")&&q(i,{"fill-opacity":k["fill-opacity"]});G[a]("opacity")&&q(i,{"fill-opacity":G.opacity>1?G.opacity/100:G.opacity});case"stroke":G=c.getRGB(p),i.setAttribute(o,G.hex),"stroke"==o&&G[a]("opacity")&&q(i,{"stroke-opacity":G.opacity>1?G.opacity/100:G.opacity}),"stroke"==o&&d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"gradient":("circle"==d.type||"ellipse"==d.type||"r"!=b(p).charAt())&&r(d,p);break;case"opacity":k.gradient&&!k[a]("stroke-opacity")&&q(i,{"stroke-opacity":p>1?p/100:p});case"fill-opacity":if(k.gradient){H=c._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l)),H&&(I=H.getElementsByTagName("stop"),q(I[I.length-1],{"stop-opacity":p}));break}default:"font-size"==o&&(p=e(p,10)+"px");var J=o.replace(/(\-.)/g,function(a){return a.substring(1).toUpperCase()});i.style[J]=p,d._.dirty=1,i.setAttribute(o,p)}}y(d,f),i.style.visibility=m},x=1.2,y=function(d,f){if("text"==d.type&&(f[a]("text")||f[a]("font")||f[a]("font-size")||f[a]("x")||f[a]("y"))){var g=d.attrs,h=d.node,i=h.firstChild?e(c._g.doc.defaultView.getComputedStyle(h.firstChild,l).getPropertyValue("font-size"),10):10; +if(f[a]("text")){for(g.text=f.text;h.firstChild;)h.removeChild(h.firstChild);for(var j,k=b(f.text).split("\n"),m=[],n=0,o=k.length;o>n;n++)j=q("tspan"),n&&q(j,{dy:i*x,x:g.x}),j.appendChild(c._g.doc.createTextNode(k[n])),h.appendChild(j),m[n]=j}else for(m=h.getElementsByTagName("tspan"),n=0,o=m.length;o>n;n++)n?q(m[n],{dy:i*x,x:g.x}):q(m[0],{dy:0});q(h,{x:g.x,y:g.y}),d._.dirty=1;var p=d._getBBox(),r=g.y-(p.y+p.height/2);r&&c.is(r,"finite")&&q(m[0],{dy:r})}},z=function(a,b){this[0]=this.node=a,a.raphael=!0,this.id=c._oid++,a.raphaelid=this.id,this.matrix=c.matrix(),this.realPath=null,this.paper=b,this.attrs=this.attrs||{},this._={transform:[],sx:1,sy:1,deg:0,dx:0,dy:0,dirty:1},!b.bottom&&(b.bottom=this),this.prev=b.top,b.top&&(b.top.next=this),b.top=this,this.next=null},A=c.el;z.prototype=A,A.constructor=z,c._engine.path=function(a,b){var c=q("path");b.canvas&&b.canvas.appendChild(c);var d=new z(c,b);return d.type="path",w(d,{fill:"none",stroke:"#000",path:a}),d},A.rotate=function(a,c,e){if(this.removed)return this;if(a=b(a).split(j),a.length-1&&(c=d(a[1]),e=d(a[2])),a=d(a[0]),null==e&&(c=e),null==c||null==e){var f=this.getBBox(1);c=f.x+f.width/2,e=f.y+f.height/2}return this.transform(this._.transform.concat([["r",a,c,e]])),this},A.scale=function(a,c,e,f){if(this.removed)return this;if(a=b(a).split(j),a.length-1&&(c=d(a[1]),e=d(a[2]),f=d(a[3])),a=d(a[0]),null==c&&(c=a),null==f&&(e=f),null==e||null==f)var g=this.getBBox(1);return e=null==e?g.x+g.width/2:e,f=null==f?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,c,e,f]])),this},A.translate=function(a,c){return this.removed?this:(a=b(a).split(j),a.length-1&&(c=d(a[1])),a=d(a[0])||0,c=+c||0,this.transform(this._.transform.concat([["t",a,c]])),this)},A.transform=function(b){var d=this._;if(null==b)return d.transform;if(c._extractTransform(this,b),this.clip&&q(this.clip,{transform:this.matrix.invert()}),this.pattern&&s(this),this.node&&q(this.node,{transform:this.matrix}),1!=d.sx||1!=d.sy){var e=this.attrs[a]("stroke-width")?this.attrs["stroke-width"]:1;this.attr({"stroke-width":e})}return this},A.hide=function(){return!this.removed&&this.paper.safari(this.node.style.display="none"),this},A.show=function(){return!this.removed&&this.paper.safari(this.node.style.display=""),this},A.remove=function(){if(!this.removed&&this.node.parentNode){var a=this.paper;a.__set__&&a.__set__.exclude(this),k.unbind("raphael.*.*."+this.id),this.gradient&&a.defs.removeChild(this.gradient),c._tear(this,a),"a"==this.node.parentNode.tagName.toLowerCase()?this.node.parentNode.parentNode.removeChild(this.node.parentNode):this.node.parentNode.removeChild(this.node);for(var b in this)this[b]="function"==typeof this[b]?c._removedFactory(b):null;this.removed=!0}},A._getBBox=function(){if("none"==this.node.style.display){this.show();var a=!0}var b={};try{b=this.node.getBBox()}catch(c){}finally{b=b||{}}return a&&this.hide(),b},A.attr=function(b,d){if(this.removed)return this;if(null==b){var e={};for(var f in this.attrs)this.attrs[a](f)&&(e[f]=this.attrs[f]);return e.gradient&&"none"==e.fill&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform,e}if(null==d&&c.is(b,"string")){if("fill"==b&&"none"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;if("transform"==b)return this._.transform;for(var g=b.split(j),h={},i=0,l=g.length;l>i;i++)b=g[i],h[b]=b in this.attrs?this.attrs[b]:c.is(this.paper.customAttributes[b],"function")?this.paper.customAttributes[b].def:c._availableAttrs[b];return l-1?h:h[g[0]]}if(null==d&&c.is(b,"array")){for(h={},i=0,l=b.length;l>i;i++)h[b[i]]=this.attr(b[i]);return h}if(null!=d){var m={};m[b]=d}else null!=b&&c.is(b,"object")&&(m=b);for(var n in m)k("raphael.attr."+n+"."+this.id,this,m[n]);for(n in this.paper.customAttributes)if(this.paper.customAttributes[a](n)&&m[a](n)&&c.is(this.paper.customAttributes[n],"function")){var o=this.paper.customAttributes[n].apply(this,[].concat(m[n]));this.attrs[n]=m[n];for(var p in o)o[a](p)&&(m[p]=o[p])}return w(this,m),this},A.toFront=function(){if(this.removed)return this;"a"==this.node.parentNode.tagName.toLowerCase()?this.node.parentNode.parentNode.appendChild(this.node.parentNode):this.node.parentNode.appendChild(this.node);var a=this.paper;return a.top!=this&&c._tofront(this,a),this},A.toBack=function(){if(this.removed)return this;var a=this.node.parentNode;return"a"==a.tagName.toLowerCase()?a.parentNode.insertBefore(this.node.parentNode,this.node.parentNode.parentNode.firstChild):a.firstChild!=this.node&&a.insertBefore(this.node,this.node.parentNode.firstChild),c._toback(this,this.paper),this.paper,this},A.insertAfter=function(a){if(this.removed)return this;var b=a.node||a[a.length-1].node;return b.nextSibling?b.parentNode.insertBefore(this.node,b.nextSibling):b.parentNode.appendChild(this.node),c._insertafter(this,a,this.paper),this},A.insertBefore=function(a){if(this.removed)return this;var b=a.node||a[0].node;return b.parentNode.insertBefore(this.node,b),c._insertbefore(this,a,this.paper),this},A.blur=function(a){var b=this;if(0!==+a){var d=q("filter"),e=q("feGaussianBlur");b.attrs.blur=a,d.id=c.createUUID(),q(e,{stdDeviation:+a||1.5}),d.appendChild(e),b.paper.defs.appendChild(d),b._blur=d,q(b.node,{filter:"url(#"+d.id+")"})}else b._blur&&(b._blur.parentNode.removeChild(b._blur),delete b._blur,delete b.attrs.blur),b.node.removeAttribute("filter");return b},c._engine.circle=function(a,b,c,d){var e=q("circle");a.canvas&&a.canvas.appendChild(e);var f=new z(e,a);return f.attrs={cx:b,cy:c,r:d,fill:"none",stroke:"#000"},f.type="circle",q(e,f.attrs),f},c._engine.rect=function(a,b,c,d,e,f){var g=q("rect");a.canvas&&a.canvas.appendChild(g);var h=new z(g,a);return h.attrs={x:b,y:c,width:d,height:e,r:f||0,rx:f||0,ry:f||0,fill:"none",stroke:"#000"},h.type="rect",q(g,h.attrs),h},c._engine.ellipse=function(a,b,c,d,e){var f=q("ellipse");a.canvas&&a.canvas.appendChild(f);var g=new z(f,a);return g.attrs={cx:b,cy:c,rx:d,ry:e,fill:"none",stroke:"#000"},g.type="ellipse",q(f,g.attrs),g},c._engine.image=function(a,b,c,d,e,f){var g=q("image");q(g,{x:c,y:d,width:e,height:f,preserveAspectRatio:"none"}),g.setAttributeNS(n,"href",b),a.canvas&&a.canvas.appendChild(g);var h=new z(g,a);return h.attrs={x:c,y:d,width:e,height:f,src:b},h.type="image",h},c._engine.text=function(a,b,d,e){var f=q("text");a.canvas&&a.canvas.appendChild(f);var g=new z(f,a);return g.attrs={x:b,y:d,"text-anchor":"middle",text:e,font:c._availableAttrs.font,stroke:"none",fill:"#000"},g.type="text",w(g,g.attrs),g},c._engine.setSize=function(a,b){return this.width=a||this.width,this.height=b||this.height,this.canvas.setAttribute("width",this.width),this.canvas.setAttribute("height",this.height),this._viewBox&&this.setViewBox.apply(this,this._viewBox),this},c._engine.create=function(){var a=c._getContainer.apply(0,arguments),b=a&&a.container,d=a.x,e=a.y,f=a.width,g=a.height;if(!b)throw new Error("SVG container not found.");var h,i=q("svg"),j="overflow:hidden;";return d=d||0,e=e||0,f=f||512,g=g||342,q(i,{height:g,version:1.1,width:f,xmlns:"http://www.w3.org/2000/svg"}),1==b?(i.style.cssText=j+"position:absolute;left:"+d+"px;top:"+e+"px",c._g.doc.body.appendChild(i),h=1):(i.style.cssText=j+"position:relative",b.firstChild?b.insertBefore(i,b.firstChild):b.appendChild(i)),b=new c._Paper,b.width=f,b.height=g,b.canvas=i,b.clear(),b._left=b._top=0,h&&(b.renderfix=function(){}),b.renderfix(),b},c._engine.setViewBox=function(a,b,c,d,e){k("raphael.setViewBox",this,this._viewBox,[a,b,c,d,e]);var f,h,i=g(c/this.width,d/this.height),j=this.top,l=e?"meet":"xMinYMin";for(null==a?(this._vbSize&&(i=1),delete this._vbSize,f="0 0 "+this.width+m+this.height):(this._vbSize=i,f=a+m+b+m+c+m+d),q(this.canvas,{viewBox:f,preserveAspectRatio:l});i&&j;)h="stroke-width"in j.attrs?j.attrs["stroke-width"]:1,j.attr({"stroke-width":h}),j._.dirty=1,j._.dirtyT=1,j=j.prev;return this._viewBox=[a,b,c,d,!!e],this},c.prototype.renderfix=function(){var a,b=this.canvas,c=b.style;try{a=b.getScreenCTM()||b.createSVGMatrix()}catch(d){a=b.createSVGMatrix()}var e=-a.e%1,f=-a.f%1;(e||f)&&(e&&(this._left=(this._left+e)%1,c.left=this._left+"px"),f&&(this._top=(this._top+f)%1,c.top=this._top+"px"))},c.prototype.clear=function(){c.eve("raphael.clear",this);for(var a=this.canvas;a.firstChild;)a.removeChild(a.firstChild);this.bottom=this.top=null,(this.desc=q("desc")).appendChild(c._g.doc.createTextNode("Created with Raphaël "+c.version)),a.appendChild(this.desc),a.appendChild(this.defs=q("defs"))},c.prototype.remove=function(){k("raphael.remove",this),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]="function"==typeof this[a]?c._removedFactory(a):null};var B=c.st;for(var C in A)A[a](C)&&!B[a](C)&&(B[C]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(C))}}(),function(){if(c.vml){var a="hasOwnProperty",b=String,d=parseFloat,e=Math,f=e.round,g=e.max,h=e.min,i=e.abs,j="fill",k=/[, ]+/,l=c.eve,m=" progid:DXImageTransform.Microsoft",n=" ",o="",p={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},q=/([clmz]),?([^clmz]*)/gi,r=/ progid:\S+Blur\([^\)]+\)/g,s=/-?[^,\s-]+/g,t="position:absolute;left:0;top:0;width:1px;height:1px",u=21600,v={path:1,rect:1,image:1},w={circle:1,ellipse:1},x=function(a){var d=/[ahqstv]/gi,e=c._pathToAbsolute;if(b(a).match(d)&&(e=c._path2curve),d=/[clmz]/g,e==c._pathToAbsolute&&!b(a).match(d)){var g=b(a).replace(q,function(a,b,c){var d=[],e="m"==b.toLowerCase(),g=p[b];return c.replace(s,function(a){e&&2==d.length&&(g+=d+p["m"==b?"l":"L"],d=[]),d.push(f(a*u))}),g+d});return g}var h,i,j=e(a);g=[];for(var k=0,l=j.length;l>k;k++){h=j[k],i=j[k][0].toLowerCase(),"z"==i&&(i="x");for(var m=1,r=h.length;r>m;m++)i+=f(h[m]*u)+(m!=r-1?",":o);g.push(i)}return g.join(n)},y=function(a,b,d){var e=c.matrix();return e.rotate(-a,.5,.5),{dx:e.x(b,d),dy:e.y(b,d)}},z=function(a,b,c,d,e,f){var g=a._,h=a.matrix,k=g.fillpos,l=a.node,m=l.style,o=1,p="",q=u/b,r=u/c;if(m.visibility="hidden",b&&c){if(l.coordsize=i(q)+n+i(r),m.rotation=f*(0>b*c?-1:1),f){var s=y(f,d,e);d=s.dx,e=s.dy}if(0>b&&(p+="x"),0>c&&(p+=" y")&&(o=-1),m.flip=p,l.coordorigin=d*-q+n+e*-r,k||g.fillsize){var t=l.getElementsByTagName(j);t=t&&t[0],l.removeChild(t),k&&(s=y(f,h.x(k[0],k[1]),h.y(k[0],k[1])),t.position=s.dx*o+n+s.dy*o),g.fillsize&&(t.size=g.fillsize[0]*i(b)+n+g.fillsize[1]*i(c)),l.appendChild(t)}m.visibility="visible"}};c.toString=function(){return"Your browser doesnât support SVG. Falling down to VML.\nYou are running Raphaël "+this.version};var A=function(a,c,d){for(var e=b(c).toLowerCase().split("-"),f=d?"end":"start",g=e.length,h="classic",i="medium",j="medium";g--;)switch(e[g]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":h=e[g];break;case"wide":case"narrow":j=e[g];break;case"long":case"short":i=e[g]}var k=a.node.getElementsByTagName("stroke")[0];k[f+"arrow"]=h,k[f+"arrowlength"]=i,k[f+"arrowwidth"]=j},B=function(e,i){e.attrs=e.attrs||{};var l=e.node,m=e.attrs,p=l.style,q=v[e.type]&&(i.x!=m.x||i.y!=m.y||i.width!=m.width||i.height!=m.height||i.cx!=m.cx||i.cy!=m.cy||i.rx!=m.rx||i.ry!=m.ry||i.r!=m.r),r=w[e.type]&&(m.cx!=i.cx||m.cy!=i.cy||m.r!=i.r||m.rx!=i.rx||m.ry!=i.ry),s=e;for(var t in i)i[a](t)&&(m[t]=i[t]);if(q&&(m.path=c._getPath[e.type](e),e._.dirty=1),i.href&&(l.href=i.href),i.title&&(l.title=i.title),i.target&&(l.target=i.target),i.cursor&&(p.cursor=i.cursor),"blur"in i&&e.blur(i.blur),(i.path&&"path"==e.type||q)&&(l.path=x(~b(m.path).toLowerCase().indexOf("r")?c._pathToAbsolute(m.path):m.path),"image"==e.type&&(e._.fillpos=[m.x,m.y],e._.fillsize=[m.width,m.height],z(e,1,1,0,0,0))),"transform"in i&&e.transform(i.transform),r){var y=+m.cx,B=+m.cy,D=+m.rx||+m.r||0,E=+m.ry||+m.r||0;l.path=c.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x",f((y-D)*u),f((B-E)*u),f((y+D)*u),f((B+E)*u),f(y*u)),e._.dirty=1}if("clip-rect"in i){var G=b(i["clip-rect"]).split(k);if(4==G.length){G[2]=+G[2]+ +G[0],G[3]=+G[3]+ +G[1];var H=l.clipRect||c._g.doc.createElement("div"),I=H.style;I.clip=c.format("rect({1}px {2}px {3}px {0}px)",G),l.clipRect||(I.position="absolute",I.top=0,I.left=0,I.width=e.paper.width+"px",I.height=e.paper.height+"px",l.parentNode.insertBefore(H,l),H.appendChild(l),l.clipRect=H)}i["clip-rect"]||l.clipRect&&(l.clipRect.style.clip="auto")}if(e.textpath){var J=e.textpath.style;i.font&&(J.font=i.font),i["font-family"]&&(J.fontFamily='"'+i["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g,o)+'"'),i["font-size"]&&(J.fontSize=i["font-size"]),i["font-weight"]&&(J.fontWeight=i["font-weight"]),i["font-style"]&&(J.fontStyle=i["font-style"])}if("arrow-start"in i&&A(s,i["arrow-start"]),"arrow-end"in i&&A(s,i["arrow-end"],1),null!=i.opacity||null!=i["stroke-width"]||null!=i.fill||null!=i.src||null!=i.stroke||null!=i["stroke-width"]||null!=i["stroke-opacity"]||null!=i["fill-opacity"]||null!=i["stroke-dasharray"]||null!=i["stroke-miterlimit"]||null!=i["stroke-linejoin"]||null!=i["stroke-linecap"]){var K=l.getElementsByTagName(j),L=!1;if(K=K&&K[0],!K&&(L=K=F(j)),"image"==e.type&&i.src&&(K.src=i.src),i.fill&&(K.on=!0),(null==K.on||"none"==i.fill||null===i.fill)&&(K.on=!1),K.on&&i.fill){var M=b(i.fill).match(c._ISURL);if(M){K.parentNode==l&&l.removeChild(K),K.rotate=!0,K.src=M[1],K.type="tile";var N=e.getBBox(1);K.position=N.x+n+N.y,e._.fillpos=[N.x,N.y],c._preload(M[1],function(){e._.fillsize=[this.offsetWidth,this.offsetHeight]})}else K.color=c.getRGB(i.fill).hex,K.src=o,K.type="solid",c.getRGB(i.fill).error&&(s.type in{circle:1,ellipse:1}||"r"!=b(i.fill).charAt())&&C(s,i.fill,K)&&(m.fill="none",m.gradient=i.fill,K.rotate=!1)}if("fill-opacity"in i||"opacity"in i){var O=((+m["fill-opacity"]+1||2)-1)*((+m.opacity+1||2)-1)*((+c.getRGB(i.fill).o+1||2)-1);O=h(g(O,0),1),K.opacity=O,K.src&&(K.color="none")}l.appendChild(K);var P=l.getElementsByTagName("stroke")&&l.getElementsByTagName("stroke")[0],Q=!1;!P&&(Q=P=F("stroke")),(i.stroke&&"none"!=i.stroke||i["stroke-width"]||null!=i["stroke-opacity"]||i["stroke-dasharray"]||i["stroke-miterlimit"]||i["stroke-linejoin"]||i["stroke-linecap"])&&(P.on=!0),("none"==i.stroke||null===i.stroke||null==P.on||0==i.stroke||0==i["stroke-width"])&&(P.on=!1);var R=c.getRGB(i.stroke);P.on&&i.stroke&&(P.color=R.hex),O=((+m["stroke-opacity"]+1||2)-1)*((+m.opacity+1||2)-1)*((+R.o+1||2)-1);var S=.75*(d(i["stroke-width"])||1);if(O=h(g(O,0),1),null==i["stroke-width"]&&(S=m["stroke-width"]),i["stroke-width"]&&(P.weight=S),S&&1>S&&(O*=S)&&(P.weight=1),P.opacity=O,i["stroke-linejoin"]&&(P.joinstyle=i["stroke-linejoin"]||"miter"),P.miterlimit=i["stroke-miterlimit"]||8,i["stroke-linecap"]&&(P.endcap="butt"==i["stroke-linecap"]?"flat":"square"==i["stroke-linecap"]?"square":"round"),i["stroke-dasharray"]){var T={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};P.dashstyle=T[a](i["stroke-dasharray"])?T[i["stroke-dasharray"]]:o}Q&&l.appendChild(P)}if("text"==s.type){s.paper.canvas.style.display=o;var U=s.paper.span,V=100,W=m.font&&m.font.match(/\d+(?:\.\d*)?(?=px)/);p=U.style,m.font&&(p.font=m.font),m["font-family"]&&(p.fontFamily=m["font-family"]),m["font-weight"]&&(p.fontWeight=m["font-weight"]),m["font-style"]&&(p.fontStyle=m["font-style"]),W=d(m["font-size"]||W&&W[0])||10,p.fontSize=W*V+"px",s.textpath.string&&(U.innerHTML=b(s.textpath.string).replace(/</g,"<").replace(/&/g,"&").replace(/\n/g,"<br>"));var X=U.getBoundingClientRect();s.W=m.w=(X.right-X.left)/V,s.H=m.h=(X.bottom-X.top)/V,s.X=m.x,s.Y=m.y+s.H/2,("x"in i||"y"in i)&&(s.path.v=c.format("m{0},{1}l{2},{1}",f(m.x*u),f(m.y*u),f(m.x*u)+1));for(var Y=["x","y","text","font","font-family","font-weight","font-style","font-size"],Z=0,$=Y.length;$>Z;Z++)if(Y[Z]in i){s._.dirty=1;break}switch(m["text-anchor"]){case"start":s.textpath.style["v-text-align"]="left",s.bbx=s.W/2;break;case"end":s.textpath.style["v-text-align"]="right",s.bbx=-s.W/2;break;default:s.textpath.style["v-text-align"]="center",s.bbx=0}s.textpath.style["v-text-kern"]=!0}},C=function(a,f,g){a.attrs=a.attrs||{};var h=(a.attrs,Math.pow),i="linear",j=".5 .5";if(a.attrs.gradient=f,f=b(f).replace(c._radial_gradient,function(a,b,c){return i="radial",b&&c&&(b=d(b),c=d(c),h(b-.5,2)+h(c-.5,2)>.25&&(c=e.sqrt(.25-h(b-.5,2))*(2*(c>.5)-1)+.5),j=b+n+c),o}),f=f.split(/\s*\-\s*/),"linear"==i){var k=f.shift();if(k=-d(k),isNaN(k))return null}var l=c._parseDots(f);if(!l)return null;if(a=a.shape||a.node,l.length){a.removeChild(g),g.on=!0,g.method="none",g.color=l[0].color,g.color2=l[l.length-1].color;for(var m=[],p=0,q=l.length;q>p;p++)l[p].offset&&m.push(l[p].offset+n+l[p].color);g.colors=m.length?m.join():"0% "+g.color,"radial"==i?(g.type="gradientTitle",g.focus="100%",g.focussize="0 0",g.focusposition=j,g.angle=0):(g.type="gradient",g.angle=(270-k)%360),a.appendChild(g)}return 1},D=function(a,b){this[0]=this.node=a,a.raphael=!0,this.id=c._oid++,a.raphaelid=this.id,this.X=0,this.Y=0,this.attrs={},this.paper=b,this.matrix=c.matrix(),this._={transform:[],sx:1,sy:1,dx:0,dy:0,deg:0,dirty:1,dirtyT:1},!b.bottom&&(b.bottom=this),this.prev=b.top,b.top&&(b.top.next=this),b.top=this,this.next=null},E=c.el;D.prototype=E,E.constructor=D,E.transform=function(a){if(null==a)return this._.transform;var d,e=this.paper._viewBoxShift,f=e?"s"+[e.scale,e.scale]+"-1-1t"+[e.dx,e.dy]:o;e&&(d=a=b(a).replace(/\.{3}|\u2026/g,this._.transform||o)),c._extractTransform(this,f+a);var g,h=this.matrix.clone(),i=this.skew,j=this.node,k=~b(this.attrs.fill).indexOf("-"),l=!b(this.attrs.fill).indexOf("url(");if(h.translate(1,1),l||k||"image"==this.type)if(i.matrix="1 0 0 1",i.offset="0 0",g=h.split(),k&&g.noRotation||!g.isSimple){j.style.filter=h.toFilter();var m=this.getBBox(),p=this.getBBox(1),q=m.x-p.x,r=m.y-p.y;j.coordorigin=q*-u+n+r*-u,z(this,1,1,q,r,0)}else j.style.filter=o,z(this,g.scalex,g.scaley,g.dx,g.dy,g.rotate);else j.style.filter=o,i.matrix=b(h),i.offset=h.offset();return d&&(this._.transform=d),this},E.rotate=function(a,c,e){if(this.removed)return this;if(null!=a){if(a=b(a).split(k),a.length-1&&(c=d(a[1]),e=d(a[2])),a=d(a[0]),null==e&&(c=e),null==c||null==e){var f=this.getBBox(1);c=f.x+f.width/2,e=f.y+f.height/2}return this._.dirtyT=1,this.transform(this._.transform.concat([["r",a,c,e]])),this}},E.translate=function(a,c){return this.removed?this:(a=b(a).split(k),a.length-1&&(c=d(a[1])),a=d(a[0])||0,c=+c||0,this._.bbox&&(this._.bbox.x+=a,this._.bbox.y+=c),this.transform(this._.transform.concat([["t",a,c]])),this)},E.scale=function(a,c,e,f){if(this.removed)return this;if(a=b(a).split(k),a.length-1&&(c=d(a[1]),e=d(a[2]),f=d(a[3]),isNaN(e)&&(e=null),isNaN(f)&&(f=null)),a=d(a[0]),null==c&&(c=a),null==f&&(e=f),null==e||null==f)var g=this.getBBox(1);return e=null==e?g.x+g.width/2:e,f=null==f?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,c,e,f]])),this._.dirtyT=1,this},E.hide=function(){return!this.removed&&(this.node.style.display="none"),this},E.show=function(){return!this.removed&&(this.node.style.display=o),this},E._getBBox=function(){return this.removed?{}:{x:this.X+(this.bbx||0)-this.W/2,y:this.Y-this.H,width:this.W,height:this.H}},E.remove=function(){if(!this.removed&&this.node.parentNode){this.paper.__set__&&this.paper.__set__.exclude(this),c.eve.unbind("raphael.*.*."+this.id),c._tear(this,this.paper),this.node.parentNode.removeChild(this.node),this.shape&&this.shape.parentNode.removeChild(this.shape);for(var a in this)this[a]="function"==typeof this[a]?c._removedFactory(a):null;this.removed=!0}},E.attr=function(b,d){if(this.removed)return this;if(null==b){var e={};for(var f in this.attrs)this.attrs[a](f)&&(e[f]=this.attrs[f]);return e.gradient&&"none"==e.fill&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform,e}if(null==d&&c.is(b,"string")){if(b==j&&"none"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;for(var g=b.split(k),h={},i=0,m=g.length;m>i;i++)b=g[i],h[b]=b in this.attrs?this.attrs[b]:c.is(this.paper.customAttributes[b],"function")?this.paper.customAttributes[b].def:c._availableAttrs[b];return m-1?h:h[g[0]]}if(this.attrs&&null==d&&c.is(b,"array")){for(h={},i=0,m=b.length;m>i;i++)h[b[i]]=this.attr(b[i]);return h}var n;null!=d&&(n={},n[b]=d),null==d&&c.is(b,"object")&&(n=b);for(var o in n)l("raphael.attr."+o+"."+this.id,this,n[o]);if(n){for(o in this.paper.customAttributes)if(this.paper.customAttributes[a](o)&&n[a](o)&&c.is(this.paper.customAttributes[o],"function")){var p=this.paper.customAttributes[o].apply(this,[].concat(n[o]));this.attrs[o]=n[o];for(var q in p)p[a](q)&&(n[q]=p[q])}n.text&&"text"==this.type&&(this.textpath.string=n.text),B(this,n)}return this},E.toFront=function(){return!this.removed&&this.node.parentNode.appendChild(this.node),this.paper&&this.paper.top!=this&&c._tofront(this,this.paper),this},E.toBack=function(){return this.removed?this:(this.node.parentNode.firstChild!=this.node&&(this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild),c._toback(this,this.paper)),this)},E.insertAfter=function(a){return this.removed?this:(a.constructor==c.st.constructor&&(a=a[a.length-1]),a.node.nextSibling?a.node.parentNode.insertBefore(this.node,a.node.nextSibling):a.node.parentNode.appendChild(this.node),c._insertafter(this,a,this.paper),this)},E.insertBefore=function(a){return this.removed?this:(a.constructor==c.st.constructor&&(a=a[0]),a.node.parentNode.insertBefore(this.node,a.node),c._insertbefore(this,a,this.paper),this)},E.blur=function(a){var b=this.node.runtimeStyle,d=b.filter;return d=d.replace(r,o),0!==+a?(this.attrs.blur=a,b.filter=d+n+m+".Blur(pixelradius="+(+a||1.5)+")",b.margin=c.format("-{0}px 0 0 -{0}px",f(+a||1.5))):(b.filter=d,b.margin=0,delete this.attrs.blur),this},c._engine.path=function(a,b){var c=F("shape");c.style.cssText=t,c.coordsize=u+n+u,c.coordorigin=b.coordorigin;var d=new D(c,b),e={fill:"none",stroke:"#000"};a&&(e.path=a),d.type="path",d.path=[],d.Path=o,B(d,e),b.canvas.appendChild(c);var f=F("skew");return f.on=!0,c.appendChild(f),d.skew=f,d.transform(o),d},c._engine.rect=function(a,b,d,e,f,g){var h=c._rectPath(b,d,e,f,g),i=a.path(h),j=i.attrs;return i.X=j.x=b,i.Y=j.y=d,i.W=j.width=e,i.H=j.height=f,j.r=g,j.path=h,i.type="rect",i},c._engine.ellipse=function(a,b,c,d,e){var f=a.path();return f.attrs,f.X=b-d,f.Y=c-e,f.W=2*d,f.H=2*e,f.type="ellipse",B(f,{cx:b,cy:c,rx:d,ry:e}),f},c._engine.circle=function(a,b,c,d){var e=a.path();return e.attrs,e.X=b-d,e.Y=c-d,e.W=e.H=2*d,e.type="circle",B(e,{cx:b,cy:c,r:d}),e},c._engine.image=function(a,b,d,e,f,g){var h=c._rectPath(d,e,f,g),i=a.path(h).attr({stroke:"none"}),k=i.attrs,l=i.node,m=l.getElementsByTagName(j)[0];return k.src=b,i.X=k.x=d,i.Y=k.y=e,i.W=k.width=f,i.H=k.height=g,k.path=h,i.type="image",m.parentNode==l&&l.removeChild(m),m.rotate=!0,m.src=b,m.type="tile",i._.fillpos=[d,e],i._.fillsize=[f,g],l.appendChild(m),z(i,1,1,0,0,0),i},c._engine.text=function(a,d,e,g){var h=F("shape"),i=F("path"),j=F("textpath");d=d||0,e=e||0,g=g||"",i.v=c.format("m{0},{1}l{2},{1}",f(d*u),f(e*u),f(d*u)+1),i.textpathok=!0,j.string=b(g),j.on=!0,h.style.cssText=t,h.coordsize=u+n+u,h.coordorigin="0 0";var k=new D(h,a),l={fill:"#000",stroke:"none",font:c._availableAttrs.font,text:g};k.shape=h,k.path=i,k.textpath=j,k.type="text",k.attrs.text=b(g),k.attrs.x=d,k.attrs.y=e,k.attrs.w=1,k.attrs.h=1,B(k,l),h.appendChild(j),h.appendChild(i),a.canvas.appendChild(h);var m=F("skew");return m.on=!0,h.appendChild(m),k.skew=m,k.transform(o),k},c._engine.setSize=function(a,b){var d=this.canvas.style;return this.width=a,this.height=b,a==+a&&(a+="px"),b==+b&&(b+="px"),d.width=a,d.height=b,d.clip="rect(0 "+a+" "+b+" 0)",this._viewBox&&c._engine.setViewBox.apply(this,this._viewBox),this},c._engine.setViewBox=function(a,b,d,e,f){c.eve("raphael.setViewBox",this,this._viewBox,[a,b,d,e,f]);var h,i,j=this.width,k=this.height,l=1/g(d/j,e/k);return f&&(h=k/e,i=j/d,j>d*h&&(a-=(j-d*h)/2/h),k>e*i&&(b-=(k-e*i)/2/i)),this._viewBox=[a,b,d,e,!!f],this._viewBoxShift={dx:-a,dy:-b,scale:l},this.forEach(function(a){a.transform("...")}),this};var F;c._engine.initWin=function(a){var b=a.document;b.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{!b.namespaces.rvml&&b.namespaces.add("rvml","urn:schemas-microsoft-com:vml"),F=function(a){return b.createElement("<rvml:"+a+' class="rvml">')}}catch(c){F=function(a){return b.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}},c._engine.initWin(c._g.win),c._engine.create=function(){var a=c._getContainer.apply(0,arguments),b=a.container,d=a.height,e=a.width,f=a.x,g=a.y;if(!b)throw new Error("VML container not found.");var h=new c._Paper,i=h.canvas=c._g.doc.createElement("div"),j=i.style;return f=f||0,g=g||0,e=e||512,d=d||342,h.width=e,h.height=d,e==+e&&(e+="px"),d==+d&&(d+="px"),h.coordsize=1e3*u+n+1e3*u,h.coordorigin="0 0",h.span=c._g.doc.createElement("span"),h.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",i.appendChild(h.span),j.cssText=c.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",e,d),1==b?(c._g.doc.body.appendChild(i),j.left=f+"px",j.top=g+"px",j.position="absolute"):b.firstChild?b.insertBefore(i,b.firstChild):b.appendChild(i),h.renderfix=function(){},h},c.prototype.clear=function(){c.eve("raphael.clear",this),this.canvas.innerHTML=o,this.span=c._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},c.prototype.remove=function(){c.eve("raphael.remove",this),this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]="function"==typeof this[a]?c._removedFactory(a):null;return!0};var G=c.st;for(var H in E)E[a](H)&&!G[a](H)&&(G[H]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(H))}}(),B.was?A.win.Raphael=c:Raphael=c,c}); \ No newline at end of file diff --git a/src/wolnelektury/static/js/dialogs.js b/src/wolnelektury/static/js/dialogs.js new file mode 100644 index 000000000..3b7553b30 --- /dev/null +++ b/src/wolnelektury/static/js/dialogs.js @@ -0,0 +1,199 @@ +(function($) { + $(function() { + + // create containers for all ajaxable form links + $('.ajaxable').each(function() { + var $window = $("#ajaxable-window").clone(); + $window.attr("id", this.id + "-window"); + $('body').append($window); + + var $trigger = $(this) + var trigger = '#' + this.id; + + $window.jqm({ + ajax: '@href', + ajaxText: '<p><img src="' + STATIC_URL + 'img/indicator.gif" alt="*"/> ' + gettext("Loading") + '</p>', + target: $('.target', $window)[0], + overlay: 60, + trigger: trigger, + onShow: function(hash) { + var offset = $(hash.t).offset(); + var oleft = offset.left - hash.w.width() + $(hash.t).width(); + if (oleft < 0) oleft = 0; + hash.w.css({position: 'absolute', left: oleft, top: offset.top}); + var width = $(hash.t).width(); + width = width > 50 ? width : 50; + $('.header', hash.w).css({width: width}); + hash.w.show(); + }, + onLoad: function(hash) { + $('form', hash.w).ajaxForm({ + dataType: 'json', + target: $('.target', $window), + success: function(response) { + if (response.success) { + $('.target', $window).text(response.message); + setTimeout(function() { $window.jqmHide() }, 1000); + callback = ajaxable_callbacks[$trigger.attr('data-callback')]; + callback && callback($trigger, response); + if (response.redirect) + window.location = response.redirect; + } + else { + $('.error', $window).remove(); + $.each(response.errors, function(id, errors) { + $('#id_' + id, $window).before('<span class="error">' + errors[0] + '</span>'); + }); + $('input[type=submit]', $window).removeAttr('disabled'); + return false; + } + } + }); + } + }); + }); + + + var login_and_retry = function($form) { + var $window = $("#ajaxable-window").clone(); + $window.attr("id", "context-login-window"); + $('body').append($window); + + $window.jqm({ + ajax: '/uzytkownik/zaloguj-utworz/?next=' + escape(window.location), + ajaxText: '<p><img src="' + STATIC_URL + 'img/indicator.gif" alt="*"/> ' + gettext("Loading") + '</p>', + target: $('.target', $window)[0], + overlay: 60, + onShow: function(hash) { + var offset = $form.offset(); + hash.w.css({position: 'absolute', left: offset.left - hash.w.width() + $form.width(), top: offset.top}); + var width = $form.width(); + width = width > 50 ? width : 50; + $('.header', hash.w).css({width: width}); + hash.w.show(); + }, + onLoad: function(hash) { + $('form', hash.w).ajaxForm({ + dataType: 'json', + target: $('.target', $window), + success: function(response) { + if (response.success) { + $('.target', $window).text(response.message); + setTimeout(function() { $window.jqmHide() }, 1000); + $form.submit(); + location.reload(); + } + else { + $('.error', $window).remove(); + $.each(response.errors, function(id, errors) { + $('#id_' + id, $window).before('<span class="error">' + errors[0] + '</span>'); + }); + $('input[type=submit]', $window).removeAttr('disabled'); + return false; + } + } + }); + } + }).jqmShow(); + + }; + + + $('.ajax-form').each(function() { + var $form = $(this); + $form.ajaxForm({ + dataType: 'json', + beforeSubmit: function() { + $('input[type=submit]', $form) + .attr('disabled', 'disabled') + .after('<img src="/static/img/indicator.gif" style="margin-left: 0.5em"/>'); + }, + error: function(response) { + if (response.status == 403) + login_and_retry($form); + }, + success: function(response) { + if (response.success) { + callback = ajax_form_callbacks[$form.attr('data-callback')]; + callback && callback($form, response); + + } else { + $('span.error', $form).remove(); + $.each(response.errors, function(id, errors) { + $('#id_' + id, $form).before('<span class="error">' + errors[0] + '</span>'); + }); + $('input[type=submit]', $form).removeAttr('disabled'); + $('img', $form).remove(); + } + } + }); + }); + + + var update_star = function($elem, response) { + /* updates the star after successful ajax */ + var $star = $elem.closest('.star'); + if (response.like) { + $star.addClass('like'); + $star.removeClass('unlike'); + } + else { + $star.addClass('unlike'); + $star.removeClass('like'); + } + }; + + var ajax_form_callbacks = { + 'social-like-book': update_star + }; + + var ajaxable_callbacks = { + 'social-book-sets': function() {location.reload();} + }; + + + + // check placeholder browser support + if (!Modernizr.input.placeholder) + { + // set placeholder values + $(this).find('[placeholder]').each(function() + { + $(this).val( $(this).attr('placeholder') ).addClass('placeholder'); + }); + + // focus and blur of placeholders + $('[placeholder]').focus(function() + { + if ($(this).val() == $(this).attr('placeholder')) + { + $(this).val(''); + $(this).removeClass('placeholder'); + } + }).blur(function() + { + if ($(this).val() == '' || $(this).val() == $(this).attr('placeholder')) + { + $(this).val($(this).attr('placeholder')); + $(this).addClass('placeholder'); + } + }); + + // remove placeholders on submit + $('[placeholder]').closest('form').submit(function() + { + $(this).find('[placeholder]').each(function() + { + if ($(this).val() == $(this).attr('placeholder')) + { + $(this).val(''); + } + }) + }); + } + + + + }); +})(jQuery); + diff --git a/src/wolnelektury/static/js/locale.js b/src/wolnelektury/static/js/locale.js new file mode 100644 index 000000000..e4c8f17aa --- /dev/null +++ b/src/wolnelektury/static/js/locale.js @@ -0,0 +1,35 @@ +var LOCALE_TEXTS = { + "pl": { + "Loading": "Åadowanie" + }, + "de": { + "Loading": "Herunterladen" + }, + "fr": { + "Loading": "Chargement" + }, + "en": { + "Loading": "Loading" + }, + "ru": { + "Loading": "ÐагÑÑзка" + }, + "es": { + "Loading": "Cargando" + }, + "lt":{ + "Loading": "Krovimas" + }, + "uk":{ + "Loading": "ÐаванÑажÑÑÑÑÑÑ" + }, + "jp":{ + "Loading": "è² è·" + }, + "it":{ + "Loading": "caricamento" + }, +} +function gettext(text) { + return LOCALE_TEXTS[LANGUAGE_CODE][text]; +} diff --git a/src/wolnelektury/static/js/picture.js b/src/wolnelektury/static/js/picture.js new file mode 100644 index 000000000..2464220e4 --- /dev/null +++ b/src/wolnelektury/static/js/picture.js @@ -0,0 +1,253 @@ + +(function($) { + $.widget('wl.pictureviewer', { + + options: { + step: 20, // step in % of initial image + plus_button: undefined, + minus_button: undefined, + }, + ORIGINAL_LOADING: 0, + ORIGINAL_AVAILABLE: 1, + ORIGINAL_SHOWN: 2, + + _create: function() { + var self = this; + self.initial_size = [ + self.element.data('width'), + self.element.data('height') + ]; + self.original_size = [ + self.element.data('original-width'), + self.element.data('original-height') + ]; + self._zoom = 0; + self._ratio = 1.0; + + self.original = $('<img src="'+ self.element.attr('data-original-url') +'">'); + + self._original_avaialble = self.ORIGINAL_LOADING; + function original_loaded() { + self._original_avaialble = self.ORIGINAL_AVAILABLE; + self.options.plus_button.removeClass('inactive'); + self.options.minus_button.removeClass('inactive'); + console.log("Original image available, sizes initial: " + self.initial_size + ", original: " + self.original_size); + }; + self.original.load(original_loaded); + + self.element.width(self.initial_size[0]); + self.element.height(self.initial_size[1]); + + if (self.options.plus_button) + self.options.plus_button.click( + function(ev) { self.zoom(1); }); + if (self.options.minus_button) + self.options.minus_button.click( + function(ev) { self.zoom(-1); }); + + self._initial_mark = null; + function clean_initial_mark() { + if (self._initial_mark) { + self._initial_mark.remove(); + self._initial_mark = null; + } + } + var initial_hash = window.location.hash; + if (initial_hash) { + var mk = null, + objectPrefix = '#object-', + themePrefix = '#theme-'; + if (initial_hash.substr(0, objectPrefix.length) === objectPrefix) { + $("[href=#picture-objects]").trigger('click'); + } else if (initial_hash.substr(0, themePrefix.length) === themePrefix) { + $("[href=#picture-themes]").trigger('click'); + } + mk = $("[href=" + initial_hash + "]").eq(0); + self._initial_mark = self.createMark({ + label: mk.text(), + coords: mk.data('coords') + }); + } + + + self.options.areas_links.hover(function() { + clean_initial_mark(); + $this = $(this); + var coords = $this.data("coords"); + this._picture_mark = self.createMark({ +// label: $this.text(), + coords: coords, + }); + }, function() { + $(this._picture_mark).remove(); + this._picture_mark = undefined; + }).click(function(ev) { + ev.preventDefault(); + var $mark = self.element.find('.mark').eq(0); + var markPos = $mark.offset(); + markPos = [markPos.left, markPos.top]; + var markSize = [ $mark.width(), $mark.height() ] + var wSize = [ window.innerWidth, window.innerHeight ]; + window.scrollTo( + markPos[0] + markSize[0]/2 - wSize[0]/2, + markPos[1] + markSize[1]/2 - wSize[1]/2 + ); + + }); + + + + return self; + }, + + currentSize: function() { + return [this.element.width(), this.element.height() ]; + }, + + currentZoom: function() { return this._zoom; }, + + initOriginal: function() { + if (this._original_avaialble > this.ORIGINAL_LOADING && + this._original_avaialble < this.ORIGINAL_SHOWN) { + this.element.css({'background-image': 'url('+ this.original.attr('src')+')', 'background-size': this.initial_size[0]+'px'}); + this._original_avaialble = this.ORIGINAL_SHOWN; + }; + }, + + zoom: function(steps) { + this.initOriginal(); + var t = this._zoom + steps; + return this.zoomTo(t); + }, + + zoomForStep: function(step) { + // 0 => initial + // max_step-1 => max % + if (step < 0) step = 0; + var zoomperc = 100 + step * this.options.step; + if (zoomperc * this.initial_size[0] > this.original_size[0] * 100) { + zoomperc = this.original_size[0] * 100 / this.initial_size[0]; + }; + return zoomperc; + }, + + zoomTo: function(level) { + var ratio = this.zoomForStep(level) / 100; + var new_width = ratio * this.initial_size[0]; + var new_height = ratio * this.initial_size[1]; + var cs = this.currentSize(); + if (new_width == cs[0]) + return; + + var target = { + 'width': new_width + 'px', + 'height': new_height + 'px', + 'background-size': new_width + 'px', + }; + + this._zoom = level; + this._ratio = ratio; + + this.element.css(target); + if (this._initial_mark) { + this._initial_mark = this.redrawMark(this._initial_mark); + } + + }, + + allowedPosition: function(off) { + var x = undefined, fix_x = undefined; + var y = undefined, fix_y = undefined; + var w = this.element.width(); + var h = this.element.height(); + var cw = $(window).width(); + var ch = $(window).height(); + var off = off || this.element.offset(); + + if (w <= cw) { + var x = off.left; + if (x < 0) + fix_x = 0; + if (x + w > cw) + fix_x = cw - w; + } else { + if (x > 0) + fix_x = 0; + if (x + w < cw) + fix_x = cw - w; + } + + if (h <= ch) { + var y = off.top; + if (y < 0) + fix_y = 0; + if (y + h > ch) + fix_y = ch - h; + } else { + if (y > 0) + fix_y = 0; + if (y + h < ch) + fix_y = ch - h; + } + if (fix_x !== undefined || fix_y !== undefined) + return { top: fix_y, left: fix_x }; + return undefined; + + }, + redrawMark: function(mark) { + var $mark = $(mark); + var $newmark = this.createMark($mark.data('mark')); + $mark.remove(); + return $newmark; + }, + // mark + // { + // label: "...", + // coords: [x, y, w, h] + // } + createMark: function(mark) { + if (mark.label === undefined) + mark.label = ''; + var $mark = $('<div class="mark"><div class="label">' + + mark.label + '</div></div>'); + var cs = this.currentSize() + var ratio = cs[0] / this.original_size[0]; + var scale = function (v) { + return v * ratio; + } + if (mark.coords[1][0] < 0 || mark.coords[1][1] < 0) { // whole + var s = this.original_size; + if (mark.coords[1][0] < 0) mark.coords[1][0] = s[0]; + if (mark.coords[1][1] < 0) mark.coords[1][1] = s[1]; + } + + var coords = [[scale(mark.coords[0][0]), scale(mark.coords[0][1])], + [scale(mark.coords[1][0]), scale(mark.coords[1][1])]]; + this.element.append($mark); + $mark.width(coords[1][0] - coords[0][0]); + $mark.height(coords[1][1] - coords[0][1]); + $mark.css({left: coords[0][0], top: coords[0][1]}); + + $mark.data('mark', mark); + return $mark.get(0); + }, + }); + + +$(document).ready(function() { + $.highlightFade.defaults.speed = 3000; + + $('#menu .dropdown').each(function() { + $t = $(this); + $($t.attr('href')).hide().insertAfter(this); + }); + + $(".picture-wrap").pictureviewer({ + plus_button: $(".button.plus"), + minus_button: $(".button.minus"), + areas_links: $("#picture-objects a, #picture-themes a"), + }); + +}); + +}(jQuery)); diff --git a/src/wolnelektury/static/js/search.js b/src/wolnelektury/static/js/search.js new file mode 100644 index 000000000..4d001e0c0 --- /dev/null +++ b/src/wolnelektury/static/js/search.js @@ -0,0 +1,49 @@ + +var __bind = function (self, fn) { + return function() { fn.apply(self, arguments); }; +}; + +(function($){ + $.widget("wl.search", { + options: { + minLength: 0, + dataType: "json", + host: '', + }, + + _create: function() { + var opts = { + minLength: this.options.minLength, + select: __bind(this, this.enter), + focus: function() { return false; }, + source: this.element.data('source'), + }; + + this.element.autocomplete($.extend(opts, this.options)) + .data("autocomplete")._renderItem = __bind(this, this.render_item); + }, + + enter: function(event, ui) { + if (ui.item.url != undefined) { + location.href = this.options.host+ui.item.url; + } else { + this.element.closest('form').submit(); + } + }, + + render_item: function (ul, item) { + return $("<li></li>").data('item.autocomplete', item) + .append('<a href="'+this.options.host+item.url+'"><span class="search-hint-label">'+item.label+'</span>'+ + '<span class="search-hint-category mono">'+item.category+'</span></a>') + .appendTo(ul); + }, + + destroy: function() { + + }, + + + }); + + +})(jQuery); diff --git a/src/wolnelektury/static/js/widget.js b/src/wolnelektury/static/js/widget.js new file mode 100644 index 000000000..3b680fc7d --- /dev/null +++ b/src/wolnelektury/static/js/widget.js @@ -0,0 +1,8 @@ +var WOLNELEKTURY_LOADED; +if (WOLNELEKTURY_LOADED == undefined) { + var iframe = document.createElement('iframe'); + iframe.setAttribute('style', 'width: 100%; height: 140px; border: none; box-shadow: 0 0 .5rem #191919;'); + iframe.setAttribute('src', '//wolnelektury.pl/widget.html'); + document.getElementById('wl').appendChild(iframe); + WOLNELEKTURY_LOADED = true; +} \ No newline at end of file diff --git a/src/wolnelektury/static/js/widget_run.js b/src/wolnelektury/static/js/widget_run.js new file mode 100644 index 000000000..c2453e722 --- /dev/null +++ b/src/wolnelektury/static/js/widget_run.js @@ -0,0 +1,26 @@ +var s = $('#id_qq'); +var url = s.attr('data-source'); +s.search({ + source: function(req, cb) { + $.ajax({url: url, + dataType: "jsonp", + data: {term: req.term}, + type: "GET", + success: function(data) {cb(data);}, + error: function() {cb([]);} + }); + }, + dataType: "jsonp", + select: function(event, ui) { + if (ui.item.url != undefined) { + window.top.location.href = '//wolnelektury.pl' + ui.item.url; + } else { + $('form').submit(); + } + }, + position: { + my: "center bottom", + at: "center bottom", + of: "#wl a" + }, +}); diff --git a/src/wolnelektury/static/opensearch.xml b/src/wolnelektury/static/opensearch.xml new file mode 100644 index 000000000..3018db0cd --- /dev/null +++ b/src/wolnelektury/static/opensearch.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" + xmlns:atom="http://www.w3.org/2005/Atom" + xmlns:moz="http://www.mozilla.org/2006/browser/search/"> + <ShortName>Wolne Lektury</ShortName> + <Description>Biblioteka internetowa WolneLektury.pl</Description> + <InputEncoding>UTF-8</InputEncoding> + <Tags>lektury</Tags> + <Developer>Fundacja Nowoczesna Polska</Developer> + <Language>pl</Language> + <Contact>fundacja@nowoczesnapolska.org.pl</Contact> + <Image height="16" width="16" type="image/x-icon">https://static.wolnelektury.pl/static/img/favicon.ico</Image> + <Image height="64" width="64" type="image/png">https://static.wolnelektury.pl/static/img/wl_icon_64.png</Image> + <Url type="application/atom+xml;profile=opds-catalog" + template="https://wolnelektury.pl/opds/search/?q={searchTerms}&author={atom:author}&translator={atom:contributor}&title={atom:title}" /> + <Url type="text/html" method="GET" template="https://wolnelektury.pl/szukaj/?q={searchTerms}" /> + <Url type="application/x-suggestions+json" method="GET" template="https://www.wolnelektury.pl/katalog/jtags/?mozhint=1&q={searchTerms}" /> + <moz:SearchForm>https://wolnelektury.pl/</moz:SearchForm> + <Query role="example" searchTerms="sÅowa" /> +</OpenSearchDescription> diff --git a/src/wolnelektury/static/scss/book_text.scss b/src/wolnelektury/static/scss/book_text.scss new file mode 100644 index 000000000..566ee4804 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text.scss @@ -0,0 +1,20 @@ +@import "tools"; + +@import "book_text/const"; +@import "book_text/body"; +@import "book_text/box"; +@import "book_text/info"; +@import "book_text/menu"; +@import "book_text/note"; +@import "book_text/numbering"; +@import "book_text/other"; +@import "book_text/settings"; +@import "book_text/themes"; +@import "book_text/toc"; + +@import "main/book_box"; +@import "main/picture_box"; +@import "book_text/book_box"; + +@import "main/auth"; +@import "main/dialogs"; diff --git a/src/wolnelektury/static/scss/book_text/body.scss b/src/wolnelektury/static/scss/book_text/body.scss new file mode 100644 index 000000000..912d55b85 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/body.scss @@ -0,0 +1,144 @@ +/* + * #big-pane + * Everything besides the menu. + */ +#big-pane { + justify-content: left; + position: relative; + @include min-screen($W_BOOK_TEXT_MAX) { + justify-content: center; + } +} +@include min-screen($S_MENU) { + #big-pane { + @include size(margin-left, $W_MENU); + } + .menu-hidden { + #big-pane { + margin-left: 0; + } + } +} + +#picture-viewer #big-pane { + @include size(margin-left, $W_NONUMBERS_TINY); + + @include min-screen($S_NONUMBERS_TINY_MAX) { + @include size(margin-left, $W_NONUMBERS); + } + + @include min-screen($S_NUMBERS) { + @include size(margin-left, 44px); + } +} + +@include min-screen($S_MENU) { + #picture-viewer #big-pane { + @include size(margin-left, $W_MENU); + } + .menu-hidden { + #big-pane { + margin-left: 44px; + } + } +} + + + + +/* + * #main-text + * + * This is where the text lives + * together with line numbers, themes and stuff. + */ + +@mixin left-without-numbers { + @include size(padding-left, $W_NONUMBERS_TINY); + @include min-screen($S_NONUMBERS_TINY_MAX) { + @include size(padding-left, $W_NONUMBERS); + } +} + +@mixin right-without-themes { + @include size(padding-right, $W_NOTHEMES_TINY); + @include min-screen($S_NOTHEMES_TINY_MAX) { + @include size(padding-right, $W_NOTHEMES_SMALL); + } + @include min-screen($S_NOTHEMES_SMALL_MAX) { + @include size(padding-right, $W_NOTHEMES); + } +} + +#main-text, #other-text { + @include left-without-numbers; + @include right-without-themes; + @include size(min-width, $W_BOOK_TEXT_MIN); + + /* make room for line numbers */ + @include min-screen($S_NUMBERS) { + @include size(padding-left, $W_NUMBERS); + } + + /* make room for themes */ + @include min-screen($S_THEMES) { + @include size(padding-right, $W_THEMES); + } +} + +.always-hide-line-numbers { + /* Cancel making room for line numbers. */ + #main-text, #other-text { + @include left-without-numbers; + } +} + +@include min-screen($S_THEMES) { + .always-hide-themes { + /* Cancel making room for themes. */ + #main-text, #other-text { + @include right-without-themes; + } + } +} + +.with-other-text { + #big-pane { + display: flex; + flex-direction: row; + } + #main-text, #other-text { + @include right-without-themes; + + @include min-screen($S_THEMES_WOTHER) { + @include size(padding-right, $W_THEMES); + } + } +} + + + + + +#book-text { + @include size(max-width, $W_BOOK_TEXT_MAX); + @include size(margin, 20px auto); + + font-size: .8em; + + @include min-screen($S_SMALL_TEXT_MAX) { + font-size: 1em; + } + + h1 { + margin-top: 0; + } +} +.with-other-text { + #book-text { + font-size: .8em; + @include min-screen($S_SMALL_TEXT_MAX_WOTHER) { + font-size: 1em; + } + } +} diff --git a/src/wolnelektury/static/scss/book_text/book_box.scss b/src/wolnelektury/static/scss/book_text/book_box.scss new file mode 100644 index 000000000..38550ce74 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/book_box.scss @@ -0,0 +1,15 @@ +#book-short { + margin: 0; + padding: 0; + overflow: visible; + max-width: 488px; + + .book-box .book-box-inner { + border: none; + box-shadow: none; + } + + .book-box-read { + opacity: .5; + } +} diff --git a/src/wolnelektury/static/scss/book_text/box.scss b/src/wolnelektury/static/scss/book_text/box.scss new file mode 100644 index 000000000..7a0423418 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/box.scss @@ -0,0 +1,50 @@ +/* TODO: +There should be a JS-less way of seeing at least some of +the hidden boxes (TOC and Themes). +*/ + +.box, #toc, #themes, #nota_red, #objects { + display: none; + + position: fixed; + @include size(left, $W_MENU); + top: 0; + right: 0; + + max-height: 100%; + @include size(max-width, 380px); + @include size(padding, 10px 10px 30px 10px); + margin: 0; + overflow-x: hidden; + overflow-y: auto; + z-index: 100; + + color: black; + background: #fff; + box-shadow: 2px 2px 2px #444; + + @include size(border-width, 0 1px 1px 0); + border-style: solid; + border-color: #444; + + @include size(font-size, 14px); + line-height: 1.2em; + + h2 { + margin-top: 0; + } +} + + + +#box-underlay { + display: none; + position: fixed; + @include size(left, $W_MENU); + top: 0; + bottom: 0; + right: 0; + background:#000; + opacity: .5; + z-index: 99; +} diff --git a/src/wolnelektury/static/scss/book_text/const.scss b/src/wolnelektury/static/scss/book_text/const.scss new file mode 100644 index 000000000..4c8ab8201 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/const.scss @@ -0,0 +1,26 @@ +$W_MENU: 80px; +$S_MENU: 600px; + +$W_BOOK_TEXT_MIN: 160px; +$W_BOOK_TEXT_MAX: 600px; +$S_SMALL_TEXT_MAX: 500px; +$S_SMALL_TEXT_MAX_WOTHER: 1100px; + +$W_NONUMBERS_TINY: 20px; +$S_NONUMBERS_TINY_MAX: 240px; +$W_NONUMBERS: 30px; +$S_NUMBERS: 320px; +$W_NUMBERS: 50px; + +$W_NOTHEMES_TINY: 20px; +$S_NOTHEMES_TINY_MAX: 240px; +$W_NOTHEMES_SMALL: 30px; +$S_NOTHEMES_SMALL_MAX: 320px; +$W_NOTHEMES: 44px; +$S_THEMES: 600px; +$S_THEMES_WOTHER: 1200px; +$W_THEMES: 160px; + +$W_BOOK_SHORT_FULL: 487.5px; +$S_BOOK_SHORT_FULL: $W_BOOK_SHORT_FULL + $W_MENU + 2px; +$S_BOOK_SHORT_MEDIUM: 400px; diff --git a/src/wolnelektury/static/scss/book_text/info.scss b/src/wolnelektury/static/scss/book_text/info.scss new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/info.scss @@ -0,0 +1 @@ + diff --git a/src/wolnelektury/static/scss/book_text/menu.scss b/src/wolnelektury/static/scss/book_text/menu.scss new file mode 100644 index 000000000..1a555733b --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/menu.scss @@ -0,0 +1,128 @@ +%menu-toggle { + position: relative; + padding: 0; + &:before { + content: ""; + position: absolute; + top: 8px; + height: 5px; + border-top: 15px double #ddd; + border-bottom: 5px solid #ddd; + } +} + +#no-menu { + @include size(width, $W_NONUMBERS_TINY); + + @include min-screen($S_NONUMBERS_TINY_MAX) { + @include size(width, $W_NONUMBERS); + } + + @include min-screen($S_NUMBERS) { + @include size(width, 44px); + } + + /* Button for showing menu */ + #menu-toggle-on { + @extend %menu-toggle; + display: block; + background: #191919; + color: #ddd; + text-align: center; + z-index: 100; + @include size(height, 44px); + padding: 0; + + &:before { + left: 5px; + right: 5px; + @include min-screen(240px) { + left: 8px; + right: 8px; + } + } + } +} + +#menu-toggle-off { + @extend %menu-toggle; + height: 24px; + &:before { + left: 25px; + right: 25px; + } +} + + +#menu { + display: none; + width: 80px; + height: 100%; +} + +#menu, #no-menu { + z-index: 101; + position: fixed; + top: 0; + left: 0; + text-align: center; + line-height: 1.1em; + background: #191919; + color: #ddd; + + ul { + list-style: none; + margin: 0; + padding: 0; + + li { + + a { + padding: 10px 0; + color: white; + display: block; + text-decoration: none; + + &.active { + background: white; + color: black; + } + + .label { + display: block; + font-size: 12px; + } + } + } + + } +} + +/* body class for showing menu */ +.menu-showed { + #menu { + display: block; + } + #no-menu { + display: none; + } +} + +/* menu showing by default */ +@include min-screen($S_MENU) { + #menu { + display: block; + } + #no-menu { + display: none; + } + /* body class for hiding menu */ + .menu-hidden { + #menu { + display: none; + } + #no-menu { + display: block; + } + } +} diff --git a/src/wolnelektury/static/scss/book_text/note.scss b/src/wolnelektury/static/scss/book_text/note.scss new file mode 100644 index 000000000..55dd76567 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/note.scss @@ -0,0 +1,3 @@ +#menu-nota_red { + display: none; +} diff --git a/src/wolnelektury/static/scss/book_text/numbering.scss b/src/wolnelektury/static/scss/book_text/numbering.scss new file mode 100644 index 000000000..e31b49403 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/numbering.scss @@ -0,0 +1,65 @@ +@mixin hide-line-numbers { + float: left; + margin-left: -$W_NONUMBERS_TINY; + + width: $W_NONUMBERS_TINY; + height: 100%; + padding: 0; + overflow: hidden; + + color: white; + text-align: right; + + &:hover, &:active { + color: #ccc; + background-color: #CCC; + } + + &:before { + content: "#"; + display: block; + float: left; + width: $W_NONUMBERS_TINY / 2 - 1px; + height: 100%; + overflow: hidden; + border-right: 1px solid #ccc; + } + + @include min-screen($S_NONUMBERS_TINY_MAX) { + width: $W_NONUMBERS; + margin-left: -$W_NONUMBERS; + + &:before { + width: $W_NONUMBERS / 2 - 1; + } + } +} + + +.anchor { + @include hide-line-numbers; + + @include min-screen($S_NUMBERS) { + /* Show line numbers. */ + font-size: .8em; + margin-left: -$W_NUMBERS; + width: $W_NUMBERS - 4px; + height: auto; + padding: 2px; + text-align: center; + color: #ccc; + + &:before { + display: none; + } + } +} + +@include min-screen($S_NUMBERS) { + .always-hide-line-numbers { + /* Cancel showing line numbers. */ + .anchor { + @include hide-line-numbers; + } + } +} diff --git a/src/wolnelektury/static/scss/book_text/other.scss b/src/wolnelektury/static/scss/book_text/other.scss new file mode 100644 index 000000000..9ccedd932 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/other.scss @@ -0,0 +1,52 @@ +nav #menu-other { + display: none; +} + + +#other { + ul { + list-style: none; + padding: 0; + margin: 1em 0; + + li { + display: inline-block; + + a { + display: block; + } + } + } +} + + +.other-text-close { + background: #000; + color: #ddd; + opacity: .5; + text-align: center; + padding: .5em; + font-weight: bold; +} + + +#other-text { + position: relative; + display: none; + + .other-text-close { + position: absolute; + top: 0; + right: 0; + } +} + +.other-text-close { + display: none; +} + +.with-other-text { + .other-text-close { + display: block; + } +} diff --git a/src/wolnelektury/static/scss/book_text/settings.scss b/src/wolnelektury/static/scss/book_text/settings.scss new file mode 100644 index 000000000..edcb8bfdb --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/settings.scss @@ -0,0 +1,47 @@ +@mixin switch-on { + background: #aaa; + border-top-color: #888; + border-left-color: #888; + border-bottom-color: #ddd; + border-right-color: #ddd; + + border-width: 2px; + border-style: solid; + +} +@mixin switch-off { + background: none; + border-color: #aaa; +} +.settings-switch { + display: block; + padding: .5em; + margin: .5em; + //border: 1px solid #aaa; + border-radius: 1em; + color: black; + border-width: 2px; + border-style: solid; +} + +nav #menu-settings { + display: none; +} + +#settings-annotations {@include switch-on;} +.no-annotations { + #settings-annotations {@include switch-off;} + .annotation {display: none;} +} + +#settings-themes {@include switch-on;} +.always-hide-themes { + #settings-themes {@include switch-off;} +} + +#settings-line-numbers {@include switch-on;} +.always-hide-line-numbers { + #settings-line-numbers {@include switch-off;} +} + + diff --git a/src/wolnelektury/static/scss/book_text/themes.scss b/src/wolnelektury/static/scss/book_text/themes.scss new file mode 100644 index 000000000..26ed14bdb --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/themes.scss @@ -0,0 +1,110 @@ +nav #menu-themes { + display: none; +} + +/* Add a missing header. */ +#themes:before { + content: "Motywy"; +} + + +@mixin theme-hidden { + width: 20px; + height: 20px; + overflow: hidden; + margin-right: -20px; + border: none; + padding: 0; + + &:before { + content: "â²"; + color: #ccc; + text-align: center; + display: block; + } + + @include min-screen(240px) { + width: 30px; + margin-right: -30px; + &:before { + font-size: 2em; + } + } + + @include min-screen(320px) { + width: 44px; + margin-right: -44px; + &:before { + font-size: 2.5em; + } + } + + &.showing { + @include theme-showing; + } + +} + +@mixin theme-showing { + @include size(width, 120px); + height: auto; + overflow: visible; + @include size(margin-left, 30px); + @include size(font-size, 14.4px); + text-indent: 0; + + @include size(border-left, 1px solid #DDDDDD); + color: #777; + @include size(padding, 0 0 0 8px); + + &:before { + display: none; + } +} + +.theme-begin { + @include theme-hidden; + + font-size: .9em; + position: relative; + float: right; + margin-bottom: 8px; + clear: both; + line-height: 1.5em; + text-align: left; + z-index: 60; + + font-style: normal; + font-weight: normal; + font-variant: normal; + letter-spacing: 0; + text-transform: none; + text-decoration: none; + + @include min-screen(600px) { + @include theme-showing; + margin-right: -160px; + } + + &.showing { + @include theme-showing; + } +} + + +.always-hide-themes { + .theme-begin { + @include theme-hidden; + } +} + +.with-other-text { + .theme-begin { + @include theme-hidden; + + @include min-screen(1200px) { + @include theme-showing; + margin-right: -160px; + } + } +} diff --git a/src/wolnelektury/static/scss/book_text/toc.scss b/src/wolnelektury/static/scss/book_text/toc.scss new file mode 100644 index 000000000..18975c760 --- /dev/null +++ b/src/wolnelektury/static/scss/book_text/toc.scss @@ -0,0 +1,3 @@ +nav #menu-toc { + display: none; +} diff --git a/src/wolnelektury/static/scss/dictionary/dictionary.scss b/src/wolnelektury/static/scss/dictionary/dictionary.scss new file mode 100644 index 000000000..a90059924 --- /dev/null +++ b/src/wolnelektury/static/scss/dictionary/dictionary.scss @@ -0,0 +1,9 @@ +.dictionary-note { + @include white-box; + @include size(padding, 8px); + @include size(margin, 10px 0); +} +.dictionary-note-source { + @include white-box; + @include size(padding, 8px); +} diff --git a/src/wolnelektury/static/scss/funding/funding.scss b/src/wolnelektury/static/scss/funding/funding.scss new file mode 100644 index 000000000..3b63e2037 --- /dev/null +++ b/src/wolnelektury/static/scss/funding/funding.scss @@ -0,0 +1,224 @@ +.funding { + background: orange; + margin: auto; + @include size(padding, 5px 0); + position: relative; + .close { + @include mono; + @include size(font-size, 16px); + position: absolute; + top: 0px; + right: 0; + @include size(padding, 1px 5px 10px 10px); + } + .call-area { + float:left; + @include size(padding-right, 6px); + } + a.call { + @include size(height, 18px); + + @include size(padding, 5.25px 7.5px); + @include size(margin, 7.5px); + display: inline-block; + vertical-align: middle; + text-align: center; + + background: lighten(#018189, .05); + @include size(width, 135px); + + @include min-screen(420px) { + vertical-align: top; + } + } + .learn-more { + text-align: center; + margin: auto; + @include size(font-size, 10px); + padding: .5em; + + @include min-screen(300px) { + display: inline; + } + @include min-screen(420px) { + padding: 0; + display: block; + } + } + .description { + @include size(padding-left, 6px); + + a { + display: block; + color: black; + @include size(padding, 0 3px); + } + } + strong { + @include size(font-size, 15px); + @include size(padding, 3px 0 0); + } + .progress { + .piece { + @include size(font-size, 13px); + @include size(padding, 4px 6px); + } + @include size(margin, 3px 12px 4px 0); + @include size(border-radius, 20px); + background-image: url(/static/img/progress-pixel.png); + background-repeat: repeat-y; + background-color: #F68900; + @include box-shadow(1px 1px 1px #888); + + .progress-collected { + float:left; + &:after { + content: " / "; + } + @include min-screen(500px) { + &:after { + content: none; + } + } + } + .progress-target { + float: left; + padding-left: 0; + @include min-screen(500px) { + float: right; + @include size(padding-left, 6px); + } + } + .progress-extralabel { + display: none; + @include min-screen(500px) { + display: inline; + } + } + .progress-until { + display: inline-block; + margin-right: 0em; + text-align: right; + @include min-screen(500px) { + text-align: center; + } + } + } + .with-button { + clear: left; + @include min-screen(420px) { + clear: none; + @include size(margin-left, 171px); + } + } + + .funding-title { + @include size(font-size, 11px); + display: block; + @include min-screen(640px) { + display: inline; + } + } + .funding-title-strong { + @extend .funding-title; + font-weight: bold; + @include size(font-size, 15px); + } +} + +.funding-top-header { + @extend .funding; + + @include min-screen(1000px) { + @include size(width, 975px); + } +} + + +.wlfund { + width: 100%; + border-spacing:0; + + td { + @include size(padding, 10px 5px 10px); + text-align: center; + @include size(border-top, 10px solid rgba(255, 255, 255, 0)); + @include size(border-bottom, 2px solid #DDDDDD); + + background-clip: padding-box; + -moz-background-clip: padding; + -webkit-background-clip: padding; + } + td.oneline { + white-space: nowrap; + } + + td:last-child { + text-align: right; + } + + .funding-plus td { + background-color: mix(#0D7E85, white, .2); + } + + .funding-minus td { + background-color: white; + } +} + + + +.honking { + background: #018189; + @include size(font-size, 15px); + @include size(padding, 7.5px); + color: white; + border: 0; + @include box-shadow(3px 3px 4.5px #888888); + position: relative; +} +.honking:hover { + @include box-shadow(none); + @include size(top, 1px); + @include size(left, 1px); +} + + + +.share { + a { + @include size(margin-right, 15px); + + img { + vertical-align: middle; + } + } +} + +#funding-closeable { + display: none; +} +#funding-handle { + position: absolute; + top: 0; + right: 0; + z-index: 2; + background: orange; + cursor: pointer; + @include size(padding, 2.6px 13px); + @include size(border-radius, 0 0 0 10px); + @include size(font-size, 13px); +} + +.funding-cover { + float: left; + @include size(margin-right, 10px); +} + +.funding-details-intro { + @include size(padding-top, 10px); + + h3:first-of-type { + margin-top: 0; + } +} diff --git a/src/wolnelektury/static/scss/main.scss b/src/wolnelektury/static/scss/main.scss new file mode 100644 index 000000000..bab1fb46f --- /dev/null +++ b/src/wolnelektury/static/scss/main.scss @@ -0,0 +1,29 @@ +@import "tools"; + +@import "main/const"; +@import "main/auth"; +@import "main/base"; +@import "main/book_box"; +@import "main/book_list"; +@import "main/catalogue"; +@import "main/cite"; +@import "main/dialogs"; +@import "main/footer"; +@import "main/form"; +@import "main/fragment"; +@import "main/header"; +@import "main/hidden"; +@import "main/main_content"; +@import "main/main_page"; +@import "main/menu"; +@import "main/picture_box"; +@import "main/search"; +@import "main/tag"; + +@import "dictionary/dictionary"; + +@import "funding/funding"; + +@import "polls/polls"; + +@import "social/shelf_tags"; diff --git a/src/wolnelektury/static/scss/main/auth.scss b/src/wolnelektury/static/scss/main/auth.scss new file mode 100755 index 000000000..793afe4f4 --- /dev/null +++ b/src/wolnelektury/static/scss/main/auth.scss @@ -0,0 +1,47 @@ +.email_list { + .verified { + display: inline-block; + margin-left: 2em; + font-style: italic; + } + .unverified { + display: inline-block; + margin-left: 2em; + color: #717171; + font-style: italic; + } + .primary { + display: inline-block; + margin-left: 2em; + font-weight: bold; + } +} + +.socialaccount_provider { + display: inline-block; + background-repeat: no-repeat; + color: transparent; + + @include size(height, 40px); + @include size(width, 40px); + vertical-align: middle; + + &.google { + background-image: url(/static/img/auth/google.png); + } + &.facebook { + background-image: url(/static/img/auth/facebook.png); + } +} + + +.socialaccount_providers { + @include size(margin, 10px 0); + padding: 0; + + li { + display: inline; + list-style: none; + @include size(margin-right, 10px); + } +} diff --git a/src/wolnelektury/static/scss/main/base.scss b/src/wolnelektury/static/scss/main/base.scss new file mode 100755 index 000000000..1f1021a9f --- /dev/null +++ b/src/wolnelektury/static/scss/main/base.scss @@ -0,0 +1,110 @@ +/* Basic layout */ +html, body { + margin: 0; + padding: 0; +} + + +.clearboth { + clear: both; +} + + + +/* Basic colors and fonts */ +body { + font-family: Georgia; + background: #f7f7f7; + color: black; + + @include size(font-size, 13px); +} + +a { + color: #0d7e85; + text-decoration: none; + + img { + border: 0; + } +} + +h1 { + @include size(font-size, 35px); + font-weight: normal; + @include size(margin-top, 14px); + + a { + color: inherit; + } +} + +h2 { + @include size(font-size, 20px); + font-weight: normal; +} + +h3 { + @include size(font-size, 15px); + font-weight: normal; +} + + +.normal-text { + line-height: 1.3em; + @include size(margin, 0 5px); + + @media screen and (min-width: 62.5em) { + margin: 0; + } +} + +.white-box { + @include size(padding, 10px); + @include white-box; +} + + +ul.plain { + list-style:none; + margin: 0; + padding: 0; +} + + +.theme-list-link { + @include mono; + @include size(font-size, 11px); + + &:after { + @include size(padding-left, 11px); + content: url("/static/img/arrow-teal.png"); + vertical-align: middle; + } +} + + +.left-column, .right-column { + @include size(max-width, 600px); +} +@media screen and (min-width: 62.5em) { + .left-column { + @include size(width, 470px); + float: left; + } + .right-column { + @include size(width, 470px); + float:right; + } +} + +.pagination { + display: block; + @include size(font-size, 12px); + @include size(padding, 6px); + text-align:center; +} + +.simple-hidden-initially { + display: none; +} diff --git a/src/wolnelektury/static/scss/main/book_box.scss b/src/wolnelektury/static/scss/main/book_box.scss new file mode 100755 index 000000000..d318fda34 --- /dev/null +++ b/src/wolnelektury/static/scss/main/book_box.scss @@ -0,0 +1,543 @@ +@mixin inner-box { + display: block; + color: black; + @include size(margin, 1px); + @include size(padding, 8px 10px); + @include white-box; +} + + +.cover-area { + float: left; + @include size(margin-right, 15px); + @include size(margin-bottom, 5px); + + @include min-screen($S_BOOK_SHORT_FULL) { + position: absolute; + top: 0; + left: 0; + margin-right: 0; + } + + img.cover { + @include size(height, 193px / 2); + @include size(width, 139px / 2); + + @include min-screen($S_BOOK_SHORT_MEDIUM) { + @include size(height, 193px); + @include size(width, 139px); + } + } +} + +.book-mini-box { + /* Original design fits 6 boxes horizontally in 975px (162.5px each), + * but we really want to fit 2 boxes on a 320px mobile screen. */ + + @include size(width, 160px); + display: inline-block; + vertical-align: top; + + @include min-screen(350px) { + @include size(width, 162.5px); + } + + .book-mini-box-inner { + @include inner-box; + @include size(height, 271px); + @include size(margin, 1px); + @include size(padding, 8px 9px); + overflow: hidden; + + @include min-screen(350px) { + @include size(padding, 8px 10px); + } + + a { + display: block; + } + } + img.cover { + @include size(height, 193px); + @include size(width, 139px); + @include size(margin-bottom, 18px); + } + .language { + color: #aaa; + float: right; + @include mono; + @include size(font-size, 10px); + text-transform: uppercase; + position: relative; + @include size(top, -20px); + } + .desc { + margin-left: 0; + } + .author { + @include size(font-size, 11px); + @include mono; + color: #6d7877; + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .title { + @include size(font-size, 14px); + color: #242424; + } +} + + + +.work-list { + margin: 0; + padding: 0; + list-style: none; + + .Book-item { + @include min-screen($S_BOOK_SHORT_FULL) { + display: inline-block; + } + vertical-align: top; + } +} + + +.book-box { + margin: 0; + vertical-align: top; + + /* */ + a { + color: #0D7E85; + } + + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(width, $W_BOOK_SHORT_FULL); + } + + .book-box-inner { + position: relative; + @include inner-box; + @include size(min-height, 197.5px); + } +} + + +.book-wide-box { + margin: 0; + vertical-align: top; + + @media screen and (min-width: 62.5em) { + @include size(width, 975px); + } + + .book-box-inner { + position: relative; + @include size(min-height, 244px); + @include inner-box; + @include size(margin-left, 0); + @include size(margin-right, 0); + + .book-left-column { /* FIXME */ + @media screen and (min-width: 62.5em) { + float: left; + @include size(width, 536px); + } + } + + .license-icon { + display: block; + @include size(margin-top, 5px); + } + + @include min-screen($S_BOOK_SHORT_FULL) { + // Show full title on the work's page. + + .book-box-body { + height: auto; + @include size(min-height, 170px); + + .book-box-head .title { + height: auto; + @include size(min-height, 57.6px); + } + } + } + + .book-box-head, + .tags, + .book-box-tools { + @media screen and (min-width: 62.5em) { + @include size(width, 382px); + } + } + + #theme-list-wrapper { + @include min-screen($S_BOOK_SHORT_MEDIUM) { + @include size(margin-left, 154px); + @include size(width, 300px); + } + margin-bottom: 0; + + p { + @include size(margin-top, 10px); + @include size(margin-bottom, 10px); + } + } + + .right-column { + @include size(margin-top, 16px); + // Eat the padding + @include size(margin-left, -10px); + @include size(margin-right, -10px); + max-width: none; + + @media screen and (min-width: 62.5em) { + @include size(width, 415px); + // Eat the padding + @include size(margin-top, -8px); + } + + .other-tools, + .other-download { + @include size(font-size, 11px); + clear: left; + @include size(margin-top, 25px); + line-height: 1.75em; + @include size(margin-left, 15px); + + h2 { + margin: 0; + @include size(font-size, 11px); + @include mono; + } + + @include min-screen($S_BOOK_SHORT_FULL) { + float: left; + clear: none; + @include size(width, 145px); + @include size(margin-top, 50px); + @include size(margin-right, 0); + @include size(margin-bottom, 0); + @include size(margin-left, 5px); + } + + @include min-screen(1000px) { + @include size(margin-top, 50px); + line-height: 1.2em; + } + } + .other-download { + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(margin-left, 15px); + @include size(width, 220px); + } + } + } + } +} + +@media screen and (min-width: 50em) { + .picture.book-wide-box .right-column { + float: none; + @include size(width, 415px); + top: 0; + @include size(margin-left, 550px); + margin-top: 0em; + } +} + + +.book-box-body { + @include size(margin-bottom, 10px); + @include min-screen($S_BOOK_SHORT_FULL) { + margin-bottom: 0; + @include size(height, 170px); + } + position: relative; + + .book-box-head, + .tags, + .book-box-tools { + @include min-screen($S_BOOK_SHORT_FULL) { + margin-left: 154px; + } + } + + .book-box-head { + @include size(padding-top, 14px); + @include size(margin-bottom, 10px); + + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(min-height, 70px); + } + + a { + color: black; + } + .author { + @include size(font-size, 11px); + @include mono; + @include size(line-height, 13.2px); + @include size(max-height, 26.4px); + overflow: hidden; + + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(max-width, 264px); + } + } + .title { + @include size(font-size, 24px); + line-height: 1.2em; + @include size(margin-top, 7.2px); + @include size(margin-bottom, 12px); + + @include min-screen($S_BOOK_SHORT_FULL) { + margin-bottom: 0; + @include size(height, 57.6px); + overflow: hidden; + } + } + } + + .tags { + @include size(font-size, 11px); + line-height: 1.2em; + margin-bottom: 5px; + + @include min-screen($S_BOOK_SHORT_FULL) { + clear: right; + @include size(max-height, 57.6px); + overflow: hidden; + } + + .category { + display: block; + @include size(margin-top, 6px); + @include size(margin-bottom, 6px); + + @include min-screen($S_BOOK_SHORT_FULL) { + display: inline; + } + + .mono { + @include mono; + } + + .book-box-tag { + @include size(margin-left, 4.4px); + @include size(margin-right, 5.5px); + } + } + } + +} + + + +.book-box-tools { + @include size(font-size, 11px); + margin: 0; + padding: 0; + list-style: none; + + clear: left; + + @include min-screen($S_BOOK_SHORT_MEDIUM) { + clear: none; + @include size(margin-left, 139px + 15px); + } + + li { + @include mono; + margin-top: 1em; + + @include min-screen($S_BOOK_SHORT_FULL) { + display: inline-block; + margin-top: 0; + } + } + + .book-box-read { + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(width, 126.5px); + } + + a { + @include mono; + } + + a:before { + content: url("/static/img/read.png"); + @include size(font-size, 25px); + @include size(margin-right, 3.71px); + vertical-align: middle; + font-weight: normal; + } + } + + .book-box-download { + position: relative; + + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(width, 93.5px); + } + + a { + position: relative; + z-index: 101; + + @mixin downarrow { + color: #0D7E85; + + &:before { + content: url("/static/img/download.png"); + @include size(font-size, 25px); + @include size(margin-right, 3.71px); + vertical-align: middle; + font-weight: normal; + display: inline; + } + } + + &.downarrow { + @include downarrow; + &.hoverclick { + color: black; + &:before { + display: none; + } + + @include min-screen($S_BOOK_SHORT_FULL) { + @include downarrow; + } + } + } + } + + .book-box-formats { + @include size(padding-left, 19px); + + @include min-screen($S_BOOK_SHORT_FULL) { + display: none; + position: absolute; + + @include size(width, 180px); + @include size(padding-top, 38px); + @include size(padding-bottom, 9px); + @include size(padding-left, 19px); + @include size(padding-right, 19px); + + @include white-box; + + z-index: 100; + + @include size(top, -16px); + @include size(left, -19px); + } + + span { + display: block; + @include size(margin-top, 16px); + + a { + &:before { + content: url("/static/img/download.png"); + @include size(font-size, 25px); + @include size(margin-right, 3.71px); + vertical-align: middle; + font-weight: normal; + } + } + + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(margin-top, 0); + + &:first-child { + @include size(margin-top, 16px); + } + a:before { + display:none; + } + } + } + } + + &:hover .book-box-formats, + &.hover .book-box-formats { + display: block; + } + } + + .book-box-audiobook { + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(width, 77px); + } + + a:before { + content: url("/static/img/listen.png"); + @include size(font-size, 25px); + @include size(margin-right, 3.71px); + vertical-align: middle; + font-weight: normal; + } + + } +} + + + + +.star { + @include size(font-size, 22.5px); + @include size(margin-right, 11.25px); + position: absolute; + right: 0; + + button::-moz-focus-inner { + padding: 0; + border: 0 + } + .if-unlike button { + font-size: 1em; + font-family: inherit; + border: 0; + background: none; + margin: 0; + padding: 0; + color: #757575; + } + .if-like a { + display:block; + text-align:right; + padding: 0; + } +} +.like .if-unlike { + display: none; +} +.unlike .if-like { + display: none; +} + + +#book-detail .see-also, +#picture-detail .see-also { + h1 { + @include size(height, 32px); + margin: 0; + @include size(padding-top, 19px); + @include size(padding-left, 10px); + + @include size(font-size, 11px); + @include mono; + font-weight: normal; + + @media screen and (min-width: 33em) { + @include size(padding-left, 19px); + } + } +} diff --git a/src/wolnelektury/static/scss/main/book_list.scss b/src/wolnelektury/static/scss/main/book_list.scss new file mode 100755 index 000000000..d4115dcbb --- /dev/null +++ b/src/wolnelektury/static/scss/main/book_list.scss @@ -0,0 +1,92 @@ +/* listing of all books */ + +#book-a-list { + #book-list-nav { + @include size(border-width, 0); + @include size(border-bottom-width, 1px); + border-style: solid; + border-color: #CFCFCF; + @include size(padding, 9.75px); + line-height: 2em; + + @media screen and (min-width: 30em) { + @include size(border-bottom-width, 0px); + @include size(border-left-width, 1px); + float: right; + width: 50%; + } + + @media screen and (min-width: 62.5em) { + line-height: 1.3em; + } + + h2 { + cursor: pointer; + + &:after { + @include size(padding-left, 10px); + content: url("/static/img/arrow-gray.png"); + vertical-align: top; + } + + @media screen and (min-width: 30em) { + font-size: 1em; + margin: 0; + cursor: regular; + + &:after { + display: none; + } + } + } + + #book-list-nav-index { + display: none; + @media screen and (min-width: 30em) { + display: block !important; + } + } + + ul { + list-style-type: none; + @include size(margin, 5px); + padding: 0; + } + .book-list-show-index { + display: none; + } + } + + #book-list { + @include size(padding-left, 5px); + line-height: 2em; + + @media screen and (min-width: 62.5em) { + @include size(padding-left, 50px); + line-height: 1.3em; + } + + ol { + @include size(padding-left, 13px); + @include size(margin, 4px 0 15.6px 0); + list-style: none; + } + h2 { + @include size(font-size, 13px); + margin: 0; + a { + color: black; + } + } + } + + #book-list-up { + display: block; + position: fixed; + @include size(bottom, 50px); + @include size(right, 50px); + @include size(border-left, solid 1px #CFCFCF); + @include size(padding, 20px 10px); + background-color: white; + } +} diff --git a/src/wolnelektury/static/scss/main/catalogue.scss b/src/wolnelektury/static/scss/main/catalogue.scss new file mode 100755 index 000000000..ba30e8271 --- /dev/null +++ b/src/wolnelektury/static/scss/main/catalogue.scss @@ -0,0 +1,29 @@ +/* listing of all books */ + +.catalogue-catalogue { + ul { + column-width: 25em; + -moz-column-width: 25em; + -webkit-column-width: 25em; + + @include size(padding-left, 10px); + + @media screen and (min-width: 20em) { + @include size(padding-left, 40px); + } + + li { + margin-bottom: 1em; + + @media screen and (min-width: 62.5em) { + margin-bottom: .5em; + } + } + } + + h2 { + @include size(font-size, 26px); + margin: 0; + @include size(padding, 26px); + } +} diff --git a/src/wolnelektury/static/scss/main/cite.scss b/src/wolnelektury/static/scss/main/cite.scss new file mode 100755 index 000000000..eb3a51139 --- /dev/null +++ b/src/wolnelektury/static/scss/main/cite.scss @@ -0,0 +1,61 @@ +.cite { + display: block; + color: black; + background: white; + @include size(padding, 30px 20px 1px 80px); + + .vip { + margin: 0; + color: #575C63; + @include size(font-size, 11px); + } + + .cite-body { + @include size(font-size, 18px); + line-height: 1.3em; + + h4 { + margin: 0; + } + .didaskalia { + font-style: italic; + } + .verse { + // Cancel any indentation. + padding-left: 0 !important; + } + .person { + font-style: inherit; + } + } + + blockquote { + padding: 0; + margin: 0; + + p { + margin: 0; + } + } + + .source + { + color: #444; + @include mono; + @include size(font-size, 11px); + @include size(margin-top, 16px); + } +} + + + + +.book-wide-box .cite { + background-color: #f7f7f7; + vertical-align: middle; + @include min-screen(1000px) { + @include size(width, 395px); + } + margin: 0; + @include size(padding, 10px); +} diff --git a/src/wolnelektury/static/scss/main/const.scss b/src/wolnelektury/static/scss/main/const.scss new file mode 100644 index 000000000..2ebc4b81c --- /dev/null +++ b/src/wolnelektury/static/scss/main/const.scss @@ -0,0 +1,3 @@ +$S_BOOK_SHORT_MEDIUM: 320px; +$S_BOOK_SHORT_FULL: 512px; +$W_BOOK_SHORT_FULL: 487.5px; diff --git a/src/wolnelektury/static/scss/main/dialogs.scss b/src/wolnelektury/static/scss/main/dialogs.scss new file mode 100755 index 000000000..2902862fc --- /dev/null +++ b/src/wolnelektury/static/scss/main/dialogs.scss @@ -0,0 +1,138 @@ +.dialog-window { + position: absolute; + display: none; + background-color: transparent; + @include size(margin-top, -5px); + @include size(margin-left, 10px); + @include size(width, 200px); + + @media screen and (max-width: 29.999999em) { + left: 0 !important; + right: 0; + @include size(margin-left, 0); + width: auto; + } + + div.header { + @include mono; + @include size(font-size, 11px); + width: 4em; + background-color: #FFF; + padding: 1em; + right: 0; + left: auto; + float: right; + text-align: center; + + @media screen and (min-width: 30em) { + padding-top: 0.5em; + padding-bottom: 0.5em; + border-right: 0.3em solid #DDD; + } + } + + div.target { + background-color: #FFF; + color: black; + border-bottom: 0.3em solid #DDD; + padding: 1em 10px; + clear: both; + + @media screen and (min-width: 30em) { + border-right: 0.3em solid #DDD; + padding-left: 1em; + padding-right: 1em; + } + } + + h1 { + @include size(font-size, 12px); + font-weight: normal; + margin-top: .4em; + } + + textarea, input { + width: 100%; + } +} + + + + + + + +.cuteform { + @include size(font-size, 11px); + + ol, ul { + padding: 0; + margin: 0; + list-style: none; + @include size(font-size, 11px); + + li { + margin-top: 0.7em; + } + } + + label { + display: block; + } + + span.help-text { + display: block; + font-size: 0.8em; + color: #999; + } + + .error { + color: #BF3024; + display: block; + } + + .errorlist { + color: #BF3024; + } +} + + +.jqmOverlay { background-color: #000; } + + + +.hidelabels label { + @include hidden-label; +} + + +@media screen and (min-width: 30em) { + #login-window { + @include size(width, 260px); + } + #register-window { + width: 26em; + } + #context-login-window { + width: 26em; + } + #suggest-window { + width: 26em; + } + #suggest-publishing-window { + width: 29em; + } + #custom-pdf-window { + width: 24em; + } +} + +#suggest-window textarea { + height: 6em; +} +#suggest-publishing-window textarea { + height: 3em; +} +#custom-pdf-window label { + display: inline; +} diff --git a/src/wolnelektury/static/scss/main/footer.scss b/src/wolnelektury/static/scss/main/footer.scss new file mode 100755 index 000000000..8969a5ad7 --- /dev/null +++ b/src/wolnelektury/static/scss/main/footer.scss @@ -0,0 +1,26 @@ +#footer-wrapper { + @include size(margin-top, 50px); + @include size(padding-top, 30px); + background: #fff; + color: #767676; + @include size(border-top, 1px solid #ddd); +} + +footer#main { + @include size(font-size, 10px); + @include size(margin-left, 5px); + @include size(margin-right, 5px); + + @media screen and (min-width: 62.5em) { + @include size(width, 975px); + margin: auto; + } + + p { + @include size(margin-top, 2.5px); + @include size(margin-bottom, 2.5px); + margin-left: 0; + margin-right: 0; + } +} + diff --git a/src/wolnelektury/static/scss/main/form.scss b/src/wolnelektury/static/scss/main/form.scss new file mode 100755 index 000000000..42e867595 --- /dev/null +++ b/src/wolnelektury/static/scss/main/form.scss @@ -0,0 +1,26 @@ +form table { + th { + vertical-align: top; + text-align: left; + font-weight: normal; + } + td { + padding-bottom: 1em; + } + + .required th:after { + content: " *"; + } + + .errorlist { + color: red; + margin: 0; + padding: 0; + list-style: none; + } + .helptext { + color: #888; + font-size: .9em; + font-style: italic; + } +} diff --git a/src/wolnelektury/static/scss/main/fragment.scss b/src/wolnelektury/static/scss/main/fragment.scss new file mode 100755 index 000000000..4c765f6fe --- /dev/null +++ b/src/wolnelektury/static/scss/main/fragment.scss @@ -0,0 +1,35 @@ +.Fragment-item, .PictureArea-item { + @include size(margin-bottom, 20px); + @include white-box; + + .fragment { + color: black; + display: block; + } + .toggle { + @include size(font-size, 11px); + display: block; + @include size(padding, 5px 0); + } +} + +.area { + display: block; + color: black; + background: white; + @include size(padding, 30px 20px 20px 20px); + position: relative; + clear: both; + + .area-thumbnail { + display:block; + @include size(width, 100px); + float: left; + } + + .area-description { + float: right; + @include size(padding, 10px); + @include size(width, 256px); + } +} diff --git a/src/wolnelektury/static/scss/main/header.scss b/src/wolnelektury/static/scss/main/header.scss new file mode 100755 index 000000000..63bd8677c --- /dev/null +++ b/src/wolnelektury/static/scss/main/header.scss @@ -0,0 +1,215 @@ +$header_bg: #191919; + + +#header-wrapper { + position: relative; + + /* Upper-half both sides dark background */ + &:before { + content: " "; + display: block; + z-index: -1; + position: absolute; + top: 0; + @include size(bottom, 45px); + left: 0; + width: 100%; + background-color: $header_bg; + } + + /* Left-side dark background */ + &:after { + content: " "; + display: block; + z-index: -1; + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 50%; + background-color: $header_bg; + } +} + + +header#main { + @include size(line-height, 20px); /* Make links easier to click when wrapped. */ + background-color: $header_bg; + color: #bbb; + + text-align:center; + + @media screen and (min-width: 62.5em) { + position: relative; + @include size(height, 94px); + @include size(width, 975px); + margin: auto; + } + + a { + color: #17CFDB; + } + + #logo { + display: block; + @include size(height, 94px); + + @media screen and (min-width: 24em) { + @include size(width, 173px); + float: left; + } + } + + #tagline { + margin-top: 0; + @include size(margin-left, 5px); + @include size(margin-right, 5px); + padding-top: 0; + @include size(font-size, 11px); + + @media screen and (min-width: 24em) { + @include size(padding-top, 6px); + @include size(font-size, 13px); + @include size(margin-left, 180px); + text-align: right; + } + + @media screen and (min-width: 62.5em) { + position: absolute; + @include size(top, 10px); + @include size(left, 255px); + @include size(margin-left, 0px); + } + } + + #user-info { + margin-top: 0; + @include size(margin-left, 5px); + @include size(margin-right, 5px); + padding-top: 0; + @include mono; + @include size(font-size, 10px); + position: relative; + + @media screen and (min-width: 24em) { + @include size(padding-top, 15px); + @include size(margin-left, 180px); + text-align: right; + } + @media screen and (min-width: 62.5em) { + position: absolute; + top: 0; + right: 0; + @include size(margin-left, 0); + @include size(margin-right, 0); + } + + /* We want submenu on far left on small screens. */ + .hidden-box-wrapper { + position: static; + @media screen and (min-width: 24em) { + position: relative; + } + } + + #user-menu { + display: none; + + text-align: left; + line-height:1.6em; + left: 0; + right: 0; + top: 2em; + + @media screen and (min-width: 15em) { + right: auto; + width: 15em; + } + + a { + color: #0D7E85; + } + } + } + + form#search-area { + position: relative; + clear: both; + @include size(height, 45px); + background: #444444; + color: white; + + @media screen and (min-width: 62.5em) { + position: absolute; + @include size(top, 49px); + @include size(left, 240px); + @include size(right, 0); + } + + #search-field { + position: absolute; + @include size(top, 5px); + @include size(left, 5px); + @include size(right, 113px); + + label { + @include hidden-label; + } + input#search { + z-index: 200; + position: relative; + @include size(height, 33px); + width: 100%; + padding: 0; + @include size(padding-left, 13px); + @include size(line-height, 32.5px); + + border: none; + @include size(border-radius, 5px); + @include box-shadow(0 0 6.5px #444444 inset); + + font-family: Georgia; + @include size(font-size, 13px); + background-color: white; + color: black; + + /* styling search placeholder */ + &::placeholder + { + font-family: Georgia; + font-style: italic; + color: #767676; + } + &::-webkit-input-placeholder + { + font-family: Georgia; + font-style: italic; + color: #767676; + } + &::-moz-placeholder + { + font-family: Georgia; + font-style: italic; + color: #767676; + } + } + } + button { + display: inline-block; + position: absolute; + top: 0; + right: 0; + @include size(height, 45px); + @include size(width, 94px); + margin: 0; + padding: 0; + + border: none; + + @include mono; + @include size(font-size, 11px); + background: #018189; + color: white; + } + } +} diff --git a/src/wolnelektury/static/scss/main/hidden.scss b/src/wolnelektury/static/scss/main/hidden.scss new file mode 100755 index 000000000..718525be0 --- /dev/null +++ b/src/wolnelektury/static/scss/main/hidden.scss @@ -0,0 +1,53 @@ +.hidden-box-wrapper { + position: relative; + + .hidden-box { + position: absolute; + left: 0; + display: none; + @include size(padding, 10px 10px 5px 10px); + @include white-box; + + z-index: 500; + + ul { + list-style: none; + padding: 0; + margin: 0; + @include size(font-size, 11px); + + @include size(column-width, 132px); + @include size(-moz-column-width, 132px); + @include size(-webkit-column-width, 132px); + + @media screen and (min-width: 24em) { + @include size(width, 320px); + } + + @media screen and (min-width: 34em) { + @include size(width, 480px); + } + + @media screen and (min-width: 62.5em) { + @include size(width, 528px); + } + + + + li { + margin-bottom: 1em; + + @media screen and (min-width: 62.5em) { + margin-bottom: .5em; + } + } + } + } +} + +@media screen and (min-width: 24em) { + #menu-collections ul { + @include size(width, 180px); + } +} + diff --git a/src/wolnelektury/static/scss/main/main_content.scss b/src/wolnelektury/static/scss/main/main_content.scss new file mode 100755 index 000000000..87e140232 --- /dev/null +++ b/src/wolnelektury/static/scss/main/main_content.scss @@ -0,0 +1,8 @@ +#main-content { + position: relative; + + @media screen and (min-width: 62.5em) { + @include size(width, 975px); + margin: auto; + } +} diff --git a/src/wolnelektury/static/scss/main/main_page.scss b/src/wolnelektury/static/scss/main/main_page.scss new file mode 100755 index 000000000..ddce4fc21 --- /dev/null +++ b/src/wolnelektury/static/scss/main/main_page.scss @@ -0,0 +1,256 @@ +#big-cite { + background-color: #444; + color: white; + padding: 0; + margin: 0; + background-size: 100%; + background-position: 50% 68%; + background-repeat: repeat-y; + + background-image: url(/static/img/backdrop/book-drawer2.jpg); + + @media screen and (min-width: 62.5em) { + background-image: url(/static/img/backdrop/book-drawer2.jpg); + } + + .cite { + @include size(padding, 46px 10px 48px 0); + background: none; + color: white; + + @media screen and (min-width: 30em) { + @include size(padding-right, 40px); + } + + .vip { + @include size(margin-left, 10px); + @include size(margin-top, 2.5px); + @include size(margin-bottom, 5px); + @include size(font-size, 11px); + + @media screen and (min-width: 16em) { + padding-left: 10%; + @include size(margin-left, -18px); + } + + @media screen and (min-width: 62.5em) { + float: left; + padding-left: 0; + @include size(margin-left, 16px); + text-align: right; + @include size(width, 147px); + } + } + + .cite-body { + @include size(margin, .5px); + @include size(font-size, 20px); + line-height: 1.16em; + + @media screen and (min-width: 30em) { + @include size(font-size, 30px); + } + } + + .source { + @include size(margin-top, 16px); + @include size(margin-bottom, 16px); + @include size(margin-right, 2px); + @include size(font-size, 12px); + } + + /* Make cite body and source slide to the left. */ + .cite-body, .source { + @include size(margin-left, 10px); + + @media screen and (min-width: 16em) { + padding-left: 21.9%; + @include size(margin-left, -38px); + } + + @media screen and (min-width: 62.5em) { + padding-left: 0; + @include size(margin-left, 175px); + } + } + + /* Semi-transparent background. */ + .cite-body span, + .vip span, + .source span { + color: white; + background-color: rgb(0, 0, 0); + background-color: rgba(0, 0, 0, 0.6); + /* For IE 5.5 - 7*/ + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); + /* For IE 8*/ + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; + } + } + + /* a long cite displays smaller */ + .cite-small .cite-body { + @include size(font-size, 16px); + @media screen and (min-width: 30em) { + @include size(font-size, 20px); + } + } + + h2 { + margin: 0; + @include size(font-size, 11px); + color: #575c63; + } +} + + +#promo-box { + @include size(margin-top, 16px); + + @media screen and (min-width: 33em) { + float: right; + @include size(margin-top, -51px); + @include size(width, 320px); + } + + h1 { + @include size(padding, 20px 5px 0 10px); + @include size(height, 31px); + margin: 0; + background: #191919; + color: white; + @include mono; + @include size(font-size, 13px); + font-weight: normal; + + @media screen and (min-width: 33em) { + @include size(padding-left, 25px); + @include size(padding-right, 25px); + } + } + + #promo-box-body { + @include size(padding, 20px 5px); + @include size(border-bottom, 2px solid #efefef); + background: #efefef; + + @media screen and (min-width: 33em) { + @include size(padding-left, 28px); + @include size(padding-right, 28px); + } + + @media screen and (min-width: 62.5em) { + @include size(height, 300px); + } + + a { + display: block; + color: #6c6c6c; + } + p { + margin-top: 0; + @include size(font-size, 12px); + line-height: 1.55em; + color: #6c6c6c; + } + h2, h3 { + color: #0d777e; + @include size(font-size, 11px); + @include size(height, 27.5px); + margin: 0; + @include mono; + font-weight: normal; + + &:after { + content: " >"; + } + } + } +} + + +#main-last { + h1 { + @include size(height, 32px); + margin: 0; + @include size(padding-top, 19px); + @include size(padding-left, 10px); + + @include size(font-size, 11px); + @include mono; + font-weight: normal; + + @media screen and (min-width: 33em) { + @include size(padding-left, 19px); + } + + a { + color: black; + + &:after { + content: " >"; + } + } + } + .book-mini-box:nth-child(3) { + @media screen and (min-width: 30em) { + margin-right: 3em; + } + @media screen and (min-width: 33em) { + margin-right: 0; + } + } +} + + +.infopages-box { + margin: 0; + @include size(margin-top, 5px); + @include size(padding, 0 5px); + vertical-align: top; + color: #989898; + + @media screen and (min-width: 20em) { + display: inline-block; + @include size(width, 206px); + @include size(padding-left, 17px); + @include size(padding-right, 17px); + } + + h1 { + @include size(height, 28px); + margin: 0; + @include size(padding-top, 25px); + @include size(font-size, 11px); + color: #017e85; + font-weight: normal; + @include mono; + } + + a { + color: black; + } + + ol, ul { + @include size(font-size, 11px); + list-style: none; + padding: 0; + margin: 0; + line-height: 1.45em; + + li { + @include size(margin-bottom, 8px); + @media screen and (min-width: 62.5em) { + @include size(margin-bottom, 2.5px); + } + } + } + + .social-links { + @include size(margin-top, 10px); + + a { + @include size(margin-right, 6px); + } + } +} diff --git a/src/wolnelektury/static/scss/main/menu.scss b/src/wolnelektury/static/scss/main/menu.scss new file mode 100755 index 000000000..846e4c88c --- /dev/null +++ b/src/wolnelektury/static/scss/main/menu.scss @@ -0,0 +1,177 @@ +#nav-line { + background-color: #e2e2e2; + position: relative; + + @media screen and (min-width: 62.5em) { + @include size(width, 975px); + margin: auto; + } + + #show-menu { + display: block; + float: left; + @include size(line-height, 13px); + @include size(padding, 18px 13px); + color: #0c7076; + @include size(font-size, 11px); + @include mono; + + .long { + display: none; + + &:after { + @include size(padding-left, 10px); + content: url("/static/img/arrow-gray.png"); + vertical-align: top; + } + } + + @media screen and (min-width: 20em) { + .long { display: inline; } + .short { display: none; } + } + + @media screen and (min-width: 53em) { + display: none; + } + } + + ul#menu { + list-style: none; + padding: 0; + margin: 0; + + display: none; + position: absolute; + @include size(top, 49px); + left: 0; + @include size(right, 10px); + z-index: 400; + + @media screen and (min-width: 24em) { + right: auto; + } + + @media screen and (min-width: 53em) { + display: block !important; + position: static; + @include size(margin-left, 6px); + } + + li.menu { + background-color: #e2e2e2; + + @media screen and (min-width: 53em) { + float: left; + } + + a.menu { + display: block; + @include size(line-height, 13px); + @include size(padding, 18px 12px 15px); + @include size(border-bottom, 3px solid #e2e2e2); + color: #0c7076; + @include size(font-size, 11px); + @include mono; + } + + a.hidden-box-trigger:hover { + border-bottom-color: white; + } + } + } + + #lang-menu { + display: block; + float: right; + + background: #f7f7f7; + @include mono; + + @media screen and (min-width: 15em) { + position: relative; + } + + #lang-button { + @include size(padding-left, 25px); + @include size(padding-right, 20px); + + display:block; + @include size(line-height, 17px); + @include size(padding-top, 16px); + @include size(padding-bottom, 16px); + + @include size(font-size, 10px); + color: #717171; + + .label { + display: none; + + @media screen and (min-width: 62.5em) { + display: inline; + } + + &:after { + @include size(padding-left, 10px); + content: url("/static/img/arrow-gray.png"); + vertical-align: top; + } + } + + .lang-flag { + @include size(font-size, 13px); + @include size(line-height, 15px); + } + } + + #lang-menu-items { + z-index: 9999; + + button { + @include mono; + display: none; + background: #f7f7f7; + color: #6f6f6f; + cursor: pointer; + width: 100%; + margin: 0; + @include size(padding, 10px 0); + + @media screen and (min-width: 62.5em) { + @include size(padding, 5px 0); + } + + border-width: 0; + @include size(border-bottom, 1px solid #ddd); + + @include size(font-size, 13px); + + &.active { + color: #000; + } + } + } + + &:hover, &.hover { + #lang-menu-items { + position: absolute; + padding: 0; + left: 0; + right: 0; + + @media screen and (min-width: 15em) { + left: auto; + @include size(width, 180px); + @include size(top, 49px); + } + @media screen and (min-width: 62.5em) { + width: 100%; + } + + button { + display: block; + } + } + } + } +} diff --git a/src/wolnelektury/static/scss/main/picture_box.scss b/src/wolnelektury/static/scss/main/picture_box.scss new file mode 100644 index 000000000..69d34a398 --- /dev/null +++ b/src/wolnelektury/static/scss/main/picture_box.scss @@ -0,0 +1,71 @@ +.picture { + &.book-wide-box { + .cover-area { + position: static; + @include size(margin-right, 15px); + @media screen and (min-width: 62.5em) { + margin-right: 0; + } + + img.cover { + @include size(width, 535px); + height: auto; + } + } + + .book-box-head, .tags, .book-box-tools { + margin-left: 0; + } + + + @media screen and (min-width: 62.5em) { + .book-box-head, .tags, .book-box-tools { + float: right; + @include size(width, 403px); + } + } + + .other-tools { + margin: 5em 0 0 0; + } + + .book-box-tools, .tags, #theme-list-wrapper { + clear: both; + margin-left: 0; + } + .book-box-body { + height: auto; + margin-bottom: 1em; + } + + @media screen and (min-width: 50em) { + .book-box-body { + height: auto; + @include size(min-height, 170px); + margin-bottom: 0; + } + .book-box-tools, .tags { + clear: right; + } + + #theme-list-wrapper { + clear: right; + @include size(margin-left, 550px); + } + } + } + + li.book-box-download { + width: 15em; + } +} + + +.work-list { + .Picture-item { + @include min-screen($S_BOOK_SHORT_FULL) { + display: inline-block; + } + vertical-align: top; + } +} diff --git a/src/wolnelektury/static/scss/main/search.scss b/src/wolnelektury/static/scss/main/search.scss new file mode 100755 index 000000000..d8a1e0622 --- /dev/null +++ b/src/wolnelektury/static/scss/main/search.scss @@ -0,0 +1,109 @@ +/* jquery UI overrides us */ +.ui-menu .ui-menu-item a { + color: #0d7e85 !important; + line-height: 1.636em !important; +} + +.ui-widget { + font-family: Georgia !important; + @include size(font-size, 10px !important); +} + +.ui-widget-content { + background: #EEEEEE !important; /* #E2E2E2 ? */ + border-radius: 0px !important; +} + + + +.inline-tag-lists p span:first-child { + color: #281d1c; +} + +/* just on search page */ +.top-tag-list { + @include size(margin-top, 22px); + @include size(margin-bottom, 16px); +} + + +.search-result { + @include size(border, 1px solid #ddd); + @include size(box-shadow, 2px 2px 2px #ddd); + @include size(margin, 1px); + background: white; + + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(width, $W_BOOK_SHORT_FULL -4px); + } + + @media screen and (min-width: 62.5em) { + @include size(width, 965px); + @include size(padding-right, 8px); + } + + .book-box { + display: inline-block; + + @include min-screen($S_BOOK_SHORT_FULL) { + @include size(width, $W_BOOK_SHORT_FULL - 4px); + } + + .book-box-inner { + border: none; + box-shadow: none; + margin: 0; + } + } +} + + + +.book-list-header { + @media screen and (min-width: 62.5em) { + @include size(width, 975px); + } + padding: 0em; + @include size(margin-left, -1px); + + .book-box-inner { + min-height: 1em; + } + + p { + @include size(font-size, 24px); + @include size(margin, 5px); + } +} + +.snippets { + @media screen and (min-width: 62.5em) { + @include size(width, 440px); + float: right; + } + + .snippet-text { + @include size(font-size, 12px); + @include size(margin, 13px 0); + @include size(padding, 12px); + background: #f7f7f7; + } + + .anchor { + display: none; + } +} + + +.search-hint-label { + display: inline-block; + @include size(font-size, 11px); + @include size(width, 275px); + line-height: 1.636em; +} + +.search-hint-category { + @include size(font-size, 11px); + line-height: 1.636em; +} + diff --git a/src/wolnelektury/static/scss/main/tag.scss b/src/wolnelektury/static/scss/main/tag.scss new file mode 100755 index 000000000..d120a3f97 --- /dev/null +++ b/src/wolnelektury/static/scss/main/tag.scss @@ -0,0 +1,102 @@ +.page-desc { + @include size(margin-left, 15px); +} + +#tagged-object-list { + @media screen and (min-width: 62.5em) { + .left-column, .right-column { + @include size(width, 480px); + } + } + + .see-also, .download { + float: left; + @include size(margin-top, 20px); + @include size(margin-bottom, 20px); + + h2 { + @include mono; + @include size(font-size, 11px); + margin: 0; + } + + ul { + @include size(font-size, 11px); + list-style: none; + padding: 0; + margin: 0; + } + } + + .see-also { + @include size(margin-left, 80px); + @include size(width, 143px); + } + .download { + @include size(margin-left, 20px); + } + + .left-column .see-also { + margin-left: 0; + } +} + +#description { + @include size(margin-bottom, 26px); + cursor: pointer; + + dl { + margin-top: 0; + } + dt { + display: inline; + font-weight: bold; + margin: 0; + } + dd { + display: inline; + margin: 0; + } + p { + margin-top: 0; + } + #description .meta { + list-style: none; + padding: 0; + margin: 0; + } + #description .meta li { + text-align: right; + color: #666; + @include size(font-size, 11.7px); + } +} + +.inline-tag-lists { + @include size(font-size, 11px); + + .inline-header { + @include mono; + display: inline-block; + vertical-align: top; + @include size(width, 77px); + } + + .inline-body { + display: inline-block; + vertical-align: top; + @include size(margin-bottom, 5.5px); + @include size(max-width, 385px); + + ul { + list-style: none; + padding: 0; + margin: 0; + + li { + display: inline-block; + @include size(margin-right, 11px); + } + } + } +} diff --git a/src/wolnelektury/static/scss/polls/polls.scss b/src/wolnelektury/static/scss/polls/polls.scss new file mode 100644 index 000000000..28cd5a5cf --- /dev/null +++ b/src/wolnelektury/static/scss/polls/polls.scss @@ -0,0 +1,21 @@ +.poll { + width: 400px; + ul { + list-style-type: none; + } +} + +.poll-bar { + border: solid 1px #ddd; + height:6px; + margin-bottom: 10px; +} + +.poll-bar-inner { + background: orange; + height: 6px; +} + +.poll-msg { + font-weight: bold; +} \ No newline at end of file diff --git a/src/wolnelektury/static/scss/social/shelf_tags.scss b/src/wolnelektury/static/scss/social/shelf_tags.scss new file mode 100644 index 000000000..f20fba8b6 --- /dev/null +++ b/src/wolnelektury/static/scss/social/shelf_tags.scss @@ -0,0 +1,40 @@ +.social-shelf-tags { + list-style: none; + padding: 0; + margin: 10px 0; + + @include min-screen($S_BOOK_SHORT_FULL) { + position: absolute; + top: 134px; + left: 152px; + padding: 10px 10px 5px 10px; + margin: 10px 0; + width: 310px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + &:hover { + overflow: visible; + text-overflow: ellipsis; + white-space: normal; + z-index: 1000; + background: #fff; + box-shadow: 0 0 2px #ddd; + } + } + + li { + display: inline-block; + margin-right: .5em; + margin-bottom: .5em; + + a { + display: block; + padding: .2em .9em; + background: #ABDADE; + color: #08646b; + border-radius: 1em; + } + } +} diff --git a/src/wolnelektury/static/scss/tools.scss b/src/wolnelektury/static/scss/tools.scss new file mode 100644 index 000000000..76869c40d --- /dev/null +++ b/src/wolnelektury/static/scss/tools.scss @@ -0,0 +1,70 @@ +$default-em-size: 16px; + +@mixin size($name, $args) { + $rems: snowflake; + @each $val in $args { + $remval: $val; + @if type-of($val) == number { + @if unit($val) == "px" { + $remval: $val / $default-em-size * 1rem; + } + } + // Workaround for PySCSS issue with appending to empty lists. + @if $rems == snowflake { + $rems: $remval; + } + @else { + $rems: append($rems, $remval); + } + } + #{$name}: $args; + #{$name}: $rems; +} + +@mixin min-screen($size) { + @if unit($size) == "px" { + $size: $size / $default-em-size * 1em; + } + + @media screen and (min-width: $size) { + @content; + } +} + + +@mixin vendors($name, $args) { + @include size(-moz + $name, $args); + @include size(-webkit + $name, $args); + @include size(-moz + $name, $args); +} + +@mixin vendors($names, $args) { + @each $name in $names { + @include size($name, $args); + } +} + +@mixin box-shadow($args) { + @include vendors( + -moz-box-shadow + -webkit-box-shadow + box-shadow, + $args); +} + +@mixin mono { + font-family: "Andale Mono", "Lucida Sans Typewriter", "Courier New"; +} + +@mixin hidden-label { + display: block; + @include size(width, 1px); + @include size(height, 1px); + overflow: hidden; +} + +@mixin white-box { + @include size(border, 1px solid #ddd); + background: #fff; + @include box-shadow(2px 2px 2px #ddd); +} diff --git a/src/wolnelektury/static/scss/widget.scss b/src/wolnelektury/static/scss/widget.scss new file mode 100644 index 000000000..7d78730ef --- /dev/null +++ b/src/wolnelektury/static/scss/widget.scss @@ -0,0 +1,150 @@ +html, body { + padding: 0; + margin: 0; + overflow: hidden; +} + + +#wl { + background-color: #191919; + position:relative; + + a, a:visited, a:hover { + display: block; + line-height: 5.94rem; + border: 0; + + img { + border: 0; + max-width: 100%; + margin: 0; + vertical-align: middle; + } + } + + #wl-form { + background: #444; + color: white; + height: 2.8125rem; + position: relative; + } + #wl-search { + position: absolute; + left: .3125rem; + right: 2.9rem; + right: 22%; + top: .3125rem; + } + + #id_qq { + font-family: Georgia; + font-size: 0.8125rem; + + background-color: #FFFFFF; + border: medium none; + border-radius: 0.3125rem; + box-shadow: 0 0 0.40625rem #444444 inset; + color: #000000; + height: 2.0625rem; + width: 100%; + + line-height: 2.03125rem; + padding: 0 0 0 .8125rem; + position: relative; + box-sizing: border-box; + z-index: 200; + + &::-moz-placeholder { + color: #767676; + font-family: Georgia; + font-style: italic; + } + } + + button { + background: #018189; + border: none; + color: white; + display: inline-block; + font-size: .6875rem; + position: absolute; + right: 0; + top: 0; + width: 2rem; + + width: 20%; + height: 2.8125rem; + margin: 0; + padding: 0; + + img { + max-width: 100%; + } + } + +} + +.ui-menu { + width: 100%; + font-size: 0.7rem; + list-style-type: none; + padding: 0; + margin: 0; + border-style: solid; + border-color: #ddd; + border-width: 1px 0; + + li { + clear: right; + + &:nth-child(odd) { + background-color: rgba(255,255,255,.95); + } + + &:nth-child(even){ + background-color: rgba(238,238,238,.95); + } + + &:hover{ + background-color: #053469; + color:white; + } + + .ui-state-hover { + background-color: #fdf5ce; + } + + .search-hint-label { + line-height: 1.636em; + display: inline-block; + max-width: 80%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .search-hint-category { + display: none; + @media screen and (min-width: 10em) { + display: block; + } + float: right; + font-size: .9em; + } + } + + a:hover { + text-decoration: none; + } +} + +.ui-corner-all { + cursor: pointer; + display:block; + + a { + text-decoration: none; + color: #0D7E85; + padding: 5px; + } +} diff --git a/src/wolnelektury/templates/404.html b/src/wolnelektury/templates/404.html new file mode 100644 index 000000000..f3846aac4 --- /dev/null +++ b/src/wolnelektury/templates/404.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} +{% load i18n %} + + +{% block titleextra %}404 - {% trans "Page does not exist" %}{% endblock %} + + +{% block body %} + +<h1>{% trans "Page not found" %}</h1> + + +<p class="normal-text"> +{% trans "We are sorry, but this page does not exist. Please check if you entered correct address or go to "%} <a href="/">{% trans "main page" %}</a>. +</p> + + + +{% endblock body %} diff --git a/src/wolnelektury/templates/500.html b/src/wolnelektury/templates/500.html new file mode 100644 index 000000000..df74fe42d --- /dev/null +++ b/src/wolnelektury/templates/500.html @@ -0,0 +1,24 @@ +{% load i18n %} +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <title>Wolne Lektury :: 500 - {% trans "Server error" %}</title> + </head> + <body style="background: #F7F7F7;font-family:Georgia;margin:0;padding:0;font-size:.625em;"> + <div style="height:9.4em;background:#191919;"> + <div style="max-width:97.5em;margin:auto;"> +<img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAK0AAABeCAAAAAB0wssoAAAACXZwQWcAAACtAAAAXgCUaM/jAAAACXBIWXMAAAsTAAALEwEAmpwYAAASJElEQVRo3u1beXBdV3n/fd859+lpt2xLlhRb3mQplm3JzuLIO0mA0ASSkkAJWcp0IARo6QJtJgMztCl0p7RpgNIwmUkhtMMQSGiAbHbsJI6Nd8my5d1OFMmyZMmydr137zlf/zj3vsWS7GSGkWAmTzOS5r377vud7/zOt/y+71EFfocejPfQvof2PbTvof1dRasv+yq5P/Lbj5bSaMdDnvSFaUJLoBQokkxglAVXQFOHdzK0RA5vBF0AQCjD6BRiFQjJ9KIlAhFSgMUhJklZPYsMUwZXT8ZZIiIQhRYUgUja2G4tAESmFK6ehLNEREwZaB3iDMNT9IKlKYM7iW2JiImJnQ1FABEJ4YZrcUa14ZMyrbwFMTOYGATHgxCsOHpQuAwSCzu9vCWCMy1zip/hI7K8Q2vFWgZgp8iL6cniAjGxVzjk4EoE11HBnUBA2BIZFsr0ydPDWyL1lx8/u6/l8FnJQOucbmhbXbeq/ZdiiWh6eQsiYnpL2lZ/BGN7X9s1lGauIy7F6q5rWM44stkKC02nT6Dw3LcGz+wpWLay8Ss4sfvp4VtqvpN0aMHLb90Ul4NPHvmbXYYtTXueQACoY6B+3+j+A0/Obmy85+LzS9f+sB8igrz191Umtm1tSUpt7GAU9qY7YySMHLv2KcOMvhe2/sO6LW9+cNaIALL2K9zx6KtjEGVrbRvR1Jl2YrQSArC7P1fSS2Am8+uPlbXaNV0iQpu6vnvQCkOE67uGnHuYIoc7Se0gAgjQomqJmFmpJr3yQsv7CjztzVj23CFWWjFTvOZMMnRw01zpiADS3nmD81fcc26Dt+2qeV7Mq889qJRWSjFXlu61016Xpb3r6NYbikDErIL91bPeHFuldfwDrf2eYmYmaqAWhOF4Gm3rPl9E7Lb8a0BEzLxPrUicuC5Pz619BVorRcRe49vdqYunmwkigrcP3OI55na/vdZrqijWN/S9qZkVM1FR9b5EKsbJ9KFNRa7gZ7UVRMSszPbq8k61sGD1jkBrzawWf/ax+MF0qjOdHkxIXF1wKvju7i2txMyHx9ZsHlswmt/EIMxas34OZE8r3KKmCvHE0UEoOjwXH1z3/q9c3PzGCA/vXLu3b/bytgHFCz+4gnB0y/YBfyqhAqAJ1WZiUkpprWPa87yr3n9jftPrZ4q/nCjYm3uoedmtFWh/fcf5wPd93w/8wARipwbxZdF62vO8mPa8nIb1K0ZfPntf8snO4nuq/Te2dgSmbOO1JY++6PtBYIwVO/229TzP82Kepz2l85YOtRHgfW7ur7aNmOL6xsWmqe3Z037gG2PETm9+6yovImYi8mrra+dx8kdHgeLyVw/VV9VUyJHvbB/0/SmNDZPrCUSAK9G969evio2ceb7vto3HLfrb3vc+9B95tnkwGWQUP9Os1YTVTNWqmvX53VsOdHL+h0uaBPCfWNl3ZiAwvhUrdmq97aS1gwu3lPtwTWLXlre0XrChUe3cLCUNb59dd9WpnXsGsorgbJnpN3emxt1vwlPmDpmnPa+gMMGxivVrynD8xfa7Dn+oHP+zb87qNbE9Lx72fT8Z+EFgjMn0X5PymN7lWmiC9evLFJHE5A9UbNo4D+aNbd08q6555s9Lbz/W8ZOnV930tXMvv9aG8Zad0L6U9a+8M6wTScR60vqciInqP7cQOLVjb0IpqR09N1a8paHxBQl2vFq+6fb7f/adUGZKFRtpXUGyYVIaqLyTcj6SOKO3yJXUZiIidcfCju1v9CnNRLE1hwa75j+/f+22hLV4+8kn7m6M+646zpBIJbtWigCnL5F3IvGl1M3oruE7+LIry615/c+ePi9ixdqKsn3+ibLY7oKl7njZbXPqIsIwEytmpVwqGcqT5KSp0Gln7NiVC08ip8Qxs0NOl8kYQ+2IFpTsNmKttVZobec5ORav6Dy7yXO+4OyRj+kQLjus7sGcejYNMXqZlcN7JawEZmalmJnThuZJdTAiotXJQ66GsLagfnuCzg81+PsWzBYRgMxzK8o59XB2VRwB5pR5lXJPa621UqyYrmzdECxzWFOFxuXJSENE8K47eTHcdqlH62e+zkev9lrMyvCqw6NrQwqEeIu11koppbTKsLVSSoXPhy9dAW5oWaW4KI+VYk71a/gygYyKq/b4ELFWRDU2DRbleftKqrrbV3sQgGik9aaYUhELtP7Uqw94nrOgyvytlFLK8zzP055WHMGdDHDIHCbOe/xfYqEuOxna8IARgebp1rBEi91QtdsC8TP9a4M9FeVuq7CnaoZSipXSSmul5+KmuMsy0yZWSrtcTmu94anrtKc9pZRyTAk3hbLAZxA9NruuWCliJ29P4MEICM8HmJaNdRIAWnTzRnXwtAjljjavLmj56MozBALLUVV9QRMZ9yZ6C3NmXHQOBC4m04LBXufkmImW16w9YqwhA6LMPhtlxRMiCh0MKSrKHSQYjnInfSnU9NpILesYRkHttY0ze378elLFLHLtsU0l7efuvK5p70mf5eK5VQd8EIkQEfNZKSgfEYnyHQD0QPFfBaHfYo4hz2PLRGSIbDp7k9ATp4zLyvFFW5XPBIFlQ5KNliICsFKsiLlwSfcXGuZgbOfW08QMWIpL70CQ/OmHF1fd7h89duxE66ocGMPWbUi/7y1qF4G11oYqeu+myi4g9Mhx5OYENuCA2Ri26YxCMmMGEbNipVmxCqhYG4iwOKlNZ4cEii5WSvFVhSULmn/Z2i7KuTyLXLQ9JGg+4C29ftWKFYAkZnexMqFth/zYkt0WYm0qlez2lvWFWT1zDuIxNhxwQMw2jVZSPy6lYnJ8J05SoaaAWSwJSNJowyYYpy/WbV/v6yBiUu5cAsh3ZiS/qYlKa2pqK2MVfcYqERAxozd/fo6FI4Lb6T6q24OonZWD3By2AQfEAYkNNYAUUJEMImjNinUSxQyxbNlm2TZMaV0MVay0Uto2R2fW/TYoIBbLIEtAT88byJvV5ilrLYRIEXqqZucGELHO6wkwZqpzJIy9HEM8RoaJOGATkUVSrc5Qdydm9/FMlKBiHYReI4u3kZdzPNCslVKKFKfyAGZBPovAMji0Q/KsIjHWCkCs1DkUFYwAeRuuLxlrfq5XBAkzuzBBIGbKX3E1Vj2hgaOPDKnA2HQDLmpzStgw4lR8SWKOB7GWLRERRGc4OVZROHdYWTETp/MWQZ42QiQikkquc0vPDYijgupCfkFAlQ+WAAU3L/u7YRHfFuYL6brunkVfKAyNkxvLCdhx2wGMDBvaVjErzVoR0wWUK2uYmNgi27bMipRmrd3FzJoR+W5mYgbyiCFsIeI6KZh/10LgxPfPO+JesDxruPizJTixd8YtZfNOCXisqCih7lnf/q1l8ZMls7p/4JvgrPXYGmvT2y8RHVIuQStWTDiPci9IZQqSwVsiRUoXmJA07H16w0vPWOay5TfO6D/1iyEQ4MXMjadPcmgE0OpPMIAln34sKQTmMatmdG6ciRdfMUU3a8QsaKR4zsWqRhi1eQvdPct2jRljNSkza8CPHIdOZvixkAlcVJPflEQPSnKTNmBiSyQUMiGsx5XO/6+ndmpn2pJGfeOWoWs+WQSgtLT6P4aYEFM5N1W9mbtuWXzHdkNU9XFGV8uiRdWzuwVE7FtdmFuPcztjCz8Ua+9RDBqmsrfu0LLFKCLA04oIxPb3P9b8zWStOiRXf/h61fzol/G3ybCuICJm7/aPE4Z+sO9CMLN4kDjsiAnpzIyWSReu3Kt07crd3bwkjt5k/QPc8YvYhmrMXvcyCJ6O8/yqe2YDd8S2Qf+elud22jWLLGkRMCWDWEG8EOVf9YCL/2tZBMNYcHEJ3jzmTrWn6Obqx8fIW4UVc9vvWvHPG9YBWFE5z+YL0PjFg98KQLEPtG76UNBWWviZrt7BGdXtGR2ujOhATOzl1MZQ+bX43CfUOsJe+gh3PjaMA8s/w0s3W4HHOVz4RQKATfuH8qtwZA8tvw2tgyxL7+15IkjkFRoLjHg9h3aPgAD0Y+Fclld8F6gU5d+SiCXEKwZf3dHW8DCAzuNbz0puboJy7vTqy3pAebfdj+NP9M/5amztT9tK3r/dn0BPIBCICXPyEx+No1RVroDfFCvD0SEAFwW+gUDBFxAGfn5LWW75ybhCz6a6Spx/zuKa+1R+0fnhksLR9mrZtss53PmlBzpQBtBtbf0EMtCUqwoLB+naWcDG104COPx4N5AzUFQ1pO9cAL2gn4Dema88Y1T/+asWy96Guquba9/sDQtUnZ0rynBFpd4IzJ55v4eDXd6Fyk1dO4JFf6jQ7DPAdsgCY493NZRR6ckRX28E0PJsPxr/gHGgQ1nkJ15aqO6oea03KQvXLcGMFqPgXyh/8D/7QQItF0aK795XvwzA/MUdyVj/Y/0gMmfmfaGlZClAZRqEriVGCPECwO65teIbQgf+xJ+w5h07c9XDhRooeXgGEj/3/Z99Xt19txDQ/rpPAjKJ0Rw8387DQKkdPrYScuCVLu/qhusI5348lkOI2xO/uJ2WLg2Pee+54SL5ycGHKv/ie28TQHpw8101NQD6SnjtD7vnbu0XAvBCY+FawDIK4g/MebQX1fn3LSfgRDD6r1+qpOBHQRhHdHarwTzdWAJ54ebYDMgP3gL2XPz8LBDQ+v1+cACbHB2Ykdgf0ChQZvxfVhfQNcsulBOAM9/rBQVQQfLFwU947p7Jp3agtXHfq/63H5r54COjFoj5zw+ure47tbn9ofmnRh6bv8uAmND+j7fO9Ha/9adackrZ9KJk8XICBl4OglN/3OAf7rJhkqTT2r2ItfbgX98Xf/bXbZ+Kdz+13wJy+M/r6mXw+HGA0H7NyPDIC5/ccd5SL1CqEl3f/qM5yKkAkPzJlkAQnF04OGxo6/71KwsSo8MtbwxDHn+2w+L4N+/tHfZ9kOfLyy9BROQh5ePkSXdchM58j5nqFAZGviHSL/nnT9Tg8H93BsYPXg/8VAqqI7FCRKwVw7v2KaVe2pw3HFo8uXdvpEH8uGWwl159jYjotOWC3D6cfmRF7eKqC6dP7uwRK8Az8V8NEWHsp09H7RMkBgCgqRmE80AwFnbiUhkXsyUSEQjXkXRbiAwaZf8pJzFmAuMHfhBYY7JtKyCxbA0IYq1hJJCRcoY5WmIXEROBmY53l1PRaQA7d0DE2lAdPf5IqpiWTEwueT4itjOZTg4AAljArtWCnAYMdhhAxqyK+QkTmMAEvnHauxWIZPgEEUsBHNhomCYLbVgDgYkp8e0vBafGIlTWukpMwjwZSKeBkGg6A3v+fvSE+1SEs0/EAMgSkSVaNxv7B6yIJACdtA6t0zCttdm8FVgCAhFrXOadDZeihD3UYQ7cT+TqQBFYiXIUZE4TXooWW8LrIxIQsQIsiVig7g4kXkpaiCSEtG8CYwITGBOEWCWdjQsJYAERy8xpAU6yVc2UlBVNZaYGhFLpKiEDbXrH09EzRQ5iVgKCm3RZ+XkP/9dmrYhNCHISNjAmMM6wYZ2R9mACwO2mcVrDBM3myLbhjGNqNhBRA+ISOTe1N4SMidMojSW2LIoMGSJTfucmYMezSRGxMirI9QMbGBsZNuok60xJ15KIJUtpGVvGKcBRCZ+ee84YxINkK88ZaDN1gxAtA4X3liXG/BkNlYA8/9SoO6zDidwgYY2xjrE2dCKZsSwsP4WyZF6MlxsQXUEZwn36RGXZNj1fTFkWBxGRCLDm3ujmw/++21qxVqwkt63ZlrQSYpWMgjij7xCdhaxPGy8+poaUMtBKtgMZJ8GnlpfyXa4I1GX/tgQApOXlXw+nHKEVC2utSfmatNZeMX6rMflwNWVfl9pZwQT6vUzYeQi9BJNi1kotmJ+bON+ZhFOknCltWDZbe8nswyU9ncypZZkU66VtkUlHWmXcbVMOAZyqv9iNm6YOVCjCWrGXNuj1BLeftCsgIaFJLtHasv+O3xnJEuaEIMRiycIAwkyIRIioEJZQPrHZt9LvruEmV/p3ktXKuFULYEEGwmIIcCHGwiIFF+MHYN4l2t9Uu1EAErHExo2YOts6aVKiOajxPWSNaXqIkCUISTrK2HSTWzChl5kutEICEguScJBexLEgdWQn8ojTZltHBpv6kkJI04xjLvjtQSskEErFasnK+eRdz35MBdx0h1Xe0cze9KGNvuOTYc4r+pppRHs5l/3biPZd++73vhf5HtrfRbT/D6/x2HiomBrxAAAAAElFTkSuQmCC'/> + </div> + </div> + + <div style="max-width:97.5em;margin:auto"> + <div style="font-size:1.4em;"> + <h1>{% trans "Server error" %}</h1> + +{% trans "<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our <a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the error.</p>" %} + + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/wolnelektury/templates/503.html b/src/wolnelektury/templates/503.html new file mode 100644 index 000000000..47689d122 --- /dev/null +++ b/src/wolnelektury/templates/503.html @@ -0,0 +1,24 @@ +{% load i18n %} +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <title>Wolne Lektury :: 503 - {% trans "Service unavailable" %}</title> + </head> + <body style="background: #F7F7F7;font-family:Georgia;margin:0;padding:0;font-size:.625em;"> + <div style="height:9.4em;background:#191919;"> + <div style="max-width:97.5em;margin:auto;"> +<img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAK0AAABeCAAAAAB0wssoAAAACXZwQWcAAACtAAAAXgCUaM/jAAAACXBIWXMAAAsTAAALEwEAmpwYAAASJElEQVRo3u1beXBdV3n/fd859+lpt2xLlhRb3mQplm3JzuLIO0mA0ASSkkAJWcp0IARo6QJtJgMztCl0p7RpgNIwmUkhtMMQSGiAbHbsJI6Nd8my5d1OFMmyZMmydr137zlf/zj3vsWS7GSGkWAmTzOS5r377vud7/zOt/y+71EFfocejPfQvof2PbTvof1dRasv+yq5P/Lbj5bSaMdDnvSFaUJLoBQokkxglAVXQFOHdzK0RA5vBF0AQCjD6BRiFQjJ9KIlAhFSgMUhJklZPYsMUwZXT8ZZIiIQhRYUgUja2G4tAESmFK6ehLNEREwZaB3iDMNT9IKlKYM7iW2JiImJnQ1FABEJ4YZrcUa14ZMyrbwFMTOYGATHgxCsOHpQuAwSCzu9vCWCMy1zip/hI7K8Q2vFWgZgp8iL6cniAjGxVzjk4EoE11HBnUBA2BIZFsr0ydPDWyL1lx8/u6/l8FnJQOucbmhbXbeq/ZdiiWh6eQsiYnpL2lZ/BGN7X9s1lGauIy7F6q5rWM44stkKC02nT6Dw3LcGz+wpWLay8Ss4sfvp4VtqvpN0aMHLb90Ul4NPHvmbXYYtTXueQACoY6B+3+j+A0/Obmy85+LzS9f+sB8igrz191Umtm1tSUpt7GAU9qY7YySMHLv2KcOMvhe2/sO6LW9+cNaIALL2K9zx6KtjEGVrbRvR1Jl2YrQSArC7P1fSS2Am8+uPlbXaNV0iQpu6vnvQCkOE67uGnHuYIoc7Se0gAgjQomqJmFmpJr3yQsv7CjztzVj23CFWWjFTvOZMMnRw01zpiADS3nmD81fcc26Dt+2qeV7Mq889qJRWSjFXlu61016Xpb3r6NYbikDErIL91bPeHFuldfwDrf2eYmYmaqAWhOF4Gm3rPl9E7Lb8a0BEzLxPrUicuC5Pz619BVorRcRe49vdqYunmwkigrcP3OI55na/vdZrqijWN/S9qZkVM1FR9b5EKsbJ9KFNRa7gZ7UVRMSszPbq8k61sGD1jkBrzawWf/ax+MF0qjOdHkxIXF1wKvju7i2txMyHx9ZsHlswmt/EIMxas34OZE8r3KKmCvHE0UEoOjwXH1z3/q9c3PzGCA/vXLu3b/bytgHFCz+4gnB0y/YBfyqhAqAJ1WZiUkpprWPa87yr3n9jftPrZ4q/nCjYm3uoedmtFWh/fcf5wPd93w/8wARipwbxZdF62vO8mPa8nIb1K0ZfPntf8snO4nuq/Te2dgSmbOO1JY++6PtBYIwVO/229TzP82Kepz2l85YOtRHgfW7ur7aNmOL6xsWmqe3Z037gG2PETm9+6yovImYi8mrra+dx8kdHgeLyVw/VV9VUyJHvbB/0/SmNDZPrCUSAK9G969evio2ceb7vto3HLfrb3vc+9B95tnkwGWQUP9Os1YTVTNWqmvX53VsOdHL+h0uaBPCfWNl3ZiAwvhUrdmq97aS1gwu3lPtwTWLXlre0XrChUe3cLCUNb59dd9WpnXsGsorgbJnpN3emxt1vwlPmDpmnPa+gMMGxivVrynD8xfa7Dn+oHP+zb87qNbE9Lx72fT8Z+EFgjMn0X5PymN7lWmiC9evLFJHE5A9UbNo4D+aNbd08q6555s9Lbz/W8ZOnV930tXMvv9aG8Zad0L6U9a+8M6wTScR60vqciInqP7cQOLVjb0IpqR09N1a8paHxBQl2vFq+6fb7f/adUGZKFRtpXUGyYVIaqLyTcj6SOKO3yJXUZiIidcfCju1v9CnNRLE1hwa75j+/f+22hLV4+8kn7m6M+646zpBIJbtWigCnL5F3IvGl1M3oruE7+LIry615/c+ePi9ixdqKsn3+ibLY7oKl7njZbXPqIsIwEytmpVwqGcqT5KSp0Gln7NiVC08ip8Qxs0NOl8kYQ+2IFpTsNmKttVZobec5ORav6Dy7yXO+4OyRj+kQLjus7sGcejYNMXqZlcN7JawEZmalmJnThuZJdTAiotXJQ66GsLagfnuCzg81+PsWzBYRgMxzK8o59XB2VRwB5pR5lXJPa621UqyYrmzdECxzWFOFxuXJSENE8K47eTHcdqlH62e+zkev9lrMyvCqw6NrQwqEeIu11koppbTKsLVSSoXPhy9dAW5oWaW4KI+VYk71a/gygYyKq/b4ELFWRDU2DRbleftKqrrbV3sQgGik9aaYUhELtP7Uqw94nrOgyvytlFLK8zzP055WHMGdDHDIHCbOe/xfYqEuOxna8IARgebp1rBEi91QtdsC8TP9a4M9FeVuq7CnaoZSipXSSmul5+KmuMsy0yZWSrtcTmu94anrtKc9pZRyTAk3hbLAZxA9NruuWCliJ29P4MEICM8HmJaNdRIAWnTzRnXwtAjljjavLmj56MozBALLUVV9QRMZ9yZ6C3NmXHQOBC4m04LBXufkmImW16w9YqwhA6LMPhtlxRMiCh0MKSrKHSQYjnInfSnU9NpILesYRkHttY0ze378elLFLHLtsU0l7efuvK5p70mf5eK5VQd8EIkQEfNZKSgfEYnyHQD0QPFfBaHfYo4hz2PLRGSIbDp7k9ATp4zLyvFFW5XPBIFlQ5KNliICsFKsiLlwSfcXGuZgbOfW08QMWIpL70CQ/OmHF1fd7h89duxE66ocGMPWbUi/7y1qF4G11oYqeu+myi4g9Mhx5OYENuCA2Ri26YxCMmMGEbNipVmxCqhYG4iwOKlNZ4cEii5WSvFVhSULmn/Z2i7KuTyLXLQ9JGg+4C29ftWKFYAkZnexMqFth/zYkt0WYm0qlez2lvWFWT1zDuIxNhxwQMw2jVZSPy6lYnJ8J05SoaaAWSwJSNJowyYYpy/WbV/v6yBiUu5cAsh3ZiS/qYlKa2pqK2MVfcYqERAxozd/fo6FI4Lb6T6q24OonZWD3By2AQfEAYkNNYAUUJEMImjNinUSxQyxbNlm2TZMaV0MVay0Uto2R2fW/TYoIBbLIEtAT88byJvV5ilrLYRIEXqqZucGELHO6wkwZqpzJIy9HEM8RoaJOGATkUVSrc5Qdydm9/FMlKBiHYReI4u3kZdzPNCslVKKFKfyAGZBPovAMji0Q/KsIjHWCkCs1DkUFYwAeRuuLxlrfq5XBAkzuzBBIGbKX3E1Vj2hgaOPDKnA2HQDLmpzStgw4lR8SWKOB7GWLRERRGc4OVZROHdYWTETp/MWQZ42QiQikkquc0vPDYijgupCfkFAlQ+WAAU3L/u7YRHfFuYL6brunkVfKAyNkxvLCdhx2wGMDBvaVjErzVoR0wWUK2uYmNgi27bMipRmrd3FzJoR+W5mYgbyiCFsIeI6KZh/10LgxPfPO+JesDxruPizJTixd8YtZfNOCXisqCih7lnf/q1l8ZMls7p/4JvgrPXYGmvT2y8RHVIuQStWTDiPci9IZQqSwVsiRUoXmJA07H16w0vPWOay5TfO6D/1iyEQ4MXMjadPcmgE0OpPMIAln34sKQTmMatmdG6ciRdfMUU3a8QsaKR4zsWqRhi1eQvdPct2jRljNSkza8CPHIdOZvixkAlcVJPflEQPSnKTNmBiSyQUMiGsx5XO/6+ndmpn2pJGfeOWoWs+WQSgtLT6P4aYEFM5N1W9mbtuWXzHdkNU9XFGV8uiRdWzuwVE7FtdmFuPcztjCz8Ua+9RDBqmsrfu0LLFKCLA04oIxPb3P9b8zWStOiRXf/h61fzol/G3ybCuICJm7/aPE4Z+sO9CMLN4kDjsiAnpzIyWSReu3Kt07crd3bwkjt5k/QPc8YvYhmrMXvcyCJ6O8/yqe2YDd8S2Qf+elud22jWLLGkRMCWDWEG8EOVf9YCL/2tZBMNYcHEJ3jzmTrWn6Obqx8fIW4UVc9vvWvHPG9YBWFE5z+YL0PjFg98KQLEPtG76UNBWWviZrt7BGdXtGR2ujOhATOzl1MZQ+bX43CfUOsJe+gh3PjaMA8s/w0s3W4HHOVz4RQKATfuH8qtwZA8tvw2tgyxL7+15IkjkFRoLjHg9h3aPgAD0Y+Fclld8F6gU5d+SiCXEKwZf3dHW8DCAzuNbz0puboJy7vTqy3pAebfdj+NP9M/5amztT9tK3r/dn0BPIBCICXPyEx+No1RVroDfFCvD0SEAFwW+gUDBFxAGfn5LWW75ybhCz6a6Spx/zuKa+1R+0fnhksLR9mrZtss53PmlBzpQBtBtbf0EMtCUqwoLB+naWcDG104COPx4N5AzUFQ1pO9cAL2gn4Dema88Y1T/+asWy96Guquba9/sDQtUnZ0rynBFpd4IzJ55v4eDXd6Fyk1dO4JFf6jQ7DPAdsgCY493NZRR6ckRX28E0PJsPxr/gHGgQ1nkJ15aqO6oea03KQvXLcGMFqPgXyh/8D/7QQItF0aK795XvwzA/MUdyVj/Y/0gMmfmfaGlZClAZRqEriVGCPECwO65teIbQgf+xJ+w5h07c9XDhRooeXgGEj/3/Z99Xt19txDQ/rpPAjKJ0Rw8387DQKkdPrYScuCVLu/qhusI5348lkOI2xO/uJ2WLg2Pee+54SL5ycGHKv/ie28TQHpw8101NQD6SnjtD7vnbu0XAvBCY+FawDIK4g/MebQX1fn3LSfgRDD6r1+qpOBHQRhHdHarwTzdWAJ54ebYDMgP3gL2XPz8LBDQ+v1+cACbHB2Ykdgf0ChQZvxfVhfQNcsulBOAM9/rBQVQQfLFwU947p7Jp3agtXHfq/63H5r54COjFoj5zw+ure47tbn9ofmnRh6bv8uAmND+j7fO9Ha/9adackrZ9KJk8XICBl4OglN/3OAf7rJhkqTT2r2ItfbgX98Xf/bXbZ+Kdz+13wJy+M/r6mXw+HGA0H7NyPDIC5/ccd5SL1CqEl3f/qM5yKkAkPzJlkAQnF04OGxo6/71KwsSo8MtbwxDHn+2w+L4N+/tHfZ9kOfLyy9BROQh5ePkSXdchM58j5nqFAZGviHSL/nnT9Tg8H93BsYPXg/8VAqqI7FCRKwVw7v2KaVe2pw3HFo8uXdvpEH8uGWwl159jYjotOWC3D6cfmRF7eKqC6dP7uwRK8Az8V8NEWHsp09H7RMkBgCgqRmE80AwFnbiUhkXsyUSEQjXkXRbiAwaZf8pJzFmAuMHfhBYY7JtKyCxbA0IYq1hJJCRcoY5WmIXEROBmY53l1PRaQA7d0DE2lAdPf5IqpiWTEwueT4itjOZTg4AAljArtWCnAYMdhhAxqyK+QkTmMAEvnHauxWIZPgEEUsBHNhomCYLbVgDgYkp8e0vBafGIlTWukpMwjwZSKeBkGg6A3v+fvSE+1SEs0/EAMgSkSVaNxv7B6yIJACdtA6t0zCttdm8FVgCAhFrXOadDZeihD3UYQ7cT+TqQBFYiXIUZE4TXooWW8LrIxIQsQIsiVig7g4kXkpaiCSEtG8CYwITGBOEWCWdjQsJYAERy8xpAU6yVc2UlBVNZaYGhFLpKiEDbXrH09EzRQ5iVgKCm3RZ+XkP/9dmrYhNCHISNjAmMM6wYZ2R9mACwO2mcVrDBM3myLbhjGNqNhBRA+ISOTe1N4SMidMojSW2LIoMGSJTfucmYMezSRGxMirI9QMbGBsZNuok60xJ15KIJUtpGVvGKcBRCZ+ee84YxINkK88ZaDN1gxAtA4X3liXG/BkNlYA8/9SoO6zDidwgYY2xjrE2dCKZsSwsP4WyZF6MlxsQXUEZwn36RGXZNj1fTFkWBxGRCLDm3ujmw/++21qxVqwkt63ZlrQSYpWMgjij7xCdhaxPGy8+poaUMtBKtgMZJ8GnlpfyXa4I1GX/tgQApOXlXw+nHKEVC2utSfmatNZeMX6rMflwNWVfl9pZwQT6vUzYeQi9BJNi1kotmJ+bON+ZhFOknCltWDZbe8nswyU9ncypZZkU66VtkUlHWmXcbVMOAZyqv9iNm6YOVCjCWrGXNuj1BLeftCsgIaFJLtHasv+O3xnJEuaEIMRiycIAwkyIRIioEJZQPrHZt9LvruEmV/p3ktXKuFULYEEGwmIIcCHGwiIFF+MHYN4l2t9Uu1EAErHExo2YOts6aVKiOajxPWSNaXqIkCUISTrK2HSTWzChl5kutEICEguScJBexLEgdWQn8ojTZltHBpv6kkJI04xjLvjtQSskEErFasnK+eRdz35MBdx0h1Xe0cze9KGNvuOTYc4r+pppRHs5l/3biPZd++73vhf5HtrfRbT/D6/x2HiomBrxAAAAAElFTkSuQmCC'/> + </div> + </div> + + <div style="max-width:97.5em;margin:auto"> + <div style="font-size:1.4em;"> + <h1>{% trans "Service unavailable" %}</h1> +<p> +{% trans "The Wolnelektury.pl site is currently unavailable due to maintainance." %} +</p> +</div> + </div> + </body> +</html> diff --git a/src/wolnelektury/templates/account/base.html b/src/wolnelektury/templates/account/base.html new file mode 100755 index 000000000..6bcdf12cf --- /dev/null +++ b/src/wolnelektury/templates/account/base.html @@ -0,0 +1,10 @@ +{% extends "site_base.html" %} + +{% block body %} +{% block content %} {% endblock %} +{% endblock %} + +{% block extrabody %} +{% block extra_body %} +{% endblock %} +{% endblock %} diff --git a/src/wolnelektury/templates/admin/base_site.html b/src/wolnelektury/templates/admin/base_site.html new file mode 100644 index 000000000..ff381b554 --- /dev/null +++ b/src/wolnelektury/templates/admin/base_site.html @@ -0,0 +1,22 @@ +{% extends "admin/base.html" %} +{% load i18n %} + +{% block title %}{{ title }} | {% trans "Site administration" %} - WolneLektury.pl{% endblock %} + +{% block branding %} +<h1 id="site-name">{% trans "Site administration" %} - WolneLektury.pl</h1> +<p style="font-size: 11px;margin-left:10px;"> + <!--a href="/rosetta/">{% trans "Translations" %}</a--> + <a href="/admin/chunks/chunk/promo/">promobox</a> | + <a href="/admin/social/cite">cytaty</a> | + <a href="/admin/infopages/infopage/">info</a> | + <a href="/admin/catalogue/book/">ksiÄ Å¼ki</a> | + <a href="/admin/catalogue/tag/">tagi</a> | + <a href="/admin/catalogue/collection/">kolekcje</a> | + <a href="/admin/pdcounter/">licznik domeny</a> | + <a href="/admin/sponsors/">sponsorzy</a> | + <a href="/admin/suggest/suggestion/">sugestie</a> +</p> +{% endblock %} + +{% block nav-global %}{% endblock %} \ No newline at end of file diff --git a/src/wolnelektury/templates/admin/catalogue/book/change_form.html b/src/wolnelektury/templates/admin/catalogue/book/change_form.html new file mode 100644 index 000000000..819ab62fc --- /dev/null +++ b/src/wolnelektury/templates/admin/catalogue/book/change_form.html @@ -0,0 +1,46 @@ +{% extends "admin/change_form.html" %} +{% load i18n %} + +{% block content_title %} + {% if change and 'advanced' in request.GET %} + <h1>{{ title }} — {% trans "advanced" %} </h1> + {% else %} + {{ block.super }} + {% endif %} +{% endblock %} + + +{# add an "Advanced" button to tools #} + +{% block extrastyle %} + {% if change and not is_popup %} + {{ block.super }} + <style> + .object-tools {margin-bottom:0; margin-top:0;} + .advancedlink {text-transform: capitalize;} + </style> + {% else %} + {{ block.super }} + {% endif %} +{% endblock %} + +{% block object-tools %} + {% if change and not is_popup %} + <div style='margin-bottom: -2em; margin-top: -2.4em; float:right; '> + {{ block.super }} + <ul class="object-tools"><li> + {% if 'advanced' in request.GET %} + <a href="." class="advancedlink">{% trans "simplified" %}</a> + {% else %} + <a href="?advanced" class="advancedlink">{% trans "advanced" %}</a> + {% endif %} + </li></ul> + </div> + {% else %} + {{ block.super }} + {% endif %} +{% endblock %} + + + + diff --git a/src/wolnelektury/templates/admin/catalogue/book/change_list.html b/src/wolnelektury/templates/admin/catalogue/book/change_list.html new file mode 100644 index 000000000..9f1b8cbf4 --- /dev/null +++ b/src/wolnelektury/templates/admin/catalogue/book/change_list.html @@ -0,0 +1,10 @@ +{% extends "admin/change_list.html" %} +{% load i18n %} + +{% block content %} + <form action="{% url 'import_book' %}" method="post" enctype="multipart/form-data"> + {% csrf_token %} + <p><input type="file" id="id_book_xml_file" name="book_xml_file" /> <input type="submit" value="{% trans "Import book" %}"/></p> + </form> + {{ block.super }} +{% endblock content %} diff --git a/src/wolnelektury/templates/annoy.html b/src/wolnelektury/templates/annoy.html new file mode 100755 index 000000000..890b62d91 --- /dev/null +++ b/src/wolnelektury/templates/annoy.html @@ -0,0 +1,18 @@ +{% load static %} +<a id='annoy-on' href="http://nowoczesnapolska.org.pl/pomoz-nam/wesprzyj-nas/">1%</a> +<div id='annoy'> + <a href="http://nowoczesnapolska.org.pl/pomoz-nam/wesprzyj-nas/"> + <img src='{% static "img/procent.png" %}' alt="Logo akcji 1%" style="float:left;margin: 0 2em" /></a> + <p>Droga użytkowniczko, drogi użytkowniku!</p> + <p>Czy wiesz, że biblioteka internetowa Wolne Lektury to jeden z projektów + <strong>fundacji Nowoczesna Polska</strong> â + organizacji pożytku publicznego dziaÅajÄ cej na rzecz wolnoÅci korzystania + z dóbr kultury? Wesprzyj nasze dziaÅania, przeznaczajÄ c na nie 1% swojego podatku. + Możesz to zrobiÄ, wpisujÄ c w zeznaniu podatkowym numer + <strong>KRS 0000070056</strong>.</p> + + <p><a href="http://nowoczesnapolska.org.pl/pomoz-nam/wesprzyj-nas/">Dowiedz siÄ wiÄcej</a></p> + + <a id='annoy-off'>x</a> + <div style="clear:both;"></div> +</div> diff --git a/src/wolnelektury/templates/auth/login.html b/src/wolnelektury/templates/auth/login.html new file mode 100644 index 000000000..756b8ad31 --- /dev/null +++ b/src/wolnelektury/templates/auth/login.html @@ -0,0 +1,26 @@ +{% load i18n %} +{% load ssi_csrf_token from ssify %} + +<h1>{{ title }}</h1> + +<form action="{{ request.get_full_path }}" method="post" accept-charset="utf-8" + class="cuteform{% if placeholdize %} hidelabels{% endif %}"> +{% ssi_csrf_token %} +<ol> + <div id="id_{% if form_prefix %}{{ form_prefix }}-{% endif %}__all__"></div> + {{ form.as_ul }} + <li><a href="{% url 'account_reset_password' %}">{% trans "Forgot Password?" %}</a></li> + <li><input type="submit" value="{{ submit }}"/></li> +</ol> +</form> + +<h1>{% trans "Sign in using:" %}</h1> + +<ul class="socialaccount_providers"> +{% include "socialaccount/snippets/provider_list.html" %} +</ul> + +{% include "socialaccount/snippets/login_extra.html" %} + +{% block extra %} +{% endblock %} diff --git a/src/wolnelektury/templates/auth/login_register.html b/src/wolnelektury/templates/auth/login_register.html new file mode 100755 index 000000000..80d3d232a --- /dev/null +++ b/src/wolnelektury/templates/auth/login_register.html @@ -0,0 +1,24 @@ +{% extends "auth/login.html" %} +{% load i18n %} +{% load honeypot %} +{% load ssi_csrf_token from ssify %} + +{% block extra %} + +{{ block.super }} + +<h1>{% trans "or register" %}:</h1> + +<form action="{% url 'register' %}" method="post" accept-charset="utf-8" + class="cuteform hidelabels"> +{% ssi_csrf_token %} +{% render_honeypot_field %} +<ol> + <div id="id_register-__all__"></div> + {{ register_form.as_ul }} + <li><input type="submit" value="{{ register_submit }}"/></li> +</ol> +</form> + + +{% endblock %} diff --git a/src/wolnelektury/templates/auth/register.html b/src/wolnelektury/templates/auth/register.html new file mode 100644 index 000000000..9d2c28363 --- /dev/null +++ b/src/wolnelektury/templates/auth/register.html @@ -0,0 +1,15 @@ +{% extends "ajaxable/form.html" %} +{% load i18n %} + + +{% block extra %} + +<h1>{% trans "Sign in using:" %}</h1> + +<ul class="socialaccount_providers"> +{% include "socialaccount/snippets/provider_list.html" %} +</ul> + +{% include "socialaccount/snippets/login_extra.html" %} + +{% endblock %} diff --git a/src/wolnelektury/templates/base.html b/src/wolnelektury/templates/base.html new file mode 100644 index 000000000..fac93191c --- /dev/null +++ b/src/wolnelektury/templates/base.html @@ -0,0 +1,4 @@ +{% extends "superbase.html" %} + + +{% block ogtitle %}{% block titleextra %}{% endblock %}{% endblock %} diff --git a/src/wolnelektury/templates/info/join_us.html b/src/wolnelektury/templates/info/join_us.html new file mode 100644 index 000000000..50479e120 --- /dev/null +++ b/src/wolnelektury/templates/info/join_us.html @@ -0,0 +1,22 @@ +{% load i18n %} +{% load reporting_stats %} + +{% count_books book_count %} +<p> +{% blocktrans count book_count as c %} +We have {{c}} work published in Wolne Lektury! +Help us expand the library and set new readings free by +<a href="http://nowoczesnapolska.org.pl/wesprzyj_nas/">making a donation +or transferring 1% of your income tax</a>. +{% plural %} +We have {{c}} works published in Wolne Lektury! +Help us expand the library and set new readings free by +<a href="http://nowoczesnapolska.org.pl/wesprzyj_nas/">making a donation +or transferring 1% of your income tax</a>. +{% endblocktrans %} +{% comment %}<a href='{}'>{% trans "More..." %}</a>{% endcomment %}</p> + +<p>{% blocktrans %}Become an editor of Wolne Lektury! Find out if +we're currently working on a reading you're looking for and prepare +a publication by yourself by logging into the Editorial Platform.{% endblocktrans %} +<a href='{% url "infopage" 'mozesz-nam-pomoc' %}'>{% trans "More..." %}</a></p> diff --git a/src/wolnelektury/templates/latest_blog_posts.html b/src/wolnelektury/templates/latest_blog_posts.html new file mode 100644 index 000000000..24d486ef1 --- /dev/null +++ b/src/wolnelektury/templates/latest_blog_posts.html @@ -0,0 +1,9 @@ +{% spaceless %} + +<ol> +{% for post in posts %} + <li><a href="{{ post.link }}">{{ post.title }}</a></li> +{% endfor %} +</ol> + +{% endspaceless %} \ No newline at end of file diff --git a/src/wolnelektury/templates/main_page.html b/src/wolnelektury/templates/main_page.html new file mode 100755 index 000000000..f1450cbd6 --- /dev/null +++ b/src/wolnelektury/templates/main_page.html @@ -0,0 +1,88 @@ +{% extends "base.html" %} +{% load static from staticfiles %} +{% load i18n catalogue_tags infopages_tags social_tags %} +{% load ssi_include from ssify %} + + +{% block title %}{% trans "Wolne Lektury internet library" %}{% endblock %} +{% block ogtitle %}{% trans "Wolne Lektury internet library" %}{% endblock %} + +{% block body %}{% spaceless %} + + {% choose_cite as cite_pk %} + {{ cite_pk.if }} + {% ssi_include 'social_cite_main' pk=cite_pk %} + {{ cite_pk.endif }} + + + + <section id="promo-box"> + <h1>{% trans "What's new?" %}</h1> + <div id="promo-box-body"> + {% ssi_include 'chunk' key='promo' %} + </div> + </section> + + + <section id="main-last"> + <h1><a href="{% url 'recent_list' %}">{% trans "Recent publications" %}</a></h1> + {% for book in last_published %} + {% ssi_include 'catalogue_book_mini' pk=book.pk %} + {% endfor %} + </section> + + <div class="clearboth"></div> + + <section class="infopages-box"> + <h1>{% trans "News" %}</h1> + {% ssi_include 'latest_blog_posts' %} + </section> + + + <section class="infopages-box"> + <h1>{% trans "Utilities" %}</h1> + + <ul> + <li><a href="{% url 'suggest' %}" id="suggest" class="ajaxable">{% trans "Report a bug or suggestion" %}</a></li> + <!--li><a href="http://turniej.wolnelektury.pl">Turniej ElektrybaÅtów</a></li--> + <li><a href="{% url 'reporting_catalogue_pdf' %}">{% trans "Download the catalogue in PDF format." %}</a></li> + <li><a href="{% url 'dictionary_notes' %}">{% trans "Footnotes" %}</a></li> + <li><a href="{% url 'suggest_publishing' %}" id="suggest-publishing" class="ajaxable">{% trans "Missing a book?" %}</a></li> + <li><a href="{% url 'publish_plan' %}">{% trans "Publishing plan" %}</a></li> + <li><a href="{% url 'api' %}">API</a></li> + <li><a href="{% url 'oaipmh' %}">OAI-PMH</a></li> + <li><a href="{% url 'lesmianator' %}" lang="pl">LeÅmianator</a></li> + <li><a href="http://polski.wolnelektury.pl" lang="pl">MateriaÅy do nauki j. polskiego</a></li> + + </ul> + </section> + + + <section class="infopages-box"> + <h1>{% trans "Information" %}</h1> + <ul> + <li><a href="https://nowoczesnapolska.org.pl/prywatnosc/">{% trans "Privacy policy" %}</a></li> + {% infopages_on_main %} + </ul> + + <div class="social-links"> + <a href="https://pl-pl.facebook.com/pages/Wolne-Lektury/203084073268" title='Wolne Lektury @ Facebook'> + <img src="{% static "img/social/f.png" %}" alt="Wolne Lektury @ Facebook" /> + </a> + <a href="https://nk.pl/profile/30441509" title='Wolne Lektury @ NK'> + <img src="{% static "img/social/nk.png" %}" alt="Wolne Lektury @ NK.pl" /> + </a> + </div> + </section> + + +{% endspaceless %}{% endblock %} + + +{% block add_footer %}{% spaceless %} +{{ cite_pk.if }} + <p>{% trans "Image used:" %} + {% ssi_include 'social_cite_info' pk=cite_pk %} + </p> +{{ cite_pk.endif }} +{% endspaceless %}{% endblock %} diff --git a/src/wolnelektury/templates/openid/login.html b/src/wolnelektury/templates/openid/login.html new file mode 100644 index 000000000..41eafa479 --- /dev/null +++ b/src/wolnelektury/templates/openid/login.html @@ -0,0 +1,33 @@ +{% extends "site_base.html" %} + +{% load i18n %} +{% load uni_form_tags %} + +{% block head_title %}{% trans "OpenID Sign In" %}{% endblock %} + +{% block body %} + +<h1>{% trans 'OpenID Sign In' %}</h1> +<div class="normal-text white-box"> + +<form id="openid_login_form" class="openid_login uniForm" method="post" action="{% url 'openid_login' %}"> +{% csrf_token %} +<fieldset class="inlineLabels"> + +{#{form|as_uni_form}#} +<div id="div_id_openid" class="ctrlHolder"> +<label for="id_openid" class="requiredField"> +OpenID<span class="asteriskField">*</span> +</label> +<input id="id_openid" type="text" class="textInput textinput" name="openid" /> +</div> + + +<div class="buttonHolder"> +<button type="submit">{% trans "Sign In" %}</button> +</div> +</fieldset> +</form> + +</div> +{% endblock %} diff --git a/src/wolnelektury/templates/pagination/pagination.html b/src/wolnelektury/templates/pagination/pagination.html new file mode 100644 index 000000000..432cf6954 --- /dev/null +++ b/src/wolnelektury/templates/pagination/pagination.html @@ -0,0 +1,26 @@ +{% load i18n %} +{% if is_paginated %} +<div class="pagination"> + {% if page_obj.has_previous %} + <a href="?page={{ page_obj.previous_page_number }}{{ getvars }}" class="prev">‹‹ {% trans "previous" %} </a> + {% else %} + <span class="disabled prev">‹‹ {% trans "previous" %} </span> + {% endif %} + {% for page in pages %} + {% if page %} + {% ifequal page page_obj.number %} + <span class="current page"> {{ page }} </span> + {% else %} + <a href="?page={{ page }}{{ getvars }}" class="page"> {{ page }} </a> + {% endifequal %} + {% else %} + ... + {% endif %} + {% endfor %} + {% if page_obj.has_next %} + <a href="?page={{ page_obj.next_page_number }}{{ getvars }}" class="next"> {% trans "next" %} ››</a> + {% else %} + <span class="disabled next"> {% trans "next" %} ››</span> + {% endif %} +</div> +{% endif %} diff --git a/src/wolnelektury/templates/piston/authorize_token.html b/src/wolnelektury/templates/piston/authorize_token.html new file mode 100755 index 000000000..87450a20c --- /dev/null +++ b/src/wolnelektury/templates/piston/authorize_token.html @@ -0,0 +1,18 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block titleextra %}{% trans "Authorize access to Wolne Lektury" %}{% endblock %} + +{% block body %} + <h1>{% trans "Authorize access to Wolne Lektury" %}</h1> + + <div class="normal-text"> + <p>{% blocktrans %}Confirm to authorize access to Wolne Lektury as user <strong>{{ user}}</strong>.{% endblocktrans %}</p> + + <form action="{% url 'piston.authentication.oauth_user_auth' %}" method="POST"> + {% csrf_token %} + {{ form.as_p }} + <button type="submit">Confirm</button> + </form> + </div> +{% endblock %} diff --git a/src/wolnelektury/templates/publish_plan.html b/src/wolnelektury/templates/publish_plan.html new file mode 100755 index 000000000..c4c3d6e6a --- /dev/null +++ b/src/wolnelektury/templates/publish_plan.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block titleextra %}{% trans "Publishing plan" %}{% endblock titleextra %} + + +{% block body %} +<h1>{% trans "Publishing plan" %}</h1> + +<ul class="normal-text"> +{% for elem in plan %} + <li><a href="{{ elem.link }}">{{ elem.title }}</a></li> +{% endfor %} +</ul> + +{% endblock %} diff --git a/src/wolnelektury/templates/site_base.html b/src/wolnelektury/templates/site_base.html new file mode 100644 index 000000000..b0c2ca524 --- /dev/null +++ b/src/wolnelektury/templates/site_base.html @@ -0,0 +1,5 @@ +{% extends "base.html" %} +{# This is for allauth templates. #} + +{% block bodyid %}auth-page{% endblock %} +{% block titleextra %}{% block head_title %}{% endblock %}{% endblock %} diff --git a/src/wolnelektury/templates/socialaccount/connections.html b/src/wolnelektury/templates/socialaccount/connections.html new file mode 100644 index 000000000..3df16a8c5 --- /dev/null +++ b/src/wolnelektury/templates/socialaccount/connections.html @@ -0,0 +1,57 @@ +{% extends "site_base.html" %} + +{% load i18n %} + +{% block head_title %}{% trans "Account Connections" %}{% endblock %} + +{% block body %} +<h1>{% trans "Account Connections" %}</h1> + +<div class="normal-text white-box"> +{% if form.accounts %} +<p>{% blocktrans %}You can sign in to your account using any of the following third party accounts:{% endblocktrans %}</p> + + +<form class="uniForm" method="post"> +{% csrf_token %} + +<fieldset class="blockLabels"> +{% if form.non_field_errors %} +<div id="errorMsg">{{form.non_field_errors}}</div> +{% endif %} + +{% for base_account in form.accounts %} +{% with base_account.get_provider_account as account %} +<div class="ctrlHolder"> +<label for="id_account_{{base_account.id}}"> +<input id="id_account_{{base_account.id}}" type="radio" name="account" value="{{base_account.id}}"/> +<span class="socialaccount_provider {{base_account.provider}} {{account.get_brand.id}}">{{account.get_brand.name}}</span> +<small>{{account}}</small> +</label> +</div> +{% endwith %} +{% endfor %} + +<div class="buttonHolder"> +<button type="submit">{% trans "Remove" %}</button> +</div> + +</fieldset> + +</form> + +{% else %} +<p>{% trans "You currently have no social network accounts connected to this account." %}</p> +{% endif %} + +<h2>{% trans 'Add a 3rd Party Account' %}</h2> + +<ul class="socialaccount_providers"> +{% include "socialaccount/snippets/provider_list.html" with process="connect" %} +</ul> + +{% include "socialaccount/snippets/login_extra.html" %} +</div> +{% endblock %} + + diff --git a/src/wolnelektury/templates/socialaccount/login_cancelled.html b/src/wolnelektury/templates/socialaccount/login_cancelled.html new file mode 100644 index 000000000..7e29b65c7 --- /dev/null +++ b/src/wolnelektury/templates/socialaccount/login_cancelled.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} + +{% load i18n %} + +{% block head_title %}{% trans "Login Cancelled" %}{% endblock %} + +{% block body %} + +<h1>{% trans "Login Cancelled" %}</h1> + +<div class="normal-text white-box"> +{% url 'socialaccount_login' as login_url %} +{{ login_url }} + +<p>{% blocktrans %}You decided to cancel logging in to our site using one of your exisiting accounts. If this was a mistake, please proceed to <a href="{{login_url}}">sign in</a>.{% endblocktrans %}</p> +</div> + +{% endblock %} + diff --git a/src/wolnelektury/templates/socialaccount/snippets/login_extra.html b/src/wolnelektury/templates/socialaccount/snippets/login_extra.html new file mode 100644 index 000000000..ae067926b --- /dev/null +++ b/src/wolnelektury/templates/socialaccount/snippets/login_extra.html @@ -0,0 +1 @@ +{# This file intentionally left empty to disable loading FB JS. #} diff --git a/src/wolnelektury/templates/socialaccount/snippets/provider_list.html b/src/wolnelektury/templates/socialaccount/snippets/provider_list.html new file mode 100644 index 000000000..80f9c2f2d --- /dev/null +++ b/src/wolnelektury/templates/socialaccount/snippets/provider_list.html @@ -0,0 +1,22 @@ +{% load socialaccount %} +{% load static from staticfiles %} + +{% for provider in socialaccount.providers %} + {% if provider.id == "openid" %} + {% for brand in provider.get_brands %} + <li> + <a title="{{brand.name}}" + class="socialaccount_provider {{provider.id}} {{brand.id}}" + href="{% provider_login_url provider.id openid=brand.openid_url %}" + ><img alt="{{ brand.name }}" + src="{% static 'img/auth/'|add:brand.id|add:'.png' %}" /></a> + </li> + {% endfor %} + {% endif %} + <li> + <a title="{{provider.name}}" class="socialaccount_provider {{provider.id}}" + href="{% provider_login_url provider.id %}" + ><img alt="{{ provider.name }}" + src="{% static 'img/auth/'|add:provider.id|add:'.png' %}" /></a> + </li> +{% endfor %} diff --git a/src/wolnelektury/templates/superbase.html b/src/wolnelektury/templates/superbase.html new file mode 100644 index 000000000..08d60a32a --- /dev/null +++ b/src/wolnelektury/templates/superbase.html @@ -0,0 +1,153 @@ +<!DOCTYPE html> +{% spaceless %} +<html lang="{{ LANGUAGE_CODE }}" prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#"> + {% load pipeline i18n %} + {% load static from staticfiles %} + {% load catalogue_tags funding_tags reporting_stats %} + {% load piwik_tags %} + {% load ssi_include ssi_csrf_token from ssify %} + {% load user_username user_is_staff from common_tags %} + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="application-name" content="Wolne Lektury" /> + <meta property="og:site_name" content="Wolne Lektury" /> + <meta property="og:title" content="{% block ogtitle %}{% endblock %}" /> + <meta property="og:type" content="{% block ogtype %}website{% endblock %}" /> + <meta property="og:image" content="{% block ogimage %}{{ FULL_STATIC_URL }}img/wiatrak.png{% endblock %}" /> + <meta name="description" content="{% block metadescription %}Darmowe, opracowane, peÅne teksty lektur, e-booki, audiobooki i pliki DAISY na wolnej licencji.{% endblock %}" /> + {% block ogextra %}{% endblock %} + + <title>{% block title %}{% trans "Wolne Lektury" %} :: {% block titleextra %}{% endblock %}{% endblock %}</title> + <link rel="icon" href="{% static 'img/favicon.png' %}" type="image/png" /> + <link rel="search" type="application/opensearchdescription+xml" title="Wolne Lektury" href="{% static 'opensearch.xml' %}" /> + {% stylesheet "main" %} + {% block extrahead %} + {% endblock %} + </head> + <body id="{% block bodyid %}base{% endblock %}"> + + {% block bodycontent %} + + {% if not funding_no_show_current %} + {% current_offer as current_offer %} + {{ current_offer.if }} + {% ssi_include 'funding_top_bar' pk=current_offer %} + {{ current_offer.endif }} + {% endif %} + + <div id="header-wrapper"> + <header id="main"> + <a href="/" id="logo"> + <img src="{% static 'img/logo-neon.png' %}" alt="Wolne Lektury" /> + </a> + + <p id="user-info"> + {% user_username as user_username %} + {% user_is_staff as user_is_staff %} + {{ user_username.if }}{% trans "Welcome" %}, <span class="hidden-box-wrapper"> + <a href="{% url 'user_settings' %}" class="hidden-box-trigger"> + <strong>{{ user_username }}</strong> + </a> + <span id="user-menu" class="hidden-box"> + <a href="{% url 'account_set_password' %}">{% trans "Password" %}</a><br/> + <a href="{% url 'account_email' %}">{% trans "E-mail" %}</a><br/> + <a href="{% url 'socialaccount_connections' %}">{% trans "Social accounts" %}</a><br/> + </span> + </span> | <a href="{% url 'social_my_shelf' %}" id="user-shelves-link">{% trans "My shelf" %}</a> + {{ user_username.endif }} + {{ user_is_staff.if }} | <a href="/admin/">{% trans "Administration" %}</a> + {{ user_is_staff.endif }} + {{ user_username.if }} | <a href="{% url 'logout' %}?next={% block logout %}{{ request.get_full_path }}{% endblock %}">{% trans "Logout" %}</a> + {{ user_username.else }} + <a href="{% url 'login' %}?next={{ request.path }}" id="login" class="ajaxable">{% trans "Sign in" %}</a> / <a href="{% url 'register' %}?next={{ request.path }}" id="register" class="ajaxable">{% trans "Register" %}</a> + {{ user_username.endif }} + </p> + + <p id="tagline"> + {% url 'book_list' as b %} + {% url 'infopage' 'prawa' as r %} + {% count_books book_count %} + {% blocktrans count book_count as c %} + <a href='{{b}}'>{{c}}</a> free reading you have <a href='{{r}}'>right to</a> + {% plural %} + <a href='{{b}}'>{{c}}</a> free readings you have <a href='{{r}}'>right to</a> + {% endblocktrans %} + </p> + + <form id="search-area" action="{% url 'search' %}"> + <div id="search-field"> + <label for="search">{{search_form.q.label}}</label> + {{search_form.q}} + </div><button type='submit'>{% trans "Search" %}</button> + </form> + + </header> + </div> + + + <nav id="nav-line"> + {% catalogue_menu %} + + <div id="lang-menu" class="hoverget"> + <span id='lang-button' class='hoverclick'> + <span class="lang-flag">â</span> + <span class="label"> {% trans "Language versions" %}</span> + </span> + <div id="lang-menu-items"> + {% for lang in LANGUAGES %} + <form action="{% url 'django.views.i18n.set_language' %}" method="post"> + {% ssi_csrf_token %} + <input type="hidden" name="language" value="{{ lang.0 }}" /> + <button type="submit" lang="{{ lang.0 }}" class="{% ifequal lang.0 LANGUAGE_CODE %}active{% endifequal %}">{{ lang.1 }}</button> + </form> + {% endfor %} + </div> + </div> + + <div class="clearboth"></div> + </nav> + + + <div id="main-content"> + {% block body %} + {% endblock %} + <div class="clearboth"></div> + </div> + + + <div id="footer-wrapper"> + <footer id="main"> + {% ssi_include 'chunk' key='footer' %} + {% block add_footer %}{% endblock %} + {% ssi_include 'sponsor_page' name='footer' %} + </footer> + </div> + + + + {# template #} + <div id="ajaxable-window" class='dialog-window'> + <div class="header"><a href="#" class="jqmClose">{% trans "Close" %}</a></div> + <div class="target"> + <p><img src="{% static "img/indicator.gif" %}" alt="*"/> {% trans "Loading" %}</p> + </div> + </div> + + + {% endblock bodycontent %} + + + <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> + <script type="text/javascript">var LANGUAGE_CODE="{{ LANGUAGE_CODE }}"; var STATIC_URL="{{ STATIC_URL }}";</script> + {% javascript "base" %} + + {% tracking_code %} + + {% block extrabody %} + {% endblock %} + + <script src="{% static "js/contrib/modernizr.custom.19652.js" %}"></script> + </body> +</html> +{% endspaceless %} diff --git a/src/wolnelektury/templates/user.html b/src/wolnelektury/templates/user.html new file mode 100644 index 000000000..0ffdd62a9 --- /dev/null +++ b/src/wolnelektury/templates/user.html @@ -0,0 +1,17 @@ +{% extends "base.html" %} +{% load i18n %} + + +{% block titleextra %}{% trans "User" %}{% endblock %} + +{% block body %} + +<h1>{% trans "User" %}</h1> + +<div class='normal-text'> +<p><a href="{% url 'account_set_password' %}">{% trans "Password" %}</a></p> +<p><a href="{% url 'account_email' %}">{% trans "E-mail" %}</a></p> +<p><a href="{% url 'socialaccount_connections' %}">{% trans "Social accounts" %}</a></p> +</div> + +{% endblock %} diff --git a/src/wolnelektury/templates/widget.html b/src/wolnelektury/templates/widget.html new file mode 100644 index 000000000..444f466ab --- /dev/null +++ b/src/wolnelektury/templates/widget.html @@ -0,0 +1,37 @@ +{% spaceless %} + +{% load static from staticfiles %} +{% load pipeline %} + +<!DOCTYPE html> +<html> +<head> + <meta charset="UTF-8"> + <base target="_parent" /> + <title>Widget Wolnych Lektur</title> + {% stylesheet 'widget' %} +</head> +<body> +<div id="wl"> + +<a href="/"> + <img src="{% static 'img/logo-neon.png' %}"> +</a> + +<form action="{% url 'search' %}" method="get" accept-charset="utf-8" id="wl-form"> + <div id="wl-search"> + <input data-source="{% url 'search_hint' %}?max=3" id="id_qq" name="q" title="tytuÅ, autor, motyw/temat, epoka, rodzaj, gatunek, cytat" placeholder="tytuÅ, autor, motyw/temat, epoka, rodzaj, gatunek, cytat" type="text" value=""> + </div> + <button> + <img alt="Szukaj" src="{% static 'img/search.png' %}"> + </button> +</form> + +</div> + +{% javascript 'widget' %} + +</body> +</html> + +{% endspaceless %} diff --git a/src/wolnelektury/templatetags/__init__.py b/src/wolnelektury/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/wolnelektury/templatetags/common_tags.py b/src/wolnelektury/templatetags/common_tags.py new file mode 100644 index 000000000..ab08a3ee6 --- /dev/null +++ b/src/wolnelektury/templatetags/common_tags.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django import template +from ssify import ssi_variable +from ssify.utils import ssi_vary_on_cookie + +register = template.Library() + + +@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) +def user_username(request): + return request.user.username + + +@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) +def user_is_staff(request): + return request.user.is_staff diff --git a/src/wolnelektury/templatetags/switch_tag.py b/src/wolnelektury/templatetags/switch_tag.py new file mode 100644 index 000000000..72476bef0 --- /dev/null +++ b/src/wolnelektury/templatetags/switch_tag.py @@ -0,0 +1,135 @@ +# Source: http://djangosnippets.org/snippets/967/ +# Author: adurdin +# Posted: August 13, 2008 +# +# +# We can use it based on djangosnippets Terms of Service: +# (http://djangosnippets.org/about/tos/) +# +# 2. That you grant any third party who sees the code you post +# a royalty-free, non-exclusive license to copy and distribute that code +# and to make and distribute derivative works based on that code. You may +# include license terms in snippets you post, if you wish to use +# a particular license (such as the BSD license or GNU GPL), but that +# license must permit royalty-free copying, distribution and modification +# of the code to which it is applied. + +from django import template +from django.template import Library, Node, VariableDoesNotExist + +register = Library() + + +@register.tag(name="switch") +def do_switch(parser, token): + """ + The ``{% switch %}`` tag compares a variable against one or more values in + ``{% case %}`` tags, and outputs the contents of the matching block. An + optional ``{% else %}`` tag sets off the default output if no matches + could be found:: + + {% switch result_count %} + {% case 0 %} + There are no search results. + {% case 1 %} + There is one search result. + {% else %} + Jackpot! Your search found {{ result_count }} results. + {% endswitch %} + + Each ``{% case %}`` tag can take multiple values to compare the variable + against:: + + {% switch username %} + {% case "Jim" "Bob" "Joe" %} + Me old mate {{ username }}! How ya doin? + {% else %} + Hello {{ username }} + {% endswitch %} + """ + bits = token.contents.split() + tag_name = bits[0] + if len(bits) != 2: + raise template.TemplateSyntaxError("'%s' tag requires one argument" % tag_name) + variable = parser.compile_filter(bits[1]) + + class BlockTagList(object): + # This is a bit of a hack, as it embeds knowledge of the behaviour + # of Parser.parse() relating to the "parse_until" argument. + def __init__(self, *names): + self.names = set(names) + def __contains__(self, token_contents): + name = token_contents.split()[0] + return name in self.names + + # Skip over everything before the first {% case %} tag + parser.parse(BlockTagList('case', 'endswitch')) + + cases = [] + token = parser.next_token() + got_case = False + got_else = False + while token.contents != 'endswitch': + nodelist = parser.parse(BlockTagList('case', 'else', 'endswitch')) + + if got_else: + raise template.TemplateSyntaxError("'else' must be last tag in '%s'." % tag_name) + + contents = token.contents.split() + token_name, token_args = contents[0], contents[1:] + + if token_name == 'case': + tests = map(parser.compile_filter, token_args) + case = (tests, nodelist) + got_case = True + else: + # The {% else %} tag + case = (None, nodelist) + got_else = True + cases.append(case) + token = parser.next_token() + + if not got_case: + raise template.TemplateSyntaxError("'%s' must have at least one 'case'." % tag_name) + + return SwitchNode(variable, cases) + +class SwitchNode(Node): + def __init__(self, variable, cases): + self.variable = variable + self.cases = cases + + def __repr__(self): + return "<Switch node>" + + def __iter__(self): + for tests, nodelist in self.cases: + for node in nodelist: + yield node + + def get_nodes_by_type(self, nodetype): + nodes = [] + if isinstance(self, nodetype): + nodes.append(self) + for tests, nodelist in self.cases: + nodes.extend(nodelist.get_nodes_by_type(nodetype)) + return nodes + + def render(self, context): + try: + value_missing = False + value = self.variable.resolve(context, True) + except VariableDoesNotExist: + no_value = True + value_missing = None + + for tests, nodelist in self.cases: + if tests is None: + return nodelist.render(context) + elif not value_missing: + for test in tests: + test_value = test.resolve(context, True) + if value == test_value: + return nodelist.render(context) + else: + return "" diff --git a/src/wolnelektury/urls.py b/src/wolnelektury/urls.py new file mode 100644 index 000000000..58e45ddb2 --- /dev/null +++ b/src/wolnelektury/urls.py @@ -0,0 +1,84 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.conf.urls import include, patterns, url +from django.conf import settings +from django.contrib import admin +from django.views.generic import RedirectView +import wolnelektury.views + + +urlpatterns = patterns('wolnelektury.views', + url(r'^$', 'main_page', name='main_page'), + url(r'^planowane/$', 'publish_plan', name='publish_plan'), + url(r'^widget\.html$', 'widget', name='widget'), + + url(r'^zegar/$', 'clock', name='clock'), + + # Authentication + url(r'^uzytkownik/$', 'user_settings', name='user_settings'), + url(r'^uzytkownik/login/$', wolnelektury.views.LoginFormView(), name='login'), + url(r'^uzytkownik/signup/$', wolnelektury.views.RegisterFormView(), name='register'), + url(r'^uzytkownik/logout/$', 'logout_then_redirect', name='logout'), + url(r'^uzytkownik/zaloguj-utworz/$', wolnelektury.views.LoginRegisterFormView(), name='login_register'), + + # Includes. + url(r'^latests_blog_posts.html$', + wolnelektury.views.latest_blog_posts, + name='latest_blog_posts'), +) + +urlpatterns += patterns('', + url(r'^katalog/', include('catalogue.urls')), + url(r'^opds/', include('opds.urls')), + url(r'^sugestia/', include('suggest.urls')), + url(r'^lesmianator/', include('lesmianator.urls')), + url(r'^przypisy/', include('dictionary.urls')), + url(r'^raporty/', include('reporting.urls')), + url(r'^info/', include('infopages.urls')), + url(r'^ludzie/', include('social.urls')), + url(r'^uzytkownik/', include('allauth.urls')), + url(r'^czekaj/', include('waiter.urls')), + url(r'^wesprzyj/', include('funding.urls')), + url(r'^ankieta/', include('polls.urls')), + url(r'^biblioteki/', include('libraries.urls')), + url(r'^chunks/', include('chunks.urls')), + url(r'^sponsors/', include('sponsors.urls')), + + # Admin panel + url(r'^admin/catalogue/book/import$', 'catalogue.views.import_book', name='import_book'), + url(r'^admin/catalogue/picture/import$', 'picture.views.import_picture', name='import_picture'), + url(r'^admin/doc/', include('django.contrib.admindocs.urls')), + url(r'^admin/', include(admin.site.urls)), + + # API + (r'^api/', include('api.urls')), + # OAIPMH + (r'^oaipmh/', include('oai.urls')), + + url(r'^szukaj/', include('search.urls')), + + # Static files + url(r'^%s(?P<path>.*)$' % settings.MEDIA_URL[1:], 'django.views.static.serve', + {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}), + url(r'^%s(?P<path>.*)$' % settings.STATIC_URL[1:], 'django.views.static.serve', + {'document_root': settings.STATIC_ROOT, 'show_indexes': True}), + url(r'^i18n/', include('django.conf.urls.i18n')), +) + +urlpatterns += patterns('', + # old static pages - redirected + url(r'^1procent/$', RedirectView.as_view( + url='http://nowoczesnapolska.org.pl/wesprzyj_nas/', permanent=True)), + url(r'^epub/$', RedirectView.as_view( + url='/katalog/lektury/', permanent=False)), + url(r'^mozesz-nam-pomoc/$', RedirectView.as_view( + url='/info/mozesz-nam-pomoc', permanent=True)), + url(r'^o-projekcie/$', RedirectView.as_view( + url='/info/o-projekcie', permanent=True)), + url(r'^widget/$', RedirectView.as_view( + url='/info/widget', permanent=True)), + url(r'^wolontariat/$', RedirectView.as_view( + url='/info/mozesz-nam-pomoc/', permanent=False)), +) diff --git a/src/wolnelektury/utils.py b/src/wolnelektury/utils.py new file mode 100644 index 000000000..0c256e5df --- /dev/null +++ b/src/wolnelektury/utils.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +import pytz +from django.utils import timezone +from django.conf import settings + +tz = pytz.timezone(settings.TIME_ZONE) + +def localtime_to_utc(localtime): + return timezone.utc.normalize( + tz.localize(localtime) + ) + +def utc_for_js(dt): + return dt.strftime('%Y/%m/%d %H:%M:%S UTC') diff --git a/src/wolnelektury/views.py b/src/wolnelektury/views.py new file mode 100644 index 000000000..51371735a --- /dev/null +++ b/src/wolnelektury/views.py @@ -0,0 +1,152 @@ +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from datetime import date, datetime +import feedparser + +from django.conf import settings +from django.contrib import auth +from django.contrib.auth.decorators import login_required +from django.contrib.auth.forms import UserCreationForm, AuthenticationForm +from django.core.cache import cache +from django.http import HttpResponse, HttpResponseRedirect +from django.shortcuts import render +from django.utils.http import urlquote_plus +from django.utils.translation import ugettext_lazy as _ +from django.views.decorators.cache import never_cache + +from ajaxable.utils import AjaxableFormView +from ajaxable.utils import placeholdized +from catalogue.models import Book +from ssify import ssi_included + + +def main_page(request): + last_published = Book.objects.exclude(cover_thumb='').filter(parent=None).order_by('-created_at')[:4] + + return render(request, "main_page.html", { + 'last_published': last_published, + }) + + +class LoginFormView(AjaxableFormView): + form_class = AuthenticationForm + template = "auth/login.html" + placeholdize = True + title = _('Sign in') + submit = _('Sign in') + ajax_redirect = True + + def __call__(self, request): + if request.user.is_authenticated(): + 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): + auth.login(request, form.get_user()) + + +class RegisterFormView(AjaxableFormView): + form_class = UserCreationForm + template = "auth/register.html" + placeholdize = True + title = _('Register') + submit = _('Register') + ajax_redirect = True + form_prefix = 'register' + honeypot = True + + def __call__(self, request): + if request.user.is_authenticated(): + 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): + form.save() + user = auth.authenticate( + username=form.cleaned_data['username'], + password=form.cleaned_data['password1'] + ) + auth.login(request, user) + + +class LoginRegisterFormView(LoginFormView): + template = 'auth/login_register.html' + title = _('You have to be logged in to continue') + + def extra_context(self, request, obj): + return { + "register_form": placeholdized(UserCreationForm(prefix='register')), + "register_submit": _('Register'), + } + + +@never_cache +def logout_then_redirect(request): + auth.logout(request) + return HttpResponseRedirect(urlquote_plus(request.GET.get('next', '/'), safe='/?=')) + + +@never_cache +def clock(request): + """ Provides server UTC time for jquery.countdown, + in a format suitable for Date.parse() + """ + return HttpResponse(datetime.utcnow().strftime('%Y/%m/%d %H:%M:%S UTC')) + + +def publish_plan(request): + cache_key = "publish_plan" + plan = cache.get(cache_key) + + if plan is None: + plan = [] + try: + feed = feedparser.parse(settings.PUBLISH_PLAN_FEED) + except: + pass + else: + for i in range(len(feed['entries'])): + plan.append({ + 'title': feed['entries'][i].title, + 'link': feed['entries'][i].link, + }) + cache.set(cache_key, plan, 1800) + + return render(request, "publish_plan.html", {'plan': plan}) + + +@login_required +def user_settings(request): + return render(request, "user.html") + + +@ssi_included(use_lang=False, timeout=1800) +def latest_blog_posts(request, feed_url=None, posts_to_show=5): + if feed_url is None: + feed_url = settings.LATEST_BLOG_POSTS + try: + feed = feedparser.parse(str(feed_url)) + posts = [] + for i in range(posts_to_show): + pub_date = feed['entries'][i].published_parsed + published = date(pub_date[0], pub_date[1], pub_date[2]) + posts.append({ + 'title': feed['entries'][i].title, + 'summary': feed['entries'][i].summary, + 'link': feed['entries'][i].link, + 'date': published, + }) + except: + posts = [] + return render(request, 'latest_blog_posts.html', {'posts': posts}) + + +@ssi_included(use_lang=False) +def widget(request): + return render(request, 'widget.html') diff --git a/src/wolnelektury/wsgi.py b/src/wolnelektury/wsgi.py new file mode 100644 index 000000000..01a8e1747 --- /dev/null +++ b/src/wolnelektury/wsgi.py @@ -0,0 +1,18 @@ +import os +import os.path +import sys + +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + +# Add apps and lib directories to PYTHONPATH +sys.path = [ + os.path.join(ROOT, '../lib/librarian'), +] + sys.path + + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "wolnelektury.settings") + +# This application object is used by the development server +# as well as any WSGI server configured to use this file. +from django.core.wsgi import get_wsgi_application +application = get_wsgi_application() diff --git a/wolnelektury/__init__.py b/wolnelektury/__init__.py deleted file mode 100644 index cf2e85f6d..000000000 --- a/wolnelektury/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .celery import app as celery_app diff --git a/wolnelektury/celery.py b/wolnelektury/celery.py deleted file mode 100644 index ae5ce20ce..000000000 --- a/wolnelektury/celery.py +++ /dev/null @@ -1,21 +0,0 @@ -from __future__ import absolute_import - -import os -import sys - -ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) -sys.path = [ - os.path.join(ROOT, 'apps'), - os.path.join(ROOT, 'lib'), - os.path.join(ROOT, 'lib/librarian'), -] + sys.path - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'wolnelektury.settings') - -from celery import Celery -from django.conf import settings - -app = Celery('wolnelektury') - -app.config_from_object('django.conf:settings') -app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) diff --git a/wolnelektury/locale-contrib/de/LC_MESSAGES/django.mo b/wolnelektury/locale-contrib/de/LC_MESSAGES/django.mo deleted file mode 100644 index 9dfa5d3ef..000000000 Binary files a/wolnelektury/locale-contrib/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/wolnelektury/locale-contrib/de/LC_MESSAGES/django.po b/wolnelektury/locale-contrib/de/LC_MESSAGES/django.po deleted file mode 100644 index 5c198ea2e..000000000 --- a/wolnelektury/locale-contrib/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,668 +0,0 @@ -# German translations for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-08-14 17:50+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: de <LL@li.org>\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "Einspeichern" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -#, fuzzy -msgid "E-mail address" -msgstr "E-Mail Adresse" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "E-Mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "Username" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "Dieses Account ist zurzeit inaktiv." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "Die E-Mail-Adresse und/oder das Password sind nicht korrekt." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "Der Username ist nicht korrekt." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -#, fuzzy -msgid "The login and/or password you specified are not correct." -msgstr "Der Username ist nicht korrekt." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "E-Mail (fakultativ)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -#, fuzzy -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "Usernamen können nur aus Buchstaben, Ziffern" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "Dieser Username ist schon besetzt. Wählen Sie bitte einen anderen." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -#, fuzzy -msgid "A user is already registered with this e-mail address." -msgstr "Ein User ist schon mit dieser E-Mail-Adresse verbunden." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "Password (nochmals)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "Sie müssen dasselbe Password jedesmal eintippen." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -#, fuzzy -msgid "This e-mail address is already associated with this account." -msgstr "Die E-Mail ist schon mit diesem Account verbunden." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -#, fuzzy -msgid "This e-mail address is already associated with another account." -msgstr "Diese E-Mail-Adresse ist schon mit einem anderen Account verbunden." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "Aktuelles Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "Neues Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "Neues Password (nochmals)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "Tippe Ihr Password ein." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "Diese E-Mail-Adresse ist noch mit keinem anderen Account verbunden." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -#, fuzzy -msgid "email address" -msgstr "E-Mail Adresse" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -#, fuzzy -msgid "email addresses" -msgstr "E-Mail Adresse" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -#, fuzzy -msgid "email confirmation" -msgstr "E-Mail-Adresse-Bestätigung" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -#, fuzzy -msgid "email confirmations" -msgstr "E-Mail-Adresse-Bestätigung" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "Erfolgreich als %(user)s eingeloggt." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "BestBestätigungsmail an %(email)s gesendet" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, fuzzy, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "Die E-Mail-Adresse %(email)s gelöscht." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "Die E-Mail-Adresse %(email)s gelöscht." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -#, fuzzy -msgid "Your primary e-mail address must be verified" -msgstr "Ihre E-Mail-Adresse wurd erfolgreich verifiziert." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "Die Haupt-Email-Adresse eingestellt" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "Password erfolgreich geändert." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "Password erfolgreich erstellt." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "Sie haben sich ausgeloggt." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -#, fuzzy -msgid "Your account has no password set up." -msgstr "Ihr lokales Account hat keine Schlüsselworteinstellung" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -#, fuzzy -msgid "Your account has no verified e-mail address." -msgstr "Ihr lokales Account hat keine verfizierte Email-Adresse" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -#, fuzzy -msgid "The social account has been connected" -msgstr "Das Social-Account wurde abgeschaltet." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "Das Social-Account wurde abgeschaltet." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "Falsche Antwort beim Erhalten des Fragentokens von \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "Falsche Antwort beim Erhalten des Zugangstokens von \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, python-format -msgid "No request token saved for \"%s\"." -msgstr "Keine Fragentokens für \"%s\" gespeichert." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, python-format -msgid "No access token saved for \"%s\"." -msgstr "Keine Zugangstokens für \"%s\" gespeichert." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "Kein Zugagng zu privaten Angaben bei \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "Account" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "E-Mail Adresse" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -#, fuzzy -msgid "The following e-mail addresses are associated with your account:" -msgstr "Die folgenden E-Mail-Adressen wurden mit Ihrem Account verbunden:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "Verifiziert" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "Unverifiziert" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "Primär" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "Stelle als primär ein" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "Verifizierung wiedersenden" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "Entfernen" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "Warnung:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" -"Sie haben jetzt keine Email-Adresse eingestellt. Sie sollen eine Email-" -"Adresse einstellen, um Ihr Schlüsselwort zu resetieren, um wichtige " -"Informationen zu bekommen." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "E-Mail-Adress eintippen" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "Add E-Mail eintippen" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "Wollen Sie wirklich die angegebene E-Mail-Adresse löschen?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -#, fuzzy -msgid "Confirm E-mail Address" -msgstr "Die Haupt-Email-Adresse eingestellt" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, fuzzy, python-format -msgid "" -"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Sie haben bestätigt, dass <a href=\"mailto:%(email)s\">%(email)s</a> ist " -"mit dem User '%(user)s' verbunden." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please <a " -"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, fuzzy, python-format -msgid "" -"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Sie haben bestätigt, dass <a href=\"mailto:%(email)s\">%(email)s</a> ist " -"mit dem User '%(user)s' verbunden." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "Anmelden" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, fuzzy, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, <a " -"href=\"%(signup_url)s\">sign up</a> \n" -"for a %(site_name)s account and sign in below:" -msgstr "" -"Loggen Sie sich bitte ein mit einem\n" -"von Accounts einer dritten Partei. Oder, <a \n" -"href=\"%(signup_url)s\">registrieren Sie</a> for a %(site_name)s den " -"Account und loggen Sie sich ein\n" -"hierunter:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "oder" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "Password vergessen?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "Ausgeloggt" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "Password ändern" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "Password löschen" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "" -"Sie können Ihr Schlüsselwort löschen, weil Sie jetzt durch OpenID " -"eingeloggt sind." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "Password löschen" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "Password gelöscht" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "Password wurde gelöscht." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "Password neu erstellen" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" -"Password vergessen? Tippe unten Ihre E-Mail-Adresse ein, dann senden wir " -"Ihnen eine E-Mail, um das Password zu ändern." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "Password neu erstellen" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -#, fuzzy -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" -"Wir haben Ihnen eine Email geschickt. Falls Sie sie nicht innerhalb von " -"einigen Minuten erhalten, wenden Sie sich bitte an uns <a " -"href=\"mailto:%(CONTACT_EMAIL)s\">%(CONTACT_EMAIL)s</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "Falscher Token" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " -"reset</a>." -msgstr "" -"Der Passwort-Reset-Link war falsch, da er schon möglicherweise benutzt " -"worden war. Bitten Sie um ein <a href=\"%(passwd_reset_url)s\">Reset " -"eines neuen Passwortes</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "Password ändern" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "Password wurde geändert" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "Password erstellen" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "Registrieren" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "Anmelden" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please <a href=\"%(login_url)s\">sign " -"in</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "Verifizieren Sie Ihre E-Mail-Adresse" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " -"your e-mail address</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" -"Sie bekommen diese Email an %(site_domain)s, weil Sie or jemand anderer " -"Ihr Schlüsselwort erhalten will. Sie können diese Nachricht ignorieren, " -"wenn Sie um Neustellung des Schlüssekworts nicht gebeten haben. Klicken " -"Sie an das Link unten, um Ihr Schlüsselwort neu zu stellen.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"Falls Sie vergessen haben, ist Ihr Benutzername: %(username)s.\n" -"\n" -"Vielen dank, dass Sie unsere Webseite benutzt haben!\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "Password neu stellen E-Mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "Notiz" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "Sie sind schon als %(user_display)s eingeloggt." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "OpenID Registrieren" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "Inaktives Account" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "Dieses Account ist inaktiv." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "Social-Networt-Login Fehler" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -#, fuzzy -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "Ein Fehler ist eingetreten beim Einloggen mithilfe Social-Networt-Account." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Account-Beziehungen" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "Sie können sich einloggen mittels eines von folgenden Accounts Dritter:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -#, fuzzy -msgid "You currently have no social network accounts connected to this account." -msgstr "Das Social-Network-Account wurde mit Ihrem Account verbunden." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "Fügen Sie ein fremdes Account hinzu." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "Login annulliert" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, fuzzy, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to <a " -"href=\"%(login_url)s\">sign in</a>." -msgstr "" -"Sie haben sich entschieden, das Einloggen in unsere Webseite mittels " -"eines von Ihren existierenden Accounts. Falls dies ein Fehler war, gehen " -"Sie auf <a href=\"%(login_url)s\">sign in</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" -"Sie werden Ihr %(provider_name)s Account benutzen, um\n" -"sich in %(site_name)s einzuloggen. Der letzte Schritt ist, den folgenden " -"Formular auszufüllen" - diff --git a/wolnelektury/locale-contrib/django.pot b/wolnelektury/locale-contrib/django.pot deleted file mode 100644 index 01486b24b..000000000 --- a/wolnelektury/locale-contrib/django.pot +++ /dev/null @@ -1,611 +0,0 @@ -# Translations template for PROJECT. -# Copyright (C) 2013 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -msgid "E-mail address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -msgid "The login and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -msgid "A user is already registered with this e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -msgid "This e-mail address is already associated with this account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -msgid "This e-mail address is already associated with another account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -msgid "email address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -msgid "email addresses" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -msgid "email confirmation" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -msgid "email confirmations" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -msgid "Your primary e-mail address must be verified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -msgid "Your account has no password set up." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -msgid "Your account has no verified e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -msgid "The social account has been connected" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, python-format -msgid "No request token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, python-format -msgid "No access token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -msgid "The following e-mail addresses are associated with your account:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -msgid "Confirm E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, python-format -msgid "" -"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please <a " -"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, python-format -msgid "" -"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, <a " -"href=\"%(signup_url)s\">sign up</a> \n" -"for a %(site_name)s account and sign in below:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " -"reset</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please <a href=\"%(login_url)s\">sign " -"in</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " -"your e-mail address</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -msgid "You currently have no social network accounts connected to this account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to <a " -"href=\"%(login_url)s\">sign in</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" - diff --git a/wolnelektury/locale-contrib/en/LC_MESSAGES/django.mo b/wolnelektury/locale-contrib/en/LC_MESSAGES/django.mo deleted file mode 100644 index 7a4cdebe4..000000000 Binary files a/wolnelektury/locale-contrib/en/LC_MESSAGES/django.mo and /dev/null differ diff --git a/wolnelektury/locale-contrib/en/LC_MESSAGES/django.po b/wolnelektury/locale-contrib/en/LC_MESSAGES/django.po deleted file mode 100644 index f407f7ad8..000000000 --- a/wolnelektury/locale-contrib/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,671 +0,0 @@ -# English translations for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-08-14 17:50+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: en <LL@li.org>\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "Remember Me" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -#, fuzzy -msgid "E-mail address" -msgstr "E-mail Addresses" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "E-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "Username" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "This account is currently inactive." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "The e-mail address and/or password you specified are not correct." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "The username and/or password you specified are not correct." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -#, fuzzy -msgid "The login and/or password you specified are not correct." -msgstr "The username and/or password you specified are not correct." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "E-mail (optional)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -#, fuzzy -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "Usernames can only contain letters, numbers and underscores." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "This username is already taken. Please choose another." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -#, fuzzy -msgid "A user is already registered with this e-mail address." -msgstr "A user is registered with this e-mail address." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "Password (again)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "You must type the same password each time." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -#, fuzzy -msgid "This e-mail address is already associated with this account." -msgstr "This e-mail address already associated with this account." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -#, fuzzy -msgid "This e-mail address is already associated with another account." -msgstr "This e-mail address already associated with another account." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "Current Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "New Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "New Password (again)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "Please type your current password." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "The e-mail address is not assigned to any user account" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -#, fuzzy -msgid "email address" -msgstr "E-mail Addresses" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -#, fuzzy -msgid "email addresses" -msgstr "E-mail Addresses" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -#, fuzzy -msgid "email confirmation" -msgstr "E-mail Address Confirmation" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -#, fuzzy -msgid "email confirmations" -msgstr "E-mail Address Confirmation" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "Successfully signed in as %(user)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "Confirmation e-mail sent to %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, fuzzy, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "Removed e-mail address %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "Removed e-mail address %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -#, fuzzy -msgid "Your primary e-mail address must be verified" -msgstr "Your e-mail address has already been verified" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "Primary e-mail address set" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "Password successfully changed." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "Password successfully set." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "You have signed out." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -#, fuzzy -msgid "Your account has no password set up." -msgstr "Your local account has no password setup." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -#, fuzzy -msgid "Your account has no verified e-mail address." -msgstr "Your local account has no verified e-mail address." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -#, fuzzy -msgid "The social account has been connected" -msgstr "The social account has been disconnected" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "The social account has been disconnected" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "Invalid response while obtaining request token from \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "Invalid response while obtaining access token from \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, python-format -msgid "No request token saved for \"%s\"." -msgstr "No request token saved for \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, python-format -msgid "No access token saved for \"%s\"." -msgstr "No access token saved for \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "No access to private resources at \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "Account" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "E-mail Addresses" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -#, fuzzy -msgid "The following e-mail addresses are associated with your account:" -msgstr "The following e-mail addresses are associated to your account:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "Verified" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "Unverified" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "Primary" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "Make Primary" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "Re-send Verification" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "Remove" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "Warning:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "Add E-mail Address" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "Add E-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "Do you really want to remove the selected e-mail address?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -#, fuzzy -msgid "Confirm E-mail Address" -msgstr "Primary e-mail address set" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, fuzzy, python-format -msgid "" -"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" -"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user '%(user)s'." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please <a " -"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, fuzzy, python-format -msgid "" -"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" -"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user '%(user)s'." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "Sign In" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, fuzzy, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, <a " -"href=\"%(signup_url)s\">sign up</a> \n" -"for a %(site_name)s account and sign in below:" -msgstr "" -"Please sign in with one\n" -"of your existing third party accounts. Or, <a \n" -"href=\"%(signup_url)s\">sign up</a> for a %(site_name)s account and sign " -"in\n" -"below:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "or" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "Forgot Password?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "Signed Out" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "Change Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "Delete Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "" -"You may delete your password since you are currently logged in using " -"OpenID." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "delete my password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "Password Deleted" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "Your password has been deleted." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "Password Reset" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "Reset My Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -#, fuzzy -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" -"We have sent you an e-mail. If you do not receive it within a few " -"minutes, contact us at <a " -"href=\"mailto:%(CONTACT_EMAIL)s\">%(CONTACT_EMAIL)s</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "Bad Token" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " -"reset</a>." -msgstr "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " -"reset</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "change password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "Your password is now changed." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "Set Password" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "Signup" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "Sign Up" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please <a href=\"%(login_url)s\">sign " -"in</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "Verify Your E-mail Address" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " -"your e-mail address</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "Password Reset E-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "Note" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "you are already logged in as %(user_display)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "OpenID Sign In" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "Account Inactive" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "This account is inactive." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "Social Network Login Failure" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -#, fuzzy -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "" -"An error occured while attempting to login via your social network " -"account." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Account Connections" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" -"You can sign in to your account using any of the following third party " -"accounts:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -#, fuzzy -msgid "You currently have no social network accounts connected to this account." -msgstr "The social account has been connected to your existing account" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "Add a 3rd Party Account" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "Login Cancelled" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, fuzzy, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to <a " -"href=\"%(login_url)s\">sign in</a>." -msgstr "" -"You decided to cancel logging in to our site using one of your exisiting " -"accounts. If this was a mistake, please proceed to <a " -"href=\"%(login_url)s\">sign in</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" - diff --git a/wolnelektury/locale-contrib/es/LC_MESSAGES/django.mo b/wolnelektury/locale-contrib/es/LC_MESSAGES/django.mo deleted file mode 100644 index a5ad327ba..000000000 Binary files a/wolnelektury/locale-contrib/es/LC_MESSAGES/django.mo and /dev/null differ diff --git a/wolnelektury/locale-contrib/es/LC_MESSAGES/django.po b/wolnelektury/locale-contrib/es/LC_MESSAGES/django.po deleted file mode 100644 index bc180c5e3..000000000 --- a/wolnelektury/locale-contrib/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,674 +0,0 @@ -# Spanish translations for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-08-14 17:50+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: es <LL@li.org>\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "Contraseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "Recuérdame" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -#, fuzzy -msgid "E-mail address" -msgstr "Direcciones de correo electrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "Correo elctrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "Nombre de usuario" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "Esta cuenta de usuario está actualmente inactiva." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "El correo electrónico y/o contraseña son incorrectos." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "El nombre de usuario y/o contraseña son incorrectos." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -#, fuzzy -msgid "The login and/or password you specified are not correct." -msgstr "El nombre de usuario y/o contraseña son incorrectos." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "Correo elctrónico (opcional)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -#, fuzzy -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "Nombre de usuario sólo puede consistir de letras, números y guiones bajos" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "El nombre de usuario está ocupado. Por favor, elija otro." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -#, fuzzy -msgid "A user is already registered with this e-mail address." -msgstr "Un usuario está registrado con esta direccin de correo electrónico." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "Contraseña (otra vez)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "Tiene que introducir cada vez la misma contraseña." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -#, fuzzy -msgid "This e-mail address is already associated with this account." -msgstr "Este correo electrónico ya ha sido asociado a esta cuenta de usuario." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -#, fuzzy -msgid "This e-mail address is already associated with another account." -msgstr "Este correo electrónico ya ha sido asociado a otra cuenta de usuario." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "Contraseña actual" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "Nueva contarseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "Nueva contarseña (otra vez)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "Introduzca su contraseña actual, por favor." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "Este correo electrónico no ha sido asignado a ninguna cuenta de usuario." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -#, fuzzy -msgid "email address" -msgstr "Direcciones de correo electrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -#, fuzzy -msgid "email addresses" -msgstr "Direcciones de correo electrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -#, fuzzy -msgid "email confirmation" -msgstr "Confirmación de la dirección de correo electrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -#, fuzzy -msgid "email confirmations" -msgstr "Confirmación de la dirección de correo electrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "Ha iniciado sesión como %(user)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "La confirmación ha sido enviada a %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, fuzzy, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "Dirección de correo electrónico eliminado %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "Dirección de correo electrónico eliminado %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -#, fuzzy -msgid "Your primary e-mail address must be verified" -msgstr "Su correo electrónico ha sido verificado" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "La dirección de correo electrónico principal establecida" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "Contraseña ha sido cambiada con éxito." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "Contraseña ha sido establecida con éxito." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "Ha cerrado sesión." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -#, fuzzy -msgid "Your account has no password set up." -msgstr "Su cuenta de usuario local todavÃa no tiene la contraseña establecida." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -#, fuzzy -msgid "Your account has no verified e-mail address." -msgstr "" -"Su cuenta de usuario local no dispone de direcciones de correo " -"electrónico verificadas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -#, fuzzy -msgid "The social account has been connected" -msgstr "La cuenta social ha sido desconectada" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "La cuenta social ha sido desconectada" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "Respuesta inválida al obtener request token de \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "Respuesta inválida al obtener access token de \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, fuzzy, python-format -msgid "No request token saved for \"%s\"." -msgstr "No hay request token guardado para \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, fuzzy, python-format -msgid "No access token saved for \"%s\"." -msgstr "No hay acces token guardado para \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "No hay acceso a recursos privados en \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "Cuenta de usuario" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "Direcciones de correo electrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -#, fuzzy -msgid "The following e-mail addresses are associated with your account:" -msgstr "" -"A su cuenta de usuario están asociados los siguientes direcciones de " -"correo electrónico:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "Verificado" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "No verificado" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "Principal" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "La dirección de correo electrónico principal" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "Reenviar verificación" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "Borrar" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "Aviso:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" -"Actualmente no tiene ninguna dirección de correo electrónico configurada." -" Debe agregar una para poder recibir notificaciones, restablecer su " -"contraseña etc." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "Agregar dirección de correo electrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "Agregar correo electrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "¿Está seguro que quiere borrar el correo electrónico seleccionado?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -#, fuzzy -msgid "Confirm E-mail Address" -msgstr "La dirección de correo electrónico principal establecida" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, fuzzy, python-format -msgid "" -"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Ha confirmado que <a href=\"mailto:%(email)s\">%(email)s</a> es la " -"dirección del correo electrónico para usuario '%(user)s'." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please <a " -"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, fuzzy, python-format -msgid "" -"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Ha confirmado que <a href=\"mailto:%(email)s\">%(email)s</a> es la " -"dirección del correo electrónico para usuario '%(user)s'." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "Iniciar sesión" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, fuzzy, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, <a " -"href=\"%(signup_url)s\">sign up</a> \n" -"for a %(site_name)s account and sign in below:" -msgstr "" -"Por favor, inicie sesión con una \n" -" de sus cuentas de terceros o <a \n" -"href=\"%(signup_url)s\"> regÃstrese </a> en la cuenta de %(site_name)s e " -"inicie sesión \n" -"abajo:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "o" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "¿Olvidaste tu contraseña?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "Cerrar sesión" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "Cambia la contraseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "Borra la contraseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "Puede borrar su contraseña ya que ha iniciado sesión con OpenID." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "borra mi contraseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "La contraseña ha sido borrada" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "Su contraseña ha sido borrada. " - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "Restablecimiento de la contraseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" -"¿Olvidaste tu contraseña? Introduce aquà tu dirección de correo " -"electrónico y te enviamos un mensaje que te permitirá restablecerla. " - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "Restablecimiento de la contraseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -#, fuzzy -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" -"Le hemos enviado un correo. Si no recibe ningún correo dentro de unos " -"minutos, póngase en contacto con nosotros a través de <a " -"href=\"mailto:%(CONTACT_EMAIL)s\">%(CONTACT_EMAIL)s</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "Token incorrecto" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " -"reset</a>." -msgstr "" -"El enlace de restablecimiento de la contraseña ha sido inválido. Es " -"probable que ya haya sido usado. Por favor, solicite uno nuevo <a " -"href=\"%(passwd_reset_url)s\">new password reset</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "cambia la contraseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "Su contraseña ya se ha cambiado." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "Establecer contraseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "Registrarse" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "Registrarse" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please <a href=\"%(login_url)s\">sign " -"in</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "Verifique su dirección de correo electrónico" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " -"your e-mail address</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" -"Ha recibido este correo porque usted u otra persona ha solicitado la " -"contraseña de su cuenta de usuario en %(site_domain)s. \n" -"Si no ha solicitado restablecimiento de su contraseña, pase de este " -"mensaje. Abra el enlace de abajo para restablecer su contraseña.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"Le recordamos que su nombre de usuario es %(username)s.\n" -" \n" -"¡Gracias por usar nuestra página!\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "La dirección de correo electrónico en caso de restablecer la contraseña" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "Nota" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "ya está conectado como %(user_display)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "Iniciar sesión con OpenID " - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "La cuenta de usuario inactiva" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "Esta cuenta de usuario está inactiva." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "Error al iniciar sesión en la red social" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -#, fuzzy -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "" -"Ha ocurrido un error al intentar iniciar sesión a través de su cuenta de " -"red social." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Conexiones de la cuenta de usuario" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" -"Puede iniciar sesión en su cuenta de usuario a través de cualquiera de " -"las siguientes cuentas de terceros:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -#, fuzzy -msgid "You currently have no social network accounts connected to this account." -msgstr "La cuenta social ha sido conectada con su cuenta de usuario existente " - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "Agrega una cuenta de terceros" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "Nombre de usuario ha sido cancelado" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, fuzzy, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to <a " -"href=\"%(login_url)s\">sign in</a>." -msgstr "" -"Ha decidido anular lo de iniciar sesión en nuestra página usando una de " -"sus cuentas de usuario existentes. Si se ha equivocado, pase a<a " -"href=\"%(login_url)s\">sign in</a>, por favor." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" -"Está a punto de usar su %(provider_name)s cuenta de usuario para iniciar " -"sesión en \n" -"%(site_name)s. El último paso es rellenar este formulario:" - diff --git a/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.mo b/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.mo deleted file mode 100644 index 047cbaefa..000000000 Binary files a/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.mo and /dev/null differ diff --git a/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.po b/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.po deleted file mode 100644 index 7703f0209..000000000 --- a/wolnelektury/locale-contrib/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,612 +0,0 @@ -# French translations for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-22 14:23+0100\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: fr <LL@li.org>\n" -"Plural-Forms: nplurals=2; plural=(n > 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -msgid "E-mail address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -msgid "The login and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -msgid "A user is already registered with this e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -msgid "This e-mail address is already associated with this account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -msgid "This e-mail address is already associated with another account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -msgid "email address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -msgid "email addresses" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -msgid "email confirmation" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -msgid "email confirmations" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -msgid "Your primary e-mail address must be verified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -msgid "Your account has no password set up." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -msgid "Your account has no verified e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -msgid "The social account has been connected" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, python-format -msgid "No request token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, python-format -msgid "No access token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -msgid "The following e-mail addresses are associated with your account:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -msgid "Confirm E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, python-format -msgid "" -"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please <a " -"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, python-format -msgid "" -"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, <a " -"href=\"%(signup_url)s\">sign up</a> \n" -"for a %(site_name)s account and sign in below:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " -"reset</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please <a href=\"%(login_url)s\">sign " -"in</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " -"your e-mail address</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -msgid "You currently have no social network accounts connected to this account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to <a " -"href=\"%(login_url)s\">sign in</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" - diff --git a/wolnelektury/locale-contrib/it/LC_MESSAGES/django.mo b/wolnelektury/locale-contrib/it/LC_MESSAGES/django.mo deleted file mode 100644 index ecc10676d..000000000 Binary files a/wolnelektury/locale-contrib/it/LC_MESSAGES/django.mo and /dev/null differ diff --git a/wolnelektury/locale-contrib/it/LC_MESSAGES/django.po b/wolnelektury/locale-contrib/it/LC_MESSAGES/django.po deleted file mode 100644 index c52eb4c4c..000000000 --- a/wolnelektury/locale-contrib/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,612 +0,0 @@ -# English translations for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-22 14:23+0100\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: en <LL@li.org>\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -msgid "E-mail address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -msgid "The login and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -msgid "A user is already registered with this e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -msgid "This e-mail address is already associated with this account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -msgid "This e-mail address is already associated with another account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -msgid "email address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -msgid "email addresses" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -msgid "email confirmation" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -msgid "email confirmations" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -msgid "Your primary e-mail address must be verified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -msgid "Your account has no password set up." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -msgid "Your account has no verified e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -msgid "The social account has been connected" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, python-format -msgid "No request token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, python-format -msgid "No access token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -msgid "The following e-mail addresses are associated with your account:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -msgid "Confirm E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, python-format -msgid "" -"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please <a " -"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, python-format -msgid "" -"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, <a " -"href=\"%(signup_url)s\">sign up</a> \n" -"for a %(site_name)s account and sign in below:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " -"reset</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please <a href=\"%(login_url)s\">sign " -"in</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " -"your e-mail address</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -msgid "You currently have no social network accounts connected to this account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to <a " -"href=\"%(login_url)s\">sign in</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" - diff --git a/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.mo b/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.mo deleted file mode 100644 index b57074733..000000000 Binary files a/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.mo and /dev/null differ diff --git a/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.po b/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.po deleted file mode 100644 index 2d58ef078..000000000 --- a/wolnelektury/locale-contrib/lt/LC_MESSAGES/django.po +++ /dev/null @@ -1,671 +0,0 @@ -# Lithuanian translations for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-08-14 17:50+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: lt <LL@li.org>\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"(n%100<10 || n%100>=20) ? 1 : 2)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "Slaptažodis" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "Ä®siminti mane" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -#, fuzzy -msgid "E-mail address" -msgstr "El. paÅ¡to adresai" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "El. paÅ¡tas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "Vartotojo vardas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "Å i paskyra yra Å¡iuo metu neaktyvi." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "El. paÅ¡to adresas ir/arba slaptažodis nÄra teisingas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "Vartotojo vardas ir/arba slaptažodis nÄra teisingas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -#, fuzzy -msgid "The login and/or password you specified are not correct." -msgstr "Vartotojo vardas ir/arba slaptažodis nÄra teisingas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "El. paÅ¡tas (pasirenkamas)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -#, fuzzy -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "" -"Vartotojo vardas gali bÅ«ti sudarytas tik iÅ¡ raidžių, skaiÄių ir " -"pabraukimo brÅ«kÅ¡nelių." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "Å is vartotojo vardas yra užimtas. PraÅ¡ome pasirinkite kitÄ ." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -#, fuzzy -msgid "A user is already registered with this e-mail address." -msgstr "Å iuo elektroninio paÅ¡to adresu jau yra užsiregistravÄs vartotojas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "Slaptažodis (pakartoti)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "KiekvienÄ kartÄ turite įvesti tokį patį slaptažodį." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -#, fuzzy -msgid "This e-mail address is already associated with this account." -msgstr "Å is el. paÅ¡to adresas jau yra susietas su Å¡ia paskyra." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -#, fuzzy -msgid "This e-mail address is already associated with another account." -msgstr "Å is el. paÅ¡to adresas jau yra susietas su kita paskyra." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "Dabartinis slaptažodis" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "Naujas slaptažodis" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "Naujas slaptažodis (pakartoti)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "PraÅ¡ome įvesti jÅ«sų dabartinį slaptažodį." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "Å is el. paÅ¡to adresas nÄra priskirtas jokio vartotojo paskyrai." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -#, fuzzy -msgid "email address" -msgstr "El. paÅ¡to adresai" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -#, fuzzy -msgid "email addresses" -msgstr "El. paÅ¡to adresai" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -#, fuzzy -msgid "email confirmation" -msgstr "El. paÅ¡to adreso patvirtinimas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -#, fuzzy -msgid "email confirmations" -msgstr "El. paÅ¡to adreso patvirtinimas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "SÄkmingai prisijungÄs kaip %(user)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "El. paÅ¡to patvirtinimas buvo iÅ¡siųstas į %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, fuzzy, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "PaÅ¡alintas el. paÅ¡to adresas %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "PaÅ¡alintas el. paÅ¡to adresas %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -#, fuzzy -msgid "Your primary e-mail address must be verified" -msgstr "JÅ«sų el.paÅ¡to adresas jau buvo patikrintas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "Nustatytas pagrindinis el. paÅ¡to adresas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "Slaptažodis sÄkmingai pakeistas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "Slaptažodis sÄkmingai nustatytas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "JÅ«s atsijungÄte." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -#, fuzzy -msgid "Your account has no password set up." -msgstr "JÅ«sų vietinÄs paskyros slaptažodis dar yra nenustatytas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -#, fuzzy -msgid "Your account has no verified e-mail address." -msgstr "JÅ«sų vietinÄs paskyros el. paÅ¡to adresas dar nepatikrintas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -#, fuzzy -msgid "The social account has been connected" -msgstr "SocialinÄ paskyra buvo atjungta" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "SocialinÄ paskyra buvo atjungta" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "Neteisingas atsakas gaunant užklausos žetonÄ iÅ¡ \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "Neteisingas atsakas gaunant prieigos žetonÄ iÅ¡ \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, python-format -msgid "No request token saved for \"%s\"." -msgstr "NÄra užklausos žetono įraÅ¡yto \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, python-format -msgid "No access token saved for \"%s\"." -msgstr "NÄra prieigos žetono įraÅ¡yto \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "TrÅ«ksta prieigos prie privaÄių iÅ¡teklių \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "Paskyra" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "El. paÅ¡to adresai" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -#, fuzzy -msgid "The following e-mail addresses are associated with your account:" -msgstr "Å ie el. paÅ¡to adresai yra priskirti jÅ«sų paskyrai:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "Patikrintas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "Nepatikrintas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "Pirminis" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "Padaryti pirminiu" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "Dar kartÄ siųsti patikrinimÄ " - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "PaÅ¡alinti" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "Ä®spÄjimas:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" -"Å iuo metu neturite nustatyto jokio el. paÅ¡to adreso. JÅ«s tikrai " -"turÄtumÄte pridÄti el. paÅ¡to adresÄ , kad gautumÄte praneÅ¡imus, " -"atstatytumÄte jÅ«sų slaptažodį ir t.t." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "PridÄti el. paÅ¡to adresÄ " - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "PridÄti el. paÅ¡tÄ " - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "Ar esate tikri, kad norite paÅ¡alinti pasirinktÄ el. paÅ¡to adresÄ ?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -#, fuzzy -msgid "Confirm E-mail Address" -msgstr "Nustatytas pagrindinis el. paÅ¡to adresas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, fuzzy, python-format -msgid "" -"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Patvirtinote, kad <a href=\"mailto:%(email)s\">%(email)s</a> yra " -"'%(user)s' vartotojo el. paÅ¡to adresas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please <a " -"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, fuzzy, python-format -msgid "" -"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Patvirtinote, kad <a href=\"mailto:%(email)s\">%(email)s</a> yra " -"'%(user)s' vartotojo el. paÅ¡to adresas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "Prisijungti" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, fuzzy, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, <a " -"href=\"%(signup_url)s\">sign up</a> \n" -"for a %(site_name)s account and sign in below:" -msgstr "" -"PraÅ¡ome prisijungti su viena\n" -"iÅ¡ jÅ«sų third party paskyrų. Arba <a \n" -"href=\"%(signup_url)s\">užsiregistruoti</a> %(site_name)s paskyrai " -"sukurti ir prisijungti\n" -"žemiau:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "arba" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "PamirÅ¡ote slaptažodį?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "AtsijungÄs" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "Keisti slaptažodį" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "PaÅ¡alinti slaptažodį" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "" -"Galite paÅ¡alinti jÅ«sų slaptažodį, nes esate prisijungÄ naudodamiesi " -"OpenID." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "paÅ¡alinti mano slaptažodį" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "Slaptažodis paÅ¡alintas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "JÅ«sų slaptažodis paÅ¡alintas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "Slaptažodžio atstatymas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" -"PamirÅ¡ote slaptažodį? Ä®veskite jÅ«sų el. paÅ¡to adresÄ Å¾emiau ir mes " -"iÅ¡siųsime jums el. laiÅ¡kÄ leidžiantį jį atstatyti." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "Atstatyti mano slaptažodį" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -#, fuzzy -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" -"Jums iÅ¡siuntÄme el. laiÅ¡kÄ . Jei to negausite per kelias minutes, " -"susisiekite su mumis <a " -"href=\"mailto:%(CONTACT_EMAIL)s\">%(CONTACT_EMAIL)s</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "Blogas žetonas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " -"reset</a>." -msgstr "" -"Atstatymo slaptažodžio nuoroda buvo netinkama, galbÅ«t, nes jau buvo " -"panaudota. PraÅ¡ome papraÅ¡yti <a href=\"%(passwd_reset_url)s\">naujo " -"slaptažodžio atstatymo</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "keisti slaptažodį" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "JÅ«sų slaptažodis pakeistas." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "Nustatyti slaptažodį" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "Registracija" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "Registruotis" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please <a href=\"%(login_url)s\">sign " -"in</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "Patikrinkite jÅ«sų el. paÅ¡to adresÄ " - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " -"your e-mail address</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" -"Gavote šį el. laiÅ¡kÄ , nes papraÅ¡Äte, arba kitas asmuo papraÅ¡Ä, atstatyti " -"slaptažodį jÅ«sų paskyrai Äia %(site_domain)s.\n" -"Galite į jį nekreipti dÄmesio jei nepraÅ¡Äte slaptažodžio atstatymo. " -"Paspauskite jÅ«sų slaptažodžio atstatymui skirtÄ nuorodÄ .\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"JÅ«sų vartotojo vardas yra %(username)s\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "Slaptažodžio atstatymo el. laiÅ¡kas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "Pastaba" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "jÅ«s jau esate prisijungÄs kaip %(user_display)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "OpenID prisijungimas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "Paskyra neaktyvi" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "Å i paskyra neaktyvi." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "Klaida " - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -#, fuzzy -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "Ä®vyko klaida prisijungiant per jÅ«sų socialinio tinklo paskyrÄ ." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "Paskyros jungtys" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" -"Galite prisijungti prie jÅ«sų paskyros naudodamiesi Å¡iomis 3rd party " -"paskyromis:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -#, fuzzy -msgid "You currently have no social network accounts connected to this account." -msgstr "Å i socialinÄ paskyra buvo prijungta prie jÅ«sų paskyros" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "PridÄti 3rd Party Paskyra" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "Prisijungimas atÅ¡auktas" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, fuzzy, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to <a " -"href=\"%(login_url)s\">sign in</a>." -msgstr "" -"NusprendÄte atÅ¡aukti prisijungimÄ prie mÅ«sų interneto svetainÄs " -"naudodamiesi viena iÅ¡ jÅ«sų paskyrų. Jei įvyko klaida, praÅ¡ome pradÄti Äia" -" <a href=\"%(login_url)s\">sign in</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" -"JÅ«s ruoÅ¡iatÄs naudotis jÅ«sų %(provider_name)s paskyra, kad " -"prisijungtumÄte prie \n" -"%(site_name)s. PraÅ¡ome užpildyti Å¡iÄ formÄ :" - diff --git a/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.mo b/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 3912839c1..000000000 Binary files a/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.mo and /dev/null differ diff --git a/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.po b/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.po deleted file mode 100644 index c189ecd62..000000000 --- a/wolnelektury/locale-contrib/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,668 +0,0 @@ -# Polish translations for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2013-04-09 15:46+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: pl <LL@li.org>\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && " -"(n%100<10 || n%100>=20) ? 1 : 2)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "HasÅo" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "HasÅo musi skÅadaÄ siÄ z co najmniej {0} znaków." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "ZapamiÄtaj mnie" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -msgid "E-mail address" -msgstr "Adres e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "E-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "Login" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "Nazwa użytkownika lub e-mail." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "Konto jest nieaktywne." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "Podany e-mail i/lub hasÅo sÄ niepoprawne." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "Podany login i/lub hasÅo sÄ niepoprawne." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -msgid "The login and/or password you specified are not correct." -msgstr "Podany login i/lub hasÅo sÄ niepoprawne." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "E-mail (opcjonalnie)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "Login może zawieraÄ tylko litery, cyfry i znaki @/./+/-/_." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "Ta nazwa użytkownika nie może zostaÄ użyta. Prosimy użyÄ innej." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "Ten login jest zajÄty. ProszÄ wybraÄ inny." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -msgid "A user is already registered with this e-mail address." -msgstr "Istnieje użytkownik o tym adresie e-mail." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "HasÅo (ponownie)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "ProszÄ wpisaÄ dwa razy to samo hasÅo." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -msgid "This e-mail address is already associated with this account." -msgstr "Ten adres e-mail jest już używany przez to konto." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -msgid "This e-mail address is already associated with another account." -msgstr "Ten adres e-mail jest już używany przez inne konto." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "Aktualne hasÅo" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "Nowe hasÅo" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "Nowe hasÅo (ponownie)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "ProszÄ wpisaÄ swoje aktualne hasÅo." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "Ten adres e-mail nie jest używany przez żadne konto." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -msgid "email address" -msgstr "adres e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -msgid "email addresses" -msgstr "adresy e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -msgid "email confirmation" -msgstr "potwierdzenie adresu e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -msgid "email confirmations" -msgstr "potwierdzenia adresów e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "Zalogowano jako %(user)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "E-mail potwierdzajÄ cy wysÅany do %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "Adres %(email)s zostaÅ potwierdzony." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "Nie można usunÄ Ä gÅównego adresu e-mail (%(email)s)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "UsuniÄto adres e-mail %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -msgid "Your primary e-mail address must be verified" -msgstr "GÅówny adres e-mail musi zostaÄ potwierdzony" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "Ustawiono gÅówny adres e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "HasÅo zostaÅo zmienione." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "HasÅo zostaÅo ustawione." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "Wylogowano." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -msgid "Your account has no password set up." -msgstr "Twoje konto nie ma ustawionego hasÅa." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -msgid "Your account has no verified e-mail address." -msgstr "Twoje konto nie ma potwierdzonego adresu e-mail." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -msgid "The social account has been connected" -msgstr "Konto spoÅecznoÅciowe zostaÅo doÅÄ czone" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "Konto spoÅecznoÅciowe zostaÅo odÅÄ czone." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, python-format -msgid "No request token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, python-format -msgid "No access token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "Brak dostÄpu do prywatnych zasobów pod adresem \"%s\"." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "Konto" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "Adresy e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -msgid "The following e-mail addresses are associated with your account:" -msgstr "Z Twoim kontem sÄ zwiÄ zane nastÄpujÄ ce adresy e-mail:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "Potwierdzony" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "Nie potwierdzony" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "GÅówny" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "Ustaw gÅówny" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "Ponownie przeÅlij link potwierdzajÄ cy" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "UsuÅ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "Uwaga:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" -"Nie masz ustawionego żadnego adresu e-mail. Dodanie adresu e-mail " -"umożliwi odzyskanie konta w przypadku utraty hasÅa." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "Dodaj adres e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "Dodaj e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "Czy na pewno usunÄ Ä wybrany adres e-mail?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -msgid "Confirm E-mail Address" -msgstr "Potwierdź adres e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, python-format -msgid "" -"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" -"ProszÄ potwierdziÄ adres <a href=\"mailto:%(email)s\">%(email)s</a> jako " -"e-mail użytkownika '%(user_display)s'." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "Potwierdź" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please <a " -"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." -msgstr "" -"Ten link z wiadomoÅci e-mail jest nieprawidÅowy lub nieaktualny. Możesz " -"<a href=\"%(email_url)s\">zamówiÄ kolejny link weryfikacyjny</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, python-format -msgid "" -"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Adres <a href=\"mailto:%(email)s\">%(email)s</a> zostaÅ wÅaÅnie " -"powierdzony jako e-mail dla użytkownika '%(user_display)s'." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "Zaloguj" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, <a " -"href=\"%(signup_url)s\">sign up</a> \n" -"for a %(site_name)s account and sign in below:" -msgstr "" -"Zaloguj za pomocÄ konta zewnÄtrznego, albo <a \n" -"href=\"%(signup_url)s\">zarejestruj siÄ</a> w serwisie %(site_name)s i " -"zaloguj poniżej:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "lub" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "Nie pamiÄtasz hasÅa?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "Wylogowano" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "ZmieÅ hasÅo" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "UsuÅ hasÅo" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "Możesz usunÄ Ä hasÅo, ponieważ jesteÅ zalogowany/-a za pomocÄ OpenID." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "usuÅ moje hasÅo" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "HasÅo usuniÄte" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "Twoje hasÅo zostaÅo usuniÄte." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "Odzyskiwanie hasÅa" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" -"Nie pamiÄtasz swojego hasÅa? Wpisz adres e-mail, a wyÅlemy Ci e-mail " -"umożliwiajÄ cy zresetowanie go." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "Odzyskaj hasÅo" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "Prosimy o kontakt w przypadku problemów z uzyskaniem nowego hasÅa." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" -"E-mail zostaÅ wysÅany. Prosimy o kontakt, jeÅli wiadomoÅÄ nie dotrze w " -"ciÄ gu kilku minut." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "BÅÄdny klucz" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " -"reset</a>." -msgstr "" -"Link resetujÄ cy hasÅo jest nieprawidÅowy, byÄ może ponieważ zostaÅ już " -"wczeÅniej użyty. Spróbuj <a href=\"%(passwd_reset_url)s\">zresetowaÄ " -"hasÅo ponownie</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "zmieÅ hasÅo" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "HasÅo zostaÅo zmienione." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "Ustaw hasÅo" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "Rejestracja" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "Zarejestruj siÄ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please <a href=\"%(login_url)s\">sign " -"in</a>." -msgstr "Masz już konto? <a href=\"%(login_url)s\">Zaloguj siÄ</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "Rejestracja zamkniÄta" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "Przepraszamy, ale rejestracja jest obecnie zamkniÄta." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "Potwierdź swój adres e-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" -"Na podany adres e-mail <a href=\"mailto:%(email)s\">%(email)s</a> zostaÅa" -" wysÅana wiadomoÅÄ w celu weryfikacji. ProszÄ kliknÄ Ä w podany w tej " -"wiadomoÅci link w celu zakoÅczenia procesu rejestracji. Prosimy o " -"kontakt, jeÅli wiadomoÅÄ nie dotrze w ciÄ gu kilku minut." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" -"W celu korzystania z tej czÄÅci strony wymagamy\n" -"potwierdzenia tożsamoÅci. W tym celu konieczne jest\n" -"potwierdzenie adresu e-mail. " - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" -"Na podany adres zostaÅa wysÅana wiadomoÅÄ w celu\n" -"weryfikacji. ProszÄ kliknÄ Ä na link wewnÄ trz tej wiadomoÅci. Prosimy\n" -"o kontakt, jeÅli wiadomoÅÄ nie dotrze w ciÄ gu kilku minut." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " -"your e-mail address</a>." -msgstr "" -"<strong>Uwaga:</strong> nadal możesz <a href=\"%(email_url)s\">zmieniÄ " -"swój adres e-mail</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" -"Użytkownik '%(user_display)s' podaÅ ten adres e-mail na stronie " -"%(site_name)s.\n" -"\n" -"Aby go potwierdziÄ, przejdź do %(activate_url)s\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" -"Otrzymujesz tego e-maila, ponieważ zostaliÅmy poproszeni o zresetowanie " -"hasÅa dla konta w serwisie %(site_domain)s.\n" -"Możesz go zignorowaÄ, jeÅli proÅba nie pochodzi od Ciebie. Wejdź pod " -"poniższy link, aby zresetowaÄ swoje hasÅo.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"W razie czego, Twój login to: %(username)s.\n" -"\n" -"MiÅego czytania!\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "E-mail resetujÄ cy hasÅo" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "ZwrÃ³Ä uwagÄ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "jesteÅ już zalogowany/-a jako %(user_display)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "Logowanie przy użyciu OpenID" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "Konto nieaktywne" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "To konto jest nieaktywne." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "BÅÄ d podczas logowania przy użyciu sieci spoÅecznoÅciowej." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "" -"Podczas próby zalogowania za poÅrednictwej konta w sieci spoÅecznoÅciowej" -" wystÄ piÅ bÅÄ d." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "PowiÄ zania konta" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" -"Możesz zalogowaÄ siÄ na swoje konto używajÄ c nastÄpujÄ cych kont " -"zewnÄtrznych:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -msgid "You currently have no social network accounts connected to this account." -msgstr "" -"Aktualnie do Twojego konta nie sÄ podÅÄ czone żadne konta w sieciach " -"spoÅecznoÅciowych." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "Dodaj konto zewnÄtrzne" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "Logowanie anulowane" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to <a " -"href=\"%(login_url)s\">sign in</a>." -msgstr "" -"Logowanie do serwisu za pomocÄ istniejÄ cego konta zostaÅo anulowane. " -"JeÅli byÅ to bÅÄ d, przejdź do <a href=\"%(login_url)s\">strony " -"logowania</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" -"Za chwilÄ użyjesz konta w serwisie %(provider_name)s aby zalogowaÄ siÄ \n" -"do serwisu %(site_name)s. Zanim to nastÄ pi, wypeÅnij proszÄ ten krótki " -"formularz:" - diff --git a/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.mo b/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.mo deleted file mode 100644 index df98508d7..000000000 Binary files a/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.mo and /dev/null differ diff --git a/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.po b/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.po deleted file mode 100644 index 9c9f8156b..000000000 --- a/wolnelektury/locale-contrib/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,613 +0,0 @@ -# Russian translations for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-03-22 14:23+0100\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: ru <LL@li.org>\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -msgid "E-mail address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -msgid "The login and/or password you specified are not correct." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -msgid "A user is already registered with this e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -msgid "This e-mail address is already associated with this account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -msgid "This e-mail address is already associated with another account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -msgid "email address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -msgid "email addresses" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -msgid "email confirmation" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -msgid "email confirmations" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -msgid "Your primary e-mail address must be verified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -msgid "Your account has no password set up." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -msgid "Your account has no verified e-mail address." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -msgid "The social account has been connected" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, python-format -msgid "No request token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, python-format -msgid "No access token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -msgid "The following e-mail addresses are associated with your account:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -msgid "Confirm E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, python-format -msgid "" -"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please <a " -"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, python-format -msgid "" -"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, <a " -"href=\"%(signup_url)s\">sign up</a> \n" -"for a %(site_name)s account and sign in below:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " -"reset</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please <a href=\"%(login_url)s\">sign " -"in</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " -"your e-mail address</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -msgid "You currently have no social network accounts connected to this account." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to <a " -"href=\"%(login_url)s\">sign in</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" - diff --git a/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.mo b/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.mo deleted file mode 100644 index d6335b97c..000000000 Binary files a/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.mo and /dev/null differ diff --git a/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.po b/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.po deleted file mode 100644 index 0a86ef3e2..000000000 --- a/wolnelektury/locale-contrib/uk/LC_MESSAGES/django.po +++ /dev/null @@ -1,673 +0,0 @@ -# Ukrainian translations for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2013-12-16 09:20+0100\n" -"PO-Revision-Date: 2012-08-14 17:49+0100\n" -"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n" -"Language-Team: uk <LL@li.org>\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:31 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:47 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:233 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:351 -msgid "Password" -msgstr "ÐаÑолÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:40 -msgid "Password must be a minimum of {0} characters." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:49 -msgid "Remember Me" -msgstr "ÐапамâÑÑаÑи мене" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:60 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:173 -#, fuzzy -msgid "E-mail address" -msgstr "ÐлекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑи" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:61 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:182 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:301 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:368 -msgid "E-mail" -msgstr "E-mail" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:66 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:67 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:166 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:170 -msgid "Username" -msgstr "ÐмâÑ ÐºÐ¾ÑиÑÑÑваÑа" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:74 -msgid "Username or e-mail" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:108 -msgid "This account is currently inactive." -msgstr "ÐкаÑÐ½Ñ Ð½Ð° даний Ð¼Ð¾Ð¼ÐµÐ½Ñ Ñ Ð½ÐµÐ°ÐºÑивним." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:112 -msgid "The e-mail address and/or password you specified are not correct." -msgstr "ÐÐºÐ°Ð·Ð°Ð½Ñ ÐµÐ»ÐµÐºÑÑонна адÑеÑа Ñа/або паÑÐ¾Ð»Ñ Ð½ÐµÐ¿ÑавилÑнÑ." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:116 -msgid "The username and/or password you specified are not correct." -msgstr "ÐÐºÐ°Ð·Ð°Ð½Ñ ÑмâÑ ÐºÐ¾ÑиÑÑÑваÑа Ñа/або паÑÐ¾Ð»Ñ Ð½ÐµÐ¿ÑавилÑнÑ." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:119 -#, fuzzy -msgid "The login and/or password you specified are not correct." -msgstr "ÐÐºÐ°Ð·Ð°Ð½Ñ ÑмâÑ ÐºÐ¾ÑиÑÑÑваÑа Ñа/або паÑÐ¾Ð»Ñ Ð½ÐµÐ¿ÑавилÑнÑ." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:185 -msgid "E-mail (optional)" -msgstr "E-mail (ÑакÑлÑÑаÑивно)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:193 -#, fuzzy -msgid "Usernames can only contain letters, digits and @/./+/-/_." -msgstr "ÐмâÑ ÐºÐ¾ÑиÑÑÑваÑа може мÑÑÑиÑи ÑÑлÑки бÑкви, ÑиÑÑи Ñа пÑдÑеÑкÑваннÑ." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:197 -msgid "Username can not be used. Please use other username." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:204 -msgid "This username is already taken. Please choose another." -msgstr "Це ÑмâÑ ÐºÐ¾ÑиÑÑÑваÑа вже викоÑиÑÑано. ÐÑÐ´Ñ Ð»Ð°Ñка, вибеÑÑÑÑ ÑнÑе." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:212 -#, fuzzy -msgid "A user is already registered with this e-mail address." -msgstr "ÐоÑиÑÑÑÐ²Ð°Ñ Ð· ÑÐ°ÐºÐ¾Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ð¾Ñ Ð°Ð´ÑеÑÐ¾Ñ Ð²Ð¶Ðµ ÑÑнÑÑ." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:234 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:352 -msgid "Password (again)" -msgstr "ÐаÑÐ¾Ð»Ñ (повÑоÑиÑи)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:262 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:341 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:357 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:425 -msgid "You must type the same password each time." -msgstr "ÐпиÑÑÑÑ Ð´Ð²ÑÑÑ Ñакий Ñамий паÑолÑ." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:309 -#, fuzzy -msgid "This e-mail address is already associated with this account." -msgstr "Ð¦Ñ ÐµÐ»ÐµÐºÑÑонна адÑеÑа вже пов'Ñзана з ÑÑм акаÑнÑом." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:310 -#, fuzzy -msgid "This e-mail address is already associated with another account." -msgstr "Ð¦Ñ ÐµÐ»ÐµÐºÑÑонна адÑеÑа вже пов'Ñзана з ÑнÑим акаÑнÑом." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:329 -msgid "Current Password" -msgstr "ÐкÑÑалÑний паÑолÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:413 -msgid "New Password" -msgstr "Ðовий паÑолÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:331 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:414 -msgid "New Password (again)" -msgstr "Ðовий паÑÐ¾Ð»Ñ (повÑоÑиÑи)" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:335 -msgid "Please type your current password." -msgstr "ÐведÑÑÑ Ð±ÑÐ´Ñ Ð»Ð°Ñка ÐÐ°Ñ ÑепеÑÑÑнÑй паÑолÑ." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/forms.py:378 -msgid "The e-mail address is not assigned to any user account" -msgstr "Ð¦Ñ ÐµÐ»ÐµÐºÑÑонна адÑеÑа не пов'Ñзана з жодним акаÑнÑом." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:30 -#, fuzzy -msgid "email address" -msgstr "ÐлекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑи" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:31 -#, fuzzy -msgid "email addresses" -msgstr "ÐлекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑи" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:81 -#, fuzzy -msgid "email confirmation" -msgstr "ÐÑдÑвеÑÐ´Ð¶ÐµÐ½Ð½Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ð¾Ñ Ð°Ð´ÑеÑи." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/models.py:82 -#, fuzzy -msgid "email confirmations" -msgstr "ÐÑдÑвеÑÐ´Ð¶ÐµÐ½Ð½Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ð¾Ñ Ð°Ð´ÑеÑи." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:89 -#, python-format -msgid "Successfully signed in as %(user)s." -msgstr "Ðи ÑÑпÑÑно ÑвÑйÑли Ñк %(user)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/utils.py:237 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:216 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:235 -#, python-format -msgid "Confirmation e-mail sent to %(email)s" -msgstr "ÐодвÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿ÑдÑвеÑÐ´Ð¶ÐµÐ½Ð½Ñ ÑеÑÑÑÑаÑÑÑ Ð²Ð¸Ñлано на %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:141 -#, python-format -msgid "You have confirmed %(email)s." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:253 -#, fuzzy, python-format -msgid "You cannot remove your primary e-mail address (%(email)s)" -msgstr "Ðидалено елекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:263 -#, python-format -msgid "Removed e-mail address %(email)s" -msgstr "Ðидалено елекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ %(email)s" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:289 -#, fuzzy -msgid "Your primary e-mail address must be verified" -msgstr "ÐаÑÑ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ Ð¿ÑдÑвеÑджено." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:301 -msgid "Primary e-mail address set" -msgstr "ÐÑÑановлено оÑÐ½Ð¾Ð²Ð½Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:330 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:407 -msgid "Password successfully changed." -msgstr "ÐаÑÐ¾Ð»Ñ ÑÑпÑÑно змÑнено." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:355 -msgid "Password successfully set." -msgstr "УÑпÑÑно вÑÑановлено паÑолÑ." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/account/views.py:423 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:10 -msgid "You have signed out." -msgstr "Ðи вийÑли з акаÑнÑÑ." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:47 -#, fuzzy -msgid "Your account has no password set up." -msgstr "ÐÐ»Ñ ÐаÑого локалÑного акаÑнÑÑ Ð½Ðµ вÑÑановлено паÑолÑ." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/forms.py:51 -#, fuzzy -msgid "Your account has no verified e-mail address." -msgstr "" -"ÐÐ»Ñ ÐаÑого локалÑного акаÑнÑÑ Ð½Ðµ вÑÑановлено пеÑевÑÑÐµÐ½Ð¾Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ð¾Ñ " -"адÑеÑи." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/helpers.py:129 -#, fuzzy -msgid "The social account has been connected" -msgstr "ÐблÑковий Ð·Ð°Ð¿Ð¸Ñ Ð² ÑоÑÑалÑнÑй меÑÐµÐ¶Ñ Ð²Ñд'Ñднано." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/views.py:66 -msgid "The social account has been disconnected" -msgstr "ÐблÑковий Ð·Ð°Ð¿Ð¸Ñ Ð² ÑоÑÑалÑнÑй меÑÐµÐ¶Ñ Ð²Ñд'Ñднано." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:78 -#, python-format -msgid "Invalid response while obtaining request token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:102 -#, python-format -msgid "Invalid response while obtaining access token from \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:115 -#, python-format -msgid "No request token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:160 -#, python-format -msgid "No access token saved for \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/socialaccount/providers/oauth/client.py:178 -#, python-format -msgid "No access to private resources at \"%s\"." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:6 -msgid "Account" -msgstr "ÐкаÑнÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:9 -msgid "E-mail Addresses" -msgstr "ÐлекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑи" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:11 -#, fuzzy -msgid "The following e-mail addresses are associated with your account:" -msgstr "Ð ÐаÑим акаÑнÑом пов'ÑÐ·Ð°Ð½Ñ Ð½Ð°ÑÑÑÐ¿Ð½Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑи:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:25 -msgid "Verified" -msgstr "ÐеÑевÑÑено" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:27 -msgid "Unverified" -msgstr "ÐепеÑевÑÑено" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:29 -msgid "Primary" -msgstr "ÐÑновна" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:35 -msgid "Make Primary" -msgstr "ÐÑобиÑи оÑновноÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:36 -msgid "Re-send Verification" -msgstr "ÐадÑÑлаÑи Ñе Ñаз повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿ÐµÑевÑÑки" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:37 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:35 -msgid "Remove" -msgstr "ÐидалиÑи" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "Warning:" -msgstr "ÐопеÑедженнÑ:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:44 -msgid "" -"You currently do not have any e-mail address set up. You should really " -"add an e-mail address so you can receive notifications, reset your " -"password, etc." -msgstr "" -"Ðи не додали Ð¶Ð¾Ð´Ð½Ð¾Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ð¾Ñ Ð°Ð´ÑеÑи. РекомендÑÑмо Ðам додаÑи адÑеÑÑ, " -"Ð´Ð»Ñ ÑÑого Ñоб оÑÑимÑваÑи повÑдомленнÑ, маÑи можливÑÑÑÑ Ð²ÑÐ´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÑолÑ" -" ÑоÑо." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:49 -msgid "Add E-mail Address" -msgstr "ÐодаÑи елекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:54 -msgid "Add E-mail" -msgstr "ÐодаÑи елекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email.html:64 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "Чи ÑпÑÐ°Ð²Ð´Ñ Ñ Ð¾ÑеÑе видалиÑи вибÑÐ°Ð½Ñ Ð°Ð´ÑеÑÑ?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_subject.txt:3 -#, fuzzy -msgid "Confirm E-mail Address" -msgstr "ÐÑÑановлено оÑÐ½Ð¾Ð²Ð½Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:17 -#, fuzzy, python-format -msgid "" -"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Ðи пÑдÑвеÑдили, Ñо адÑеÑа <a href=\"mailto:%(email)s\">%(email)s</a> Ñ " -"адÑеÑÐ¾Ñ ÐºÐ¾ÑиÑÑÑваÑа '%(user)s'." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirm.html:28 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please <a " -"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email_confirmed.html:15 -#, fuzzy, python-format -msgid "" -"You have confirmed that <a href=\"mailto:%(email)s\">%(email)s</a> is an " -"e-mail address for user %(user_display)s." -msgstr "" -"Ðи пÑдÑвеÑдили, Ñо адÑеÑа <a href=\"mailto:%(email)s\">%(email)s</a> Ñ " -"адÑеÑÐ¾Ñ ÐºÐ¾ÑиÑÑÑваÑа '%(user)s'." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:11 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:39 -msgid "Sign In" -msgstr "УвÑйÑи в акаÑнÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:16 -#, fuzzy, python-format -msgid "" -"Please sign in with one\n" -"of your existing third party accounts. Or, <a " -"href=\"%(signup_url)s\">sign up</a> \n" -"for a %(site_name)s account and sign in below:" -msgstr "" -"УвÑйдÑÑÑ Ð·Ð° допомогоÑ\n" -"ÑÑнÑÑÑого облÑкового запиÑÑ Ñ ÑнÑÑй ÑиÑÑемÑ. ÐожеÑе Ñакож, <a \n" -"href=\"%(signup_url)s\">ÑвÑйÑи</a> в акаÑÐ½Ñ %(site_name)s Ñа ÑвÑйÑи\n" -"нижÑе:" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:24 -msgid "or" -msgstr "або" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/login.html:38 -msgid "Forgot Password?" -msgstr "ÐабÑли паÑолÑ?" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/logout.html:8 -msgid "Signed Out" -msgstr "Ðи вийÑли з акаÑнÑÑ." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:4 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:7 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_change.html:12 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Change Password" -msgstr "ÐмÑниÑи паÑолÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:8 -msgid "Delete Password" -msgstr "ÐидалиÑи паÑолÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:9 -msgid "" -"You may delete your password since you are currently logged in using " -"OpenID." -msgstr "ÐожеÑе видалиÑи ÑвÑй паÑолÑ, ÑÐ¾Ð¼Ñ Ñо заÑаз ви ÑвÑйÑли за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ OpenID." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete.html:12 -msgid "delete my password" -msgstr "видалиÑи мÑй паÑолÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:8 -msgid "Password Deleted" -msgstr "ÐаÑÐ¾Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð¾" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_delete_done.html:9 -msgid "Your password has been deleted." -msgstr "ÐÐ°Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð¾." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:10 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:9 -msgid "Password Reset" -msgstr "ÐмÑна паÑолÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:15 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send " -"you an e-mail allowing you to reset it." -msgstr "" -"ÐабÑли паÑолÑ? ÐведÑÑÑ ÑÐ²Ð¾Ñ ÐµÐ»ÐµÐºÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ, Ñоб оÑÑимаÑи ÑнÑÑÑÑкÑÑÑ " -"Ñодо вÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ паÑолÑ." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:20 -msgid "Reset My Password" -msgstr "ÐмÑниÑи мÑй паÑолÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset.html:23 -msgid "Please contact us if you have any trouble resetting your password." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_done.html:15 -#, fuzzy -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" -"Ðам бÑло виÑлано повÑдомленнÑ. ЯкÑо не оÑÑимаÑÑе його пÑоÑÑгом кÑлÑÐºÐ¾Ñ " -"Ñ Ð²Ð¸Ð»Ð¸Ð½, напиÑÑÑÑ Ð½Ð° адÑеÑÑ <a " -"href=\"mailto:%(CONTACT_EMAIL)s\">%(CONTACT_EMAIL)s</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:8 -msgid "Bad Token" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been" -" used. Please request a <a href=\"%(passwd_reset_url)s\">new password " -"reset</a>." -msgstr "" -"ÐоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° змÑÐ½Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð±Ñло непÑавилÑним, ÑÐ¾Ð¼Ñ Ñо його вже " -"викоÑиÑÑали. ÐÑÐ´Ñ Ð»Ð°Ñка, замовÑе <a href=\"%(passwd_reset_url)s\">Ñе однÑ" -" змÑÐ½Ñ Ð¿Ð°ÑолÑ</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:18 -msgid "change password" -msgstr "змÑниÑи паÑолÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_reset_from_key.html:21 -msgid "Your password is now changed." -msgstr "ÐÐ°Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð·Ð¼Ñнено." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/password_set.html:13 -msgid "Set Password" -msgstr "ÐÑÑановиÑи паÑолÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:5 -msgid "Signup" -msgstr "РеÑÑÑÑаÑÑÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:9 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:19 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:19 -msgid "Sign Up" -msgstr "РеÑÑÑÑÑваÑиÑÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup.html:11 -#, python-format -msgid "" -"Already have an account? Then please <a href=\"%(login_url)s\">sign " -"in</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:9 -msgid "Sign Up Closed" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/signup_closed.html:11 -msgid "We are sorry, but the sign up is currently closed." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:8 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:9 -msgid "Verify Your E-mail Address" -msgstr "ÐеÑевÑÑиÑи елекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verification_sent.html:10 -#, python-format -msgid "" -"We have sent an e-mail to <a href=\"mailto:%(email)s\">%(email)s</a> for " -"verification. Follow the link provided to finalize the signup process. " -"Please contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:15 -msgid "" -"This part of the site requires us to verify that\n" -"you are who you claim to be. For this purpose, we require that you\n" -"verify ownership of your e-mail address. " -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:19 -msgid "" -"We have sent an e-mail to you for\n" -"verification. Please click on the link inside this e-mail. Please\n" -"contact us if you do not receive it within a few minutes." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/verified_email_required.html:21 -#, python-format -msgid "" -"<strong>Note:</strong> you can still <a href=\"%(email_url)s\">change " -"your e-mail address</a>." -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/email_confirmation_message.txt:4 -#, python-format -msgid "" -"User %(user_display)s at %(site_name)s has given this as an email " -"address.\n" -"\n" -"To confirm this is correct, go to %(activate_url)s\n" -msgstr "" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_message.txt:9 -#, python-format -msgid "" -"You're receiving this e-mail because you or someone else has requested a " -"password for your user account at %(site_domain)s.\n" -"It can be safely ignored if you did not request a password reset. Click " -"the link below to reset your password.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"In case you forgot, your username is %(username)s.\n" -"\n" -"Thanks for using our site!\n" -msgstr "" -"Ðи оÑÑимали Ñе повÑдомленнÑ, ÑÐ¾Ð¼Ñ Ñо Ñ ÑоÑÑ Ð¿Ð¾Ð¿ÑоÑив пÑо змÑÐ½Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð´Ð»Ñ " -"ÐаÑого акаÑнÑÑ Ð½Ð° ÑайÑÑ %(site_domain)s.\n" -"ЯкÑо ви не пÑоÑили пÑо змÑнÑ, можеÑе пÑоÑгноÑÑваÑи Ñе повÑдомленнÑ. ÐÐ»Ñ " -"змÑни паÑÐ¾Ð»Ñ Ð½Ð°ÑиÑнÑÑÑ Ð¿Ð¾ÑиланнÑ.\n" -"\n" -"%(password_reset_url)s\n" -"\n" -"ÐагадÑÑмо, Ñо ÐаÑе Ñм'Ñ ÐºÐ¾ÑиÑÑÑваÑа Ñе %(username)s.\n" -"\n" -"ÐÑкÑÑмо за коÑиÑÑÑÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ñим ÑайÑом!\n" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/email/password_reset_key_subject.txt:3 -msgid "Password Reset E-mail" -msgstr "ÐовÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²ÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ паÑолÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -msgid "Note" -msgstr "Увага" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/account/snippets/already_logged_in.html:5 -#, python-format -msgid "you are already logged in as %(user_display)s." -msgstr "ви вже ÑвÑйÑли Ñк коÑиÑÑÑÐ²Ð°Ñ %(user_display)s." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/openid/login.html:10 -msgid "OpenID Sign In" -msgstr "УвÑйÑи за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ OpenID" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:8 -msgid "Account Inactive" -msgstr "ÐеакÑивний акаÑнÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/account_inactive.html:10 -msgid "This account is inactive." -msgstr "Цей акаÑÐ½Ñ Ð½ÐµÐ°ÐºÑивний." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:8 -msgid "Social Network Login Failure" -msgstr "Ðеможливо ÑвÑйÑи в ÑиÑÑÐµÐ¼Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ ÑоÑÑалÑÐ½Ð¾Ñ Ð¼ÐµÑежÑ." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/authentication_error.html:10 -#, fuzzy -msgid "" -"An error occurred while attempting to login via your social network " -"account." -msgstr "" -"ÐÑд ÑÐ°Ñ ÑпÑоби ÑвÑйÑи за допомоги облÑкового запиÑÑ Ñ ÑоÑÑалÑнÑй меÑÐµÐ¶Ñ " -"наÑÑÑпила помилка." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:5 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:8 -msgid "Account Connections" -msgstr "ÐовâÑÐ·Ð°Ð½Ñ Ð¾Ð±Ð»ÑÐºÐ¾Ð²Ñ Ð·Ð°Ð¿Ð¸Ñи" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:11 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "" -"ÐожеÑе ÑвÑйÑи Ñ ÐÐ°Ñ Ð°ÐºÐ°ÑÐ½Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð¾Ð±Ð»ÑÐºÐ¾Ð²Ð¸Ñ Ð·Ð°Ð¿Ð¸ÑÑв Ñ Ð½Ð°ÑÑÑÐ¿Ð½Ð¸Ñ " -"ÑиÑÑÐµÐ¼Ð°Ñ :" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:43 -#, fuzzy -msgid "You currently have no social network accounts connected to this account." -msgstr "ÐÐ°Ñ Ð¾Ð±Ð»Ñковий Ð·Ð°Ð¿Ð¸Ñ Ñ ÑоÑÑалÑнÑй меÑÐµÐ¶Ñ Ð¿Ð¾Ð²'Ñзано з ÑÑнÑÑÑим акаÑнÑом." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/connections.html:46 -msgid "Add a 3rd Party Account" -msgstr "ÐодаÑи облÑковий Ð·Ð°Ð¿Ð¸Ñ Ñ ÑнÑÑй ÑиÑÑемÑ" - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:6 -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:10 -msgid "Login Cancelled" -msgstr "СпÑÐ¾Ð±Ñ ÑвÑйÑи в ÑиÑÑÐµÐ¼Ñ ÑкаÑовано." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/login_cancelled.html:14 -#, fuzzy, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to <a " -"href=\"%(login_url)s\">sign in</a>." -msgstr "" -"Ðи виÑÑÑили ÑкаÑÑваÑи ÑпÑÐ¾Ð±Ñ ÑвÑйÑи в ÑиÑÑÐµÐ¼Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð²Ð¶Ðµ ÑÑнÑÑÑого " -"облÑкового запиÑÑ. ЯкÑо Ñе помилка, пеÑейдÑÑÑ Ð´Ð¾ <a " -"href=\"%(login_url)s\">ÑвÑйÑи</a>." - -#: /home/staging/wolnelektury.pl/ve/src/django-allauth/allauth/templates/socialaccount/signup.html:11 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to login to \n" -"%(site_name)s. As a final step, please complete the following form:" -msgstr "" -"ХоÑеÑе ÑкоÑиÑÑаÑиÑÑ Ð²Ð°Ñим облÑковим запиÑом %(provider_name)s Ñоб ÑвÑйÑи " -"на ÑÐ°Ð¹Ñ \n" -"%(site_name)s. ÐÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð½Ñ Ð¿ÑоÑеÑÑ, заповнÑÑÑ Ð±ÑÐ´Ñ Ð»Ð°Ñка наÑÑÑÐ¿Ð½Ñ " -"ÑоÑмÑ:" - diff --git a/wolnelektury/middleware.py b/wolnelektury/middleware.py deleted file mode 100644 index 60b382cd3..000000000 --- a/wolnelektury/middleware.py +++ /dev/null @@ -1,126 +0,0 @@ -# Orignal version taken from http://www.djangosnippets.org/snippets/186/ -# Original author: udfalkso -# Modified by: Shwagroo Team - -import sys -import os -import re -import hotshot, hotshot.stats -import tempfile -import StringIO -import pprint - -from django.conf import settings -from django.db import connection - - -words_re = re.compile( r'\s+' ) - -group_prefix_re = [ - re.compile( "^.*/django/[^/]+" ), - re.compile( "^(.*)/[^/]+$" ), # extract module path - re.compile( ".*" ), # catch strange entries -] - - -class ProfileMiddleware(object): - """ - Displays hotshot profiling for any view. - http://yoursite.com/yourview/?prof - - Add the "prof" key to query string by appending ?prof (or &prof=) - and you'll see the profiling results in your browser. - It's set up to only be available in django's debug mode, is available for superuser otherwise, - but you really shouldn't add this middleware to any production configuration. - - WARNING: It uses hotshot profiler which is not thread safe. - """ - def process_request(self, request): - if (settings.DEBUG or request.user.is_superuser) and request.GET.has_key('prof'): - connection.queries = [] - self.tmpfile = tempfile.mktemp() - self.prof = hotshot.Profile(self.tmpfile) - - def process_view(self, request, callback, callback_args, callback_kwargs): - if (settings.DEBUG or request.user.is_superuser) and request.GET.has_key('prof'): - return self.prof.runcall(callback, request, *callback_args, **callback_kwargs) - - def get_group(self, file): - for g in group_prefix_re: - name = g.findall( file ) - if name: - return name[0] - - def get_summary(self, results_dict, sum): - list = [ (item[1], item[0]) for item in results_dict.items() ] - list.sort( reverse = True ) - list = list[:40] - - res = " tottime\n" - for item in list: - if sum == 0: - foo = 0 - else: - foo = 100*item[0]/sum - res += "%4.1f%% %7.3f %s\n" % (foo, item[0], item[1] ) - - return res - - def summary_for_files(self, stats_str): - stats_str = stats_str.split("\n")[5:] - - mystats = {} - mygroups = {} - - sum = 0 - - for s in stats_str: - fields = words_re.split(s); - if len(fields) == 7: - time = float(fields[2]) - sum += time - file = fields[6].split(":")[0] - - if not file in mystats: - mystats[file] = 0 - mystats[file] += time - - group = self.get_group(file) - if not group in mygroups: - mygroups[ group ] = 0 - mygroups[ group ] += time - - return "<pre>" + \ - " ---- By file ----\n\n" + self.get_summary(mystats,sum) + "\n" + \ - " ---- By group ---\n\n" + self.get_summary(mygroups,sum) + \ - "</pre>" - - def process_response(self, request, response): - if (settings.DEBUG or request.user.is_superuser) and request.GET.has_key('prof'): - self.prof.close() - - out = StringIO.StringIO() - old_stdout = sys.stdout - sys.stdout = out - - stats = hotshot.stats.load(self.tmpfile) - stats.sort_stats('time', 'calls') - stats.print_stats() - - sys.stdout = old_stdout - stats_str = out.getvalue() - - if response and response.content and stats_str: - response.content = "<pre>" + stats_str + "</pre>" - - response.content = "\n".join(response.content.split("\n")[:40]) - - response.content += self.summary_for_files(stats_str) - - os.unlink(self.tmpfile) - - response.content += '\n%d SQL Queries:\n' % len(connection.queries) - response.content += pprint.pformat(connection.queries) - - return response - diff --git a/wolnelektury/migrations/__init__.py b/wolnelektury/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/wolnelektury/migrations/getpaid/0001_initial.py b/wolnelektury/migrations/getpaid/0001_initial.py deleted file mode 100644 index 2ab2d3f64..000000000 --- a/wolnelektury/migrations/getpaid/0001_initial.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import getpaid.abstract_mixin - - -class Migration(migrations.Migration): - - dependencies = [ - ('funding', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Payment', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('amount', models.DecimalField(verbose_name='amount', max_digits=20, decimal_places=4)), - ('currency', models.CharField(max_length=3, verbose_name='currency')), - ('status', models.CharField(default=b'new', max_length=20, verbose_name='status', db_index=True, choices=[(b'new', 'new'), (b'in_progress', 'in progress'), (b'partially_paid', 'partially paid'), (b'paid', 'paid'), (b'failed', 'failed')])), - ('backend', models.CharField(max_length=50, verbose_name='backend')), - ('created_on', models.DateTimeField(auto_now_add=True, verbose_name='created on', db_index=True)), - ('paid_on', models.DateTimeField(default=None, null=True, verbose_name='paid on', db_index=True, blank=True)), - ('amount_paid', models.DecimalField(default=0, verbose_name='amount paid', max_digits=20, decimal_places=4)), - ('external_id', models.CharField(max_length=64, null=True, verbose_name='external id', blank=True)), - ('description', models.CharField(max_length=128, null=True, verbose_name='Description', blank=True)), - ('order', models.ForeignKey(related_name=b'payment', to='funding.Funding')), - ], - options={ - 'ordering': ('-created_on',), - 'verbose_name': 'Payment', - 'verbose_name_plural': 'Payments', - }, - bases=(models.Model, getpaid.abstract_mixin.AbstractMixin), - ), - ] diff --git a/wolnelektury/migrations/getpaid/0002_auto_20151221_1225.py b/wolnelektury/migrations/getpaid/0002_auto_20151221_1225.py deleted file mode 100644 index c1a71771f..000000000 --- a/wolnelektury/migrations/getpaid/0002_auto_20151221_1225.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('getpaid', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='payment', - name='description', - field=models.CharField(max_length=128, null=True, verbose_name='description', blank=True), - ), - migrations.AlterField( - model_name='payment', - name='status', - field=models.CharField(default=b'new', max_length=20, verbose_name='status', db_index=True, choices=[(b'new', 'new'), (b'in_progress', 'in progress'), (b'accepted_for_proc', 'accepted for processing'), (b'partially_paid', 'partially paid'), (b'paid', 'paid'), (b'cancelled', 'cancelled'), (b'failed', 'failed')]), - ), - ] diff --git a/wolnelektury/migrations/getpaid/__init__.py b/wolnelektury/migrations/getpaid/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/wolnelektury/migrations/piston/0001_initial.py b/wolnelektury/migrations/piston/0001_initial.py deleted file mode 100644 index c2939b19a..000000000 --- a/wolnelektury/migrations/piston/0001_initial.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models -from django.conf import settings - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Consumer', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=255)), - ('description', models.TextField()), - ('key', models.CharField(max_length=18)), - ('secret', models.CharField(max_length=32)), - ('status', models.CharField(default=b'pending', max_length=16, choices=[(b'pending', b'Pending approval'), (b'accepted', b'Accepted'), (b'canceled', b'Canceled')])), - ('user', models.ForeignKey(related_name='consumers', blank=True, to=settings.AUTH_USER_MODEL, null=True)), - ], - ), - migrations.CreateModel( - name='Nonce', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('token_key', models.CharField(max_length=18)), - ('consumer_key', models.CharField(max_length=18)), - ('key', models.CharField(max_length=255)), - ], - ), - migrations.CreateModel( - name='Resource', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=255)), - ('url', models.TextField(max_length=2047)), - ('is_readonly', models.BooleanField(default=True)), - ], - ), - migrations.CreateModel( - name='Token', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('key', models.CharField(max_length=18)), - ('secret', models.CharField(max_length=32)), - ('token_type', models.IntegerField(choices=[(1, 'Request'), (2, 'Access')])), - ('timestamp', models.IntegerField()), - ('is_approved', models.BooleanField(default=False)), - ('consumer', models.ForeignKey(to='piston.Consumer')), - ('user', models.ForeignKey(related_name='tokens', blank=True, to=settings.AUTH_USER_MODEL, null=True)), - ], - ), - ] diff --git a/wolnelektury/migrations/piston/__init__.py b/wolnelektury/migrations/piston/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/wolnelektury/settings/__init__.py b/wolnelektury/settings/__init__.py deleted file mode 100644 index 9224484de..000000000 --- a/wolnelektury/settings/__init__.py +++ /dev/null @@ -1,117 +0,0 @@ -# -*- coding: utf-8 -*- -# Django settings for wolnelektury project. -from os import path - -from .basic import * -from .auth import * -from .cache import * -from .celery import * -from .contrib import * -from .custom import * -from .locale import * -from .static import * - - -TEMPLATE_CONTEXT_PROCESSORS = ( - 'django.contrib.auth.context_processors.auth', - 'django.core.context_processors.debug', - 'django.core.context_processors.i18n', - 'django.core.context_processors.media', - 'django.core.context_processors.request', - 'wolnelektury_core.context_processors.extra_settings', - 'search.context_processors.search_form', -) - -MIDDLEWARE_CLASSES = [ - 'django.middleware.csrf.CsrfViewMiddleware', - 'ssify.middleware.SsiMiddleware', - 'django.middleware.cache.UpdateCacheMiddleware', - 'ssify.middleware.PrepareForCacheMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.admindocs.middleware.XViewMiddleware', - 'pagination.middleware.PaginationMiddleware', - 'ssify.middleware.LocaleMiddleware', - 'maintenancemode.middleware.MaintenanceModeMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'fnpdjango.middleware.SetRemoteAddrFromXRealIP', - 'django.middleware.cache.FetchFromCacheMiddleware', -] - -ROOT_URLCONF = 'wolnelektury.urls' - -# These are the ones we should test. -INSTALLED_APPS_OUR = [ - 'wolnelektury_core', - # our - 'ajaxable', - 'api', - 'catalogue', - 'chunks', - 'dictionary', - 'infopages', - 'lesmianator', - 'newtagging', - 'opds', - 'pdcounter', - 'reporting', - 'sponsors', - 'stats', - 'suggest', - 'picture', - 'social', - 'waiter', - 'search', - 'oai', - 'funding', - 'polls', - 'libraries', - ] - -GETPAID_BACKENDS = ( - 'getpaid.backends.payu', -) - -INSTALLED_APPS_CONTRIB = [ - # Should be before django.contrib.admin - 'modeltranslation', - - # external - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.sites', - 'django.contrib.admin', - 'django.contrib.admindocs', - 'django.contrib.staticfiles', - 'pagination', - 'pipeline', - 'piston', - 'piwik', - 'sorl.thumbnail', - 'kombu.transport.django', - 'honeypot', - 'fnpdjango', - 'getpaid', - 'getpaid.backends.payu', - 'ssify', - - #allauth stuff - 'uni_form', - 'allauth', - 'allauth.account', - 'allauth.socialaccount', - 'allauth.socialaccount.providers.openid', - 'allauth.socialaccount.providers.facebook', - #'allauth.socialaccount.providers.twitter', - ] - -INSTALLED_APPS = INSTALLED_APPS_OUR + INSTALLED_APPS_CONTRIB - -# Load localsettings, if they exist -try: - from wolnelektury.localsettings import * -except ImportError: - pass diff --git a/wolnelektury/settings/auth.py b/wolnelektury/settings/auth.py deleted file mode 100644 index 4d3ea224a..000000000 --- a/wolnelektury/settings/auth.py +++ /dev/null @@ -1,19 +0,0 @@ -AUTHENTICATION_BACKENDS = [ - 'django.contrib.auth.backends.ModelBackend', - 'allauth.account.auth_backends.AuthenticationBackend', -] -ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 2 -LOGIN_URL = '/uzytkownik/login/' - -LOGIN_REDIRECT_URL = '/' - -SOCIALACCOUNT_AUTO_SIGNUP = False -SOCIALACCOUNT_QUERY_EMAIL = True - - -SOCIALACCOUNT_PROVIDERS = \ - { 'openid': - { 'SERVERS': - [dict(id='google', - name='Google', - openid_url='https://www.google.com/accounts/o8/id')]}} diff --git a/wolnelektury/settings/basic.py b/wolnelektury/settings/basic.py deleted file mode 100644 index 30812e516..000000000 --- a/wolnelektury/settings/basic.py +++ /dev/null @@ -1,42 +0,0 @@ -from os import path -from .paths import PROJECT_DIR - -DEBUG = False -TEMPLATE_DEBUG = DEBUG -MAINTENANCE_MODE = False - -ADMINS = [ - # ('Your Name', 'your_email@domain.com'), -] - -MANAGERS = ADMINS - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. - 'NAME': path.join(PROJECT_DIR, 'dev.db'), # Or path to database file if using sqlite3. - 'USER': '', # Not used with sqlite3. - 'PASSWORD': '', # Not used with sqlite3. - 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. - } -} - -SOLR = "http://localhost:8983/solr/wl/" -SOLR_TEST = "http://localhost:8983/solr/wl_test/" - -# Local time zone for this installation. Choices can be found here: -# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name -# although not all choices may be available on all operating systems. -# If running in a Windows environment this must be set to the same as your -# system time zone. -TIME_ZONE = 'Europe/Warsaw' -USE_TZ = True - -SITE_ID = 1 - -# List of callables that know how to import templates from various sources. -TEMPLATE_LOADERS = [ - 'django.template.loaders.filesystem.Loader', - 'django.template.loaders.app_directories.Loader', -# 'django.template.loaders.eggs.Loader', -] diff --git a/wolnelektury/settings/cache.py b/wolnelektury/settings/cache.py deleted file mode 100644 index a9cc70f3b..000000000 --- a/wolnelektury/settings/cache.py +++ /dev/null @@ -1,18 +0,0 @@ -CACHES = { - 'default': { - 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', - 'LOCATION': [ - '127.0.0.1:11211', - ] - }, - 'ssify': { - 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', - 'TIMEOUT': None, - 'KEY_PREFIX': 'ssify', - 'LOCATION': [ - '127.0.0.1:11211', - ], - }, -} - -CACHE_MIDDLEWARE_SECONDS = 24 * 60 * 60 diff --git a/wolnelektury/settings/celery.py b/wolnelektury/settings/celery.py deleted file mode 100644 index 77abfa658..000000000 --- a/wolnelektury/settings/celery.py +++ /dev/null @@ -1,5 +0,0 @@ -BROKER_URL = 'django://' - -CELERY_EAGER_PROPAGATES_EXCEPTIONS = True -CELERY_SEND_TASK_ERROR_EMAILS = True -CELERY_ACCEPT_CONTENT = ['pickle'] diff --git a/wolnelektury/settings/contrib.py b/wolnelektury/settings/contrib.py deleted file mode 100644 index f0e8430a5..000000000 --- a/wolnelektury/settings/contrib.py +++ /dev/null @@ -1,17 +0,0 @@ -HONEYPOT_FIELD_NAME = 'miut' -PAGINATION_INVALID_PAGE_RAISES_404 = True -THUMBNAIL_QUALITY = 95 - -MODELTRANSLATION_DEFAULT_LANGUAGE = 'pl' -MODELTRANSLATION_PREPOPULATE_LANGUAGE = 'pl' - -MIGRATION_MODULES = { - 'getpaid' : 'wolnelektury.migrations.getpaid', - 'piston' : 'wolnelektury.migrations.piston', -} - -GETPAID_ORDER_DESCRIPTION = "{% load funding_tags %}{{ order|sanitize_payment_title }}" - -PIWIK_URL = '' -PIWIK_SITE_ID = 0 -PIWIK_TOKEN = '' diff --git a/wolnelektury/settings/custom.py b/wolnelektury/settings/custom.py deleted file mode 100644 index 8830ebe6f..000000000 --- a/wolnelektury/settings/custom.py +++ /dev/null @@ -1,17 +0,0 @@ -# limit number of filtering tags -MAX_TAG_LIST = 6 - -NO_SEARCH_INDEX = False -NO_CUSTOM_PDF = True - -CATALOGUE_DEFAULT_LANGUAGE = 'pol' -PUBLISH_PLAN_FEED = 'http://redakcja.wolnelektury.pl/documents/track/editor-proofreading/?published=false' - -# limit rate for ebooks creation -CATALOGUE_CUSTOMPDF_RATE_LIMIT = '1/m' - -# set to 'new' or 'old' to skip time-consuming test -# for TeX morefloats library version -LIBRARIAN_PDF_MOREFLOATS = None - -LATEST_BLOG_POSTS = "http://nowoczesnapolska.org.pl/feed/?cat=-135" diff --git a/wolnelektury/settings/locale.py b/wolnelektury/settings/locale.py deleted file mode 100644 index 5069051f9..000000000 --- a/wolnelektury/settings/locale.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -from os import path -from .paths import PROJECT_DIR - -# If you set this to False, Django will make some optimizations so as not -# to load the internationalization machinery. -USE_I18N = True -USE_L10N = True - -LOCALE_PATHS = [ - path.join(PROJECT_DIR, 'locale-contrib') -] - -# Language code for this installation. All choices can be found here: -# http://www.i18nguy.com/unicode/language-identifiers.html -LANGUAGE_CODE = 'pl' - -gettext = lambda s: s - -LANGUAGES = tuple(sorted([ - ('pl', u'polski'), - ('de', u'Deutsch'), - ('en', u'English'), - ('lt', u'lietuvių'), - ('fr', u'français'), - ('ru', u'ÑÑÑÑкий'), - ('es', u'español'), - ('uk', u'ÑкÑаÑнÑÑка'), -# ('jp', u'æ¥æ¬èª'), - ('it', u'italiano'), -], key=lambda x: x[0])) diff --git a/wolnelektury/settings/paths.py b/wolnelektury/settings/paths.py deleted file mode 100644 index b3ef30438..000000000 --- a/wolnelektury/settings/paths.py +++ /dev/null @@ -1,3 +0,0 @@ -from os import path - -PROJECT_DIR = path.dirname(path.abspath(path.dirname(__file__))) diff --git a/wolnelektury/settings/static.py b/wolnelektury/settings/static.py deleted file mode 100644 index a5d7bb7c4..000000000 --- a/wolnelektury/settings/static.py +++ /dev/null @@ -1,174 +0,0 @@ -from os import path -from .paths import PROJECT_DIR - -# Absolute path to the directory that holds media. -# Example: "/home/media/media.lawrence.com/" -MEDIA_ROOT = path.join(PROJECT_DIR, '../media/') -STATIC_ROOT = path.join(PROJECT_DIR, '../static/') -SEARCH_INDEX = path.join(PROJECT_DIR, '../search_index/') - -# URL that handles the media served from MEDIA_ROOT. Make sure to use a -# trailing slash if there is a path component (optional in other cases). -# Examples: "http://media.lawrence.com", "http://example.com/media/" -MEDIA_URL = '/media/' -STATIC_URL = '/static/' - -# CSS and JavaScript file groups - -PIPELINE = { - 'STYLESHEETS': { - 'main': { - # styles both for mobile and for big screen - 'source_filenames': [ - 'css/jquery.countdown.css', - - 'sponsors/css/sponsors.css', - - 'uni_form/uni-form.css', - 'uni_form/default.uni-form.css', - - 'css/ui-lightness/jquery-ui-1.8.16.custom.css', - - 'scss/main.scss', - ], - 'output_filename': 'css/compressed/main.css', - }, - 'book': { - 'source_filenames': [ - 'css/master.book.css', - ], - 'output_filename': 'css/compressed/book.css', - }, - 'book_text': { - 'source_filenames': [ - 'scss/book_text.scss', - 'css/new.book.css', - - 'css/master.picture.css', - ], - 'output_filename': 'css/compressed/book_text.css', - }, - 'picture': { - 'source_filenames': [ - 'css/master.book.css', - 'css/master.picture.css', - ], - 'output_filename': 'css/compressed/picture.css', - }, - 'player': { - 'source_filenames': [ - 'jplayer/jplayer.blue.monday.css', - 'player/player.css', - ], - 'output_filename': 'css/compressed/player.css', - }, - 'simple': { - 'source_filenames': ('css/simple.css',), - 'output_filename': 'css/compressed/simple.css', - }, - 'widget': { - 'source_filenames': ('scss/widget.scss',), - 'output_filename': 'css/compressed/widget.css', - }, - }, - 'JAVASCRIPT': { - 'base': { - 'source_filenames': ( - 'js/contrib/jquery.cycle.min.js', - 'js/contrib/jquery.jqmodal.js', - 'js/contrib/jquery.form.js', - 'js/contrib/jquery.countdown.js', 'js/contrib/jquery.countdown-pl.js', - 'js/contrib/jquery.countdown-de.js', 'js/contrib/jquery.countdown-uk.js', - 'js/contrib/jquery.countdown-es.js', 'js/contrib/jquery.countdown-lt.js', - 'js/contrib/jquery.countdown-ru.js', 'js/contrib/jquery.countdown-fr.js', - - 'js/contrib/jquery-ui-1.8.16.custom.min.js', - - 'js/locale.js', - 'js/dialogs.js', - 'js/base.js', - 'pdcounter/pdcounter.js', - 'sponsors/js/sponsors.js', - 'player/openplayer.js', - 'js/search.js', - 'funding/funding.js', - - 'uni_form/uni-form.js', - ), - 'output_filename': 'js/base.min.js', - }, - 'player': { - 'source_filenames': [ - 'jplayer/jquery.jplayer.min.js', - 'jplayer/jplayer.playlist.min.js', - 'player/player.js', - ], - 'output_filename': 'js/player.min.js', - }, - 'book': { - 'source_filenames': [ - 'js/contrib/jquery.eventdelegation.js', - 'js/contrib/jquery.scrollto.js', - 'js/contrib/jquery.highlightfade.js', - 'js/book_text/other.js', - 'js/book.js', - - 'js/contrib/raphael-min.js', - 'js/contrib/progressSpin.min.js', - 'js/picture.js', - ], - 'output_filename': 'js/book.min.js', - }, - 'book_text': { - 'source_filenames': [ - 'js/contrib/jquery.form.js', - 'js/contrib/jquery.jqmodal.js', - 'js/book_text/*.js', - 'js/locale.js', - 'js/dialogs.js', - - 'js/contrib/jquery.highlightfade.js', - 'js/contrib/raphael-min.js', - 'player/openplayer.js', - 'js/contrib/progressSpin.min.js', - 'js/picture.js', - ], - 'output_filename': 'js/book_text.js', - }, - 'book_ie': { - 'source_filenames': ('js/contrib/ierange-m2.js',), - 'output_filename': 'js/book_ie.min.js', - }, - 'widget': { - 'source_filenames': ( - 'js/contrib/jquery.js', - 'js/contrib/jquery-ui-1.8.16.custom.min.js', - 'js/search.js', - 'js/widget_run.js', - ), - 'output_filename': 'js/widget.min.js', - }, - }, - 'CSS_COMPRESSOR': None, - 'JS_COMPRESSOR': 'pipeline.compressors.jsmin.JSMinCompressor', - 'COMPILERS': ( - 'pipeline.compilers.sass.SASSCompiler', - # We could probably use PySCSS instead, - # but they have some serious problems, like: - # https://github.com/Kronuz/pyScss/issues/166 (empty list syntax) - # https://github.com/Kronuz/pyScss/issues/258 (bad @media order) - #'pyscss_compiler.PySCSSCompiler', - ) -} - -#~ STATICFILES_STORAGE = 'fnpdjango.utils.pipeline_storage.GzipPipelineCachedStorage' - -#PIPELINE_PYSCSS_BINARY = '/usr/bin/env pyscss' -#PIPELINE_PYSCSS_ARGUMENTS = '' - - -STATICFILES_FINDERS = [ - 'django.contrib.staticfiles.finders.FileSystemFinder', - 'django.contrib.staticfiles.finders.AppDirectoriesFinder', - 'pipeline.finders.PipelineFinder', -] diff --git a/wolnelektury/urls.py b/wolnelektury/urls.py deleted file mode 100644 index a77a3d1b4..000000000 --- a/wolnelektury/urls.py +++ /dev/null @@ -1,84 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -from django.conf.urls import include, patterns, url -from django.conf import settings -from django.contrib import admin -from django.views.generic import RedirectView -import wolnelektury_core.views - - -urlpatterns = patterns('wolnelektury_core.views', - url(r'^$', 'main_page', name='main_page'), - url(r'^planowane/$', 'publish_plan', name='publish_plan'), - url(r'^widget\.html$', 'widget', name='widget'), - - url(r'^zegar/$', 'clock', name='clock'), - - # Authentication - url(r'^uzytkownik/$', 'user_settings', name='user_settings'), - url(r'^uzytkownik/login/$', wolnelektury_core.views.LoginFormView(), name='login'), - url(r'^uzytkownik/signup/$', wolnelektury_core.views.RegisterFormView(), name='register'), - url(r'^uzytkownik/logout/$', 'logout_then_redirect', name='logout'), - url(r'^uzytkownik/zaloguj-utworz/$', wolnelektury_core.views.LoginRegisterFormView(), name='login_register'), - - # Includes. - url(r'^latests_blog_posts.html$', - wolnelektury_core.views.latest_blog_posts, - name='latest_blog_posts'), -) - -urlpatterns += patterns('', - url(r'^katalog/', include('catalogue.urls')), - url(r'^opds/', include('opds.urls')), - url(r'^sugestia/', include('suggest.urls')), - url(r'^lesmianator/', include('lesmianator.urls')), - url(r'^przypisy/', include('dictionary.urls')), - url(r'^raporty/', include('reporting.urls')), - url(r'^info/', include('infopages.urls')), - url(r'^ludzie/', include('social.urls')), - url(r'^uzytkownik/', include('allauth.urls')), - url(r'^czekaj/', include('waiter.urls')), - url(r'^wesprzyj/', include('funding.urls')), - url(r'^ankieta/', include('polls.urls')), - url(r'^biblioteki/', include('libraries.urls')), - url(r'^chunks/', include('chunks.urls')), - url(r'^sponsors/', include('sponsors.urls')), - - # Admin panel - url(r'^admin/catalogue/book/import$', 'catalogue.views.import_book', name='import_book'), - url(r'^admin/catalogue/picture/import$', 'picture.views.import_picture', name='import_picture'), - url(r'^admin/doc/', include('django.contrib.admindocs.urls')), - url(r'^admin/', include(admin.site.urls)), - - # API - (r'^api/', include('api.urls')), - # OAIPMH - (r'^oaipmh/', include('oai.urls')), - - url(r'^szukaj/', include('search.urls')), - - # Static files - url(r'^%s(?P<path>.*)$' % settings.MEDIA_URL[1:], 'django.views.static.serve', - {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}), - url(r'^%s(?P<path>.*)$' % settings.STATIC_URL[1:], 'django.views.static.serve', - {'document_root': settings.STATIC_ROOT, 'show_indexes': True}), - url(r'^i18n/', include('django.conf.urls.i18n')), -) - -urlpatterns += patterns('', - # old static pages - redirected - url(r'^1procent/$', RedirectView.as_view( - url='http://nowoczesnapolska.org.pl/wesprzyj_nas/', permanent=True)), - url(r'^epub/$', RedirectView.as_view( - url='/katalog/lektury/', permanent=False)), - url(r'^mozesz-nam-pomoc/$', RedirectView.as_view( - url='/info/mozesz-nam-pomoc', permanent=True)), - url(r'^o-projekcie/$', RedirectView.as_view( - url='/info/o-projekcie', permanent=True)), - url(r'^widget/$', RedirectView.as_view( - url='/info/widget', permanent=True)), - url(r'^wolontariat/$', RedirectView.as_view( - url='/info/mozesz-nam-pomoc/', permanent=False)), -) diff --git a/wolnelektury/utils.py b/wolnelektury/utils.py deleted file mode 100644 index 0c256e5df..000000000 --- a/wolnelektury/utils.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -import pytz -from django.utils import timezone -from django.conf import settings - -tz = pytz.timezone(settings.TIME_ZONE) - -def localtime_to_utc(localtime): - return timezone.utc.normalize( - tz.localize(localtime) - ) - -def utc_for_js(dt): - return dt.strftime('%Y/%m/%d %H:%M:%S UTC') diff --git a/wolnelektury/wsgi.py b/wolnelektury/wsgi.py deleted file mode 100644 index d688df00f..000000000 --- a/wolnelektury/wsgi.py +++ /dev/null @@ -1,21 +0,0 @@ -import os -import os.path -import sys - -ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - -# Add apps and lib directories to PYTHONPATH -sys.path = [ - ROOT, - os.path.join(ROOT, 'apps'), - os.path.join(ROOT, 'lib'), - os.path.join(ROOT, 'lib/librarian'), -] + sys.path - - -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "wolnelektury.settings") - -# This application object is used by the development server -# as well as any WSGI server configured to use this file. -from django.core.wsgi import get_wsgi_application -application = get_wsgi_application()