.PHONY: deploy
-deploy: turniej/localsettings.py
+deploy: src/core/localsettings.py
pip install -r requirements.txt
- ./manage.py migrate --noinput
- ./manage.py collectstatic --noinput
+ src/manage.py migrate --noinput
+ src/manage.py collectstatic --noinput
+++ /dev/null
-html {
- margin: 0;
-}
-
-body {
- margin: 0;
- padding: 0;
-
- font-size: .75em;
- font-family: Verdana,Arial,Helvetica,sans-serif;
-}
-
-#body-wrapper {
- padding: 1em;
- color: #2F4110;
- background: url("/static/edition1/bg.png") repeat-x scroll 0 0 #FFFFFF;
-}
-#body {
- max-width: 900px;
- margin:auto;
-}
-#new-edition {
- background: #191919;
- color: #989898;
- text-align: center;
- padding: .8em 0;
-}
-#new-edition a {
- color: white;
-}
-
-
-
-#content {
- width: 420px;
- margin-top: 2em;
-}
-
-
-
-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;
-}
-a:hover {
- border-bottom: 1px dotted;
-}
-
-
-.plain li {
- list-style: none;
-}
-
-li {
- margin: 1em;
-}
-
-#termin-wrap {
- margin-top: 3em;
-}
-
-
-.clr {
- clear: both;
-}
-
-#footer {
- border-top: 1px solid #ddd;
- margin-top: 7em;
- clear: both;
-
-}
-#footer img {
- margin: 30px 13px;
- vertical-align: middle;
-}
-#footer a:hover {
- border: none;
-}
-
-
-blockquote {
- font-size: .9em;
- font-style: italic;
- margin-left: 350px;
- margin-right: 50px;
- margin-bottom: 4em;
-}
-blockquote p {
- margin: .5em 0 0 0;
-}
-
-.more {
- text-align: right;
-}
-
-.uwaga {
- border: 1px solid #ddd;
- padding: 1em;
- background-color: #ff8;
-}
-
-.social {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-
-
-.tworz {
- font-size: 1.5em;
- padding: .8em;
- background: #555;
- color: white;
- margin: 1em auto;
- display: block;
- width: 10em;
- text-align: center;
- border: 1px solid #000;
- border-radius: 1em;
-}
-.tworz:hover {
- border: 1px solid #000;
- background: #666;
-}
-
-.last {
- list-style: none;
- padding: 0;
-}
-.last li {
- margin-left: 0;
-}
-
-.poet-list {
- padding: 0;
- margin: 1em 0;
-}
-.poet-list li {
- float: left;
- width: 30%;
- list-style: none;
- padding: .8em 0;
- border: 1px solid #888;
- background: #eee;
- border-radius: 1em;
- text-align: center;
-}
-.poet-list li:before {
- content: "» ";
-}
-
-.poet-description {
- max-width: 60em;
-}
-
+++ /dev/null
-<!DOCTYPE html>
-<html>
-<head>
- <title>Turniej Elektrybałtów{% block "extratitle" %}{% endblock %}</title>
- <meta charset="utf-8" />
-
- <link rel="shortcut icon" href="{{ STATIC_URL }}img/favicon.ico" />
- <style type="text/css">
- @import "{{ STATIC_URL }}edition1/style.css";
- </style>
-</head>
-
-<body>
-
-<div id="fb-root"></div>
-<script>(function(d, s, id) {
- var js, fjs = d.getElementsByTagName(s)[0];
- if (d.getElementById(id)) {return;}
- js = d.createElement(s); js.id = id;
- js.src = "//connect.facebook.net/pl_PL/all.js#xfbml=1";
- fjs.parentNode.insertBefore(js, fjs);
-}(document, 'script', 'facebook-jssdk'));</script>
-<script src="http://0.s-nk.pl/script/nk_widgets/nk_widget_fajne_embed"></script>
-
-<div id="body-wrapper">
-<div id="body">
-{% block "body" %}{% endblock %}
-</div>
-</div>
-
-<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
- {lang: 'pl'}
-</script>
-{% load piwik_tags %}
-{% tracking_code %}
-</body>
-
-
-</html>
+++ /dev/null
-{% extends "edition1/base.html" %}
-
-{% block "body" %}
-
-<div style="float:right">
-<img src="{{ STATIC_URL }}img/turniej.png" style='float:right; margin-bottom: 2em;' alt="logo Turnieju Elektrybałtów: frontalny widok maszynki do mielenia mięsa" />
-<h2>Ostatnie wiersze:</h2>
-<ul class="last">
-{% for poem in last %}
- <li><a href="{{ poem.get_absolute_url }}">{{ poem.poet.name}}, {{ poem.pretty_title }}</a><br/>{{ poem.text|truncatewords:5 }}</li>
-{% endfor %}
-</ul>
-
-</div>
-
-<div id="content">
-<h1>Turniej Elektrybałtów</h1>
-<h2>Konkurs automatycznej poezji</h2>
-
-<div class="social">
-<span style="position:relative; top: -5px;" >
- <div class="fb-like" data-href="http://turniej.wolnelektury.pl" data-send="false" data-layout="button_count" data-width="150" data-show-faces="false"></div>
-</span>
-<g:plusone annotation="bubble" href="http://turniej.wolnelektury.pl"></g:plusone>
-<script>
- new nk_fajne({
- url: "http://turniej.wolnelektury.pl",
- type: 4,
- color: 0,
- title: "Turniej Elektrybałtów",
- image: "http://turniej.wolnelektury.pl/turniej.png",
- description: "Turniej Elektrybałtów - otwarty konkurs na najlepszego automatycznego poetę."
- });
-</script>
-</div>
-
-
-<div class="uwaga">
-<p>Konkurs został rozstrzygnięty! Zakończenie odbyło się podczas <a href='http://domenapubliczna.org'>Dnia Domeny Publicznej 2012</a>.</p>
-
-<p>Zwycięzcą został <a href='/poezja/centonista/'><strong>Centonista</strong></a>. Gratulujemy!</p>
-
-<p>Dodatkowo, <a href='/poezja/ala/'>Ała!</a> otrzymał wyróżnienie.</p>
-</div>
-
-<p>Znacie <a href="http://www.wolnelektury.pl/lesmianator/">Leśmianatora</a>?
-To niewielki skrypt miksujący na życzenie wiersze z
-<a href="http://www.wolnelektury.pl">Wolnych Lektur</a>.
-Powstał jako żart, a niechcący
-<a href="http://www.ha.art.pl/felietony/1515-mariusz-pisarski-piekit-siezyca-lesmianator.html">
-„odciął się od dosłownie rozumianego dziedzictwa dadaizmu i surrealizmu”</a>.
-Idziemy dalej – ogłaszamy <strong>otwarty konkurs na najlepszego automatycznego poetę</strong>!</p>
-
-<p>Konkurs wystartował 12 września 2011 roku – z okazji <strong>90 rocznicy urodzin
-Stanisława Lema</strong>. Termin nadsyłania prac upłynął
-10 listopada 2011 roku.
-Prezentujemy nadesłane prace w akcji.
-Kliknij przycisk, a jeden
-z <a href="{% url 'poetry_main' %}">programów-uczestników</a> napisze dla Ciebie wiersz:</p>
-
-<a style="margin: 1em auto;" class="tworz" href="{% url 'poetry_new' %}">Twórz-że się!</a>
-
-<p><strong>Zobacz <a href="{% url 'poetry_main' %}">wszystkie programy</a>.</strong> Ich kod źródłowy
-<a href="https://github.com/turniej">jest dostępny</a> na wolnej licencji
-– nic więc nie stoi na przeszkodzie, by rozwijać je dalej.</p>
-
-<p>Spośród wygenerowanych przz nas propozycji autorzy programów wybrali po trzy utwory.
-<a href="{% url 'poetry_contest' %}">Zobacz wiersze, które wystartowały w konkursie.</a></p>
-
-<p>Do zabawy zapraszamy wszystkich – i tych, którzy świetnie programują, i tych, którzy
-programować dopiero się uczą. Tych, którzy nie rozstają się z tomikiem
-wierszy, i tych, którzy na ten widok dostają gęsiej skórki. Chcemy wybrać
-program, który będzie w najciekawszy i najbardziej twórczy sposób miksował
-dostępną w Wolnych Lekturach literaturę. W tej konkurencji liczy się przede
-wszystkim wyobraźnia, pomysł i chęć do twórczej zabawy.</p>
-
-<p>Więcej informacji:</p>
-
-<ul class='plain'>
- <li><a href='wiecej/'>Przebieg konkursu</a> – czyli jakie będą kolejne etapy
- i co jest nagrodą?</li>
-
- <li><a href='technikalia/'>Technikalia</a> – czyli co i jak trzeba zrobić,
- żeby wziąć udział.</li>
-
- <li><a href='regulamin/'>Regulamin</a> – czyli trochę koniecznych formalności.</li>
-</ul>
-
-<p>Wszelkiego rodzaju pytania i wątpliwości proszę kierować na adres
-<a href="mailto:radoslaw.czajka@nowoczesnapolska.org.pl">radoslaw.czajka@nowoczesnapolska.org.pl</a></p>
-
-<div class='clr'></div>
-</div>
-
-
-<div id="footer">
-<a target='_blank' href='http://nowoczesnapolska.org.pl'><img src='{{ STATIC_URL }}img/fnp.png' alt='Fundacja Nowoczesna Polska' title='Fundacja Nowoczesna Polska' /></a>
-<a target='_blank' href='http://www.wolnelektury.pl'><img src='{{ STATIC_URL }}img/wl.png' alt='Wolne Lektury' title='Wolne Lektury' /></a>
-<a target='_blank' href='http://koed.org.pl'><img src='{{ STATIC_URL }}img/koed.png' alt='Koalicja Otwartej Edukacji' title='Koalicja Otwartej Edukacji' /></a>
-<a target='_blank' href='http://centrumcyfrowe.pl'><img src='{{ STATIC_URL }}img/cc.png' alt='Centrum Cyfrowe' title='Centrum Cyfrowe' /></a>
-<a target='_blank' href='http://di.com.pl'><img src='{{ STATIC_URL }}img/di.png' alt='Dziennik Internautów' title='Dziennik Internautów' /></a>
-<a target='_blank' href='http://solaris.lem.pl'><img src='{{ STATIC_URL }}img/lempl.png' alt='Lem.pl' title='Lem.pl' /></a>
-
-</div>
-
-
-{% endblock %}
+++ /dev/null
-{% extends "edition1/base.html" %}
-
-{% block "body" %}
-
-<h1>
-<a href='/'><img src="{{ STATIC_URL }}img/turniej-maly.png" style='float:left; margin-right: 10px; margin-top: -13px' /></a>
-Turniej Elektrybałtów</h1>
-<h2>
-Konkurs automatycznej poezji</h2>
-
-<blockquote>
- <p>Gdy wskaźniki amplifikacyjne pokazały, że moc liryczna dochodzi
- do maksimum, Trurl nieznacznie tylko drżącą ręką przerzucił wielki
- wyłącznik i niemal natychmiast głosem lekko ochrypłym, lecz emanującym
- dziwnie sugestywnym czarem, maszyna rzekła:</p>
-
- <p>– Chrzęskrzyboczek pacionkociewiczarokrzysztofoniczmy.</p>
- <p>– Czy to już wszystko? – spytał po dłuższej chwili niezwykle uprzejmy
- Klapaucjusz.</p>
- <p>(Stanisław Lem, „Cyberiada”, „Wyprawa pierwsza A, czyli Elektrybałt Trurla”)</p>
-</blockquote>
-
-
-
-<p>Konkurs startuje 12 września 2011 roku – z okazji <strong>90 rocznicy urodzin
-Stanisława Lema</strong>. Termin nadsyłania prac upływa <del>z końcem października</del> <ins>10 listopada</ins> 2011 roku.
-Powinno być dość czasu na dopracowanie swoich pomysłów.</p>
-
-<p>Konkurs będzie wyglądał następująco:</p>
-
-<ul>
- <li>Do <del>końca października</del> <ins>10 listopada</ins> czekamy na zgłoszenia w postaci programów.
- Warunkiem dopuszczalności jest udostępnienie kodu źródłowego na wolnej
- licencji <a href="http://www.gnu.org/licenses/agpl.html">GNU AGPL</a>
- (<a href="http://www.gnu.org/licenses/gpl-howto.pl.html">jak to zrobić?)</a>.
- Szerzej o tym, czym powinno być złoszenie –
- w dziale <a href='../technikalia/'>Technikalia</a>.</li>
-
- <li>Użycie wolnej licencji nie oznacza, że kod źródłowy musi być
- od razu publicznie dostępny. Programy zostaną przez nas
- upublicznione – ale dopiero po upłynięciu terminu nadsyłania zgłoszeń.
- Uczestnik może oczywiście samodzielnie upublicznić swoje zgłoszenie
- wcześniej – odradzamy to jednak ze względu na komplikacje w przypadku
- plagiatu.</li>
-
- <li>Po uruchomieniu nadesłanych przez uczestników programów dla każdego
- uczestnika wygenerujemy <strong>20</strong> wierszy, które odeślemy autorowi
- programu. Wybierze on <strong>3</strong> z nich, które następnie zostaną
- poddane ocenie jury. W składzie jury znajdą się zarówno osoby związane
- z programowaniem, jak i przedstawiciele świata kultury.</li>
-
- <li>Główną nagrodą jest 16-tomowa kolekcja książek Stanisława Lema.
- W ramach dodatkowej nagrody podczas zakończenia konkursu
- odbędzie się próba odczytania zwycięskich wierszy na głos.</li>
-
-</ul>
-
-<p>Programy biorące udział w konkursie zostaną też uruchomione
-<a href="http://turniej.wolnelektury.pl">na stronie Turnieju</a> –
-internauci będą więc mieli możliwość samodzielnego „wyklikania” sobie własnego
-wiersza przy użyciu każdego z nich.</p>
-
-<p class='more'><a href="..">Powrót do strony głównej</a></p>
-
-{% endblock %}
+++ /dev/null
-{% extends "edition1/base.html" %}
-
-{% block "body" %}
-
-
-<h1>
-<a href='..'><img src="{{ STATIC_URL }}img/turniej-maly.png" style='float:left; margin-right: 10px; margin-top: -13px' /></a>
-Turniej Elektrybałtów</h1>
-<h2>Konkurs automatycznej poezji</h2>
-
-<blockquote>
- <p>Ustaliwszy, w czym rzecz, zwierzchność żeglugi kosmicznej zwróciła się
- oficjalnie do Trurla z żądaniem natychmiastowej likwidacji należącego doń
- urządzenia, które zakłócało liryką spokój publiczny i zagrażało zdrowiu
- pasażerów.</p>
-
- <p>(Stanisław Lem, „Cyberiada”, „Wyprawa pierwsza A, czyli Elektrybałt Trurla”)</p>
-</blockquote>
-
-
-
-<h3>Regulamin konkursu</h3>
-
-
-
-
-<ul>
- <li>Organizatorem konkursu jest fundacja Nowoczesna Polska. </li>
-
- <li>Przedmiotem konkursu jest program komputerowy tworzący remiksy literackie
- na podstawie utworów znajdujących się w bilbiotece internetowej Wolne Lektury.
- Program biorący udział w konkursie musi być udostępniony na wolnej
- licencji <a href="http://www.gnu.org/licenses/agpl.html">GNU AGPL</a>
- (<a href="http://www.gnu.org/licenses/gpl-howto.pl.html">jak to zrobić?)</a>.</li>
-
- <li>Konkurs trwa od 12 września do <del>31 października</del> <ins>10 listopada</ins> 2011 roku.
- Konkurs ma charakter otwarty. Aby wziąć w nim udział udział,
- należy wysłać gotowy program na adres
- <a href="mailto:radoslaw.czajka@nowoczesnapolska.org.pl">radoslaw.czajka@nowoczesnapolska.org.pl</a>
-
- z klauzulą:
- <cite>Zgłaszam się do konkursu „Turniej Elektrybałtów” i oświadczam, że
- znam i akceptuję jego regulamin</cite>.</li>
-
- <li>Nagrodą główną jest 16-tomowa kolekcja dzieł Stanisława Lema. Nie ma
- możliwości zamiany nagrody na jej równowartość pieniężną.</li>
-
- <li>Organizator może odwołać konkurs w każdym czasie, bez podawania
- przyczyny. W takim przypadku uczestnikom konkursu nie przysługuje żadna
- rekompensata. Uczestnicy zgłaszając swój udział w konkursie automatycznie
- wyrażają zgodę na publikację ich twórczości w internecie oraz wyrażają
- zgodę na wykorzystanie wizerunku w materiałach promocyjnych konkursu
- oraz materiałach promocyjnych Fundacji Nowoczesna Polska.</li>
-
- <li>Organizator zastrzega sobie prawo do odrzucenia zgłoszenia programu,
- którego działanie może zagrażać stabilności, responsywności albo bezpieczeństwu
- serwera, a także takich, których poprawne uruchomienie okaże się niemożliwe
- lub poważnie utrudnione.</li>
-
- <li>Organizator konkursu nie ponosi odpowiedzialności za wszelkie
- roszczenia osób trzecich wynikające z tytułu wykorzystania materiałów
- zgłoszonych przez uczestników konkursu jako własnych. Prace naruszające
- prawa autorskie będą dyskwalifikowane.</li>
-
- <li>Organizator zatrzega sobie prawo wprowadzenia zmian w regulaminie
- konkursu.</li>
-</ul>
-
-
-
-
-<p class='more'><a href="..">Powrót do strony głównej</a></p>
-
-{% endblock %}
+++ /dev/null
-{% extends "edition1/base.html" %}
-
-{% block "body" %}
-
-<h1>
-<a href='..'><img src="{{ STATIC_URL }}img/turniej-maly.png" style='float:left; margin-right: 10px; margin-top: -13px' /></a>
-Turniej Elektrybałtów</h1>
-<h2>Konkurs automatycznej poezji</h2>
-
-<blockquote>
- <p>Gdy atoli, z lekka kulejąc, zbliżył się do maszyny, ta,
- na widok obcęgów w jego dłoni i błysków desperacji w oku, buchnęła taką
- namiętną liryką błagając o łaskę, że rozszlochany Trurl cisnął narzędzia
- i wrócił do siebie, brnąc po kolana w nowych utworach elektroducha, które
- sięgały mu do pół piersi, zaścielając szemrzącym oceanem papieru całą halę.</p>
-
- <p>(Stanisław Lem, „Cyberiada”, „Wyprawa pierwsza A, czyli Elektrybałt Trurla”)</p>
-</blockquote>
-
-
-
-<h3>Wymogi wobec zgłaszanych programów</h3>
-
-<ul>
- <li>Nie nakładamy ograniczeń na wybór języka programowania. Program
- powinien dać się jednak uruchomić w środowisku GNU/Linux przy użyciu
- wolnodostępnych narzędzi.</li>
-
- <li>Warunkiem dopuszczalności jest udostępnienie kodu źródłowego na wolnej
- licencji <a href="http://www.gnu.org/licenses/agpl.html">GNU AGPL</a>
-
- (<a href="http://www.gnu.org/licenses/gpl-howto.pl.html">jak to zrobić?)</a>
- Programy zostaną upublicznione – ale dopiero po upłynięciu terminu
- nadsyłania zgłoszeń. Warunek ten oznacza w szczególności, że zgłoszenie
- musi zawierać kod źródłowy. Nie wchodzą w grę żadne skompilowane, pośrednie,
- zaciemnione wersje – kod powinien zostać udostępniony w takiej postaci,
- nad jaką normalnie pracuje programista.</li>
-
- <li>Program przy tworzeniu wierszy musi w istotny sposób korzystać
- z zasobów Wolnych Lektur. Elementy wynikowych tekstów nie mogą być
- zaszyte w treści samego programu. Program nie może też korzystać
- podczas pracy z innych źródeł informacji – musi być jasne, że program
- <em>naprawdę</em> miksuje dostarczoną mu literaturę, a nie odtwarza nagraną
- uprzednio taśmę. Nie jest wymagane korzystanie z wszystkich utworów –
- program może miksować np. tylko poezję romantyczną albo tylko fragmenty
- oznaczone wybranymi motywami literackimi.</li>
-
- <li>Generowanie wiersza nie powinno trwać więcej niż kilka sekund.
- W ramach procesu instalacji programu dopuszczalne (i wskazane!) jest
- natomiast uprzednie zgromadzenie niezbędnych informacji wynikających
- z analizy tekstów źródłowych. Najlepiej więc dostarczyć dwa programy
- (albo jeden z różnymi opcjami uruchomienia) – jeden pobierający utwory,
- analizujący je i zapisujący efekty tej analizy, a drugi generujący
- wiersze na podstawie zgromadzonej uprzednio informacji. Sądzimy, że
- ok. 10MiB powinno wystarczyć każdemu
- <a href="http://en.wikiquote.org/wiki/Talk:Bill_Gates#640K.2F1MB">[sic!]</a>,
- ale w razie potrzeby będziemy się starali być elastyczni.</li>
-
- <li>Program powinien wypisać wiersz na standardowe wyjście w postaci
- czystego tekstu, najlepiej używając kodowania UTF-8 (czyli tego samego,
- które jest używane w plikach źródłowych).</li>
-
- <li>Maksymalna długość wiersza wynosi 1000 znaków – dalsze znaki zostaną
- odcięte. Poza tym ograniczeniem długość i forma wiersza pozostaje w gestii
- autora i jego programu.</li>
-
- <li>Odrzucone zostana programy, które będą usiłowały w jakikolwiek
- sposób zagrozić stabilności lub bezpieczeństwu serwera.</li>
-</ul>
-
-
-<h3>W jaki sposób pobierać utwory?</h3>
-
-<p>Źródłowe utwory można pobierać na kilka sposobów:</p>
-
-<ul>
- <li>Korzystając z <a href="http://www.wolnelektury.pl/api/">API Wolnych Lektur</a>.</li>
-
- <li>Pobierając <a href="http://www.wolnelektury.pl/media/packs/xml-all.zip">
- paczkę źródłowych plików XML</a> i pracując z nimi bądź to samodzielnie,
- bądź korzystając
- z <a href="https://github.com/fnp/librarian">narzędzi stworzonych na potrzeby Wolnych Lektur</a>.</li>
-
- <li>Pobierając paczkę plików tekstowych. Przygotowaliśmy do wyboru dwie:
- <a href="http://www.wolnelektury.pl/media/packs/txt-all.zip">ze wszystkimi utworami</a>
- oraz <a href="http://www.wolnelektury.pl/media/packs/txt-liryka.zip">tylko z liryką</a>.</li>
-</ul>
-
-<p>Wszystkie pliki źródłowe są zapisane przy użyciu kodowania UTF-8.</p>
-
-<p>Przykładowy program (napisany w Pythonie), obrazujący wykorzystanie
-każdego z tych sposobów, można znaleźć
-<a href="https://github.com/fnp/lesmianator">w naszym repozytorium na GitHubie</a>.
-Jest to po prostu Leśmianator – w wersji przygotowanej zgodnie z warunkami
-turnieju.</p>
-
-
-<h3>Gdzie wysyłać zgłoszenia?</h3>
-
-<p>Zgłoszenia, a także wszelkiego rodzaju pytania i wątpliwości prosimy kierować na adres
-<a href="mailto:radoslaw.czajka@nowoczesnapolska.org.pl">radoslaw.czajka@nowoczesnapolska.org.pl</a>.
-Prosimy też o dołączenie do każdego zgłoszenia klauzuli o treści:
-<cite>Zgłaszam się do konkursu „Turniej Elektrybałtów” i oświadczam, że
-znam i akceptuję jego <a href="{% url 'e1_rules_page' %}">regulamin</a></cite>.
-
-</p>
-
-
-
-
-<p class='more'><a href="{% url 'e1_main_page' %}">Powrót do strony głównej</a></p>
-
-
-{% endblock %}
-
+++ /dev/null
-from django.conf.urls import url
-from django.views.generic import TemplateView
-from . import views
-
-
-urlpatterns = [
- url(r'^$', views.home, name='e1_main_page'),
- url(r'^regulamin/$', TemplateView.as_view(template_name='edition1/rules.html'),
- name='e1_rules_page'),
- url(r'^wiecej/$', TemplateView.as_view(template_name='edition1/more.html'),
- name='e1_more_page'),
- url(r'^technikalia/$', TemplateView.as_view(template_name='edition1/technical.html'),
- name='e1_technical_page'),
-]
+++ /dev/null
-from django.shortcuts import render
-from poetry.models import Poem
-
-def home(request):
- last = Poem.objects.all().order_by('-created_at')[:10]
- return render(request, "edition1/home.html", locals())
+++ /dev/null
-html {
- margin: 0;
-}
-
-body {
- margin: 0;
- padding: 0;
-
- background: #191919;
- color: #989898;
-
- font-family: Georgia,serif;
-}
-
-#body-wrapper {
- color: black;
- background: #F7F7F7;
- padding-bottom: 3em;
-}
-#body {
- max-width: 900px;
- margin:auto;
- padding: 1em;
-}
-
-
-#content {
- width: 480px;
-}
-
-
-
-h1 {
- font: bold 2.2em Georgia,serif;
- margin-bottom: .2em;
-}
-
-
-h2 {
- font-size: 1.1em;
- margin:0;
-}
-
-a {
- color: #0D777E;
- text-decoration: none;
-}
-a:hover {
- border-bottom: 1px dotted;
-}
-
-
-.plain li {
- list-style: none;
-}
-
-li {
- margin: 1em;
-}
-
-#termin-wrap {
- margin-top: 3em;
-}
-
-
-.clr {
- clear: both;
-}
-
-footer {
- background: #191919;
- color: #989898;
- margin: 0 auto 0 auto;
- padding: 1em;
- clear: both;
- text-align: center;
-}
-footer img {
- margin: 0 20px;
- vertical-align: middle;
-}
-footer a:hover {
- border: none;
-}
-
-
-blockquote {
- font-size: .9em;
- font-style: italic;
- margin-left: 350px;
- margin-right: 50px;
- margin-bottom: 4em;
-}
-blockquote p {
- margin: .5em 0 0 0;
-}
-
-.more {
- text-align: right;
-}
-
-.uwaga {
- border: 1px solid #ddd;
- padding: 0 1em;
- margin: 1em 0;
- background: white;
- box-shadow: 2px 2px 2px #DDDDDD;
-}
-
-.social {
- margin: .5em 0 2em 0;
-}
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE html>
-<html>
-<head>
- <title>Turniej Wolnych Lektur{% block "extratitle" %}{% endblock %}</title>
- <meta charset="utf-8" />
-
- <link rel="shortcut icon" href="{{ STATIC_URL }}img/favicon.ico" />
- <style type="text/css">
- @import "{{ STATIC_URL }}edition2/style.css";
- @import "{{ STATIC_URL }}js/jquery.countdown.css";
- </style>
-</head>
-
-<body>
-
-<div id="body-wrapper">
-<div id="body">
-{% block "body" %}{% endblock %}
-</div>
-</div>
-
-<footer>
-<a href='http://nowoczesnapolska.org.pl'><img src='{{ STATIC_URL }}img/fnp_black.png' alt='Fundacja Nowoczesna Polska' title='Fundacja Nowoczesna Polska' /></a>
-<a href='http://wolnelektury.pl'><img src='{{ STATIC_URL }}img/wl_black.png' alt='Wolne Lektury' title='Wolne Lektury' /></a>
-</footer>
-
-{% load piwik_tags %}
-{% tracking_code %}
-</body>
-
-
-</html>
+++ /dev/null
-{% extends "edition2/base.html" %}
-
-{% block "body" %}
-
-<div style="float:right">
-<img src="{{ STATIC_URL }}img/turniej.png" style='float:right; margin-bottom: 2em;' alt="logo Turnieju Elektrybałtów: frontalny widok maszynki do mielenia mięsa" />
-</div>
-
-<div id="content">
-<h1>II Turniej Wolnych Lektur</h1>
-<h2>Edycja wizualna</h2>
-<p class="social">
- {% load fnp_share %}
- {% share 'http://turniej.wolnelektury.pl' 'Turniej Wolnych Lektur' %}
-</p>
-
-<div class="uwaga">
-<p>Zdecydowaliśmy się nie rozstrzygać II edycji Turnieju Wolnych Lektur
-ze względu na niewystarczającą liczbę i poziom zgłoszeń.</p>
-
-<p>Zobacz wyniki pierwszej edycji – <a href="{% url 'e1_main_page' %}">Turnieju Elektrybałtów</a>.</p>
-</div>
-
-<p>Wszelkie pytania i wątpliwości proszę kierować na adres
-<a href="mailto:turniej@nowoczesnapolska.org.pl">turniej@nowoczesnapolska.org.pl</a></p>
-
-<div class='clr'></div>
-</div>
-
-
-{% endblock %}
+++ /dev/null
-{% extends "edition2/base.html" %}
-
-{% block "body" %}
-
-<h1>
- <a href='{% url "e2_main_page" %}' style="float:left;">
- <img src="{{ STATIC_URL }}img/turniej-maly.png"
- style='margin-right: .5em;' /></a>
- II Turniej Wolnych Lektur</h1>
-<h2>Edycja wizualna</h2>
-<p class="social">
- {% load fnp_share %}
- {% share 'http://turniej.wolnelektury.pl' 'Turniej Wolnych Lektur' %}
-</p>
-
-
-
-
-<p>Konkurs startuje 4 stycznia 2013 roku. Termin nadsyłania prac upływa <del>15</del> <ins>22</ins> lutego 2013 roku.
-Powinno być dość czasu na dopracowanie swoich pomysłów.</p>
-
-<h3>Przebieg konkursu:</h3>
-
-<ol>
- <li>Konkurs startuje 4 stycznia 2013 roku.</li>
- <li>Termin nadsyłania prac upływa <strong><del>15</del> <ins>22</ins> lutego</strong> 2013 roku.</li>
- <li>Warunkiem dopuszczenia do konkursu jest udostępnienie swojego zgłoszenia
- (w przypadku zgłoszenia programu – kodu źródłowego) na
- <a href="http://freedomdefined.org/Licenses">wolnej licencji</a>.
- Informacje o tym, jak to zrobić, znajdują się np. na stronach
- <a href="http://www.gnu.org/licenses/gpl-howto.pl.html">projektu GNU</a>
- czy <a href="http://creativecommons.org/choose/">Creative Commons</a>.</li>
- <li>Zgłoszenia zostaną udostępnione publicznie na stronie konkursu po
- zamknięciu etapu zgłoszeń. Autorzy nie muszą (choć oczywiście mogą)
- upubliczniać ich wcześniej.</li>
- <li>Do końca lutego jury konkursowe wybierze zwyciązcę konkursu.</li>
- <li>Główną nagrodą jest czytnik e-booków Amazon Kindle z kompletem
- książek z <a href="http://wolnelektury.pl">Wolnych Lektur</a> w formacie MOBI.</li>
-</ol>
-
-<p class='more'><a href="..">Powrót do strony głównej</a></p>
-
-{% endblock %}
+++ /dev/null
-{% extends "edition2/base.html" %}
-
-{% block "body" %}
-
-
-<h1>
- <a href='{% url "e2_main_page" %}' style="float:left;">
- <img src="{{ STATIC_URL }}img/turniej-maly.png"
- style='margin-right: .5em;' /></a>
- II Turniej Wolnych Lektur</h1>
-<h2>Edycja wizualna</h2>
-<p class="social">
- {% load fnp_share %}
- {% share 'http://turniej.wolnelektury.pl' 'Turniej Wolnych Lektur' %}
-</p>
-
-
-
-
-<h3>Regulamin konkursu</h3>
-
-
-<ol>
- <li>Organizatorem konkursu jest fundacja Nowoczesna Polska. </li>
-
- <li>Przedmiotem konkursu jest wizualizacja oparta na Wolnych Lekturach.
- Wszystkie zgłoszenia (w przypadku programów – ich kod źródłowy) biorące
- udział w konkursie muszą być udostępnione na
- <a href="http://freedomdefined.org/Licenses">wolnej licencji</a>.
- Wizualizacje muszą być dostępne
- w <a href="http://pl.wikipedia.org/wiki/Format_otwarty">otwartym formacie</a>.</li>
-
- <li>Konkurs trwa od 4 stycznia do <del>15</del> <ins>22</ins> lutego 2013 roku i ma charakter otwarty.
- Jedna osoba może wysłać więcej niż jedno zgłoszenie.
- Aby wziąć udział udział w konkursie, należy wysłać swoje zgłoszenie na adres
- <a href="mailto:turniej@nowoczesnapolska.org.pl">turniej@nowoczesnapolska.org.pl</a>
- z klauzulą:
- <cite>Zgłaszam się do konkursu „II Turniej Wolnych Lektur” i oświadczam, że
- znam i akceptuję jego regulamin</cite>.</li>
-
- <li>Nagrodą główną jest czytnik Amazon Kindle z kompletem książek
- z Wolnych Lektur w formacie MOBI. Nie ma możliwości zamiany nagrody na jej
- równowartość pieniężną.</li>
-
- <li>Organizator może odwołać konkurs w każdym czasie, bez podawania
- przyczyny. W takim przypadku uczestnikom konkursu nie przysługuje żadna
- rekompensata. Uczestnicy zgłaszając swój udział w konkursie automatycznie
- wyrażają zgodę na wykorzystanie ich wizerunku w materiałach promocyjnych
- konkursu oraz materiałach promocyjnych fundacji Nowoczesna Polska.</li>
-
- <li>Organizator zastrzega sobie prawo do odrzucenia zgłoszenia, którego
- udostępnienie na stronie konkursu mogłoby zagrażać stabilności, responsywności
- albo bezpieczeństwu serwera albo oprogramowania użytkownika, a także takich,
- których poprawne uruchomienie okaże się niemożliwe lub poważnie utrudnione.</li>
-
- <li>Organizator konkursu nie ponosi odpowiedzialności za wszelkie
- roszczenia osób trzecich wynikające z tytułu wykorzystania materiałów
- zgłoszonych przez uczestników konkursu jako własnych. Prace naruszające
- prawa autorskie będą dyskwalifikowane.</li>
-
- <li>Organizator zatrzega sobie prawo wprowadzenia zmian w regulaminie
- konkursu.</li>
-</ul>
-
-
-
-
-<p class='more'><a href="..">Powrót do strony głównej</a></p>
-
-{% endblock %}
+++ /dev/null
-{% extends "edition2/base.html" %}
-
-{% block "body" %}
-
-
-<h1>
- <a href='{% url "e2_main_page" %}' style="float:left;">
- <img src="{{ STATIC_URL }}img/turniej-maly.png"
- style='margin-right: .5em;' /></a>
- II Turniej Wolnych Lektur</h1>
-<h2>Edycja wizualna</h2>
-<p class="social">
- {% load fnp_share %}
- {% share 'http://turniej.wolnelektury.pl' 'Turniej Wolnych Lektur' %}
-</p>
-
-
-<h3>Wymogi techniczne wobec zgłoszeń</h3>
-
-<ul>
- <li>Format wizualizacji powinien być otwarty. Jeśli zgłoszenie zawiera
- oprogramowanie, powinno dać się ono uruchomić w środowisku GNU/Linux
- przy użyciu wolnodostępnych narzędzi.</li>
-
- <li>Warunkiem dopuszczenia do konkursu jest udostępnienie swojego zgłoszenia
- (w przypadku zgłoszenia programu – jego kodu źródłowego) na
- <a href="http://freedomdefined.org/Licenses">wolnej licencji</a>.
- Informacje o tym, jak to zrobić, znajdują się np. na stronach
- <a href="http://www.gnu.org/licenses/gpl-howto.pl.html">projektu GNU</a>
- czy <a href="http://creativecommons.org/choose/">Creative Commons</a>.</li>
-
- <li>Wizualizacja powinna dotyczyć zasobów
- <a href="http://wolnelektury.pl">Wolnych Lektur</a>.
- Nie jest wymagane wykorzystanie całości tych zasobów – można pokazać np.
- tylko wybrany utwór. Można też poddać dane uprzedniej obróbce.
- Za przykład niech posłuży <a href="http://teatr.wolnelektury.pl">prosty teatrzyk</a>
- na podstawie pliku XML wyświetlający „Romea i Julię” w postaci animacji SVG.</li>
-
- <li>Odrzucone zostaną zgłoszenia, które będą usiłowały w jakikolwiek
- sposób zagrozić stabilności lub bezpieczeństwu serwera albo użytkownika.</li>
-</ul>
-
-
-<h3>Gdzie wysyłać zgłoszenia?</h3>
-
-<p>Zgłoszenia, a także wszelkiego rodzaju pytania i wątpliwości prosimy kierować na adres
-<a href="mailto:turniej@nowoczesnapolska.org.pl">turniej@nowoczesnapolska.org.pl</a>.
-Prosimy też o dołączenie do każdego zgłoszenia klauzuli o treści:
-<cite>Zgłaszam się do konkursu „II Turniej Wolnych Lektur” i oświadczam, że
- znam i akceptuję jego <a href="{% url 'e2_rules_page' %}">regulamin</a></cite>.
-
-</p>
-
-
-
-
-<p class='more'><a href="{% url 'e2_main_page' %}">Powrót do strony głównej</a></p>
-
-
-{% endblock %}
-
+++ /dev/null
-from django.conf.urls import url
-from django.views.generic import TemplateView
-
-urlpatterns = [
- url(r'^$', TemplateView.as_view(template_name='edition2/home.html'),
- name='e2_main_page'),
- url(r'^regulamin/$', TemplateView.as_view(template_name='edition2/rules.html'),
- name='e2_rules_page'),
- url(r'^wiecej/$', TemplateView.as_view(template_name='edition2/more.html'),
- name='e2_more_page'),
- url(r'^technikalia/$', TemplateView.as_view(template_name='edition2/technical.html'),
- name='e2_technical_page'),
-]
+++ /dev/null
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
-from django.db import models, migrations
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ]
-
- operations = [
- migrations.CreateModel(
- name='Poem',
- fields=[
- ('id', models.AutoField(verbose_name='ID', auto_created=True, serialize=False, primary_key=True)),
- ('slug', models.SlugField()),
- ('title', models.CharField(null=True, max_length=255, blank=True)),
- ('text', models.TextField()),
- ('created_at', models.DateTimeField(db_index=True, auto_now_add=True)),
- ('seen_at', models.DateTimeField(auto_now_add=True)),
- ('view_count', models.IntegerField(default=1)),
- ('for_contest', models.BooleanField(default=False)),
- ('in_contest', models.BooleanField(default=False)),
- ],
- options={
- },
- bases=(models.Model,),
- ),
- migrations.CreateModel(
- name='Poet',
- fields=[
- ('id', models.AutoField(verbose_name='ID', auto_created=True, serialize=False, primary_key=True)),
- ('name', models.CharField(max_length=50)),
- ('path', models.CharField(max_length=255)),
- ('slug', models.SlugField(unique=True)),
- ('author', models.CharField(max_length=128, blank=True)),
- ('url', models.CharField(max_length=255, blank=True)),
- ('description', models.TextField(blank=True)),
- ('first_line_title', models.BooleanField(default=False)),
- ('skip_first_lines', models.IntegerField(default=0)),
- ],
- options={
- },
- bases=(models.Model,),
- ),
- migrations.AddField(
- model_name='poem',
- name='poet',
- field=models.ForeignKey(to='poetry.Poet', on_delete=models.CASCADE),
- preserve_default=True,
- ),
- ]
+++ /dev/null
-import os
-import subprocess
-from django.db import models
-from django.urls import reverse
-from django.conf import settings
-from poetry.utils import get_hash
-
-
-class Poet(models.Model):
- name = models.CharField(max_length=50)
- path = models.CharField(max_length=255)
- slug = models.SlugField(max_length=50, unique=True, db_index=True)
- author = models.CharField(max_length=128, blank=True)
- url = models.CharField(max_length=255, blank=True)
- description = models.TextField(blank=True)
- first_line_title = models.BooleanField(default=False)
- skip_first_lines = models.IntegerField(default=0)
-
- def __str__(self):
- return self.name
-
- def get_absolute_url(self):
- return reverse('poetry_poet', kwargs={'slug': self.slug})
-
- def write(self):
- curdir = os.getcwd()
- os.chdir(os.path.dirname(self.path))
- proc = subprocess.Popen(self.path,
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- os.chdir(curdir)
- stdout, stderr = proc.communicate()
- text = str(stdout, "utf-8", errors="ignore")[:1000]
- slug = get_hash(text)
- title = ''
- if self.first_line_title:
- title, text = text.split('\n', 1)
- if self.skip_first_lines:
- text = text.split('\n', self.skip_first_lines)[-1]
- text = text.strip('\n')
- poem = self.poem_set.create(
- slug=slug,
- text=text,
- title=title
- )
- return poem
-
- def make_for_contest(self):
- assert not self.poem_set.filter(for_contest=True).exists()
- for i in range(settings.POETRY_POEMS_FOR_CONTEST):
- p = self.write()
- p.for_contest = True
- p.save()
- return self.poem_set.filter(for_contest=True)
-
- def contest_poems(self):
- return self.poem_set.filter(in_contest=True)
-
-
-class Poem(models.Model):
- slug = models.SlugField(max_length=50, db_index=True)
- title = models.CharField(max_length=255, null=True, blank=True)
- text = models.TextField()
- poet = models.ForeignKey(Poet, on_delete=models.CASCADE)
- created_at = models.DateTimeField(auto_now_add=True, editable=False, db_index=True)
- seen_at = models.DateTimeField(auto_now_add=True, editable=False)
- view_count = models.IntegerField(default=1)
-
- for_contest = models.BooleanField(default=False)
- in_contest = models.BooleanField(default=False)
-
- def __str__(self):
- oneliner = "%s, %s" % (self.poet.name, self.pretty_title())
- oneliner += " [%s…]" % (" ".join(self.text.split()[:5]))
- return oneliner
-
- def get_absolute_url(self):
- return reverse('poetry_poem', kwargs={'slug': self.slug})
-
- def pretty_title(self):
- return self.title or "***"
-
- def visit(self):
- self.view_count += 1
- self.seen_at = datetime.now()
- self.save()
+++ /dev/null
-body {
- font-size: 16px;
- font: Georgia, "Times New Roman", serif;
- line-height: 1.5em;
- margin: 0;
-}
-
-a {
- color: blue;
- text-decoration: none;
-}
-
-a:hover {
- border-bottom: 1px dotted;
-}
-
-#book-text {
- margin: 3em;
- max-width: 36em;
-}
-
-/* ================================== */
-/* = Header with logo and menu = */
-/* ================================== */
-#header {
- margin: 3.4em 0 0 1.4em;
-}
-
-img {
- border: none;
-}
-
-
-#menu {
- position: fixed;
- left: 0em;
- top: 0em;
- width: 100%;
- height: 1.5em;
- background: #333;
- color: #FFF;
- opacity: 0.9;
- z-index: 99;
-}
-
-#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;
-}
-
-
-/* =================================================== */
-/* = 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 {
- margin-top: 3em;
- margin-left: 2.5em;
- font-size: 0.875em;
-}
-
-#footnotes p, #footnotes ul {
- margin: 1.5em 0;
-}
-
-#footnotes .permalink {
- font-size: .75em;
-}
-
-/* =================== */
-/* = Custom elements = */
-/* =================== */
-span.author {
- font-size: 0.5em;
- display: block;
- line-height: 1.5em;
- margin-bottom: 0.25em;
-}
-
-span.author a {
- color: inherit;
-}
-
-span.author a {
- color: inherit;
-}
-
-
-/* =================================== */
-/* = Hide some elements for printing = */
-/* =================================== */
-
-@media print {
- #menu {display: none;}
-}
+++ /dev/null
-{% extends "edition1/base.html" %}
-
-{% block "body" %}
-
-<h1>
-<a href='{% url "e1_main_page" %}'><img src="{{ STATIC_URL }}img/turniej-maly.png" style='float:left; margin-right: 10px; margin-top: -13px' /></a>
-Turniej Elektrybałtów: utwory wybrane do konkursu</h1>
-
-<div class="social">
-<span style="position:relative; top: -5px;" >
- <div class="fb-like" data-href="http://turniej.wolnelektury.pl" data-send="false" data-layout="button_count" data-width="150" data-show-faces="false"></div>
-</span>
-<g:plusone annotation="bubble" href="http://turniej.wolnelektury.pl"></g:plusone>
-<script>
- new nk_fajne({
- url: "http://turniej.wolnelektury.pl",
- type: 4,
- color: 0,
- title: "Turniej Elektrybałtów",
- image: "http://turniej.wolnelektury.pl/turniej.png",
- description: "Turniej Elektrybałtów - otwarty konkurs na najlepszego automatycznego poetę."
- });
-</script>
-</div>
-
-<div style='clear: both'></div>
-
-{% for poet in poets %}
- <h2><a href="{{ poet.get_absolute_url }}">{{ poet }}</a></h2>
- <ul class='plain'>
- {% for poem in poet.contest_poems %}
- <li><a href="{{ poem.get_absolute_url }}">{{ poem }}</a></li>
- {% endfor %}
- </ul>
-{% endfor %}
-</ul>
-
-{% endblock %}
+++ /dev/null
-{% extends "edition1/base.html" %}
-
-{% block "body" %}
-
-<h1>
-<a href='{% url "e1_main_page" %}'><img src="{{ STATIC_URL }}img/turniej-maly.png" style='float:left; margin-right: 10px; margin-top: -13px' /></a>
-Turniej Elektrybałtów</h1>
-
-<div class="social">
-<span style="position:relative; top: -5px;" >
- <div class="fb-like" data-href="http://turniej.wolnelektury.pl" data-send="false" data-layout="button_count" data-width="150" data-show-faces="false"></div>
-</span>
-<g:plusone annotation="bubble" href="http://turniej.wolnelektury.pl"></g:plusone>
-<script>
- new nk_fajne({
- url: "http://turniej.wolnelektury.pl",
- type: 4,
- color: 0,
- title: "Turniej Elektrybałtów",
- image: "http://turniej.wolnelektury.pl/turniej.png",
- description: "Turniej Elektrybałtów - otwarty konkurs na najlepszego automatycznego poetę."
- });
-</script>
-</div>
-
-<h2>Uczestnicy:</h2>
-<ul class='poet-list'>
-{% for poet in poets %}
- <li><a href="{{ poet.get_absolute_url }}">{{ poet }}</a>
- (<a href="{% url 'poetry_new' poet.slug %}">Twórz-że!</a>)</li>
-{% endfor %}
-</ul>
-
-<div style='clear: both'></div>
-
-<a class='tworz' href="{% url 'poetry_new' %}">Twórz-że się!</a>
-
-<h2><a href="{% url 'poetry_contest' %}">Utwory do konkursu zostały wybrane!</a></h2>
-
-<p>Spośród wygenerowanych przz nas propozycji autorzy programów wybrali po trzy utwory.</p>
-<p><a href="{% url 'poetry_contest' %}">Zobacz wiersze startujące w konkursie!</a></p>
-</p>
-
-
-
-
-<h2>Ostatnio opublikowane utwory:</h2>
-<ul class='plain'>
-{% for poem in last %}
- <li><a href="{{ poem.get_absolute_url }}">{{ poem }}</a></li>
-{% endfor %}
-</ul>
-
-{% endblock %}
+++ /dev/null
-<!DOCTYPE html>
-<html>
-<head>
- <title>Turniej Elektrybałtów: {{ poem }}</title>
- <meta charset="utf-8" />
-
- <link rel="shortcut icon" href="{{ STATIC_URL }}img/favicon.ico" />
- <style type="text/css">
- @import "{{ STATIC_URL }}poetry/poem.css";
- </style>
-</head>
-
-<body>
-
-<div id="fb-root"></div>
-<script>(function(d, s, id) {
- var js, fjs = d.getElementsByTagName(s)[0];
- if (d.getElementById(id)) {return;}
- js = d.createElement(s); js.id = id;
- js.src = "//connect.facebook.net/pl_PL/all.js#xfbml=1";
- fjs.parentNode.insertBefore(js, fjs);
-}(document, 'script', 'facebook-jssdk'));</script>
-<script src="http://0.s-nk.pl/script/nk_widgets/nk_widget_fajne_embed"></script>
-
- <div id="menu">
- <a href='{% url "poetry_new" %}' class='menu-link'>Twórzże się jeszcze raz!</a>
- <span style='float: right'>Turniej Elektrybałtów</a>
- </div>
-
- <div id="header">
- <div id="logo">
- <a href="{% url "e1_main_page" %}"><img src="{{ STATIC_URL }}img/turniej-maly.png" alt="logo Turnieju Elektrybałtów" /></a>
- </div>
- </div>
-
- <div id="book-text">
- <h1>
- <span class="author"><a href="{{ poem.poet.get_absolute_url }}">{{ poem.poet.name }}</a></span>
- <span class="title">{% if poem.title %}{{ poem.title }}{% else %}***{% endif %}</span>
- </h1>
- {{ poem.text|linebreaksbr }}
- <div id="footnotes" >
- <h3>O utworze</h3>
- <p>Autor: <a href="{{ poem.poet.get_absolute_url }}">{{ poem.poet.name }}</a> (<a href="{% url 'poetry_main' %}">wszyscy autorzy</a>).
- <br/>Zobacz <a href="{% url 'poetry_new' poem.poet.slug %}">nowy wiersz</a> tego autora,
- albo <a href="{% url 'poetry_new' %}">nowy wiersz dowolnego autora</a>.</p>
-
-
-
-<div>
-<h3>Podziel się wierszem!</h3>
-<span style="position:relative; top: -5px;" >
- <div class="fb-like" data-href="http://turniej.wolnelektury.pl{{ poem.get_absolute_url }}" data-send="false" data-layout="button_count" data-width="150" data-show-faces="false"></div>
-</span>
-<g:plusone annotation="bubble" href="http://turniej.wolnelektury.pl{{ poem.get_absolute_url }}"></g:plusone>
-
-<script>
- new nk_fajne({
- url: "http://turniej.wolnelektury.pl{{ poem.get_absolute_url }}",
- type: 4,
- color: 0,
- title: "wiersz",
- image: "http://turniej.wolnelektury.pl/turniej.png",
- description: "{{ poem }}"
- });
-</script>
- <br/>
- albo użyj linku:<br/>
- <a class="permalink" href="{{ poem.get_absolute_url }}">http://turniej.wolnelektury.pl{{ poem.get_absolute_url }}</a>
-</div>
-
-
-
-
- </div>
-
-<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
- {lang: 'pl'}
-</script>
-{% load piwik_tags %}
-{% tracking_code %}
-</body>
-
-
-</html>
-
-
+++ /dev/null
-{% extends "edition1/base.html" %}
-
-
-{% block "extratitle" %}: {{ poet.name }}{% endblock %}
-
-
-{% block "body" %}
-
-<h1>
-<a href='{% url "e1_main_page" %}'><img src="{{ STATIC_URL }}img/turniej-maly.png" style='float:left; margin-right: 10px; margin-top: -13px' /></a>
-{{ poet.name }}</h1>
-
-<div>
-<span style="position:relative; top: -5px;" >
- <div class="fb-like" data-send="false" data-layout="button_count" data-width="150" data-show-faces="false"></div>
-</span>
-<g:plusone annotation="bubble"></g:plusone>
-<script>
- new nk_fajne({
- url: "{{ request.build_absolute_uri }}",
- type: 4,
- color: 0,
- title: "{{ poet.name }}",
- image: "http://turniej.wolnelektury.pl/turniej.png",
- description: "Turniej Elektrybałtów - konkurs na najlepszego automatycznego poetę."
- });
-</script>
-</div>
-
-<p><a href="{% url 'poetry_main' %}">Zobacz wszystkich autorów.</a></p>
-
-<div class="poet-description">
-
-<p>Autor programu: <strong>{{ poet.author }}</strong></p>
-
-{{ poet.description|linebreaks }}
-
-<p>Kod źródłowy: <a href="{{ poet.url }}">{{ poet.url }}</a></p>
-
-<a class="tworz" href="{% url 'poetry_new' poet.slug %}">Twórz-że!</a>
-
-</div>
-
-<h2>Utwory w konkursie (<a href="{% url 'poetry_contest' %}">zobacz wszystkie</a>)</h2>
-<ul class='plain'>
-{% for poem in in_contest %}
- <li><a href="{{ poem.get_absolute_url }}">{{ poem }}</a></li>
-{% endfor %}
-</ul>
-
-<h2>Ostatnio opublikowane utwory:</h2>
-<ul class='plain'>
-{% for poem in last %}
- <li><a href="{{ poem.get_absolute_url }}">{{ poem }}</a></li>
-{% endfor %}
-</ul>
-
-{% endblock %}
+++ /dev/null
-from django.conf.urls import url
-from . import views
-
-
-urlpatterns = [
- url(r'^wiersz/(?P<slug>[a-zA-Z0-9-]+)/$', views.poem, name='poetry_poem'),
-
- url(r"^$", views.main, name="poetry_main"),
- url(r"^nowy/$", views.new, name="poetry_new"),
- url(r"^konkurs/$", views.contest, name="poetry_contest"),
- url(r"^(?P<slug>[a-zA-Z0-9-]+)/$", views.poet, name="poetry_poet"),
- url(r"^(?P<slug>[a-zA-Z0-9-]+)/nowy/$", views.new, name="poetry_new"),
-]
+++ /dev/null
-import time
-
-from base64 import urlsafe_b64encode
-from hashlib import sha1
-
-
-def get_hash(seed):
- sha_digest = sha1(('%d%s' % (time.time(), str(seed))
- ).encode('utf-8', 'replace')).digest()
- return urlsafe_b64encode(sha_digest).decode('latin1').replace('=', '').replace('_', '-').lower()
+++ /dev/null
-from django.shortcuts import render, get_object_or_404
-from poetry.models import Poet, Poem
-
-
-def new(request, slug=None):
- if slug is not None:
- poet = get_object_or_404(Poet, slug=slug)
- else:
- poet = Poet.objects.order_by('?')[0]
-
- poem = poet.write()
- return render(request, "poetry/poem.html", locals())
-
-
-def poem(request, slug):
- poem = get_object_or_404(Poem, slug=slug)
- return render(request, "poetry/poem.html", locals())
-
-
-def poet(request, slug):
- poet = get_object_or_404(Poet, slug=slug)
- last = poet.poem_set.order_by('-created_at')[:20]
- in_contest = poet.poem_set.filter(in_contest=True).order_by('created_at')
- return render(request, "poetry/poet.html", locals())
-
-
-def main(request):
- poets = Poet.objects.all().order_by('?')
- last = Poem.objects.all().order_by('-created_at')[:20]
- return render(request, "poetry/main.html", locals())
-
-
-def contest(request):
- poets = Poet.objects.all().order_by('?')
- return render(request, "poetry/contest.html", locals())
-
+++ /dev/null
-#!/usr/bin/env python
-import os
-import sys
-
-ROOT = os.path.dirname(os.path.abspath(__file__))
-sys.path = [
- os.path.join(ROOT, 'apps'),
-] + sys.path
-
-if __name__ == "__main__":
- os.environ.setdefault("DJANGO_SETTINGS_MODULE", "turniej.settings")
-
- from django.core.management import execute_from_command_line
-
- execute_from_command_line(sys.argv)
--- /dev/null
+ADMINS = (
+ #('Name', 'E-mail'),
+)
+
+MANAGERS = (
+ #('Name', 'E-mail'),
+)
+
+# on
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
+ 'NAME': '', # 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.
+ 'PORT': '', # Set to empty string for default. Not used with sqlite3.
+ }
+}
+
+
+SECRET_KEY = %(secret_key)r
+MEDIA_ROOT = '%(path)s/media/'
--- /dev/null
+# Django settings for turniej project.
+import os.path
+
+PROJECT_DIR = os.path.abspath(os.path.dirname(__file__))
+
+DEBUG = 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': os.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.
+ 'PORT': '', # Set to empty string for default. Not used with sqlite3.
+ }
+}
+
+# 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.
+# On Unix systems, a value of None will cause Django to use the same
+# timezone as the operating system.
+# If running in a Windows environment this must be set to the same as your
+# system time zone.
+TIME_ZONE = None
+
+# Language code for this installation. All choices can be found here:
+# http://www.i18nguy.com/unicode/language-identifiers.html
+LANGUAGE_CODE = 'pl'
+
+SITE_ID = 1
+
+# If you set this to False, Django will make some optimizations so as not
+# to load the internationalization machinery.
+USE_I18N = True
+
+# If you set this to False, Django will not format dates, numbers and
+# calendars according to the current locale
+#USE_L10N = True
+
+# Absolute filesystem path to the directory that will hold user-uploaded files.
+# Example: "/home/media/media.lawrence.com/media/"
+MEDIA_ROOT = os.path.join(PROJECT_DIR, '../media')
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash.
+# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
+MEDIA_URL = '/media/'
+
+# Absolute path to the directory static files should be collected to.
+# Don't put anything in this directory yourself; store your static files
+# in apps' "static/" subdirectories and in STATICFILES_DIRS.
+# Example: "/home/media/media.lawrence.com/static/"
+STATIC_ROOT = os.path.join(PROJECT_DIR, '../static')
+
+# URL prefix for static files.
+# Example: "http://media.lawrence.com/static/"
+STATIC_URL = '/static/'
+
+# URL prefix for admin static files -- CSS, JavaScript and images.
+# Make sure to use a trailing slash.
+# Examples: "http://foo.com/static/admin/", "/static/admin/".
+ADMIN_MEDIA_PREFIX = '/static/admin/'
+
+# Additional locations of static files
+STATICFILES_DIRS = (
+ # Put strings here, like "/home/html/static" or "C:/www/django/static".
+ # Always use forward slashes, even on Windows.
+ # Don't forget to use absolute paths, not relative paths.
+
+ os.path.join(PROJECT_DIR, 'static'),
+)
+
+# List of finder classes that know how to find static files in
+# various locations.
+STATICFILES_FINDERS = (
+ 'django.contrib.staticfiles.finders.FileSystemFinder',
+ 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
+# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
+)
+
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'APP_DIRS': True,
+ 'DIRS': [
+ os.path.join(PROJECT_DIR, 'templates'),
+ ],
+ 'OPTIONS': {
+ 'context_processors': [
+ "django.template.context_processors.debug",
+ "django.template.context_processors.i18n",
+ "django.template.context_processors.media",
+ "django.template.context_processors.static",
+ "django.contrib.messages.context_processors.messages",
+ "django.template.context_processors.request",
+ ],
+ },
+ },
+]
+
+MIDDLEWARE = [
+ 'django.middleware.common.CommonMiddleware',
+]
+
+ROOT_URLCONF = 'core.urls'
+
+INSTALLED_APPS = [
+ 'django.contrib.sites',
+ 'django.contrib.staticfiles',
+
+ 'piwik',
+
+ 'fnpdjango',
+ 'poetry',
+ 'edition1',
+ 'edition2',
+]
+
+POETRY_POEMS_FOR_CONTEST = 20
+
+ALLOWED_HOSTS = [
+ 'turniej.wolnelektury.pl',
+]
+
+# Load localsettings, if they exist
+try:
+ from .localsettings import *
+except ImportError:
+ pass
--- /dev/null
+/* http://keith-wood.name/countdown.html\r
+ * Polish initialisation for the jQuery countdown extension\r
+ * Written by Pawel Lewtak lewtak@gmail.com (2008) */\r
+(function($) {\r
+ $.countdown.regional['pl'] = {\r
+ labels: ['lat', 'miesięcy', 'tygodni', 'dni', 'godzin', 'minut', 'sekund'],\r
+ labels1: ['rok', 'miesiąc', 'tydzień', 'dzień', 'godzina', 'minuta', 'sekunda'],\r
+ labels2: ['lata', 'miesiące', 'tygodnie', 'dni', 'godziny', 'minuty', 'sekundy'],\r
+ compactLabels: ['l', 'm', 't', 'd'], compactLabels1: ['r', 'm', 't', 'd'],\r
+ whichLabels: function(amount) {\r
+ var units = amount % 10;\r
+ var tens = Math.floor((amount % 100) / 10);\r
+ return (amount == 1 ? 1 : (units >= 2 && units <= 4 && tens != 1 ? 2 : 0));\r
+ },\r
+ digits: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\r
+ timeSeparator: ':', isRTL: false};\r
+ $.countdown.setDefaults($.countdown.regional['pl']);\r
+})(jQuery);\r
--- /dev/null
+/* jQuery Countdown styles 1.6.1. */
+.hasCountdown {
+}
+.countdown_rtl {
+ direction: rtl;
+}
+.countdown_holding span {
+ color: #888;
+}
+.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;
+ text-align: center;
+}
+.countdown_amount {
+ font-size: 360%;
+}
+.countdown_descr {
+ display: block;
+ width: 100%;
+}
--- /dev/null
+/* http://keith-wood.name/countdown.html\r
+ Countdown for jQuery v1.6.1.\r
+ Written by Keith Wood (kbwood{at}iinet.com.au) January 2008.\r
+ Available under the MIT (https://github.com/jquery/jquery/blob/master/MIT-LICENSE.txt) license. \r
+ Please attribute the author if you use it. */\r
+(function($){function Countdown(){this.regional=[];this.regional['']={labels:['Years','Months','Weeks','Days','Hours','Minutes','Seconds'],labels1:['Year','Month','Week','Day','Hour','Minute','Second'],compactLabels:['y','m','w','d'],whichLabels:null,digits:['0','1','2','3','4','5','6','7','8','9'],timeSeparator:':',isRTL:false};this._defaults={until:null,since:null,timezone:null,serverSync:null,format:'dHMS',layout:'',compact:false,significant:0,description:'',expiryUrl:'',expiryText:'',alwaysExpire:false,onExpiry:null,onTick:null,tickInterval:1};$.extend(this._defaults,this.regional['']);this._serverSyncs=[];function timerCallBack(a){var b=(a<1e12?(b=performance.now?(performance.now()+performance.timing.navigationStart):Date.now()):a||new Date().getTime());if(b-d>=1000){x._updateTargets();d=b}c(timerCallBack)}var c=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||null;var d=0;if(!c||$.noRequestAnimationFrame){$.noRequestAnimationFrame=null;setInterval(function(){x._updateTargets()},980)}else{d=window.animationStartTime||window.webkitAnimationStartTime||window.mozAnimationStartTime||window.oAnimationStartTime||window.msAnimationStartTime||new Date().getTime();c(timerCallBack)}}var Y=0;var O=1;var W=2;var D=3;var H=4;var M=5;var S=6;$.extend(Countdown.prototype,{markerClassName:'hasCountdown',propertyName:'countdown',_rtlClass:'countdown_rtl',_sectionClass:'countdown_section',_amountClass:'countdown_amount',_rowClass:'countdown_row',_holdingClass:'countdown_holding',_showClass:'countdown_show',_descrClass:'countdown_descr',_timerTargets:[],setDefaults:function(a){this._resetExtraLabels(this._defaults,a);$.extend(this._defaults,a||{})},UTCDate:function(a,b,c,e,f,g,h,i){if(typeof b=='object'&&b.constructor==Date){i=b.getMilliseconds();h=b.getSeconds();g=b.getMinutes();f=b.getHours();e=b.getDate();c=b.getMonth();b=b.getFullYear()}var d=new Date();d.setUTCFullYear(b);d.setUTCDate(1);d.setUTCMonth(c||0);d.setUTCDate(e||1);d.setUTCHours(f||0);d.setUTCMinutes((g||0)-(Math.abs(a)<30?a*60:a));d.setUTCSeconds(h||0);d.setUTCMilliseconds(i||0);return d},periodsToSeconds:function(a){return a[0]*31557600+a[1]*2629800+a[2]*604800+a[3]*86400+a[4]*3600+a[5]*60+a[6]},_attachPlugin:function(a,b){a=$(a);if(a.hasClass(this.markerClassName)){return}var c={options:$.extend({},this._defaults),_periods:[0,0,0,0,0,0,0]};a.addClass(this.markerClassName).data(this.propertyName,c);this._optionPlugin(a,b)},_addTarget:function(a){if(!this._hasTarget(a)){this._timerTargets.push(a)}},_hasTarget:function(a){return($.inArray(a,this._timerTargets)>-1)},_removeTarget:function(b){this._timerTargets=$.map(this._timerTargets,function(a){return(a==b?null:a)})},_updateTargets:function(){for(var i=this._timerTargets.length-1;i>=0;i--){this._updateCountdown(this._timerTargets[i])}},_optionPlugin:function(a,b,c){a=$(a);var d=a.data(this.propertyName);if(!b||(typeof b=='string'&&c==null)){var e=b;b=(d||{}).options;return(b&&e?b[e]:b)}if(!a.hasClass(this.markerClassName)){return}b=b||{};if(typeof b=='string'){var e=b;b={};b[e]=c}this._resetExtraLabels(d.options,b);$.extend(d.options,b);this._adjustSettings(a,d);var f=new Date();if((d._since&&d._since<f)||(d._until&&d._until>f)){this._addTarget(a[0])}this._updateCountdown(a,d)},_updateCountdown:function(a,b){var c=$(a);b=b||c.data(this.propertyName);if(!b){return}c.html(this._generateHTML(b)).toggleClass(this._rtlClass,b.options.isRTL);if($.isFunction(b.options.onTick)){var d=b._hold!='lap'?b._periods:this._calculatePeriods(b,b._show,b.options.significant,new Date());if(b.options.tickInterval==1||this.periodsToSeconds(d)%b.options.tickInterval==0){b.options.onTick.apply(a,[d])}}var e=b._hold!='pause'&&(b._since?b._now.getTime()<b._since.getTime():b._now.getTime()>=b._until.getTime());if(e&&!b._expiring){b._expiring=true;if(this._hasTarget(a)||b.options.alwaysExpire){this._removeTarget(a);if($.isFunction(b.options.onExpiry)){b.options.onExpiry.apply(a,[])}if(b.options.expiryText){var f=b.options.layout;b.options.layout=b.options.expiryText;this._updateCountdown(a,b);b.options.layout=f}if(b.options.expiryUrl){window.location=b.options.expiryUrl}}b._expiring=false}else if(b._hold=='pause'){this._removeTarget(a)}c.data(this.propertyName,b)},_resetExtraLabels:function(a,b){var c=false;for(var n in b){if(n!='whichLabels'&&n.match(/[Ll]abels/)){c=true;break}}if(c){for(var n in a){if(n.match(/[Ll]abels[02-9]/)){a[n]=null}}}},_adjustSettings:function(a,b){var c;var d=0;var e=null;for(var i=0;i<this._serverSyncs.length;i++){if(this._serverSyncs[i][0]==b.options.serverSync){e=this._serverSyncs[i][1];break}}if(e!=null){d=(b.options.serverSync?e:0);c=new Date()}else{var f=($.isFunction(b.options.serverSync)?b.options.serverSync.apply(a,[]):null);c=new Date();d=(f?c.getTime()-f.getTime():0);this._serverSyncs.push([b.options.serverSync,d])}var g=b.options.timezone;g=(g==null?-c.getTimezoneOffset():g);b._since=b.options.since;if(b._since!=null){b._since=this.UTCDate(g,this._determineTime(b._since,null));if(b._since&&d){b._since.setMilliseconds(b._since.getMilliseconds()+d)}}b._until=this.UTCDate(g,this._determineTime(b.options.until,c));if(d){b._until.setMilliseconds(b._until.getMilliseconds()+d)}b._show=this._determineShow(b)},_destroyPlugin:function(a){a=$(a);if(!a.hasClass(this.markerClassName)){return}this._removeTarget(a[0]);a.removeClass(this.markerClassName).empty().removeData(this.propertyName)},_pausePlugin:function(a){this._hold(a,'pause')},_lapPlugin:function(a){this._hold(a,'lap')},_resumePlugin:function(a){this._hold(a,null)},_hold:function(a,b){var c=$.data(a,this.propertyName);if(c){if(c._hold=='pause'&&!b){c._periods=c._savePeriods;var d=(c._since?'-':'+');c[c._since?'_since':'_until']=this._determineTime(d+c._periods[0]+'y'+d+c._periods[1]+'o'+d+c._periods[2]+'w'+d+c._periods[3]+'d'+d+c._periods[4]+'h'+d+c._periods[5]+'m'+d+c._periods[6]+'s');this._addTarget(a)}c._hold=b;c._savePeriods=(b=='pause'?c._periods:null);$.data(a,this.propertyName,c);this._updateCountdown(a,c)}},_getTimesPlugin:function(a){var b=$.data(a,this.propertyName);return(!b?null:(!b._hold?b._periods:this._calculatePeriods(b,b._show,b.options.significant,new Date())))},_determineTime:function(k,l){var m=function(a){var b=new Date();b.setTime(b.getTime()+a*1000);return b};var n=function(a){a=a.toLowerCase();var b=new Date();var c=b.getFullYear();var d=b.getMonth();var e=b.getDate();var f=b.getHours();var g=b.getMinutes();var h=b.getSeconds();var i=/([+-]?[0-9]+)\s*(s|m|h|d|w|o|y)?/g;var j=i.exec(a);while(j){switch(j[2]||'s'){case's':h+=parseInt(j[1],10);break;case'm':g+=parseInt(j[1],10);break;case'h':f+=parseInt(j[1],10);break;case'd':e+=parseInt(j[1],10);break;case'w':e+=parseInt(j[1],10)*7;break;case'o':d+=parseInt(j[1],10);e=Math.min(e,x._getDaysInMonth(c,d));break;case'y':c+=parseInt(j[1],10);e=Math.min(e,x._getDaysInMonth(c,d));break}j=i.exec(a)}return new Date(c,d,e,f,g,h,0)};var o=(k==null?l:(typeof k=='string'?n(k):(typeof k=='number'?m(k):k)));if(o)o.setMilliseconds(0);return o},_getDaysInMonth:function(a,b){return 32-new Date(a,b,32).getDate()},_normalLabels:function(a){return a},_generateHTML:function(c){var d=this;c._periods=(c._hold?c._periods:this._calculatePeriods(c,c._show,c.options.significant,new Date()));var e=false;var f=0;var g=c.options.significant;var h=$.extend({},c._show);for(var i=Y;i<=S;i++){e|=(c._show[i]=='?'&&c._periods[i]>0);h[i]=(c._show[i]=='?'&&!e?null:c._show[i]);f+=(h[i]?1:0);g-=(c._periods[i]>0?1:0)}var j=[false,false,false,false,false,false,false];for(var i=S;i>=Y;i--){if(c._show[i]){if(c._periods[i]){j[i]=true}else{j[i]=g>0;g--}}}var k=(c.options.compact?c.options.compactLabels:c.options.labels);var l=c.options.whichLabels||this._normalLabels;var m=function(a){var b=c.options['compactLabels'+l(c._periods[a])];return(h[a]?d._translateDigits(c,c._periods[a])+(b?b[a]:k[a])+' ':'')};var n=function(a){var b=c.options['labels'+l(c._periods[a])];return((!c.options.significant&&h[a])||(c.options.significant&&j[a])?'<span class="'+x._sectionClass+'">'+'<span class="'+x._amountClass+'">'+d._translateDigits(c,c._periods[a])+'</span><br/>'+(b?b[a]:k[a])+'</span>':'')};return(c.options.layout?this._buildLayout(c,h,c.options.layout,c.options.compact,c.options.significant,j):((c.options.compact?'<span class="'+this._rowClass+' '+this._amountClass+(c._hold?' '+this._holdingClass:'')+'">'+m(Y)+m(O)+m(W)+m(D)+(h[H]?this._minDigits(c,c._periods[H],2):'')+(h[M]?(h[H]?c.options.timeSeparator:'')+this._minDigits(c,c._periods[M],2):'')+(h[S]?(h[H]||h[M]?c.options.timeSeparator:'')+this._minDigits(c,c._periods[S],2):''):'<span class="'+this._rowClass+' '+this._showClass+(c.options.significant||f)+(c._hold?' '+this._holdingClass:'')+'">'+n(Y)+n(O)+n(W)+n(D)+n(H)+n(M)+n(S))+'</span>'+(c.options.description?'<span class="'+this._rowClass+' '+this._descrClass+'">'+c.options.description+'</span>':'')))},_buildLayout:function(c,d,e,f,g,h){var j=c.options[f?'compactLabels':'labels'];var k=c.options.whichLabels||this._normalLabels;var l=function(a){return(c.options[(f?'compactLabels':'labels')+k(c._periods[a])]||j)[a]};var m=function(a,b){return c.options.digits[Math.floor(a/b)%10]};var o={desc:c.options.description,sep:c.options.timeSeparator,yl:l(Y),yn:this._minDigits(c,c._periods[Y],1),ynn:this._minDigits(c,c._periods[Y],2),ynnn:this._minDigits(c,c._periods[Y],3),y1:m(c._periods[Y],1),y10:m(c._periods[Y],10),y100:m(c._periods[Y],100),y1000:m(c._periods[Y],1000),ol:l(O),on:this._minDigits(c,c._periods[O],1),onn:this._minDigits(c,c._periods[O],2),onnn:this._minDigits(c,c._periods[O],3),o1:m(c._periods[O],1),o10:m(c._periods[O],10),o100:m(c._periods[O],100),o1000:m(c._periods[O],1000),wl:l(W),wn:this._minDigits(c,c._periods[W],1),wnn:this._minDigits(c,c._periods[W],2),wnnn:this._minDigits(c,c._periods[W],3),w1:m(c._periods[W],1),w10:m(c._periods[W],10),w100:m(c._periods[W],100),w1000:m(c._periods[W],1000),dl:l(D),dn:this._minDigits(c,c._periods[D],1),dnn:this._minDigits(c,c._periods[D],2),dnnn:this._minDigits(c,c._periods[D],3),d1:m(c._periods[D],1),d10:m(c._periods[D],10),d100:m(c._periods[D],100),d1000:m(c._periods[D],1000),hl:l(H),hn:this._minDigits(c,c._periods[H],1),hnn:this._minDigits(c,c._periods[H],2),hnnn:this._minDigits(c,c._periods[H],3),h1:m(c._periods[H],1),h10:m(c._periods[H],10),h100:m(c._periods[H],100),h1000:m(c._periods[H],1000),ml:l(M),mn:this._minDigits(c,c._periods[M],1),mnn:this._minDigits(c,c._periods[M],2),mnnn:this._minDigits(c,c._periods[M],3),m1:m(c._periods[M],1),m10:m(c._periods[M],10),m100:m(c._periods[M],100),m1000:m(c._periods[M],1000),sl:l(S),sn:this._minDigits(c,c._periods[S],1),snn:this._minDigits(c,c._periods[S],2),snnn:this._minDigits(c,c._periods[S],3),s1:m(c._periods[S],1),s10:m(c._periods[S],10),s100:m(c._periods[S],100),s1000:m(c._periods[S],1000)};var p=e;for(var i=Y;i<=S;i++){var q='yowdhms'.charAt(i);var r=new RegExp('\\{'+q+'<\\}(.*)\\{'+q+'>\\}','g');p=p.replace(r,((!g&&d[i])||(g&&h[i])?'$1':''))}$.each(o,function(n,v){var a=new RegExp('\\{'+n+'\\}','g');p=p.replace(a,v)});return p},_minDigits:function(a,b,c){b=''+b;if(b.length>=c){return this._translateDigits(a,b)}b='0000000000'+b;return this._translateDigits(a,b.substr(b.length-c))},_translateDigits:function(b,c){return(''+c).replace(/[0-9]/g,function(a){return b.options.digits[a]})},_determineShow:function(a){var b=a.options.format;var c=[];c[Y]=(b.match('y')?'?':(b.match('Y')?'!':null));c[O]=(b.match('o')?'?':(b.match('O')?'!':null));c[W]=(b.match('w')?'?':(b.match('W')?'!':null));c[D]=(b.match('d')?'?':(b.match('D')?'!':null));c[H]=(b.match('h')?'?':(b.match('H')?'!':null));c[M]=(b.match('m')?'?':(b.match('M')?'!':null));c[S]=(b.match('s')?'?':(b.match('S')?'!':null));return c},_calculatePeriods:function(c,d,e,f){c._now=f;c._now.setMilliseconds(0);var g=new Date(c._now.getTime());if(c._since){if(f.getTime()<c._since.getTime()){c._now=f=g}else{f=c._since}}else{g.setTime(c._until.getTime());if(f.getTime()>c._until.getTime()){c._now=f=g}}var h=[0,0,0,0,0,0,0];if(d[Y]||d[O]){var i=x._getDaysInMonth(f.getFullYear(),f.getMonth());var j=x._getDaysInMonth(g.getFullYear(),g.getMonth());var k=(g.getDate()==f.getDate()||(g.getDate()>=Math.min(i,j)&&f.getDate()>=Math.min(i,j)));var l=function(a){return(a.getHours()*60+a.getMinutes())*60+a.getSeconds()};var m=Math.max(0,(g.getFullYear()-f.getFullYear())*12+g.getMonth()-f.getMonth()+((g.getDate()<f.getDate()&&!k)||(k&&l(g)<l(f))?-1:0));h[Y]=(d[Y]?Math.floor(m/12):0);h[O]=(d[O]?m-h[Y]*12:0);f=new Date(f.getTime());var n=(f.getDate()==i);var o=x._getDaysInMonth(f.getFullYear()+h[Y],f.getMonth()+h[O]);if(f.getDate()>o){f.setDate(o)}f.setFullYear(f.getFullYear()+h[Y]);f.setMonth(f.getMonth()+h[O]);if(n){f.setDate(o)}}var p=Math.floor((g.getTime()-f.getTime())/1000);var q=function(a,b){h[a]=(d[a]?Math.floor(p/b):0);p-=h[a]*b};q(W,604800);q(D,86400);q(H,3600);q(M,60);q(S,1);if(p>0&&!c._since){var r=[1,12,4.3482,7,24,60,60];var s=S;var t=1;for(var u=S;u>=Y;u--){if(d[u]){if(h[s]>=t){h[s]=0;p=1}if(p>0){h[u]++;p=0;s=u;t=1}}t*=r[u]}}if(e){for(var u=Y;u<=S;u++){if(e&&h[u]){e--}else if(!e){h[u]=0}}}return h}});var w=['getTimes'];function isNotChained(a,b){if(a=='option'&&(b.length==0||(b.length==1&&typeof b[0]=='string'))){return true}return $.inArray(a,w)>-1}$.fn.countdown=function(a){var b=Array.prototype.slice.call(arguments,1);if(isNotChained(a,b)){return x['_'+a+'Plugin'].apply(x,[this[0]].concat(b))}return this.each(function(){if(typeof a=='string'){if(!x['_'+a+'Plugin']){throw'Unknown command: '+a;}x['_'+a+'Plugin'].apply(x,[this].concat(b))}else{x._attachPlugin(this,a||{})}})};var x=$.countdown=new Countdown()})(jQuery);
\ No newline at end of file
--- /dev/null
+{% extends "edition2/base.html" %}
+
+{% block "body" %}
+<h1>Nie znaleziono strony</h1>
+
+<p>Nie ma tu żadnej strony. Przejdź do <a href='/'>strony głównej</a>.</p>
+
+{% endblock %}
--- /dev/null
+{% extends "edition2/base.html" %}
+
+{% block "body" %}
+<h1>Błąd</h1>
+
+<p>Wystąpił błąd serwera. Przepraszamy!</p>
+
+{% endblock %}
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Turniej Elektrybałtów{% block "extratitle" %}{% endblock %}</title>
+ <meta charset="utf-8" />
+
+ <link rel="shortcut icon" href="{{ STATIC_URL }}img/favicon.ico" />
+ <style type="text/css">
+ @import "{{ STATIC_URL }}style.css";
+ </style>
+</head>
+
+<body>
+
+<div id="fb-root"></div>
+<script>(function(d, s, id) {
+ var js, fjs = d.getElementsByTagName(s)[0];
+ if (d.getElementById(id)) {return;}
+ js = d.createElement(s); js.id = id;
+ js.src = "//connect.facebook.net/pl_PL/all.js#xfbml=1";
+ fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+<script src="http://0.s-nk.pl/script/nk_widgets/nk_widget_fajne_embed"></script>
+
+<div id="body">
+{% block "body" %}{% endblock %}
+</div>
+
+
+<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
+ {lang: 'pl'}
+</script>
+{% load piwik_tags %}
+{% tracking_code %}
+</body>
+
+
+</html>
--- /dev/null
+from django.conf.urls import include, url
+
+
+urlpatterns = [
+ url(r'^2011/', include('edition1.urls')),
+ url(r'^poezja/', include('poetry.urls')),
+ url(r'', include('edition2.urls')),
+]
--- /dev/null
+import os
+
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "core.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()
--- /dev/null
+html {
+ margin: 0;
+}
+
+body {
+ margin: 0;
+ padding: 0;
+
+ font-size: .75em;
+ font-family: Verdana,Arial,Helvetica,sans-serif;
+}
+
+#body-wrapper {
+ padding: 1em;
+ color: #2F4110;
+ background: url("/static/edition1/bg.png") repeat-x scroll 0 0 #FFFFFF;
+}
+#body {
+ max-width: 900px;
+ margin:auto;
+}
+#new-edition {
+ background: #191919;
+ color: #989898;
+ text-align: center;
+ padding: .8em 0;
+}
+#new-edition a {
+ color: white;
+}
+
+
+
+#content {
+ width: 420px;
+ margin-top: 2em;
+}
+
+
+
+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;
+}
+a:hover {
+ border-bottom: 1px dotted;
+}
+
+
+.plain li {
+ list-style: none;
+}
+
+li {
+ margin: 1em;
+}
+
+#termin-wrap {
+ margin-top: 3em;
+}
+
+
+.clr {
+ clear: both;
+}
+
+#footer {
+ border-top: 1px solid #ddd;
+ margin-top: 7em;
+ clear: both;
+
+}
+#footer img {
+ margin: 30px 13px;
+ vertical-align: middle;
+}
+#footer a:hover {
+ border: none;
+}
+
+
+blockquote {
+ font-size: .9em;
+ font-style: italic;
+ margin-left: 350px;
+ margin-right: 50px;
+ margin-bottom: 4em;
+}
+blockquote p {
+ margin: .5em 0 0 0;
+}
+
+.more {
+ text-align: right;
+}
+
+.uwaga {
+ border: 1px solid #ddd;
+ padding: 1em;
+ background-color: #ff8;
+}
+
+.social {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+
+.tworz {
+ font-size: 1.5em;
+ padding: .8em;
+ background: #555;
+ color: white;
+ margin: 1em auto;
+ display: block;
+ width: 10em;
+ text-align: center;
+ border: 1px solid #000;
+ border-radius: 1em;
+}
+.tworz:hover {
+ border: 1px solid #000;
+ background: #666;
+}
+
+.last {
+ list-style: none;
+ padding: 0;
+}
+.last li {
+ margin-left: 0;
+}
+
+.poet-list {
+ padding: 0;
+ margin: 1em 0;
+}
+.poet-list li {
+ float: left;
+ width: 30%;
+ list-style: none;
+ padding: .8em 0;
+ border: 1px solid #888;
+ background: #eee;
+ border-radius: 1em;
+ text-align: center;
+}
+.poet-list li:before {
+ content: "» ";
+}
+
+.poet-description {
+ max-width: 60em;
+}
+
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Turniej Elektrybałtów{% block "extratitle" %}{% endblock %}</title>
+ <meta charset="utf-8" />
+
+ <link rel="shortcut icon" href="{{ STATIC_URL }}img/favicon.ico" />
+ <style type="text/css">
+ @import "{{ STATIC_URL }}edition1/style.css";
+ </style>
+</head>
+
+<body>
+
+<div id="fb-root"></div>
+<script>(function(d, s, id) {
+ var js, fjs = d.getElementsByTagName(s)[0];
+ if (d.getElementById(id)) {return;}
+ js = d.createElement(s); js.id = id;
+ js.src = "//connect.facebook.net/pl_PL/all.js#xfbml=1";
+ fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+<script src="http://0.s-nk.pl/script/nk_widgets/nk_widget_fajne_embed"></script>
+
+<div id="body-wrapper">
+<div id="body">
+{% block "body" %}{% endblock %}
+</div>
+</div>
+
+<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
+ {lang: 'pl'}
+</script>
+{% load piwik_tags %}
+{% tracking_code %}
+</body>
+
+
+</html>
--- /dev/null
+{% extends "edition1/base.html" %}
+
+{% block "body" %}
+
+<div style="float:right">
+<img src="{{ STATIC_URL }}img/turniej.png" style='float:right; margin-bottom: 2em;' alt="logo Turnieju Elektrybałtów: frontalny widok maszynki do mielenia mięsa" />
+<h2>Ostatnie wiersze:</h2>
+<ul class="last">
+{% for poem in last %}
+ <li><a href="{{ poem.get_absolute_url }}">{{ poem.poet.name}}, {{ poem.pretty_title }}</a><br/>{{ poem.text|truncatewords:5 }}</li>
+{% endfor %}
+</ul>
+
+</div>
+
+<div id="content">
+<h1>Turniej Elektrybałtów</h1>
+<h2>Konkurs automatycznej poezji</h2>
+
+<div class="social">
+<span style="position:relative; top: -5px;" >
+ <div class="fb-like" data-href="http://turniej.wolnelektury.pl" data-send="false" data-layout="button_count" data-width="150" data-show-faces="false"></div>
+</span>
+<g:plusone annotation="bubble" href="http://turniej.wolnelektury.pl"></g:plusone>
+<script>
+ new nk_fajne({
+ url: "http://turniej.wolnelektury.pl",
+ type: 4,
+ color: 0,
+ title: "Turniej Elektrybałtów",
+ image: "http://turniej.wolnelektury.pl/turniej.png",
+ description: "Turniej Elektrybałtów - otwarty konkurs na najlepszego automatycznego poetę."
+ });
+</script>
+</div>
+
+
+<div class="uwaga">
+<p>Konkurs został rozstrzygnięty! Zakończenie odbyło się podczas <a href='http://domenapubliczna.org'>Dnia Domeny Publicznej 2012</a>.</p>
+
+<p>Zwycięzcą został <a href='/poezja/centonista/'><strong>Centonista</strong></a>. Gratulujemy!</p>
+
+<p>Dodatkowo, <a href='/poezja/ala/'>Ała!</a> otrzymał wyróżnienie.</p>
+</div>
+
+<p>Znacie <a href="http://www.wolnelektury.pl/lesmianator/">Leśmianatora</a>?
+To niewielki skrypt miksujący na życzenie wiersze z
+<a href="http://www.wolnelektury.pl">Wolnych Lektur</a>.
+Powstał jako żart, a niechcący
+<a href="http://www.ha.art.pl/felietony/1515-mariusz-pisarski-piekit-siezyca-lesmianator.html">
+„odciął się od dosłownie rozumianego dziedzictwa dadaizmu i surrealizmu”</a>.
+Idziemy dalej – ogłaszamy <strong>otwarty konkurs na najlepszego automatycznego poetę</strong>!</p>
+
+<p>Konkurs wystartował 12 września 2011 roku – z okazji <strong>90 rocznicy urodzin
+Stanisława Lema</strong>. Termin nadsyłania prac upłynął
+10 listopada 2011 roku.
+Prezentujemy nadesłane prace w akcji.
+Kliknij przycisk, a jeden
+z <a href="{% url 'poetry_main' %}">programów-uczestników</a> napisze dla Ciebie wiersz:</p>
+
+<a style="margin: 1em auto;" class="tworz" href="{% url 'poetry_new' %}">Twórz-że się!</a>
+
+<p><strong>Zobacz <a href="{% url 'poetry_main' %}">wszystkie programy</a>.</strong> Ich kod źródłowy
+<a href="https://github.com/turniej">jest dostępny</a> na wolnej licencji
+– nic więc nie stoi na przeszkodzie, by rozwijać je dalej.</p>
+
+<p>Spośród wygenerowanych przz nas propozycji autorzy programów wybrali po trzy utwory.
+<a href="{% url 'poetry_contest' %}">Zobacz wiersze, które wystartowały w konkursie.</a></p>
+
+<p>Do zabawy zapraszamy wszystkich – i tych, którzy świetnie programują, i tych, którzy
+programować dopiero się uczą. Tych, którzy nie rozstają się z tomikiem
+wierszy, i tych, którzy na ten widok dostają gęsiej skórki. Chcemy wybrać
+program, który będzie w najciekawszy i najbardziej twórczy sposób miksował
+dostępną w Wolnych Lekturach literaturę. W tej konkurencji liczy się przede
+wszystkim wyobraźnia, pomysł i chęć do twórczej zabawy.</p>
+
+<p>Więcej informacji:</p>
+
+<ul class='plain'>
+ <li><a href='wiecej/'>Przebieg konkursu</a> – czyli jakie będą kolejne etapy
+ i co jest nagrodą?</li>
+
+ <li><a href='technikalia/'>Technikalia</a> – czyli co i jak trzeba zrobić,
+ żeby wziąć udział.</li>
+
+ <li><a href='regulamin/'>Regulamin</a> – czyli trochę koniecznych formalności.</li>
+</ul>
+
+<p>Wszelkiego rodzaju pytania i wątpliwości proszę kierować na adres
+<a href="mailto:radoslaw.czajka@nowoczesnapolska.org.pl">radoslaw.czajka@nowoczesnapolska.org.pl</a></p>
+
+<div class='clr'></div>
+</div>
+
+
+<div id="footer">
+<a target='_blank' href='http://nowoczesnapolska.org.pl'><img src='{{ STATIC_URL }}img/fnp.png' alt='Fundacja Nowoczesna Polska' title='Fundacja Nowoczesna Polska' /></a>
+<a target='_blank' href='http://www.wolnelektury.pl'><img src='{{ STATIC_URL }}img/wl.png' alt='Wolne Lektury' title='Wolne Lektury' /></a>
+<a target='_blank' href='http://koed.org.pl'><img src='{{ STATIC_URL }}img/koed.png' alt='Koalicja Otwartej Edukacji' title='Koalicja Otwartej Edukacji' /></a>
+<a target='_blank' href='http://centrumcyfrowe.pl'><img src='{{ STATIC_URL }}img/cc.png' alt='Centrum Cyfrowe' title='Centrum Cyfrowe' /></a>
+<a target='_blank' href='http://di.com.pl'><img src='{{ STATIC_URL }}img/di.png' alt='Dziennik Internautów' title='Dziennik Internautów' /></a>
+<a target='_blank' href='http://solaris.lem.pl'><img src='{{ STATIC_URL }}img/lempl.png' alt='Lem.pl' title='Lem.pl' /></a>
+
+</div>
+
+
+{% endblock %}
--- /dev/null
+{% extends "edition1/base.html" %}
+
+{% block "body" %}
+
+<h1>
+<a href='/'><img src="{{ STATIC_URL }}img/turniej-maly.png" style='float:left; margin-right: 10px; margin-top: -13px' /></a>
+Turniej Elektrybałtów</h1>
+<h2>
+Konkurs automatycznej poezji</h2>
+
+<blockquote>
+ <p>Gdy wskaźniki amplifikacyjne pokazały, że moc liryczna dochodzi
+ do maksimum, Trurl nieznacznie tylko drżącą ręką przerzucił wielki
+ wyłącznik i niemal natychmiast głosem lekko ochrypłym, lecz emanującym
+ dziwnie sugestywnym czarem, maszyna rzekła:</p>
+
+ <p>– Chrzęskrzyboczek pacionkociewiczarokrzysztofoniczmy.</p>
+ <p>– Czy to już wszystko? – spytał po dłuższej chwili niezwykle uprzejmy
+ Klapaucjusz.</p>
+ <p>(Stanisław Lem, „Cyberiada”, „Wyprawa pierwsza A, czyli Elektrybałt Trurla”)</p>
+</blockquote>
+
+
+
+<p>Konkurs startuje 12 września 2011 roku – z okazji <strong>90 rocznicy urodzin
+Stanisława Lema</strong>. Termin nadsyłania prac upływa <del>z końcem października</del> <ins>10 listopada</ins> 2011 roku.
+Powinno być dość czasu na dopracowanie swoich pomysłów.</p>
+
+<p>Konkurs będzie wyglądał następująco:</p>
+
+<ul>
+ <li>Do <del>końca października</del> <ins>10 listopada</ins> czekamy na zgłoszenia w postaci programów.
+ Warunkiem dopuszczalności jest udostępnienie kodu źródłowego na wolnej
+ licencji <a href="http://www.gnu.org/licenses/agpl.html">GNU AGPL</a>
+ (<a href="http://www.gnu.org/licenses/gpl-howto.pl.html">jak to zrobić?)</a>.
+ Szerzej o tym, czym powinno być złoszenie –
+ w dziale <a href='../technikalia/'>Technikalia</a>.</li>
+
+ <li>Użycie wolnej licencji nie oznacza, że kod źródłowy musi być
+ od razu publicznie dostępny. Programy zostaną przez nas
+ upublicznione – ale dopiero po upłynięciu terminu nadsyłania zgłoszeń.
+ Uczestnik może oczywiście samodzielnie upublicznić swoje zgłoszenie
+ wcześniej – odradzamy to jednak ze względu na komplikacje w przypadku
+ plagiatu.</li>
+
+ <li>Po uruchomieniu nadesłanych przez uczestników programów dla każdego
+ uczestnika wygenerujemy <strong>20</strong> wierszy, które odeślemy autorowi
+ programu. Wybierze on <strong>3</strong> z nich, które następnie zostaną
+ poddane ocenie jury. W składzie jury znajdą się zarówno osoby związane
+ z programowaniem, jak i przedstawiciele świata kultury.</li>
+
+ <li>Główną nagrodą jest 16-tomowa kolekcja książek Stanisława Lema.
+ W ramach dodatkowej nagrody podczas zakończenia konkursu
+ odbędzie się próba odczytania zwycięskich wierszy na głos.</li>
+
+</ul>
+
+<p>Programy biorące udział w konkursie zostaną też uruchomione
+<a href="http://turniej.wolnelektury.pl">na stronie Turnieju</a> –
+internauci będą więc mieli możliwość samodzielnego „wyklikania” sobie własnego
+wiersza przy użyciu każdego z nich.</p>
+
+<p class='more'><a href="..">Powrót do strony głównej</a></p>
+
+{% endblock %}
--- /dev/null
+{% extends "edition1/base.html" %}
+
+{% block "body" %}
+
+
+<h1>
+<a href='..'><img src="{{ STATIC_URL }}img/turniej-maly.png" style='float:left; margin-right: 10px; margin-top: -13px' /></a>
+Turniej Elektrybałtów</h1>
+<h2>Konkurs automatycznej poezji</h2>
+
+<blockquote>
+ <p>Ustaliwszy, w czym rzecz, zwierzchność żeglugi kosmicznej zwróciła się
+ oficjalnie do Trurla z żądaniem natychmiastowej likwidacji należącego doń
+ urządzenia, które zakłócało liryką spokój publiczny i zagrażało zdrowiu
+ pasażerów.</p>
+
+ <p>(Stanisław Lem, „Cyberiada”, „Wyprawa pierwsza A, czyli Elektrybałt Trurla”)</p>
+</blockquote>
+
+
+
+<h3>Regulamin konkursu</h3>
+
+
+
+
+<ul>
+ <li>Organizatorem konkursu jest fundacja Nowoczesna Polska. </li>
+
+ <li>Przedmiotem konkursu jest program komputerowy tworzący remiksy literackie
+ na podstawie utworów znajdujących się w bilbiotece internetowej Wolne Lektury.
+ Program biorący udział w konkursie musi być udostępniony na wolnej
+ licencji <a href="http://www.gnu.org/licenses/agpl.html">GNU AGPL</a>
+ (<a href="http://www.gnu.org/licenses/gpl-howto.pl.html">jak to zrobić?)</a>.</li>
+
+ <li>Konkurs trwa od 12 września do <del>31 października</del> <ins>10 listopada</ins> 2011 roku.
+ Konkurs ma charakter otwarty. Aby wziąć w nim udział udział,
+ należy wysłać gotowy program na adres
+ <a href="mailto:radoslaw.czajka@nowoczesnapolska.org.pl">radoslaw.czajka@nowoczesnapolska.org.pl</a>
+
+ z klauzulą:
+ <cite>Zgłaszam się do konkursu „Turniej Elektrybałtów” i oświadczam, że
+ znam i akceptuję jego regulamin</cite>.</li>
+
+ <li>Nagrodą główną jest 16-tomowa kolekcja dzieł Stanisława Lema. Nie ma
+ możliwości zamiany nagrody na jej równowartość pieniężną.</li>
+
+ <li>Organizator może odwołać konkurs w każdym czasie, bez podawania
+ przyczyny. W takim przypadku uczestnikom konkursu nie przysługuje żadna
+ rekompensata. Uczestnicy zgłaszając swój udział w konkursie automatycznie
+ wyrażają zgodę na publikację ich twórczości w internecie oraz wyrażają
+ zgodę na wykorzystanie wizerunku w materiałach promocyjnych konkursu
+ oraz materiałach promocyjnych Fundacji Nowoczesna Polska.</li>
+
+ <li>Organizator zastrzega sobie prawo do odrzucenia zgłoszenia programu,
+ którego działanie może zagrażać stabilności, responsywności albo bezpieczeństwu
+ serwera, a także takich, których poprawne uruchomienie okaże się niemożliwe
+ lub poważnie utrudnione.</li>
+
+ <li>Organizator konkursu nie ponosi odpowiedzialności za wszelkie
+ roszczenia osób trzecich wynikające z tytułu wykorzystania materiałów
+ zgłoszonych przez uczestników konkursu jako własnych. Prace naruszające
+ prawa autorskie będą dyskwalifikowane.</li>
+
+ <li>Organizator zatrzega sobie prawo wprowadzenia zmian w regulaminie
+ konkursu.</li>
+</ul>
+
+
+
+
+<p class='more'><a href="..">Powrót do strony głównej</a></p>
+
+{% endblock %}
--- /dev/null
+{% extends "edition1/base.html" %}
+
+{% block "body" %}
+
+<h1>
+<a href='..'><img src="{{ STATIC_URL }}img/turniej-maly.png" style='float:left; margin-right: 10px; margin-top: -13px' /></a>
+Turniej Elektrybałtów</h1>
+<h2>Konkurs automatycznej poezji</h2>
+
+<blockquote>
+ <p>Gdy atoli, z lekka kulejąc, zbliżył się do maszyny, ta,
+ na widok obcęgów w jego dłoni i błysków desperacji w oku, buchnęła taką
+ namiętną liryką błagając o łaskę, że rozszlochany Trurl cisnął narzędzia
+ i wrócił do siebie, brnąc po kolana w nowych utworach elektroducha, które
+ sięgały mu do pół piersi, zaścielając szemrzącym oceanem papieru całą halę.</p>
+
+ <p>(Stanisław Lem, „Cyberiada”, „Wyprawa pierwsza A, czyli Elektrybałt Trurla”)</p>
+</blockquote>
+
+
+
+<h3>Wymogi wobec zgłaszanych programów</h3>
+
+<ul>
+ <li>Nie nakładamy ograniczeń na wybór języka programowania. Program
+ powinien dać się jednak uruchomić w środowisku GNU/Linux przy użyciu
+ wolnodostępnych narzędzi.</li>
+
+ <li>Warunkiem dopuszczalności jest udostępnienie kodu źródłowego na wolnej
+ licencji <a href="http://www.gnu.org/licenses/agpl.html">GNU AGPL</a>
+
+ (<a href="http://www.gnu.org/licenses/gpl-howto.pl.html">jak to zrobić?)</a>
+ Programy zostaną upublicznione – ale dopiero po upłynięciu terminu
+ nadsyłania zgłoszeń. Warunek ten oznacza w szczególności, że zgłoszenie
+ musi zawierać kod źródłowy. Nie wchodzą w grę żadne skompilowane, pośrednie,
+ zaciemnione wersje – kod powinien zostać udostępniony w takiej postaci,
+ nad jaką normalnie pracuje programista.</li>
+
+ <li>Program przy tworzeniu wierszy musi w istotny sposób korzystać
+ z zasobów Wolnych Lektur. Elementy wynikowych tekstów nie mogą być
+ zaszyte w treści samego programu. Program nie może też korzystać
+ podczas pracy z innych źródeł informacji – musi być jasne, że program
+ <em>naprawdę</em> miksuje dostarczoną mu literaturę, a nie odtwarza nagraną
+ uprzednio taśmę. Nie jest wymagane korzystanie z wszystkich utworów –
+ program może miksować np. tylko poezję romantyczną albo tylko fragmenty
+ oznaczone wybranymi motywami literackimi.</li>
+
+ <li>Generowanie wiersza nie powinno trwać więcej niż kilka sekund.
+ W ramach procesu instalacji programu dopuszczalne (i wskazane!) jest
+ natomiast uprzednie zgromadzenie niezbędnych informacji wynikających
+ z analizy tekstów źródłowych. Najlepiej więc dostarczyć dwa programy
+ (albo jeden z różnymi opcjami uruchomienia) – jeden pobierający utwory,
+ analizujący je i zapisujący efekty tej analizy, a drugi generujący
+ wiersze na podstawie zgromadzonej uprzednio informacji. Sądzimy, że
+ ok. 10MiB powinno wystarczyć każdemu
+ <a href="http://en.wikiquote.org/wiki/Talk:Bill_Gates#640K.2F1MB">[sic!]</a>,
+ ale w razie potrzeby będziemy się starali być elastyczni.</li>
+
+ <li>Program powinien wypisać wiersz na standardowe wyjście w postaci
+ czystego tekstu, najlepiej używając kodowania UTF-8 (czyli tego samego,
+ które jest używane w plikach źródłowych).</li>
+
+ <li>Maksymalna długość wiersza wynosi 1000 znaków – dalsze znaki zostaną
+ odcięte. Poza tym ograniczeniem długość i forma wiersza pozostaje w gestii
+ autora i jego programu.</li>
+
+ <li>Odrzucone zostana programy, które będą usiłowały w jakikolwiek
+ sposób zagrozić stabilności lub bezpieczeństwu serwera.</li>
+</ul>
+
+
+<h3>W jaki sposób pobierać utwory?</h3>
+
+<p>Źródłowe utwory można pobierać na kilka sposobów:</p>
+
+<ul>
+ <li>Korzystając z <a href="http://www.wolnelektury.pl/api/">API Wolnych Lektur</a>.</li>
+
+ <li>Pobierając <a href="http://www.wolnelektury.pl/media/packs/xml-all.zip">
+ paczkę źródłowych plików XML</a> i pracując z nimi bądź to samodzielnie,
+ bądź korzystając
+ z <a href="https://github.com/fnp/librarian">narzędzi stworzonych na potrzeby Wolnych Lektur</a>.</li>
+
+ <li>Pobierając paczkę plików tekstowych. Przygotowaliśmy do wyboru dwie:
+ <a href="http://www.wolnelektury.pl/media/packs/txt-all.zip">ze wszystkimi utworami</a>
+ oraz <a href="http://www.wolnelektury.pl/media/packs/txt-liryka.zip">tylko z liryką</a>.</li>
+</ul>
+
+<p>Wszystkie pliki źródłowe są zapisane przy użyciu kodowania UTF-8.</p>
+
+<p>Przykładowy program (napisany w Pythonie), obrazujący wykorzystanie
+każdego z tych sposobów, można znaleźć
+<a href="https://github.com/fnp/lesmianator">w naszym repozytorium na GitHubie</a>.
+Jest to po prostu Leśmianator – w wersji przygotowanej zgodnie z warunkami
+turnieju.</p>
+
+
+<h3>Gdzie wysyłać zgłoszenia?</h3>
+
+<p>Zgłoszenia, a także wszelkiego rodzaju pytania i wątpliwości prosimy kierować na adres
+<a href="mailto:radoslaw.czajka@nowoczesnapolska.org.pl">radoslaw.czajka@nowoczesnapolska.org.pl</a>.
+Prosimy też o dołączenie do każdego zgłoszenia klauzuli o treści:
+<cite>Zgłaszam się do konkursu „Turniej Elektrybałtów” i oświadczam, że
+znam i akceptuję jego <a href="{% url 'e1_rules_page' %}">regulamin</a></cite>.
+
+</p>
+
+
+
+
+<p class='more'><a href="{% url 'e1_main_page' %}">Powrót do strony głównej</a></p>
+
+
+{% endblock %}
+
--- /dev/null
+from django.conf.urls import url
+from django.views.generic import TemplateView
+from . import views
+
+
+urlpatterns = [
+ url(r'^$', views.home, name='e1_main_page'),
+ url(r'^regulamin/$', TemplateView.as_view(template_name='edition1/rules.html'),
+ name='e1_rules_page'),
+ url(r'^wiecej/$', TemplateView.as_view(template_name='edition1/more.html'),
+ name='e1_more_page'),
+ url(r'^technikalia/$', TemplateView.as_view(template_name='edition1/technical.html'),
+ name='e1_technical_page'),
+]
--- /dev/null
+from django.shortcuts import render
+from poetry.models import Poem
+
+def home(request):
+ last = Poem.objects.all().order_by('-created_at')[:10]
+ return render(request, "edition1/home.html", locals())
--- /dev/null
+html {
+ margin: 0;
+}
+
+body {
+ margin: 0;
+ padding: 0;
+
+ background: #191919;
+ color: #989898;
+
+ font-family: Georgia,serif;
+}
+
+#body-wrapper {
+ color: black;
+ background: #F7F7F7;
+ padding-bottom: 3em;
+}
+#body {
+ max-width: 900px;
+ margin:auto;
+ padding: 1em;
+}
+
+
+#content {
+ width: 480px;
+}
+
+
+
+h1 {
+ font: bold 2.2em Georgia,serif;
+ margin-bottom: .2em;
+}
+
+
+h2 {
+ font-size: 1.1em;
+ margin:0;
+}
+
+a {
+ color: #0D777E;
+ text-decoration: none;
+}
+a:hover {
+ border-bottom: 1px dotted;
+}
+
+
+.plain li {
+ list-style: none;
+}
+
+li {
+ margin: 1em;
+}
+
+#termin-wrap {
+ margin-top: 3em;
+}
+
+
+.clr {
+ clear: both;
+}
+
+footer {
+ background: #191919;
+ color: #989898;
+ margin: 0 auto 0 auto;
+ padding: 1em;
+ clear: both;
+ text-align: center;
+}
+footer img {
+ margin: 0 20px;
+ vertical-align: middle;
+}
+footer a:hover {
+ border: none;
+}
+
+
+blockquote {
+ font-size: .9em;
+ font-style: italic;
+ margin-left: 350px;
+ margin-right: 50px;
+ margin-bottom: 4em;
+}
+blockquote p {
+ margin: .5em 0 0 0;
+}
+
+.more {
+ text-align: right;
+}
+
+.uwaga {
+ border: 1px solid #ddd;
+ padding: 0 1em;
+ margin: 1em 0;
+ background: white;
+ box-shadow: 2px 2px 2px #DDDDDD;
+}
+
+.social {
+ margin: .5em 0 2em 0;
+}
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Turniej Wolnych Lektur{% block "extratitle" %}{% endblock %}</title>
+ <meta charset="utf-8" />
+
+ <link rel="shortcut icon" href="{{ STATIC_URL }}img/favicon.ico" />
+ <style type="text/css">
+ @import "{{ STATIC_URL }}edition2/style.css";
+ @import "{{ STATIC_URL }}js/jquery.countdown.css";
+ </style>
+</head>
+
+<body>
+
+<div id="body-wrapper">
+<div id="body">
+{% block "body" %}{% endblock %}
+</div>
+</div>
+
+<footer>
+<a href='http://nowoczesnapolska.org.pl'><img src='{{ STATIC_URL }}img/fnp_black.png' alt='Fundacja Nowoczesna Polska' title='Fundacja Nowoczesna Polska' /></a>
+<a href='http://wolnelektury.pl'><img src='{{ STATIC_URL }}img/wl_black.png' alt='Wolne Lektury' title='Wolne Lektury' /></a>
+</footer>
+
+{% load piwik_tags %}
+{% tracking_code %}
+</body>
+
+
+</html>
--- /dev/null
+{% extends "edition2/base.html" %}
+
+{% block "body" %}
+
+<div style="float:right">
+<img src="{{ STATIC_URL }}img/turniej.png" style='float:right; margin-bottom: 2em;' alt="logo Turnieju Elektrybałtów: frontalny widok maszynki do mielenia mięsa" />
+</div>
+
+<div id="content">
+<h1>II Turniej Wolnych Lektur</h1>
+<h2>Edycja wizualna</h2>
+<p class="social">
+ {% load fnp_share %}
+ {% share 'http://turniej.wolnelektury.pl' 'Turniej Wolnych Lektur' %}
+</p>
+
+<div class="uwaga">
+<p>Zdecydowaliśmy się nie rozstrzygać II edycji Turnieju Wolnych Lektur
+ze względu na niewystarczającą liczbę i poziom zgłoszeń.</p>
+
+<p>Zobacz wyniki pierwszej edycji – <a href="{% url 'e1_main_page' %}">Turnieju Elektrybałtów</a>.</p>
+</div>
+
+<p>Wszelkie pytania i wątpliwości proszę kierować na adres
+<a href="mailto:turniej@nowoczesnapolska.org.pl">turniej@nowoczesnapolska.org.pl</a></p>
+
+<div class='clr'></div>
+</div>
+
+
+{% endblock %}
--- /dev/null
+{% extends "edition2/base.html" %}
+
+{% block "body" %}
+
+<h1>
+ <a href='{% url "e2_main_page" %}' style="float:left;">
+ <img src="{{ STATIC_URL }}img/turniej-maly.png"
+ style='margin-right: .5em;' /></a>
+ II Turniej Wolnych Lektur</h1>
+<h2>Edycja wizualna</h2>
+<p class="social">
+ {% load fnp_share %}
+ {% share 'http://turniej.wolnelektury.pl' 'Turniej Wolnych Lektur' %}
+</p>
+
+
+
+
+<p>Konkurs startuje 4 stycznia 2013 roku. Termin nadsyłania prac upływa <del>15</del> <ins>22</ins> lutego 2013 roku.
+Powinno być dość czasu na dopracowanie swoich pomysłów.</p>
+
+<h3>Przebieg konkursu:</h3>
+
+<ol>
+ <li>Konkurs startuje 4 stycznia 2013 roku.</li>
+ <li>Termin nadsyłania prac upływa <strong><del>15</del> <ins>22</ins> lutego</strong> 2013 roku.</li>
+ <li>Warunkiem dopuszczenia do konkursu jest udostępnienie swojego zgłoszenia
+ (w przypadku zgłoszenia programu – kodu źródłowego) na
+ <a href="http://freedomdefined.org/Licenses">wolnej licencji</a>.
+ Informacje o tym, jak to zrobić, znajdują się np. na stronach
+ <a href="http://www.gnu.org/licenses/gpl-howto.pl.html">projektu GNU</a>
+ czy <a href="http://creativecommons.org/choose/">Creative Commons</a>.</li>
+ <li>Zgłoszenia zostaną udostępnione publicznie na stronie konkursu po
+ zamknięciu etapu zgłoszeń. Autorzy nie muszą (choć oczywiście mogą)
+ upubliczniać ich wcześniej.</li>
+ <li>Do końca lutego jury konkursowe wybierze zwyciązcę konkursu.</li>
+ <li>Główną nagrodą jest czytnik e-booków Amazon Kindle z kompletem
+ książek z <a href="http://wolnelektury.pl">Wolnych Lektur</a> w formacie MOBI.</li>
+</ol>
+
+<p class='more'><a href="..">Powrót do strony głównej</a></p>
+
+{% endblock %}
--- /dev/null
+{% extends "edition2/base.html" %}
+
+{% block "body" %}
+
+
+<h1>
+ <a href='{% url "e2_main_page" %}' style="float:left;">
+ <img src="{{ STATIC_URL }}img/turniej-maly.png"
+ style='margin-right: .5em;' /></a>
+ II Turniej Wolnych Lektur</h1>
+<h2>Edycja wizualna</h2>
+<p class="social">
+ {% load fnp_share %}
+ {% share 'http://turniej.wolnelektury.pl' 'Turniej Wolnych Lektur' %}
+</p>
+
+
+
+
+<h3>Regulamin konkursu</h3>
+
+
+<ol>
+ <li>Organizatorem konkursu jest fundacja Nowoczesna Polska. </li>
+
+ <li>Przedmiotem konkursu jest wizualizacja oparta na Wolnych Lekturach.
+ Wszystkie zgłoszenia (w przypadku programów – ich kod źródłowy) biorące
+ udział w konkursie muszą być udostępnione na
+ <a href="http://freedomdefined.org/Licenses">wolnej licencji</a>.
+ Wizualizacje muszą być dostępne
+ w <a href="http://pl.wikipedia.org/wiki/Format_otwarty">otwartym formacie</a>.</li>
+
+ <li>Konkurs trwa od 4 stycznia do <del>15</del> <ins>22</ins> lutego 2013 roku i ma charakter otwarty.
+ Jedna osoba może wysłać więcej niż jedno zgłoszenie.
+ Aby wziąć udział udział w konkursie, należy wysłać swoje zgłoszenie na adres
+ <a href="mailto:turniej@nowoczesnapolska.org.pl">turniej@nowoczesnapolska.org.pl</a>
+ z klauzulą:
+ <cite>Zgłaszam się do konkursu „II Turniej Wolnych Lektur” i oświadczam, że
+ znam i akceptuję jego regulamin</cite>.</li>
+
+ <li>Nagrodą główną jest czytnik Amazon Kindle z kompletem książek
+ z Wolnych Lektur w formacie MOBI. Nie ma możliwości zamiany nagrody na jej
+ równowartość pieniężną.</li>
+
+ <li>Organizator może odwołać konkurs w każdym czasie, bez podawania
+ przyczyny. W takim przypadku uczestnikom konkursu nie przysługuje żadna
+ rekompensata. Uczestnicy zgłaszając swój udział w konkursie automatycznie
+ wyrażają zgodę na wykorzystanie ich wizerunku w materiałach promocyjnych
+ konkursu oraz materiałach promocyjnych fundacji Nowoczesna Polska.</li>
+
+ <li>Organizator zastrzega sobie prawo do odrzucenia zgłoszenia, którego
+ udostępnienie na stronie konkursu mogłoby zagrażać stabilności, responsywności
+ albo bezpieczeństwu serwera albo oprogramowania użytkownika, a także takich,
+ których poprawne uruchomienie okaże się niemożliwe lub poważnie utrudnione.</li>
+
+ <li>Organizator konkursu nie ponosi odpowiedzialności za wszelkie
+ roszczenia osób trzecich wynikające z tytułu wykorzystania materiałów
+ zgłoszonych przez uczestników konkursu jako własnych. Prace naruszające
+ prawa autorskie będą dyskwalifikowane.</li>
+
+ <li>Organizator zatrzega sobie prawo wprowadzenia zmian w regulaminie
+ konkursu.</li>
+</ul>
+
+
+
+
+<p class='more'><a href="..">Powrót do strony głównej</a></p>
+
+{% endblock %}
--- /dev/null
+{% extends "edition2/base.html" %}
+
+{% block "body" %}
+
+
+<h1>
+ <a href='{% url "e2_main_page" %}' style="float:left;">
+ <img src="{{ STATIC_URL }}img/turniej-maly.png"
+ style='margin-right: .5em;' /></a>
+ II Turniej Wolnych Lektur</h1>
+<h2>Edycja wizualna</h2>
+<p class="social">
+ {% load fnp_share %}
+ {% share 'http://turniej.wolnelektury.pl' 'Turniej Wolnych Lektur' %}
+</p>
+
+
+<h3>Wymogi techniczne wobec zgłoszeń</h3>
+
+<ul>
+ <li>Format wizualizacji powinien być otwarty. Jeśli zgłoszenie zawiera
+ oprogramowanie, powinno dać się ono uruchomić w środowisku GNU/Linux
+ przy użyciu wolnodostępnych narzędzi.</li>
+
+ <li>Warunkiem dopuszczenia do konkursu jest udostępnienie swojego zgłoszenia
+ (w przypadku zgłoszenia programu – jego kodu źródłowego) na
+ <a href="http://freedomdefined.org/Licenses">wolnej licencji</a>.
+ Informacje o tym, jak to zrobić, znajdują się np. na stronach
+ <a href="http://www.gnu.org/licenses/gpl-howto.pl.html">projektu GNU</a>
+ czy <a href="http://creativecommons.org/choose/">Creative Commons</a>.</li>
+
+ <li>Wizualizacja powinna dotyczyć zasobów
+ <a href="http://wolnelektury.pl">Wolnych Lektur</a>.
+ Nie jest wymagane wykorzystanie całości tych zasobów – można pokazać np.
+ tylko wybrany utwór. Można też poddać dane uprzedniej obróbce.
+ Za przykład niech posłuży <a href="http://teatr.wolnelektury.pl">prosty teatrzyk</a>
+ na podstawie pliku XML wyświetlający „Romea i Julię” w postaci animacji SVG.</li>
+
+ <li>Odrzucone zostaną zgłoszenia, które będą usiłowały w jakikolwiek
+ sposób zagrozić stabilności lub bezpieczeństwu serwera albo użytkownika.</li>
+</ul>
+
+
+<h3>Gdzie wysyłać zgłoszenia?</h3>
+
+<p>Zgłoszenia, a także wszelkiego rodzaju pytania i wątpliwości prosimy kierować na adres
+<a href="mailto:turniej@nowoczesnapolska.org.pl">turniej@nowoczesnapolska.org.pl</a>.
+Prosimy też o dołączenie do każdego zgłoszenia klauzuli o treści:
+<cite>Zgłaszam się do konkursu „II Turniej Wolnych Lektur” i oświadczam, że
+ znam i akceptuję jego <a href="{% url 'e2_rules_page' %}">regulamin</a></cite>.
+
+</p>
+
+
+
+
+<p class='more'><a href="{% url 'e2_main_page' %}">Powrót do strony głównej</a></p>
+
+
+{% endblock %}
+
--- /dev/null
+from django.conf.urls import url
+from django.views.generic import TemplateView
+
+urlpatterns = [
+ url(r'^$', TemplateView.as_view(template_name='edition2/home.html'),
+ name='e2_main_page'),
+ url(r'^regulamin/$', TemplateView.as_view(template_name='edition2/rules.html'),
+ name='e2_rules_page'),
+ url(r'^wiecej/$', TemplateView.as_view(template_name='edition2/more.html'),
+ name='e2_more_page'),
+ url(r'^technikalia/$', TemplateView.as_view(template_name='edition2/technical.html'),
+ name='e2_technical_page'),
+]
--- /dev/null
+#!/usr/bin/env python
+import os
+import sys
+
+
+if __name__ == "__main__":
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "core.settings")
+
+ from django.core.management import execute_from_command_line
+
+ execute_from_command_line(sys.argv)
--- /dev/null
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Poem',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', auto_created=True, serialize=False, primary_key=True)),
+ ('slug', models.SlugField()),
+ ('title', models.CharField(null=True, max_length=255, blank=True)),
+ ('text', models.TextField()),
+ ('created_at', models.DateTimeField(db_index=True, auto_now_add=True)),
+ ('seen_at', models.DateTimeField(auto_now_add=True)),
+ ('view_count', models.IntegerField(default=1)),
+ ('for_contest', models.BooleanField(default=False)),
+ ('in_contest', models.BooleanField(default=False)),
+ ],
+ options={
+ },
+ bases=(models.Model,),
+ ),
+ migrations.CreateModel(
+ name='Poet',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', auto_created=True, serialize=False, primary_key=True)),
+ ('name', models.CharField(max_length=50)),
+ ('path', models.CharField(max_length=255)),
+ ('slug', models.SlugField(unique=True)),
+ ('author', models.CharField(max_length=128, blank=True)),
+ ('url', models.CharField(max_length=255, blank=True)),
+ ('description', models.TextField(blank=True)),
+ ('first_line_title', models.BooleanField(default=False)),
+ ('skip_first_lines', models.IntegerField(default=0)),
+ ],
+ options={
+ },
+ bases=(models.Model,),
+ ),
+ migrations.AddField(
+ model_name='poem',
+ name='poet',
+ field=models.ForeignKey(to='poetry.Poet', on_delete=models.CASCADE),
+ preserve_default=True,
+ ),
+ ]
--- /dev/null
+import os
+import subprocess
+from django.db import models
+from django.urls import reverse
+from django.conf import settings
+from poetry.utils import get_hash
+
+
+class Poet(models.Model):
+ name = models.CharField(max_length=50)
+ path = models.CharField(max_length=255)
+ slug = models.SlugField(max_length=50, unique=True, db_index=True)
+ author = models.CharField(max_length=128, blank=True)
+ url = models.CharField(max_length=255, blank=True)
+ description = models.TextField(blank=True)
+ first_line_title = models.BooleanField(default=False)
+ skip_first_lines = models.IntegerField(default=0)
+
+ def __str__(self):
+ return self.name
+
+ def get_absolute_url(self):
+ return reverse('poetry_poet', kwargs={'slug': self.slug})
+
+ def write(self):
+ curdir = os.getcwd()
+ os.chdir(os.path.dirname(self.path))
+ proc = subprocess.Popen(self.path,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ os.chdir(curdir)
+ stdout, stderr = proc.communicate()
+ text = str(stdout, "utf-8", errors="ignore")[:1000]
+ slug = get_hash(text)
+ title = ''
+ if self.first_line_title:
+ title, text = text.split('\n', 1)
+ if self.skip_first_lines:
+ text = text.split('\n', self.skip_first_lines)[-1]
+ text = text.strip('\n')
+ poem = self.poem_set.create(
+ slug=slug,
+ text=text,
+ title=title
+ )
+ return poem
+
+ def make_for_contest(self):
+ assert not self.poem_set.filter(for_contest=True).exists()
+ for i in range(settings.POETRY_POEMS_FOR_CONTEST):
+ p = self.write()
+ p.for_contest = True
+ p.save()
+ return self.poem_set.filter(for_contest=True)
+
+ def contest_poems(self):
+ return self.poem_set.filter(in_contest=True)
+
+
+class Poem(models.Model):
+ slug = models.SlugField(max_length=50, db_index=True)
+ title = models.CharField(max_length=255, null=True, blank=True)
+ text = models.TextField()
+ poet = models.ForeignKey(Poet, on_delete=models.CASCADE)
+ created_at = models.DateTimeField(auto_now_add=True, editable=False, db_index=True)
+ seen_at = models.DateTimeField(auto_now_add=True, editable=False)
+ view_count = models.IntegerField(default=1)
+
+ for_contest = models.BooleanField(default=False)
+ in_contest = models.BooleanField(default=False)
+
+ def __str__(self):
+ oneliner = "%s, %s" % (self.poet.name, self.pretty_title())
+ oneliner += " [%s…]" % (" ".join(self.text.split()[:5]))
+ return oneliner
+
+ def get_absolute_url(self):
+ return reverse('poetry_poem', kwargs={'slug': self.slug})
+
+ def pretty_title(self):
+ return self.title or "***"
+
+ def visit(self):
+ self.view_count += 1
+ self.seen_at = datetime.now()
+ self.save()
--- /dev/null
+body {
+ font-size: 16px;
+ font: Georgia, "Times New Roman", serif;
+ line-height: 1.5em;
+ margin: 0;
+}
+
+a {
+ color: blue;
+ text-decoration: none;
+}
+
+a:hover {
+ border-bottom: 1px dotted;
+}
+
+#book-text {
+ margin: 3em;
+ max-width: 36em;
+}
+
+/* ================================== */
+/* = Header with logo and menu = */
+/* ================================== */
+#header {
+ margin: 3.4em 0 0 1.4em;
+}
+
+img {
+ border: none;
+}
+
+
+#menu {
+ position: fixed;
+ left: 0em;
+ top: 0em;
+ width: 100%;
+ height: 1.5em;
+ background: #333;
+ color: #FFF;
+ opacity: 0.9;
+ z-index: 99;
+}
+
+#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;
+}
+
+
+/* =================================================== */
+/* = 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 {
+ margin-top: 3em;
+ margin-left: 2.5em;
+ font-size: 0.875em;
+}
+
+#footnotes p, #footnotes ul {
+ margin: 1.5em 0;
+}
+
+#footnotes .permalink {
+ font-size: .75em;
+}
+
+/* =================== */
+/* = Custom elements = */
+/* =================== */
+span.author {
+ font-size: 0.5em;
+ display: block;
+ line-height: 1.5em;
+ margin-bottom: 0.25em;
+}
+
+span.author a {
+ color: inherit;
+}
+
+span.author a {
+ color: inherit;
+}
+
+
+/* =================================== */
+/* = Hide some elements for printing = */
+/* =================================== */
+
+@media print {
+ #menu {display: none;}
+}
--- /dev/null
+{% extends "edition1/base.html" %}
+
+{% block "body" %}
+
+<h1>
+<a href='{% url "e1_main_page" %}'><img src="{{ STATIC_URL }}img/turniej-maly.png" style='float:left; margin-right: 10px; margin-top: -13px' /></a>
+Turniej Elektrybałtów: utwory wybrane do konkursu</h1>
+
+<div class="social">
+<span style="position:relative; top: -5px;" >
+ <div class="fb-like" data-href="http://turniej.wolnelektury.pl" data-send="false" data-layout="button_count" data-width="150" data-show-faces="false"></div>
+</span>
+<g:plusone annotation="bubble" href="http://turniej.wolnelektury.pl"></g:plusone>
+<script>
+ new nk_fajne({
+ url: "http://turniej.wolnelektury.pl",
+ type: 4,
+ color: 0,
+ title: "Turniej Elektrybałtów",
+ image: "http://turniej.wolnelektury.pl/turniej.png",
+ description: "Turniej Elektrybałtów - otwarty konkurs na najlepszego automatycznego poetę."
+ });
+</script>
+</div>
+
+<div style='clear: both'></div>
+
+{% for poet in poets %}
+ <h2><a href="{{ poet.get_absolute_url }}">{{ poet }}</a></h2>
+ <ul class='plain'>
+ {% for poem in poet.contest_poems %}
+ <li><a href="{{ poem.get_absolute_url }}">{{ poem }}</a></li>
+ {% endfor %}
+ </ul>
+{% endfor %}
+</ul>
+
+{% endblock %}
--- /dev/null
+{% extends "edition1/base.html" %}
+
+{% block "body" %}
+
+<h1>
+<a href='{% url "e1_main_page" %}'><img src="{{ STATIC_URL }}img/turniej-maly.png" style='float:left; margin-right: 10px; margin-top: -13px' /></a>
+Turniej Elektrybałtów</h1>
+
+<div class="social">
+<span style="position:relative; top: -5px;" >
+ <div class="fb-like" data-href="http://turniej.wolnelektury.pl" data-send="false" data-layout="button_count" data-width="150" data-show-faces="false"></div>
+</span>
+<g:plusone annotation="bubble" href="http://turniej.wolnelektury.pl"></g:plusone>
+<script>
+ new nk_fajne({
+ url: "http://turniej.wolnelektury.pl",
+ type: 4,
+ color: 0,
+ title: "Turniej Elektrybałtów",
+ image: "http://turniej.wolnelektury.pl/turniej.png",
+ description: "Turniej Elektrybałtów - otwarty konkurs na najlepszego automatycznego poetę."
+ });
+</script>
+</div>
+
+<h2>Uczestnicy:</h2>
+<ul class='poet-list'>
+{% for poet in poets %}
+ <li><a href="{{ poet.get_absolute_url }}">{{ poet }}</a>
+ (<a href="{% url 'poetry_new' poet.slug %}">Twórz-że!</a>)</li>
+{% endfor %}
+</ul>
+
+<div style='clear: both'></div>
+
+<a class='tworz' href="{% url 'poetry_new' %}">Twórz-że się!</a>
+
+<h2><a href="{% url 'poetry_contest' %}">Utwory do konkursu zostały wybrane!</a></h2>
+
+<p>Spośród wygenerowanych przz nas propozycji autorzy programów wybrali po trzy utwory.</p>
+<p><a href="{% url 'poetry_contest' %}">Zobacz wiersze startujące w konkursie!</a></p>
+</p>
+
+
+
+
+<h2>Ostatnio opublikowane utwory:</h2>
+<ul class='plain'>
+{% for poem in last %}
+ <li><a href="{{ poem.get_absolute_url }}">{{ poem }}</a></li>
+{% endfor %}
+</ul>
+
+{% endblock %}
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Turniej Elektrybałtów: {{ poem }}</title>
+ <meta charset="utf-8" />
+
+ <link rel="shortcut icon" href="{{ STATIC_URL }}img/favicon.ico" />
+ <style type="text/css">
+ @import "{{ STATIC_URL }}poetry/poem.css";
+ </style>
+</head>
+
+<body>
+
+<div id="fb-root"></div>
+<script>(function(d, s, id) {
+ var js, fjs = d.getElementsByTagName(s)[0];
+ if (d.getElementById(id)) {return;}
+ js = d.createElement(s); js.id = id;
+ js.src = "//connect.facebook.net/pl_PL/all.js#xfbml=1";
+ fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>
+<script src="http://0.s-nk.pl/script/nk_widgets/nk_widget_fajne_embed"></script>
+
+ <div id="menu">
+ <a href='{% url "poetry_new" %}' class='menu-link'>Twórzże się jeszcze raz!</a>
+ <span style='float: right'>Turniej Elektrybałtów</a>
+ </div>
+
+ <div id="header">
+ <div id="logo">
+ <a href="{% url "e1_main_page" %}"><img src="{{ STATIC_URL }}img/turniej-maly.png" alt="logo Turnieju Elektrybałtów" /></a>
+ </div>
+ </div>
+
+ <div id="book-text">
+ <h1>
+ <span class="author"><a href="{{ poem.poet.get_absolute_url }}">{{ poem.poet.name }}</a></span>
+ <span class="title">{% if poem.title %}{{ poem.title }}{% else %}***{% endif %}</span>
+ </h1>
+ {{ poem.text|linebreaksbr }}
+ <div id="footnotes" >
+ <h3>O utworze</h3>
+ <p>Autor: <a href="{{ poem.poet.get_absolute_url }}">{{ poem.poet.name }}</a> (<a href="{% url 'poetry_main' %}">wszyscy autorzy</a>).
+ <br/>Zobacz <a href="{% url 'poetry_new' poem.poet.slug %}">nowy wiersz</a> tego autora,
+ albo <a href="{% url 'poetry_new' %}">nowy wiersz dowolnego autora</a>.</p>
+
+
+
+<div>
+<h3>Podziel się wierszem!</h3>
+<span style="position:relative; top: -5px;" >
+ <div class="fb-like" data-href="http://turniej.wolnelektury.pl{{ poem.get_absolute_url }}" data-send="false" data-layout="button_count" data-width="150" data-show-faces="false"></div>
+</span>
+<g:plusone annotation="bubble" href="http://turniej.wolnelektury.pl{{ poem.get_absolute_url }}"></g:plusone>
+
+<script>
+ new nk_fajne({
+ url: "http://turniej.wolnelektury.pl{{ poem.get_absolute_url }}",
+ type: 4,
+ color: 0,
+ title: "wiersz",
+ image: "http://turniej.wolnelektury.pl/turniej.png",
+ description: "{{ poem }}"
+ });
+</script>
+ <br/>
+ albo użyj linku:<br/>
+ <a class="permalink" href="{{ poem.get_absolute_url }}">http://turniej.wolnelektury.pl{{ poem.get_absolute_url }}</a>
+</div>
+
+
+
+
+ </div>
+
+<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
+ {lang: 'pl'}
+</script>
+{% load piwik_tags %}
+{% tracking_code %}
+</body>
+
+
+</html>
+
+
--- /dev/null
+{% extends "edition1/base.html" %}
+
+
+{% block "extratitle" %}: {{ poet.name }}{% endblock %}
+
+
+{% block "body" %}
+
+<h1>
+<a href='{% url "e1_main_page" %}'><img src="{{ STATIC_URL }}img/turniej-maly.png" style='float:left; margin-right: 10px; margin-top: -13px' /></a>
+{{ poet.name }}</h1>
+
+<div>
+<span style="position:relative; top: -5px;" >
+ <div class="fb-like" data-send="false" data-layout="button_count" data-width="150" data-show-faces="false"></div>
+</span>
+<g:plusone annotation="bubble"></g:plusone>
+<script>
+ new nk_fajne({
+ url: "{{ request.build_absolute_uri }}",
+ type: 4,
+ color: 0,
+ title: "{{ poet.name }}",
+ image: "http://turniej.wolnelektury.pl/turniej.png",
+ description: "Turniej Elektrybałtów - konkurs na najlepszego automatycznego poetę."
+ });
+</script>
+</div>
+
+<p><a href="{% url 'poetry_main' %}">Zobacz wszystkich autorów.</a></p>
+
+<div class="poet-description">
+
+<p>Autor programu: <strong>{{ poet.author }}</strong></p>
+
+{{ poet.description|linebreaks }}
+
+<p>Kod źródłowy: <a href="{{ poet.url }}">{{ poet.url }}</a></p>
+
+<a class="tworz" href="{% url 'poetry_new' poet.slug %}">Twórz-że!</a>
+
+</div>
+
+<h2>Utwory w konkursie (<a href="{% url 'poetry_contest' %}">zobacz wszystkie</a>)</h2>
+<ul class='plain'>
+{% for poem in in_contest %}
+ <li><a href="{{ poem.get_absolute_url }}">{{ poem }}</a></li>
+{% endfor %}
+</ul>
+
+<h2>Ostatnio opublikowane utwory:</h2>
+<ul class='plain'>
+{% for poem in last %}
+ <li><a href="{{ poem.get_absolute_url }}">{{ poem }}</a></li>
+{% endfor %}
+</ul>
+
+{% endblock %}
--- /dev/null
+from django.conf.urls import url
+from . import views
+
+
+urlpatterns = [
+ url(r'^wiersz/(?P<slug>[a-zA-Z0-9-]+)/$', views.poem, name='poetry_poem'),
+
+ url(r"^$", views.main, name="poetry_main"),
+ url(r"^nowy/$", views.new, name="poetry_new"),
+ url(r"^konkurs/$", views.contest, name="poetry_contest"),
+ url(r"^(?P<slug>[a-zA-Z0-9-]+)/$", views.poet, name="poetry_poet"),
+ url(r"^(?P<slug>[a-zA-Z0-9-]+)/nowy/$", views.new, name="poetry_new"),
+]
--- /dev/null
+import time
+
+from base64 import urlsafe_b64encode
+from hashlib import sha1
+
+
+def get_hash(seed):
+ sha_digest = sha1(('%d%s' % (time.time(), str(seed))
+ ).encode('utf-8', 'replace')).digest()
+ return urlsafe_b64encode(sha_digest).decode('latin1').replace('=', '').replace('_', '-').lower()
--- /dev/null
+from django.shortcuts import render, get_object_or_404
+from poetry.models import Poet, Poem
+
+
+def new(request, slug=None):
+ if slug is not None:
+ poet = get_object_or_404(Poet, slug=slug)
+ else:
+ poet = Poet.objects.order_by('?')[0]
+
+ poem = poet.write()
+ return render(request, "poetry/poem.html", locals())
+
+
+def poem(request, slug):
+ poem = get_object_or_404(Poem, slug=slug)
+ return render(request, "poetry/poem.html", locals())
+
+
+def poet(request, slug):
+ poet = get_object_or_404(Poet, slug=slug)
+ last = poet.poem_set.order_by('-created_at')[:20]
+ in_contest = poet.poem_set.filter(in_contest=True).order_by('created_at')
+ return render(request, "poetry/poet.html", locals())
+
+
+def main(request):
+ poets = Poet.objects.all().order_by('?')
+ last = Poem.objects.all().order_by('-created_at')[:20]
+ return render(request, "poetry/main.html", locals())
+
+
+def contest(request):
+ poets = Poet.objects.all().order_by('?')
+ return render(request, "poetry/contest.html", locals())
+
+++ /dev/null
-# This template is uploaded by `fab setup`.
-# You should fill out the details in the version deployed on the server.
-
-
-ADMINS = (
- #('Name', 'E-mail'),
-)
-
-MANAGERS = (
- #('Name', 'E-mail'),
-)
-
-# on
-DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
- 'NAME': '', # 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.
- 'PORT': '', # Set to empty string for default. Not used with sqlite3.
- }
-}
-
-
-SECRET_KEY = %(secret_key)r
-MEDIA_ROOT = '%(path)s/media/'
+++ /dev/null
-# Django settings for turniej project.
-import os.path
-
-PROJECT_DIR = os.path.abspath(os.path.dirname(__file__))
-
-DEBUG = 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': os.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.
- 'PORT': '', # Set to empty string for default. Not used with sqlite3.
- }
-}
-
-# 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.
-# On Unix systems, a value of None will cause Django to use the same
-# timezone as the operating system.
-# If running in a Windows environment this must be set to the same as your
-# system time zone.
-TIME_ZONE = None
-
-# Language code for this installation. All choices can be found here:
-# http://www.i18nguy.com/unicode/language-identifiers.html
-LANGUAGE_CODE = 'pl'
-
-SITE_ID = 1
-
-# If you set this to False, Django will make some optimizations so as not
-# to load the internationalization machinery.
-USE_I18N = True
-
-# If you set this to False, Django will not format dates, numbers and
-# calendars according to the current locale
-#USE_L10N = True
-
-# Absolute filesystem path to the directory that will hold user-uploaded files.
-# Example: "/home/media/media.lawrence.com/media/"
-MEDIA_ROOT = os.path.join(PROJECT_DIR, '../media')
-
-# URL that handles the media served from MEDIA_ROOT. Make sure to use a
-# trailing slash.
-# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
-MEDIA_URL = '/media/'
-
-# Absolute path to the directory static files should be collected to.
-# Don't put anything in this directory yourself; store your static files
-# in apps' "static/" subdirectories and in STATICFILES_DIRS.
-# Example: "/home/media/media.lawrence.com/static/"
-STATIC_ROOT = os.path.join(PROJECT_DIR, '../static')
-
-# URL prefix for static files.
-# Example: "http://media.lawrence.com/static/"
-STATIC_URL = '/static/'
-
-# URL prefix for admin static files -- CSS, JavaScript and images.
-# Make sure to use a trailing slash.
-# Examples: "http://foo.com/static/admin/", "/static/admin/".
-ADMIN_MEDIA_PREFIX = '/static/admin/'
-
-# Additional locations of static files
-STATICFILES_DIRS = (
- # Put strings here, like "/home/html/static" or "C:/www/django/static".
- # Always use forward slashes, even on Windows.
- # Don't forget to use absolute paths, not relative paths.
-
- os.path.join(PROJECT_DIR, 'static'),
-)
-
-# List of finder classes that know how to find static files in
-# various locations.
-STATICFILES_FINDERS = (
- 'django.contrib.staticfiles.finders.FileSystemFinder',
- 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
-# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
-)
-
-TEMPLATES = [
- {
- 'BACKEND': 'django.template.backends.django.DjangoTemplates',
- 'APP_DIRS': True,
- 'DIRS': [
- os.path.join(PROJECT_DIR, 'templates'),
- ],
- 'OPTIONS': {
- 'context_processors': [
- "django.template.context_processors.debug",
- "django.template.context_processors.i18n",
- "django.template.context_processors.media",
- "django.template.context_processors.static",
- "django.contrib.messages.context_processors.messages",
- "django.template.context_processors.request",
- ],
- },
- },
-]
-
-MIDDLEWARE = [
- 'django.middleware.common.CommonMiddleware',
-]
-
-ROOT_URLCONF = 'turniej.urls'
-
-INSTALLED_APPS = [
- 'django.contrib.sites',
- 'django.contrib.staticfiles',
-
- 'piwik',
-
- 'fnpdjango',
- 'poetry',
- 'edition1',
- 'edition2',
-]
-
-POETRY_POEMS_FOR_CONTEST = 20
-
-ALLOWED_HOSTS = [
- 'turniej.wolnelektury.pl',
-]
-
-# Load localsettings, if they exist
-try:
- from .localsettings import *
-except ImportError:
- pass
+++ /dev/null
-/* http://keith-wood.name/countdown.html\r
- * Polish initialisation for the jQuery countdown extension\r
- * Written by Pawel Lewtak lewtak@gmail.com (2008) */\r
-(function($) {\r
- $.countdown.regional['pl'] = {\r
- labels: ['lat', 'miesięcy', 'tygodni', 'dni', 'godzin', 'minut', 'sekund'],\r
- labels1: ['rok', 'miesiąc', 'tydzień', 'dzień', 'godzina', 'minuta', 'sekunda'],\r
- labels2: ['lata', 'miesiące', 'tygodnie', 'dni', 'godziny', 'minuty', 'sekundy'],\r
- compactLabels: ['l', 'm', 't', 'd'], compactLabels1: ['r', 'm', 't', 'd'],\r
- whichLabels: function(amount) {\r
- var units = amount % 10;\r
- var tens = Math.floor((amount % 100) / 10);\r
- return (amount == 1 ? 1 : (units >= 2 && units <= 4 && tens != 1 ? 2 : 0));\r
- },\r
- digits: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\r
- timeSeparator: ':', isRTL: false};\r
- $.countdown.setDefaults($.countdown.regional['pl']);\r
-})(jQuery);\r
+++ /dev/null
-/* jQuery Countdown styles 1.6.1. */
-.hasCountdown {
-}
-.countdown_rtl {
- direction: rtl;
-}
-.countdown_holding span {
- color: #888;
-}
-.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;
- text-align: center;
-}
-.countdown_amount {
- font-size: 360%;
-}
-.countdown_descr {
- display: block;
- width: 100%;
-}
+++ /dev/null
-/* http://keith-wood.name/countdown.html\r
- Countdown for jQuery v1.6.1.\r
- Written by Keith Wood (kbwood{at}iinet.com.au) January 2008.\r
- Available under the MIT (https://github.com/jquery/jquery/blob/master/MIT-LICENSE.txt) license. \r
- Please attribute the author if you use it. */\r
-(function($){function Countdown(){this.regional=[];this.regional['']={labels:['Years','Months','Weeks','Days','Hours','Minutes','Seconds'],labels1:['Year','Month','Week','Day','Hour','Minute','Second'],compactLabels:['y','m','w','d'],whichLabels:null,digits:['0','1','2','3','4','5','6','7','8','9'],timeSeparator:':',isRTL:false};this._defaults={until:null,since:null,timezone:null,serverSync:null,format:'dHMS',layout:'',compact:false,significant:0,description:'',expiryUrl:'',expiryText:'',alwaysExpire:false,onExpiry:null,onTick:null,tickInterval:1};$.extend(this._defaults,this.regional['']);this._serverSyncs=[];function timerCallBack(a){var b=(a<1e12?(b=performance.now?(performance.now()+performance.timing.navigationStart):Date.now()):a||new Date().getTime());if(b-d>=1000){x._updateTargets();d=b}c(timerCallBack)}var c=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||null;var d=0;if(!c||$.noRequestAnimationFrame){$.noRequestAnimationFrame=null;setInterval(function(){x._updateTargets()},980)}else{d=window.animationStartTime||window.webkitAnimationStartTime||window.mozAnimationStartTime||window.oAnimationStartTime||window.msAnimationStartTime||new Date().getTime();c(timerCallBack)}}var Y=0;var O=1;var W=2;var D=3;var H=4;var M=5;var S=6;$.extend(Countdown.prototype,{markerClassName:'hasCountdown',propertyName:'countdown',_rtlClass:'countdown_rtl',_sectionClass:'countdown_section',_amountClass:'countdown_amount',_rowClass:'countdown_row',_holdingClass:'countdown_holding',_showClass:'countdown_show',_descrClass:'countdown_descr',_timerTargets:[],setDefaults:function(a){this._resetExtraLabels(this._defaults,a);$.extend(this._defaults,a||{})},UTCDate:function(a,b,c,e,f,g,h,i){if(typeof b=='object'&&b.constructor==Date){i=b.getMilliseconds();h=b.getSeconds();g=b.getMinutes();f=b.getHours();e=b.getDate();c=b.getMonth();b=b.getFullYear()}var d=new Date();d.setUTCFullYear(b);d.setUTCDate(1);d.setUTCMonth(c||0);d.setUTCDate(e||1);d.setUTCHours(f||0);d.setUTCMinutes((g||0)-(Math.abs(a)<30?a*60:a));d.setUTCSeconds(h||0);d.setUTCMilliseconds(i||0);return d},periodsToSeconds:function(a){return a[0]*31557600+a[1]*2629800+a[2]*604800+a[3]*86400+a[4]*3600+a[5]*60+a[6]},_attachPlugin:function(a,b){a=$(a);if(a.hasClass(this.markerClassName)){return}var c={options:$.extend({},this._defaults),_periods:[0,0,0,0,0,0,0]};a.addClass(this.markerClassName).data(this.propertyName,c);this._optionPlugin(a,b)},_addTarget:function(a){if(!this._hasTarget(a)){this._timerTargets.push(a)}},_hasTarget:function(a){return($.inArray(a,this._timerTargets)>-1)},_removeTarget:function(b){this._timerTargets=$.map(this._timerTargets,function(a){return(a==b?null:a)})},_updateTargets:function(){for(var i=this._timerTargets.length-1;i>=0;i--){this._updateCountdown(this._timerTargets[i])}},_optionPlugin:function(a,b,c){a=$(a);var d=a.data(this.propertyName);if(!b||(typeof b=='string'&&c==null)){var e=b;b=(d||{}).options;return(b&&e?b[e]:b)}if(!a.hasClass(this.markerClassName)){return}b=b||{};if(typeof b=='string'){var e=b;b={};b[e]=c}this._resetExtraLabels(d.options,b);$.extend(d.options,b);this._adjustSettings(a,d);var f=new Date();if((d._since&&d._since<f)||(d._until&&d._until>f)){this._addTarget(a[0])}this._updateCountdown(a,d)},_updateCountdown:function(a,b){var c=$(a);b=b||c.data(this.propertyName);if(!b){return}c.html(this._generateHTML(b)).toggleClass(this._rtlClass,b.options.isRTL);if($.isFunction(b.options.onTick)){var d=b._hold!='lap'?b._periods:this._calculatePeriods(b,b._show,b.options.significant,new Date());if(b.options.tickInterval==1||this.periodsToSeconds(d)%b.options.tickInterval==0){b.options.onTick.apply(a,[d])}}var e=b._hold!='pause'&&(b._since?b._now.getTime()<b._since.getTime():b._now.getTime()>=b._until.getTime());if(e&&!b._expiring){b._expiring=true;if(this._hasTarget(a)||b.options.alwaysExpire){this._removeTarget(a);if($.isFunction(b.options.onExpiry)){b.options.onExpiry.apply(a,[])}if(b.options.expiryText){var f=b.options.layout;b.options.layout=b.options.expiryText;this._updateCountdown(a,b);b.options.layout=f}if(b.options.expiryUrl){window.location=b.options.expiryUrl}}b._expiring=false}else if(b._hold=='pause'){this._removeTarget(a)}c.data(this.propertyName,b)},_resetExtraLabels:function(a,b){var c=false;for(var n in b){if(n!='whichLabels'&&n.match(/[Ll]abels/)){c=true;break}}if(c){for(var n in a){if(n.match(/[Ll]abels[02-9]/)){a[n]=null}}}},_adjustSettings:function(a,b){var c;var d=0;var e=null;for(var i=0;i<this._serverSyncs.length;i++){if(this._serverSyncs[i][0]==b.options.serverSync){e=this._serverSyncs[i][1];break}}if(e!=null){d=(b.options.serverSync?e:0);c=new Date()}else{var f=($.isFunction(b.options.serverSync)?b.options.serverSync.apply(a,[]):null);c=new Date();d=(f?c.getTime()-f.getTime():0);this._serverSyncs.push([b.options.serverSync,d])}var g=b.options.timezone;g=(g==null?-c.getTimezoneOffset():g);b._since=b.options.since;if(b._since!=null){b._since=this.UTCDate(g,this._determineTime(b._since,null));if(b._since&&d){b._since.setMilliseconds(b._since.getMilliseconds()+d)}}b._until=this.UTCDate(g,this._determineTime(b.options.until,c));if(d){b._until.setMilliseconds(b._until.getMilliseconds()+d)}b._show=this._determineShow(b)},_destroyPlugin:function(a){a=$(a);if(!a.hasClass(this.markerClassName)){return}this._removeTarget(a[0]);a.removeClass(this.markerClassName).empty().removeData(this.propertyName)},_pausePlugin:function(a){this._hold(a,'pause')},_lapPlugin:function(a){this._hold(a,'lap')},_resumePlugin:function(a){this._hold(a,null)},_hold:function(a,b){var c=$.data(a,this.propertyName);if(c){if(c._hold=='pause'&&!b){c._periods=c._savePeriods;var d=(c._since?'-':'+');c[c._since?'_since':'_until']=this._determineTime(d+c._periods[0]+'y'+d+c._periods[1]+'o'+d+c._periods[2]+'w'+d+c._periods[3]+'d'+d+c._periods[4]+'h'+d+c._periods[5]+'m'+d+c._periods[6]+'s');this._addTarget(a)}c._hold=b;c._savePeriods=(b=='pause'?c._periods:null);$.data(a,this.propertyName,c);this._updateCountdown(a,c)}},_getTimesPlugin:function(a){var b=$.data(a,this.propertyName);return(!b?null:(!b._hold?b._periods:this._calculatePeriods(b,b._show,b.options.significant,new Date())))},_determineTime:function(k,l){var m=function(a){var b=new Date();b.setTime(b.getTime()+a*1000);return b};var n=function(a){a=a.toLowerCase();var b=new Date();var c=b.getFullYear();var d=b.getMonth();var e=b.getDate();var f=b.getHours();var g=b.getMinutes();var h=b.getSeconds();var i=/([+-]?[0-9]+)\s*(s|m|h|d|w|o|y)?/g;var j=i.exec(a);while(j){switch(j[2]||'s'){case's':h+=parseInt(j[1],10);break;case'm':g+=parseInt(j[1],10);break;case'h':f+=parseInt(j[1],10);break;case'd':e+=parseInt(j[1],10);break;case'w':e+=parseInt(j[1],10)*7;break;case'o':d+=parseInt(j[1],10);e=Math.min(e,x._getDaysInMonth(c,d));break;case'y':c+=parseInt(j[1],10);e=Math.min(e,x._getDaysInMonth(c,d));break}j=i.exec(a)}return new Date(c,d,e,f,g,h,0)};var o=(k==null?l:(typeof k=='string'?n(k):(typeof k=='number'?m(k):k)));if(o)o.setMilliseconds(0);return o},_getDaysInMonth:function(a,b){return 32-new Date(a,b,32).getDate()},_normalLabels:function(a){return a},_generateHTML:function(c){var d=this;c._periods=(c._hold?c._periods:this._calculatePeriods(c,c._show,c.options.significant,new Date()));var e=false;var f=0;var g=c.options.significant;var h=$.extend({},c._show);for(var i=Y;i<=S;i++){e|=(c._show[i]=='?'&&c._periods[i]>0);h[i]=(c._show[i]=='?'&&!e?null:c._show[i]);f+=(h[i]?1:0);g-=(c._periods[i]>0?1:0)}var j=[false,false,false,false,false,false,false];for(var i=S;i>=Y;i--){if(c._show[i]){if(c._periods[i]){j[i]=true}else{j[i]=g>0;g--}}}var k=(c.options.compact?c.options.compactLabels:c.options.labels);var l=c.options.whichLabels||this._normalLabels;var m=function(a){var b=c.options['compactLabels'+l(c._periods[a])];return(h[a]?d._translateDigits(c,c._periods[a])+(b?b[a]:k[a])+' ':'')};var n=function(a){var b=c.options['labels'+l(c._periods[a])];return((!c.options.significant&&h[a])||(c.options.significant&&j[a])?'<span class="'+x._sectionClass+'">'+'<span class="'+x._amountClass+'">'+d._translateDigits(c,c._periods[a])+'</span><br/>'+(b?b[a]:k[a])+'</span>':'')};return(c.options.layout?this._buildLayout(c,h,c.options.layout,c.options.compact,c.options.significant,j):((c.options.compact?'<span class="'+this._rowClass+' '+this._amountClass+(c._hold?' '+this._holdingClass:'')+'">'+m(Y)+m(O)+m(W)+m(D)+(h[H]?this._minDigits(c,c._periods[H],2):'')+(h[M]?(h[H]?c.options.timeSeparator:'')+this._minDigits(c,c._periods[M],2):'')+(h[S]?(h[H]||h[M]?c.options.timeSeparator:'')+this._minDigits(c,c._periods[S],2):''):'<span class="'+this._rowClass+' '+this._showClass+(c.options.significant||f)+(c._hold?' '+this._holdingClass:'')+'">'+n(Y)+n(O)+n(W)+n(D)+n(H)+n(M)+n(S))+'</span>'+(c.options.description?'<span class="'+this._rowClass+' '+this._descrClass+'">'+c.options.description+'</span>':'')))},_buildLayout:function(c,d,e,f,g,h){var j=c.options[f?'compactLabels':'labels'];var k=c.options.whichLabels||this._normalLabels;var l=function(a){return(c.options[(f?'compactLabels':'labels')+k(c._periods[a])]||j)[a]};var m=function(a,b){return c.options.digits[Math.floor(a/b)%10]};var o={desc:c.options.description,sep:c.options.timeSeparator,yl:l(Y),yn:this._minDigits(c,c._periods[Y],1),ynn:this._minDigits(c,c._periods[Y],2),ynnn:this._minDigits(c,c._periods[Y],3),y1:m(c._periods[Y],1),y10:m(c._periods[Y],10),y100:m(c._periods[Y],100),y1000:m(c._periods[Y],1000),ol:l(O),on:this._minDigits(c,c._periods[O],1),onn:this._minDigits(c,c._periods[O],2),onnn:this._minDigits(c,c._periods[O],3),o1:m(c._periods[O],1),o10:m(c._periods[O],10),o100:m(c._periods[O],100),o1000:m(c._periods[O],1000),wl:l(W),wn:this._minDigits(c,c._periods[W],1),wnn:this._minDigits(c,c._periods[W],2),wnnn:this._minDigits(c,c._periods[W],3),w1:m(c._periods[W],1),w10:m(c._periods[W],10),w100:m(c._periods[W],100),w1000:m(c._periods[W],1000),dl:l(D),dn:this._minDigits(c,c._periods[D],1),dnn:this._minDigits(c,c._periods[D],2),dnnn:this._minDigits(c,c._periods[D],3),d1:m(c._periods[D],1),d10:m(c._periods[D],10),d100:m(c._periods[D],100),d1000:m(c._periods[D],1000),hl:l(H),hn:this._minDigits(c,c._periods[H],1),hnn:this._minDigits(c,c._periods[H],2),hnnn:this._minDigits(c,c._periods[H],3),h1:m(c._periods[H],1),h10:m(c._periods[H],10),h100:m(c._periods[H],100),h1000:m(c._periods[H],1000),ml:l(M),mn:this._minDigits(c,c._periods[M],1),mnn:this._minDigits(c,c._periods[M],2),mnnn:this._minDigits(c,c._periods[M],3),m1:m(c._periods[M],1),m10:m(c._periods[M],10),m100:m(c._periods[M],100),m1000:m(c._periods[M],1000),sl:l(S),sn:this._minDigits(c,c._periods[S],1),snn:this._minDigits(c,c._periods[S],2),snnn:this._minDigits(c,c._periods[S],3),s1:m(c._periods[S],1),s10:m(c._periods[S],10),s100:m(c._periods[S],100),s1000:m(c._periods[S],1000)};var p=e;for(var i=Y;i<=S;i++){var q='yowdhms'.charAt(i);var r=new RegExp('\\{'+q+'<\\}(.*)\\{'+q+'>\\}','g');p=p.replace(r,((!g&&d[i])||(g&&h[i])?'$1':''))}$.each(o,function(n,v){var a=new RegExp('\\{'+n+'\\}','g');p=p.replace(a,v)});return p},_minDigits:function(a,b,c){b=''+b;if(b.length>=c){return this._translateDigits(a,b)}b='0000000000'+b;return this._translateDigits(a,b.substr(b.length-c))},_translateDigits:function(b,c){return(''+c).replace(/[0-9]/g,function(a){return b.options.digits[a]})},_determineShow:function(a){var b=a.options.format;var c=[];c[Y]=(b.match('y')?'?':(b.match('Y')?'!':null));c[O]=(b.match('o')?'?':(b.match('O')?'!':null));c[W]=(b.match('w')?'?':(b.match('W')?'!':null));c[D]=(b.match('d')?'?':(b.match('D')?'!':null));c[H]=(b.match('h')?'?':(b.match('H')?'!':null));c[M]=(b.match('m')?'?':(b.match('M')?'!':null));c[S]=(b.match('s')?'?':(b.match('S')?'!':null));return c},_calculatePeriods:function(c,d,e,f){c._now=f;c._now.setMilliseconds(0);var g=new Date(c._now.getTime());if(c._since){if(f.getTime()<c._since.getTime()){c._now=f=g}else{f=c._since}}else{g.setTime(c._until.getTime());if(f.getTime()>c._until.getTime()){c._now=f=g}}var h=[0,0,0,0,0,0,0];if(d[Y]||d[O]){var i=x._getDaysInMonth(f.getFullYear(),f.getMonth());var j=x._getDaysInMonth(g.getFullYear(),g.getMonth());var k=(g.getDate()==f.getDate()||(g.getDate()>=Math.min(i,j)&&f.getDate()>=Math.min(i,j)));var l=function(a){return(a.getHours()*60+a.getMinutes())*60+a.getSeconds()};var m=Math.max(0,(g.getFullYear()-f.getFullYear())*12+g.getMonth()-f.getMonth()+((g.getDate()<f.getDate()&&!k)||(k&&l(g)<l(f))?-1:0));h[Y]=(d[Y]?Math.floor(m/12):0);h[O]=(d[O]?m-h[Y]*12:0);f=new Date(f.getTime());var n=(f.getDate()==i);var o=x._getDaysInMonth(f.getFullYear()+h[Y],f.getMonth()+h[O]);if(f.getDate()>o){f.setDate(o)}f.setFullYear(f.getFullYear()+h[Y]);f.setMonth(f.getMonth()+h[O]);if(n){f.setDate(o)}}var p=Math.floor((g.getTime()-f.getTime())/1000);var q=function(a,b){h[a]=(d[a]?Math.floor(p/b):0);p-=h[a]*b};q(W,604800);q(D,86400);q(H,3600);q(M,60);q(S,1);if(p>0&&!c._since){var r=[1,12,4.3482,7,24,60,60];var s=S;var t=1;for(var u=S;u>=Y;u--){if(d[u]){if(h[s]>=t){h[s]=0;p=1}if(p>0){h[u]++;p=0;s=u;t=1}}t*=r[u]}}if(e){for(var u=Y;u<=S;u++){if(e&&h[u]){e--}else if(!e){h[u]=0}}}return h}});var w=['getTimes'];function isNotChained(a,b){if(a=='option'&&(b.length==0||(b.length==1&&typeof b[0]=='string'))){return true}return $.inArray(a,w)>-1}$.fn.countdown=function(a){var b=Array.prototype.slice.call(arguments,1);if(isNotChained(a,b)){return x['_'+a+'Plugin'].apply(x,[this[0]].concat(b))}return this.each(function(){if(typeof a=='string'){if(!x['_'+a+'Plugin']){throw'Unknown command: '+a;}x['_'+a+'Plugin'].apply(x,[this].concat(b))}else{x._attachPlugin(this,a||{})}})};var x=$.countdown=new Countdown()})(jQuery);
\ No newline at end of file
+++ /dev/null
-{% extends "edition2/base.html" %}
-
-{% block "body" %}
-<h1>Nie znaleziono strony</h1>
-
-<p>Nie ma tu żadnej strony. Przejdź do <a href='/'>strony głównej</a>.</p>
-
-{% endblock %}
+++ /dev/null
-{% extends "edition2/base.html" %}
-
-{% block "body" %}
-<h1>Błąd</h1>
-
-<p>Wystąpił błąd serwera. Przepraszamy!</p>
-
-{% endblock %}
+++ /dev/null
-<!DOCTYPE html>
-<html>
-<head>
- <title>Turniej Elektrybałtów{% block "extratitle" %}{% endblock %}</title>
- <meta charset="utf-8" />
-
- <link rel="shortcut icon" href="{{ STATIC_URL }}img/favicon.ico" />
- <style type="text/css">
- @import "{{ STATIC_URL }}style.css";
- </style>
-</head>
-
-<body>
-
-<div id="fb-root"></div>
-<script>(function(d, s, id) {
- var js, fjs = d.getElementsByTagName(s)[0];
- if (d.getElementById(id)) {return;}
- js = d.createElement(s); js.id = id;
- js.src = "//connect.facebook.net/pl_PL/all.js#xfbml=1";
- fjs.parentNode.insertBefore(js, fjs);
-}(document, 'script', 'facebook-jssdk'));</script>
-<script src="http://0.s-nk.pl/script/nk_widgets/nk_widget_fajne_embed"></script>
-
-<div id="body">
-{% block "body" %}{% endblock %}
-</div>
-
-
-<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
- {lang: 'pl'}
-</script>
-{% load piwik_tags %}
-{% tracking_code %}
-</body>
-
-
-</html>
+++ /dev/null
-from django.conf.urls import include, url
-
-
-urlpatterns = [
- url(r'^2011/', include('edition1.urls')),
- url(r'^poezja/', include('poetry.urls')),
- url(r'', include('edition2.urls')),
-]
+++ /dev/null
-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, 'apps'),
-] + sys.path
-
-
-os.environ.setdefault("DJANGO_SETTINGS_MODULE", "turniej.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()