From 1a4fd15423e211629aeee5852b581e9a18a645d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Koci=C3=A1n?= Date: Sat, 4 Feb 2017 23:28:54 +0100 Subject: [PATCH] =?UTF-8?q?Archiv:=20n=C3=A1hledy=20posledn=C3=ADch=20?= =?UTF-8?q?=C4=8D=C3=ADsel=20vedle=20ro=C4=8Dn=C3=ADk=C5=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/static/css/mamweb.css | 13 ++++ seminar/templates/seminar/archiv/cisla.html | 5 +- seminar/urls.py | 2 +- seminar/views.py | 82 ++++++++++++++++++++- 4 files changed, 99 insertions(+), 3 deletions(-) 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 %} +
+ - {% 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