diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css
index 0d23829f..6e5b9488 100644
--- a/mamweb/static/css/mamweb.css
+++ b/mamweb/static/css/mamweb.css
@@ -685,3 +685,16 @@ div.novinka_obrazek {
div.org-text {
font-style: italic;
}
+
+div.nahledy_cisel {
+ float: right;
+ height: 297px;
+ width: 420px;
+ position: relative;
+ margin-right: 10%;
+ margin-bottom: 50px;
+}
+
+div.nahledy_cisel div, div.nahledy_cisel img {
+ position: absolute;
+}
diff --git a/seminar/templates/seminar/archiv/cisla.html b/seminar/templates/seminar/archiv/cisla.html
index c5449467..07833aa4 100644
--- a/seminar/templates/seminar/archiv/cisla.html
+++ b/seminar/templates/seminar/archiv/cisla.html
@@ -8,6 +8,10 @@
{% endblock %}{% endblock %}
+
+ {% autoescape off %}{{ nahledy }}{% endautoescape %}
+
+
{% for r in object_list %}
- Ročník {{ r }}
@@ -16,7 +20,6 @@
{% endfor %}
-
{% endblock content %}
diff --git a/seminar/urls.py b/seminar/urls.py
index de5b10d6..16c8799b 100644
--- a/seminar/urls.py
+++ b/seminar/urls.py
@@ -16,7 +16,7 @@ urlpatterns = [
url(r'^co-je-MaM/organizatori/organizovali/$', views.CojemamOrganizatoriStariView.as_view(), name='stari_organizatori'),
# Archiv
- url(r'^archiv/cisla/$', views.CislaView.as_view()),
+ url(r'^archiv/cisla/$', views.ArchivView.as_view()),
url(r'^archiv/temata/$', views.ArchivTemataView.as_view()),
url(r'^rocnik/(?P\d+)/$', views.RocnikView.as_view(), name='seminar_rocnik'),
diff --git a/seminar/views.py b/seminar/views.py
index d70ef712..4c18c2fe 100644
--- a/seminar/views.py
+++ b/seminar/views.py
@@ -22,6 +22,7 @@ import tempfile
import subprocess
import shutil
import os
+import os.path as op
from django.conf import settings
import unicodedata
import json
@@ -167,10 +168,89 @@ class CojemamOrganizatoriStariView(generic.ListView):
### Archiv
-class CislaView(generic.ListView):
+
+class ArchivView(generic.ListView):
model = Rocnik
template_name='seminar/archiv/cisla.html'
+ def get_context_data(self, **kwargs):
+ context = super(ArchivView, self).get_context_data(**kwargs)
+
+ vyska = 297 # px
+ sirka = 210 # px
+
+ cisla = Cislo.objects.filter(verejne_db=True)[:10]
+
+ png_dir = op.join(settings.MEDIA_ROOT, "cislo", "png")
+
+ # seznam [(url obrázku, číslo)]
+ urls = []
+
+ for i, c in enumerate(cisla):
+ if not c.pdf:
+ continue
+ filename = os.path.split(c.pdf.file.name)[1].split(".")[0]
+ png_filename = "{}-{}px.png".format(filename, vyska)
+
+ # Pokud obrázek neexistuje nebo není aktuální, vytvoř jej
+ png_path = op.join(png_dir, png_filename)
+ if not op.exists(png_path) or \
+ op.getmtime(png_path) < op.getmtime(c.pdf.path):
+
+ subprocess.call([
+ "convert",
+ "-density", "180x180",
+ "-geometry", "{}x{}".format(vyska, vyska),
+ "-background", "white",
+ "-flatten",
+ "-rotate", str(90 * i),
+ "{}[0]".format(c.pdf.path), # titulní strana
+ png_path
+ ])
+
+ urls.append(
+ (op.join(settings.MEDIA_URL, "cislo", "png", png_filename), c)
+ )
+ vyska, sirka = sirka, vyska / 2
+
+ tags = []
+
+ def spirala(urls, tags, idx):
+ """Rekurzivně prochází urls a generuje strom elementů do tags"""
+ if idx >= len(urls):
+ return
+
+ img_url, cislo = urls[idx]
+ tags.append(
+ ""
+ .format(
+ 50 if idx % 4 == 2 else 0,
+ 50 if idx % 4 == 1 else 0,
+ 50 if idx % 2 == 1 else 100,
+ 50 if idx > 0 and idx % 2 == 0 else 100
+ )
+ )
+ tags.append("
".format(
+ cislo.verejne_url(), cislo.kod()
+ ))
+ tags.append(
+ ""
+ .format(
+ img_url,
+ 50 if idx % 4 == 3 else 0,
+ 50 if idx % 4 == 2 else 0,
+ 50 if idx % 2 == 0 else 100,
+ 50 if idx % 2 == 1 else 100
+ )
+ )
+ tags.append("")
+ spirala(urls, tags, idx + 1)
+ tags.append("
")
+ spirala(urls, tags, 0)
+
+ context["nahledy"] = "\n".join(tags)
+ return context
+
def sloupec_s_poradim(vysledky):
# počet řešitelů ve výsledkovce nad aktuálním