diff --git a/korektury/admin.py b/korektury/admin.py index a04026de..3888dc4c 100644 --- a/korektury/admin.py +++ b/korektury/admin.py @@ -25,12 +25,13 @@ class KorekturovanePDFAdmin(VersionAdmin): fieldsets = [ (None, {'fields': - ['pdf', 'cas', 'org', 'stran', 'nazev', 'komentar', 'poslat_mail']}), + ['pdf', 'cas', 'stran', 'nazev', 'orgove', 'komentar', 'poslat_mail']}), # (u'PDF', {'fields': ['pdf']}), ] - list_display = ['nazev', 'cas', 'stran', 'org'] + list_display = ['nazev', 'cas', 'stran'] list_filter = [] search_fields = [] + autocomplete_fields = ['orgove'] def save_model(self, request, obj, form, change): """ diff --git a/korektury/migrations/0024_vic_orgu_k_pdf.py b/korektury/migrations/0024_vic_orgu_k_pdf.py new file mode 100644 index 00000000..96af9d93 --- /dev/null +++ b/korektury/migrations/0024_vic_orgu_k_pdf.py @@ -0,0 +1,41 @@ +# Generated by Django 4.2.13 on 2024-06-11 23:53 + +from django.db import migrations, models + +def pridej_orgy(apps, schema_editor): + PDF = apps.get_model('korektury', 'KorekturovanePDF') + for pdf in PDF.objects.all(): # Tohle by asi mělo jít udělat pomocí update, ale moc práce a rychlé hledání taky nepomohlo. + if pdf.org is not None: pdf.orgove.add(pdf.org) + pdf.save() # ig? + +def vyber_orga(apps, schema_editor): + PDF = apps.get_model('korektury', 'KorekturovanePDF') + for pdf in PDF.objects.all(): + orgove = pdf.orgove.all() + if len(orgove) > 1: + raise migrations.exceptions.IrreversibleError(f'PDF {pdf.id} má víc než jednoho zodpovědného orga, nejde odmigrovat na verzi, která umí jen jednoho.') + if len(orgove) == 0: + pdf.org = None + else: + pdf.org = orgove[0] + pdf.save() + +class Migration(migrations.Migration): + + dependencies = [ + ('personalni', '0011_osloveni_vsechny_choices'), + ('korektury', '0023_personalni_post_migrate'), + ] + + operations = [ + migrations.AddField( + model_name='korekturovanepdf', + name='orgove', + field=models.ManyToManyField(blank=True, default=None, help_text='Zodpovědní organizátoři za obsah (chodí jim maily o nových korekturách)', to='personalni.organizator'), + ), + migrations.RunPython(pridej_orgy, vyber_orga), + migrations.RemoveField( + model_name='korekturovanepdf', + name='org', + ), + ] diff --git a/korektury/models.py b/korektury/models.py index 153c4f3c..6a87f2d9 100644 --- a/korektury/models.py +++ b/korektury/models.py @@ -26,7 +26,6 @@ def generate_filename(self, filename): clean) return os.path.join(settings.KOREKTURY_PDF_DIR, fname) - #@reversion.register(ignore_duplicates=True) class KorekturovanePDF(models.Model): class Meta: @@ -46,9 +45,9 @@ class KorekturovanePDF(models.Model): pdf = models.FileField(u'PDF', upload_to = generate_filename) - org = models.ForeignKey(Organizator, blank=True, - help_text='Zodpovědný organizátor za obsah', - null=True, default=None, on_delete=models.SET_NULL) + orgove = models.ManyToManyField(Organizator, blank=True, + help_text='Zodpovědní organizátoři za obsah (chodí jim maily o nových korekturách)', + default=None) stran = models.IntegerField(u'počet stran', help_text='Počet stran PDF', default=0) diff --git a/korektury/views.py b/korektury/views.py index ee6f2841..08854d95 100644 --- a/korektury/views.py +++ b/korektury/views.py @@ -183,9 +183,9 @@ class KorekturyView(generic.TemplateView): if email_komentujiciho: emails.add(email_komentujiciho) - # zodpovedny org - if oprava.pdf.org: - email_zobpovedny = oprava.pdf.org.osoba.email + # zodpovedni orgove + for org in oprava.pdf.orgove.all(): + email_zobpovedny = org.osoba.email if email_zobpovedny: emails.add(email_zobpovedny) diff --git a/mamweb/settings_common.py b/mamweb/settings_common.py index 078c3d4d..743dbead 100644 --- a/mamweb/settings_common.py +++ b/mamweb/settings_common.py @@ -87,6 +87,7 @@ TEMPLATES = [ 'header_fotky.context_processors.vzhled', 'various.context_processors.rozliseni', 'various.context_processors.april', + 'various.context_processors.halloween', ) }, }, diff --git a/mamweb/static/css/base.css b/mamweb/static/css/base.css index b129e63e..a4433d55 100644 --- a/mamweb/static/css/base.css +++ b/mamweb/static/css/base.css @@ -8,6 +8,13 @@ font-weight: normal; } +/* https://fontzone.net/font-details/qtghoulface-regular doplněný o diakritiku pomocí FontForge*/ +@font-face { + font-family: 'GhoulFace'; + src: url("../fonts/ghoul/ghoul.ttf"); + font-weight: normal; +} + body { font-size: 14px; font-family: 'OpenSans'; diff --git a/mamweb/static/css/layout.css b/mamweb/static/css/layout.css index bab8ea39..bd139780 100644 --- a/mamweb/static/css/layout.css +++ b/mamweb/static/css/layout.css @@ -19,10 +19,10 @@ div.kontejner {/* Ne container, aby se to netlouklo s bootstrapem. */ margin-top: var(--login-bar-height); } - div.kontent-wrapper { + & div.kontent-wrapper { padding-bottom: var(--footer-height); - div.kontent { + & div.kontent { padding: 15px 30px; } } @@ -67,16 +67,16 @@ div.kontejner {/* Ne container, aby se to netlouklo s bootstrapem. */ background-size: 100%; top: 58px; - img.logo { + & img.logo { width: 100%; filter: drop-shadow(0px 5px 5px rgba(0, 0, 0, 0.4)); } - img.logo-mobile { + & img.logo-mobile { display: none; } - .no-mobile { + & .no-mobile { background-size: contain; } } @@ -94,12 +94,12 @@ div.kontejner {/* Ne container, aby se to netlouklo s bootstrapem. */ filter: drop-shadow(5px 0px 5px rgba(0, 0, 0, 0.4)); padding-top: 3.5%; - p.license { + & p.license { text-align: center; font-weight: 400; bottom: 0; - a { + & a { color: #333; } } @@ -139,21 +139,21 @@ div.login-bar { padding-left: 5px; padding-right: 5px; - div { + & div { display: inline; } - a.LOGIN-ref-admin { + & a.LOGIN-ref-admin { display: inline; color: var(--barva-pozadi); } - .LOGIN_napis-webarum { + & .LOGIN_napis-webarum { display: inline; color: var(--barva-pozadi); float: right; - a { + & a { color: var(--svetla-oranzova); text-decoration: underline; } @@ -176,7 +176,7 @@ div.login-bar { #header { background-size: 100%; - img.logo { + & img.logo { width: 100%; } } @@ -202,11 +202,11 @@ div.login-bar { top: 0; background-image: none; - img.logo { + & img.logo { display: none; } - img.logo-mobile { + & img.logo-mobile { display: block; top: 0; left: 0; @@ -215,7 +215,7 @@ div.login-bar { margin-bottom: 3px; } - .no-mobile{ + & .no-mobile{ display: none; } } @@ -241,13 +241,13 @@ ul.menu { font-variant: small-caps; - a { + & a { text-decoration: none; font-weight: bold; font-size: 105%; } - li { + & li { margin: 0; display: inline-block; width: 16.666667%; @@ -256,7 +256,7 @@ ul.menu { font-size: 140%; font-weight: 400; - >a:hover, >a:active { + &>a:hover, &>a:active { color: black; } @@ -265,7 +265,7 @@ ul.menu { } } - ul.submenu { + & ul.submenu { background-color: var(--hlavni-oranzova); margin-top: 10px; /* mezera mezi hlavním menu a submenu */ @@ -277,24 +277,24 @@ ul.menu { z-index: 50; font-weight: 400; - li { + & li { width: auto; padding: 0 20px 0 20px; display: inline-block; - >a { + &>a { color: var(--svetla-oranzova); text-decoration: none; text-shadow: none; - :hover { + &:hover { color: black; } } } } - ul.submenu li.active>a, .parentactive ul li:first-child>a { + & ul.submenu li.active>a, & .parentactive ul li:first-child>a { color: black; } } @@ -304,7 +304,7 @@ ul.menu { font-size: 90%; margin-top: -7px; - li { + & li { margin-top: 10px; /* posunutí textu hlavního menu níže */ } } @@ -312,7 +312,7 @@ ul.menu { ul.submenu { margin-top: 8px; /* mezera mezi hlavním menu a submenu */ - li { + & li { margin-top: 0; /* aby se spolu s textem hlavního menu neposunoval níže i text submenu */ } } @@ -323,7 +323,7 @@ ul.menu { font-size: 80%; margin-top: -2px; - li { + & li { margin-top: 10px; /* posunutí textu hlavního menu níže */ } } @@ -331,7 +331,7 @@ ul.menu { ul.submenu { margin-top: 8px; /* mezera mezi hlavním menu a submenu */ - li { + & li { margin-top: 0; /* aby se spolu s textem hlavního menu neposunoval níže i text submenu */ } } @@ -354,20 +354,20 @@ ul.menu { padding-bottom: 3px; padding-left: 12px; - a { + & a { &:active, &:hover, &:focus { text-decoration: none; color: black; } } - ul { + & ul { list-style-type: none; font-size: 90%; color: black; /*černé šipky submenu*/ - li { - > a { + & li { + &>a { color: black; } @@ -377,7 +377,7 @@ ul.menu { } } - br { + & br { display: none; } } @@ -459,13 +459,13 @@ body.suprodweb { &:before, &:after { background: red; } } display: block; } - h1 { text-align: center; } + & h1 { text-align: center; } - .TITULNI_STRANA_zjistit_vic{ + & .TITULNI_STRANA_zjistit_vic{ text-align: center; margin-bottom: 30px; - hr { + & hr { display: none; @media(max-width: 800px){ @@ -474,15 +474,15 @@ body.suprodweb { &:before, &:after { background: red; } } } } - .TITULNI_STRANA_graf { + & .TITULNI_STRANA_graf { @media(max-width: 800px) { padding-top: 40px; } - .TITULNI_STRANA_graf-svg { + & .TITULNI_STRANA_graf-svg { display: flex; - #svg-graf { + & #svg-graf { width: 100%; height: auto; margin: 30px; @@ -496,7 +496,7 @@ body.suprodweb { &:before, &:after { background: red; } } } } - .TITULNI_STRANA_obsah { + & .TITULNI_STRANA_obsah { width: 66%; @media(max-width: 800px){ @@ -504,7 +504,7 @@ body.suprodweb { &:before, &:after { background: red; } } } } - .TITULNI_STRANA_vitej_titulka, .TITULNI_STRANA_temata_titulka { + & .TITULNI_STRANA_vitej_titulka, & .TITULNI_STRANA_temata_titulka { width: 49%; padding: 10px; display: table-cell; @@ -515,7 +515,7 @@ body.suprodweb { &:before, &:after { background: red; } } } } - .TITULNI_STRANA_novinky { + & .TITULNI_STRANA_novinky { width: 33%; padding: 10px; @@ -540,11 +540,11 @@ div.odpocet { .stranka_aktualni_zadani { text-align: center; - #AKTUALNI_ZADADNI_obrazek { + & #AKTUALNI_ZADADNI_obrazek { margin-top: 15px; } - div.AKTUALNI_ZADANI_termin { + & div.AKTUALNI_ZADANI_termin { text-align: center; font-size: large; font-weight: bold; @@ -553,7 +553,7 @@ div.odpocet { font-size: small; } - .AKTUALNI_ZADANI_datum { + & .AKTUALNI_ZADANI_datum { color: var(--hlavni-oranzova); margin: 0; } diff --git a/mamweb/static/css/mamweb_legacy.css b/mamweb/static/css/mamweb_legacy.css new file mode 100644 index 00000000..fd360d45 --- /dev/null +++ b/mamweb/static/css/mamweb_legacy.css @@ -0,0 +1,731 @@ +@charset "utf-8"; /* vynuť utf-8 */ + +@supports (-webkit-touch-callout: none) and (not (offset-position: normal)) { + +.button { + margin: 10px 0 10px 0; + padding: 4px 0; /*vertikální centování textu*/ + text-align: center; + background-color: var(--hlavni-oranzova); + color: var(--barva-pozadi); + font-size: 150%; + font-weight: bold; + font-variant: small-caps; + filter: drop-shadow(0px 5px 5px rgba(0, 0, 0, 0.4)); +} +.button:hover { + position: relative; + top: 2px; + left: 2px; + background-color: #df490e; +} +/******************/ + + + + + +/* Rozložení webu a jeho prvky (hlavička, menu, footer) */ + +/**** KONTEJNER ****/ +div.kontejner { /* Ne container, aby se to netlouklo s bootstrapem. */ + width: 970px; + margin: auto; + min-height: 100vh; + position: relative; + padding: 0; +} + +.org-logged-in div.kontejner { + margin-top: var(--login-bar-height); +} + +div.kontejner div.kontent-wrapper { + padding-bottom: var(--footer-height); +} + +div.kontejner div.kontent-wrapper div.kontent { + padding: 15px 30px; +} + +/* Roztáhne obsah z containeru na celou šířku obrazovky: */ +.full_width { + width: 100vw; + margin-left: calc(-50vw + 485px); +} + +/* Na úzkém displeji nechceme nic dělat. */ +@media(max-width: 860px) { + .full_width { + margin-left: 0; + width: unset; + } +} +/*******************/ + + +/**** HLAVIČKA ****/ +#header { + position: relative; + background: url("../images/header/vikendovka.jpg") no-repeat center top; /* poměr 350:970, TODO: aby to nemuselo být přesně na pixely */ + background-size: 100%; + top: 58px; +} + +#header img.logo { + width: 100%; + filter: drop-shadow(0px 5px 5px rgba(0, 0, 0, 0.4)); +} + +#header img.logo-mobile { + display: none; +} + +#header .no-mobile { + background-size: contain; +} +/******************/ + + +/**** Footer ****/ +#footer { + position: absolute; + bottom: 0; + width: 100%; + background: url("../images/mozaika-footer.svg") no-repeat top center; + height: var(--footer-height); + background-size: 100%; + filter: drop-shadow(5px 0px 5px rgba(0, 0, 0, 0.4)); + padding-top: 3.5%; +} + +#footer p.license { + text-align: center; + font-weight: 400; + bottom: 0; +} + +#footer p.license a { + color: #333; +} + +@media (max-width: 650px) { + #footer { + display: none; + } +} + +p.license-mobile { + display: none; + margin-bottom: 0; +} + +@media (max-width: 650px) { + p.license-mobile { + position: relative; + display: block; + font-size: 90%; + background-color: var(--hlavni-oranzova); + padding: 5%; + text-align: justify; + } +} +/****************/ + + +/**** LOGIN BAR ****/ +div.login-bar { + background: var(--orgovska-fialova); + color: var(--svetla-oranzova); + width: 100%; + + position: fixed; + margin-top: calc(-1 * var(--login-bar-height)); + min-height: var(--login-bar-height); + z-index: 4086; + + padding-left: 5px; + padding-right: 5px; +} + +div.login-bar div { + display: inline; +} + +div.login-bar a.LOGIN-ref-admin { + display: inline; + color: var(--barva-pozadi); +} + +div.login-bar .LOGIN_napis-webarum { + display: inline; + color: var(--barva-pozadi); + float: right; +} + +div.login-bar .LOGIN_napis-webarum a { + color: var(--svetla-oranzova); + text-decoration: underline; +} +/*******************/ + + +/* stránka přes celý displej */ +@media (max-width: 970px) { + #header { + background-size: 100%; + } + + #header img.logo { + width: 100%; + } +} + +/* malý tablet, mobil */ +@media (max-width: 650px) { + #header { + width: 100%; + top: 0; + background-image: none; + } + + #header img.logo { + display: none; + } + + #header img.logo-mobile { + display: block; + top: 0; + left: 0; + width: 100%; + filter: drop-shadow(0px 0 5px rgba(0, 0, 0, 0.4)); + margin-bottom: 3px; + } + + #header .no-mobile{ + display: none; + } +} + + + + + +/**** MENU ****/ + +ul.menu { + width: 100%; + padding: 0; + margin-top: -5px; /* posune celé menu nahoru (pak potřeba zvětšit mezeru mezi menu a submenu) */ + + font-variant: small-caps; +} + +ul.menu a { + text-decoration: none; + font-weight: bold; + font-size: 105%; +} + +ul.menu li { + margin: 0; + display: inline-block; + width: 16.666667%; + text-align: center; + + font-size: 140%; + font-weight: 400; +} + +ul.menu li >a:hover, >a:active { + color: black; +} + +ul.menu li.active>a { + color: var(--svetla-oranzova); +} + +ul.menu ul.submenu { + background-color: var(--hlavni-oranzova); + margin-top: 10px; /* mezera mezi hlavním menu a submenu */ + margin-bottom: 10px; + padding-top: 10px; + padding-bottom: 5px; + filter: drop-shadow(0px 5px 5px rgba(0, 0, 0, 0.4)); + + z-index: 50; + font-weight: 400; +} + +ul.menu ul.submenu li { + width: auto; + padding: 0 20px 0 20px; + display: inline-block; +} + +ul.menu ul.submenu li >a { + color: var(--svetla-oranzova); + text-decoration: none; + text-shadow: none; +} + +ul.menu ul.submenu li >a :hover { + color: black; +} + +ul.menu ul.submenu li.active>a, .parentactive ul li:first-child>a { + color: black; +} + +@media (max-width: 970px) { + ul.menu { + font-size: 90%; + margin-top: -7px; + } + + ul.menu li { + margin-top: 10px; /* posunutí textu hlavního menu níže */ + } + + ul.submenu { + margin-top: 8px; /* mezera mezi hlavním menu a submenu */ + } + + ul.submenu li { + margin-top: 0; /* aby se spolu s textem hlavního menu neposunoval níže i text submenu */ + } +} + +@media(max-width: 800px) { + ul.menu { + font-size: 80%; + margin-top: -2px; + } + + ul.menu li { + margin-top: 10px; /* posunutí textu hlavního menu níže */ + } + + ul.submenu { + margin-top: 8px; /* mezera mezi hlavním menu a submenu */ + } + ul.submenu li { + margin-top: 0; /* aby se spolu s textem hlavního menu neposunoval níže i text submenu */ + } +} + +@media (max-width: 650px) { + ul.menu { + display: none; + } + + ul.menu_mobile { + display: block; + z-index: 10; + position: sticky; + font-variant: small-caps; + font-size: 150%; + font-weight: bold; + list-style-type: none; + padding-top: 3px; + padding-bottom: 3px; + padding-left: 12px; + } + + ul.menu_mobile a:active, ul.menu_mobile a:hover, ul.menu_mobile a:focus { + text-decoration: none; + color: black; + } + + ul.menu_mobile ul { + list-style-type: none; + font-size: 90%; + color: black; /*černé šipky submenu*/ + } + + ul.menu_mobile ul li > a { + color: black; + } + + ul.menu_mobile ul li::before { + content: ' \276D '; /*https://www.w3schools.com/cssref/css_entities.asp*/ + } + + ul.menu_mobile br { + display: none; + } +} /* konec @media */ +/**************/ + +/**** ZBYTEK ****/ +/* (konkrétní stránky) */ + +/* Titulní stránka */ +.titulnistrana { + display: flex; + text-align: justify; + +@media(max-width: 800px){ + .titulnistrana { + display: block; + } +} + +.titulnistrana h1 { text-align: center; } + +.titulnistrana .TITULNI_STRANA_zjistit_vic { + text-align: center; + margin-bottom: 30px; +} + +.titulnistrana .TITULNI_STRANA_zjistit_vic hr { + display: none; +} + +@media(max-width: 800px){ + .titulnistrana .TITULNI_STRANA_zjistit_vic hr { + display: flex; + } +} + +@media(max-width: 800px) { + .titulnistrana .TITULNI_STRANA_graf { + padding-top: 40px; + } +} + +.titulnistrana .TITULNI_STRANA_graf .TITULNI_STRANA_graf-svg { + display: flex; +} + +.titulnistrana .TITULNI_STRANA_graf .TITULNI_STRANA_graf-svg #svg-graf { + width: 100%; + height: auto; + margin: 30px; +} + +@media(max-width: 800px){ + .titulnistrana .TITULNI_STRANA_graf .TITULNI_STRANA_graf-svg #svg-graf { + max-width: 500px; + padding: 10px; + margin: auto; + } +} + +.titulnistrana .TITULNI_STRANA_obsah { + width: 66%; +} + +@media(max-width: 800px){ + .titulnistrana .TITULNI_STRANA_obsah { + width: 100%; + } +} + +.titulnistrana .TITULNI_STRANA_vitej_titulka, .TITULNI_STRANA_temata_titulka { + width: 49%; + padding: 10px; + display: table-cell; +} + +@media (max-width: 650px) { + .titulnistrana .TITULNI_STRANA_vitej_titulka, .TITULNI_STRANA_temata_titulka { + width: 100%; + display: block; + } +} + +.titulnistrana .TITULNI_STRANA_novinky { + width: 33%; + padding: 10px; +} + +@media(max-width: 800px){ + .titulnistrana .TITULNI_STRANA_novinky { + width: 100%; + max-width: 500px; + margin: auto; + } +} + + +/* Stránky Aktuální ročník */ +.stranka_aktualni_zadani { + text-align: center; +} + +.stranka_aktualni_zadani #AKTUALNI_ZADADNI_obrazek { + margin-top: 15px; +} + +.stranka_aktualni_zadani div.AKTUALNI_ZADANI_termin { + text-align: center; + font-size: large; + font-weight: bold; +} + +@media (max-width: 420px) { + .stranka_aktualni_zadani div.AKTUALNI_ZADANI_termin { + font-size: small; + } +} + +.stranka_aktualni_zadani .AKTUALNI_ZADANI_datum { + color: var(--hlavni-oranzova); + margin: 0; + } +} + +/* Stránka Jak řešit */ +.jakresit svg { + width: 33%; + padding: 10px; + filter: none; +} + +@media(max-width: 860px) { + .jakresit svg { + margin: auto; + display: grid; + width: 100%; + max-width: 360px; + } +} + + + + + + + + + +/**** OZNAČENÍ NE-PUBLIC ČÁSTÍ ****/ +.mam-org-only { + background: var(--orgovska-svetla-fialova); + padding: 10px; + margin: 10px -10px; + border: var(--orgovska-fialova) 2px dashed; +} + +.mam-org-only .mam-org-only { + border: 0; +} + +.mam-org-only li { + padding: 3px 0; + margin: -2px 0; +} +/**********************************/ + + + +/**** OTÁČECÍ KARTY ****/ +/* (orgové, archiv) */ +.flip-card { + perspective: 1000px; /* Remove this if you don't want the 3D effect */ + margin-left: auto; + margin-right: auto; +} + + /* This container is needed to position the front and back side */ +.flip-card .flip-card-inner { + position: relative; + width: 100%; + height: 100%; + transition: transform 0.8s; + transform-style: preserve-3d; +} + + /* Do an horizontal flip when you move the mouse over the flip box container */ +.flip-card:hover .flip-card-inner { + transform: rotateY(180deg); +} + + /* Position the front and back side */ +.flip-card .flip-card-front, .flip-card-back { + position: absolute; + width: 100%; + height: 100%; + -webkit-backface-visibility: hidden; /* Safari */ + backface-visibility: hidden; +} + +.flip-card div.flip-card-foto, div.flip-card-foto img { + width: 100%; + height: 100%; + + /* Pokud je na přední straně něco proklikávacího (třeba celá fotka), tak na dotykových zařízeních nemůže proklikávat, aby se dalo otáčet */ +@media(hover: none) { + .flip-card div.flip-card-foto, div.flip-card-foto img a { pointer-events: none; } +} + + /* Style the back side */ + .flip-card-back { + transform: rotateY(180deg); + padding: 10px; + padding-top: 20px; + } +} +/***********************/ + + +/**** TABULKY ****/ + +/** Tabulka s čárami mezi sloupci **/ +/* Např. výsledkovky */ + +.tabulka_oramovane_sloupce { + border: solid 2px; +} + +.tabulka_oramovane_sloupce td:first-child, .tabulka_oramovane_sloupce th:first-child { + border-left: none; + border-right: solid 1px; +} + +.tabulka_oramovane_sloupce td:nth-child(2), .tabulka_oramovane_sloupce th:nth-child(2) { + border-left: none; +} + +.tabulka_oramovane_sloupce td, .tabulka_oramovane_sloupce th { + padding: 0.1em 0.3em; + border-left: solid 1px; +} + +.tabulka_oramovane_sloupce thead th, .tabulka_oramovane_sloupce thead td { + border-bottom: solid 1px; +} +/***********************************/ + + +/** Tabulka se střídajícími se barvami řádků **/ +/* Skoro jakákoliv tabulka kromě výsledkovek */ + +.barevna_tabulka td th { + padding: 1px 10px 1px 10px; +} + +.barevna_tabulka tbody tr:nth-child(even), thead tr { + background: var(--svetlounka-oranzova); +} + +.barevna_tabulka tbody tr:nth-child(odd) { + background: var(--barva-pozadi); +} +/**********************************************/ + + +/** Tabulka, kde první řádek a sloupec je pořád vidět **/ +/* Např. tabulka odevzdaných řešení, nebo výsledkovky */ +.tabulka_s_uchycenym_radkem_a_sloupcem { + /* Omezí výšku a šířku, aby bylo příjemné na scrollování a zapne scrollování */ + display: block; + width: fit-content; /* display: block; roztahuje na celou šířku */ + max-height: 80vh; + overflow: auto; + max-width: 90%; /* (FIXME asi není potřeba u tabulek, co nejsou na celou obrazovku) */ + margin-left: 5%; /* Vystředování (FIXME není potřeba u tabulek, co nejsou na celou obrazovku) */ + + border-collapse: separate; /* Pokud má tabulka orámování, je potřeba ho separovat, aby dodrželo position: sticky; */ + border-spacing: 0; +} + + /* Uchytí první řádek */ +.tabulka_s_uchycenym_radkem_a_sloupcem thead tr { + position: sticky; + top: 0; + z-index: 2; +} + + /* Uchytí první sloupec */ +.tabulka_s_uchycenym_radkem_a_sloupcem td:first-child, .tabulka_s_uchycenym_radkem_a_sloupcem th:first-child { + position: sticky; + left: 0; + background: inherit; /* (Snad) zneprůhlední první sloupec */ + z-index: 1; +} +/*******************************************************/ + +/** Tabulka mající všechna ohraničení **/ +.plne_ohranicena_tabulka { + border-collapse: collapse; +} + +.plne_ohranicena_tabulka tr th, .plne_ohranicena_tabulka tr td { + border: 1px solid black; + padding: 1px 10px 1px 10px; +} +/***************************************/ + +/** Výsledkovky **/ +.vysledkovka, .tabulka_oramovane_sloupce td:first-child, .vysledkovka, .tabulka_oramovane_sloupce th:first-child { position: unset; } +.vysledkovka, .tabulka_oramovane_sloupce td:nth-child(2), .vysledkovka, .tabulka_oramovane_sloupce th:nth-child(2) { + border-right: solid 1px; + + position: sticky; + left: 0; + background: inherit; /* (Snad) zneprůhlední druhý sloupec */ + z-index: 1; +} +.vysledkovka, .tabulka_oramovane_sloupce td:nth-child(3), .vysledkovka, .tabulka_oramovane_sloupce th:nth-child(3) { + border-left: none; +} +/*****************/ + + +/** Tabulka mých (řešitelových) řešení **/ +.moje_reseni tr th, .moje_reseni tr td { + text-align: center; +} + +.moje_reseni tr td.problem { text-align: left; } +/****************************************/ + + +/** Detail řešení **/ +.bodovani>input { + width: 4em; +} + +.bodovani>input::placeholder { + color: lightgray; + opacity: 1; +} + +.bodovani>input::-webkit-input-placeholder { /* Edge */ + color: lightgray; +} + +/*******************/ +/*****************/ + + +.novinka .novinka_obrazek { + margin: 10px 0 10px 0; + width: 100%; +} + +.novinka .novinka_datum { + font-weight: bold; +} + +.novinka .novinka_autor { + text-align: right; + font-style: italic; +} + +/**** FORMULÁŘE ****/ +div.gdpr { + font-size: 6pt; +} + +div.gdpr p { + font-size: 6pt; + margin-bottom: .66em; +} + +/*******************/ + + +} diff --git a/mamweb/static/css/modules.css b/mamweb/static/css/modules.css index 2b823349..e7096a6e 100644 --- a/mamweb/static/css/modules.css +++ b/mamweb/static/css/modules.css @@ -20,7 +20,7 @@ border: 0; } - &li { + & li { padding: 3px 0; margin: -2px 0; } @@ -57,7 +57,7 @@ margin-right: auto; /* This container is needed to position the front and back side */ - .flip-card-inner { + & .flip-card-inner { position: relative; width: 100%; height: 100%; @@ -71,7 +71,7 @@ } /* Position the front and back side */ - .flip-card-front, .flip-card-back { + & .flip-card-front, & .flip-card-back { position: absolute; width: 100%; height: 100%; @@ -79,18 +79,18 @@ backface-visibility: hidden; } - div.flip-card-foto, div.flip-card-foto img { + & div.flip-card-foto, & div.flip-card-foto img { width: 100%; height: 100%; /* Pokud je na přední straně něco proklikávacího (třeba celá fotka), tak na dotykových zařízeních nemůže proklikávat, aby se dalo otáčet */ @media(hover: none) { - a { pointer-events: none; } + & a { pointer-events: none; } } } /* Style the back side */ - .flip-card-back { + & .flip-card-back { transform: rotateY(180deg); padding: 10px; padding-top: 20px; @@ -203,7 +203,7 @@ div.org_email { .tabulka_oramovane_sloupce { border: solid 2px; - td, th { + & td, & th { &:first-child, &:first-child { border-left: none; border-right: solid 1px; @@ -217,7 +217,7 @@ div.org_email { border-left: solid 1px; } - thead { th, td { + & thead { & th, & td { border-bottom: solid 1px; } } } @@ -228,15 +228,15 @@ div.org_email { /* Skoro jakákoliv tabulka kromě výsledkovek */ .barevna_tabulka { - td th { + & td th { padding: 1px 10px 1px 10px; } - tbody tr:nth-child(even), thead tr { + & tbody tr:nth-child(even), & thead tr { background: var(--svetlounka-oranzova); } - tbody tr:nth-child(odd) { + & tbody tr:nth-child(odd) { background: var(--barva-pozadi); } } @@ -258,14 +258,14 @@ div.org_email { border-spacing: 0; /* Uchytí první řádek */ - thead tr { + & thead tr { position: sticky; top: 0; z-index: 2; } /* Uchytí první sloupec */ - td, th { &:first-child { + & td, & th { &:first-child { position: sticky; left: 0; background: inherit; /* (Snad) zneprůhlední první sloupec */ @@ -290,7 +290,7 @@ div.org_email { .plne_ohranicena_tabulka { border-collapse: collapse; - tr { th, td { + & tr { & th, & td { border: 1px solid black; padding: 1px 10px 1px 10px; } } @@ -305,7 +305,7 @@ div.org_email { /** Výsledkovky **/ .vysledkovka, .tabulka_oramovane_sloupce { - td, th { + & td, & th { &:first-child { position: unset; } &:nth-child(2) { @@ -327,11 +327,11 @@ div.org_email { /** Tabulka mých (řešitelových) řešení **/ .moje_reseni tr { - th, td { + & th, & td { text-align: center; } - td.problem { text-align: left; } + & td.problem { text-align: left; } } /* Různá šířka problému */ @@ -378,16 +378,16 @@ div.org_email { .novinka { - .novinka_obrazek { + & .novinka_obrazek { margin: 10px 0 10px 0; width: 100%; } - .novinka_datum { + & .novinka_datum { font-weight: bold; } - .novinka_autor { + & .novinka_autor { text-align: right; font-style: italic; } @@ -413,7 +413,6 @@ table#reseni.form td, table#reseni.form tr { } @media(max-width: 800px) { - table#reseni.form td, table#reseni.form tr { display: inline-grid; max-width: 300px; @@ -473,7 +472,7 @@ ul.form li{ div.gdpr { font-size: 6pt; - p { + & p { font-size: 6pt; margin-bottom: .66em; } diff --git a/mamweb/static/fonts/ghoul/ghoul.ttf b/mamweb/static/fonts/ghoul/ghoul.ttf new file mode 100644 index 00000000..dcb13354 Binary files /dev/null and b/mamweb/static/fonts/ghoul/ghoul.ttf differ diff --git a/mamweb/templates/april.html b/mamweb/templates/april.html index bb24d9d4..da684ed3 100644 --- a/mamweb/templates/april.html +++ b/mamweb/templates/april.html @@ -78,3 +78,16 @@ walkText(document.body); {% endif %} + + + +{% if halloween == 2024 %} + +{% endif %} diff --git a/mamweb/templates/base.html b/mamweb/templates/base.html index 1a4c22ab..8021b507 100644 --- a/mamweb/templates/base.html +++ b/mamweb/templates/base.html @@ -8,11 +8,12 @@ {% block custom_css %}{% endblock %} - - - - - + + + + + + diff --git a/novinky/migrations/0004_alter_novinky_id.py b/novinky/migrations/0004_alter_novinky_id.py new file mode 100644 index 00000000..a4a48490 --- /dev/null +++ b/novinky/migrations/0004_alter_novinky_id.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.16 on 2024-10-23 10:22 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('novinky', '0003_novinky_post'), + ] + + operations = [ + migrations.AlterField( + model_name='novinky', + name='id', + field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + ] diff --git a/various/context_processors.py b/various/context_processors.py index a1e4478a..331780b1 100644 --- a/various/context_processors.py +++ b/various/context_processors.py @@ -15,6 +15,19 @@ def april(req): return {'april': today.year} return {} +def halloween(req): + if 'X-Halloween' in req.headers: + try: + year = int(req.headers['X-Halloween']) + return {'halloween': year} + except: + pass # Fall-back to regular behaviour + + import datetime + today = datetime.date.today() + if today.month == 10 and today.day >= 25: + return {'halloween': today.year} + return {} def rozliseni(request): ltp = settings.LOCAL_TEST_PROD diff --git a/various/views/pomocne.py b/various/views/pomocne.py index 42547467..e25ed9df 100644 --- a/various/views/pomocne.py +++ b/various/views/pomocne.py @@ -13,7 +13,7 @@ from django.urls import reverse # Interní, nemá se nikdy objevit v urls (jinak to účastníci vytrolí) def formularOKView(request, text='', dalsi_odkazy: Sequence[tuple[str, str]] = ()): - template_name = 'seminar/formular_ok.html' + template_name = 'various/formular_ok.html' odkazy = list(dalsi_odkazy) + [ # (Text, odkaz) ('Vrátit se na titulní stránku', reverse('titulni_strana')),