Browse Source

Merge branch 'master' into odstrel_modelu_odevzdavatko

odstrel_modelu_odevzdavatko
Jonas Havelka 3 weeks ago
parent
commit
c71195fba1
  1. 5
      korektury/admin.py
  2. 41
      korektury/migrations/0024_vic_orgu_k_pdf.py
  3. 7
      korektury/models.py
  4. 6
      korektury/views.py
  5. 1
      mamweb/settings_common.py
  6. 7
      mamweb/static/css/base.css
  7. 88
      mamweb/static/css/layout.css
  8. 731
      mamweb/static/css/mamweb_legacy.css
  9. 43
      mamweb/static/css/modules.css
  10. BIN
      mamweb/static/fonts/ghoul/ghoul.ttf
  11. 13
      mamweb/templates/april.html
  12. 11
      mamweb/templates/base.html
  13. 18
      novinky/migrations/0004_alter_novinky_id.py
  14. 13
      various/context_processors.py
  15. 2
      various/views/pomocne.py

5
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):
"""

41
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',
),
]

7
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)

6
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)

1
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',
)
},
},

7
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';

88
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;
}

731
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;
}
/*******************/
}

43
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;
}

BIN
mamweb/static/fonts/ghoul/ghoul.ttf

Binary file not shown.

13
mamweb/templates/april.html

@ -78,3 +78,16 @@
walkText(document.body);
</script>
{% endif %}
{% if halloween == 2024 %}
<script>
function printHalloween() {
console.log("Halloween 2024");
body = document.getElementsByTagName('body')[0];
body.style.fontFamily = 'GhoulFace';
}
window.onload = printHalloween;
</script>
{% endif %}

11
mamweb/templates/base.html

@ -8,11 +8,12 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" href="{% static 'images/MATFYZ_MM_barevne.svg' %}" type="image/x-icon">
{% block custom_css %}{% endblock %}
<link href="{% static 'bootstrap/css/bootstrap.css' %}?version=2" rel="stylesheet">
<link href="{% static 'css/constants.css' %}?version=2" rel="stylesheet">
<link href="{% static 'css/base.css' %}?version=2" rel="stylesheet">
<link href="{% static 'css/layout.css' %}?version=2" rel="stylesheet">
<link href="{% static 'css/modules.css' %}?version=2" rel="stylesheet">
<link href="{% static 'bootstrap/css/bootstrap.css' %}?version=3" rel="stylesheet">
<link href="{% static 'css/constants.css' %}?version=3" rel="stylesheet">
<link href="{% static 'css/mamweb_legacy.css' %}?version=3" rel="stylesheet">
<link href="{% static 'css/base.css' %}?version=3" rel="stylesheet">
<link href="{% static 'css/layout.css' %}?version=3" rel="stylesheet">
<link href="{% static 'css/modules.css' %}?version=3" rel="stylesheet">
<script src="{% static 'js/jquery-1.11.1.js' %}"></script>
<script src="{% static 'js/jquery-3.4.1.js' %}"></script>

18
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'),
),
]

13
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

2
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')),

Loading…
Cancel
Save