Archiv: náhledy posledních čísel vedle ročníků
This commit is contained in:
parent
ea0f03d27f
commit
1a4fd15423
4 changed files with 99 additions and 3 deletions
|
@ -685,3 +685,16 @@ div.novinka_obrazek {
|
||||||
div.org-text {
|
div.org-text {
|
||||||
font-style: italic;
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
{% endblock %}{% endblock %}
|
{% endblock %}{% endblock %}
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
|
<div class='nahledy_cisel'>
|
||||||
|
{% autoescape off %}{{ nahledy }}{% endautoescape %}
|
||||||
|
</div>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
{% for r in object_list %}
|
{% for r in object_list %}
|
||||||
<li><a href='{{ r.verejne_url }}'>Ročník {{ r }}</a>
|
<li><a href='{{ r.verejne_url }}'>Ročník {{ r }}</a>
|
||||||
|
@ -16,7 +20,6 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ urlpatterns = [
|
||||||
url(r'^co-je-MaM/organizatori/organizovali/$', views.CojemamOrganizatoriStariView.as_view(), name='stari_organizatori'),
|
url(r'^co-je-MaM/organizatori/organizovali/$', views.CojemamOrganizatoriStariView.as_view(), name='stari_organizatori'),
|
||||||
|
|
||||||
# Archiv
|
# 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'^archiv/temata/$', views.ArchivTemataView.as_view()),
|
||||||
|
|
||||||
url(r'^rocnik/(?P<rocnik>\d+)/$', views.RocnikView.as_view(), name='seminar_rocnik'),
|
url(r'^rocnik/(?P<rocnik>\d+)/$', views.RocnikView.as_view(), name='seminar_rocnik'),
|
||||||
|
|
|
@ -22,6 +22,7 @@ import tempfile
|
||||||
import subprocess
|
import subprocess
|
||||||
import shutil
|
import shutil
|
||||||
import os
|
import os
|
||||||
|
import os.path as op
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
import unicodedata
|
import unicodedata
|
||||||
import json
|
import json
|
||||||
|
@ -167,10 +168,89 @@ class CojemamOrganizatoriStariView(generic.ListView):
|
||||||
|
|
||||||
### Archiv
|
### Archiv
|
||||||
|
|
||||||
class CislaView(generic.ListView):
|
|
||||||
|
class ArchivView(generic.ListView):
|
||||||
model = Rocnik
|
model = Rocnik
|
||||||
template_name='seminar/archiv/cisla.html'
|
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(
|
||||||
|
"<div style='top:{}%;left:{}%;width:{}%;height:{}%;'>"
|
||||||
|
.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("<a href='{}' title='{}'>".format(
|
||||||
|
cislo.verejne_url(), cislo.kod()
|
||||||
|
))
|
||||||
|
tags.append(
|
||||||
|
"<img src='{}' style='top:{}%;left:{}%;width:{}%;height:{}%;'>"
|
||||||
|
.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("</a>")
|
||||||
|
spirala(urls, tags, idx + 1)
|
||||||
|
tags.append("</div>")
|
||||||
|
spirala(urls, tags, 0)
|
||||||
|
|
||||||
|
context["nahledy"] = "\n".join(tags)
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
def sloupec_s_poradim(vysledky):
|
def sloupec_s_poradim(vysledky):
|
||||||
# počet řešitelů ve výsledkovce nad aktuálním
|
# počet řešitelů ve výsledkovce nad aktuálním
|
||||||
|
|
Loading…
Reference in a new issue