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