Ajout Agenda.affiche

This commit is contained in:
Claude Paroz 2026-03-12 21:22:15 +01:00
parent edf528f585
commit c60f4190f4
7 changed files with 57 additions and 5 deletions

View file

@ -19,5 +19,6 @@ class Migration(migrations.Migration):
('chant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='beesgospel.chant')), ('chant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='beesgospel.chant')),
('concert', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='programme', to='beesgospel.agenda')), ('concert', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='programme', to='beesgospel.agenda')),
], ],
options={'ordering': ['ordre']},
), ),
] ]

View file

@ -0,0 +1,16 @@
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('beesgospel', '0012_concertitem'),
]
operations = [
migrations.AddField(
model_name='agenda',
name='affiche',
field=models.ImageField(blank=True, help_text='Sous forme dimage', upload_to='affiches', verbose_name='Affiche'),
),
]

View file

@ -55,6 +55,9 @@ class Agenda(models.Model):
date_heure = models.DateTimeField("Date/heure") date_heure = models.DateTimeField("Date/heure")
infos = models.TextField("Informations", blank=True) infos = models.TextField("Informations", blank=True)
infos_internes = models.TextField("Informations internes", blank=True) infos_internes = models.TextField("Informations internes", blank=True)
affiche = models.ImageField(
"Affiche", blank=True, upload_to="affiches", help_text="Sous forme dimage"
)
statut = models.CharField("Statut", max_length=10, choices=Statuts, help_text=( statut = models.CharField("Statut", max_length=10, choices=Statuts, help_text=(
"Un évènement privé ou une répétition ne sont visibles que pour les membres de " "Un évènement privé ou une répétition ne sont visibles que pour les membres de "
"lassociation, tandis qu'un évènement public est visible de tous." "lassociation, tandis qu'un évènement public est visible de tous."

View file

@ -111,6 +111,7 @@ tr.editable:hover .edit-button, tr.editable:hover .delete-button { display: inli
} }
.date_agenda { background-color: #ddd; text-decoration: none; } .date_agenda { background-color: #ddd; text-decoration: none; }
.titre_agenda { font-size: 1.5rem; } .titre_agenda { font-size: 1.5rem; }
.affiche img { max-width: 100%; cursor: pointer; }
.prive { .prive {
background-image: linear-gradient(45deg, #333333 41.67%, #6b0c0c 41.67%, #6b0c0c 50%, #333333 50%, #333333 91.67%, #6b0c0c 91.67%, #6b0c0c 100%); background-image: linear-gradient(45deg, #333333 41.67%, #6b0c0c 41.67%, #6b0c0c 50%, #333333 50%, #333333 91.67%, #6b0c0c 91.67%, #6b0c0c 100%);
background-size: 33.94px 33.94px; background-size: 33.94px 33.94px;

View file

@ -27,6 +27,11 @@ window.addEventListener('DOMContentLoaded', () => {
audio.currentTime = 0; audio.currentTime = 0;
audio.src = ""; audio.src = "";
}) })
attachHandlerSelector(document, ".affiche img", "click", (ev) => {
const src = ev.target.src;
document.querySelector("#modal-img").src = ev.target.src;
new bootstrap.Modal('#imagemodal').show();
});
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]') const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl)) const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
}) })

View file

@ -35,6 +35,7 @@ urlpatterns = [
path("membres/documents/", views.MediaView.as_view(prive=True), name="docs-membres"), path("membres/documents/", views.MediaView.as_view(prive=True), name="docs-membres"),
path("media/chants/<path:path>", views.MediaServeView.as_view(subdir="chants")), path("media/chants/<path:path>", views.MediaServeView.as_view(subdir="chants")),
path("media/affiches/<path:path>", views.MediaServeView.as_view(subdir="affiches")),
path( path(
"sitemap.xml", sitemap, {"sitemaps": sitemaps}, "sitemap.xml", sitemap, {"sitemaps": sitemaps},

View file

@ -7,14 +7,27 @@
{% for even in object_list %} {% for even in object_list %}
<div id="event-{{ even.pk }}" class="{% if even.statut != 'repet' %}border-bottom border-danger {% endif %}mt-3 {{ even.statut }}"> <div id="event-{{ even.pk }}" class="{% if even.statut != 'repet' %}border-bottom border-danger {% endif %}mt-3 {{ even.statut }}">
<div class="row">
<div class="col-md-10">
<div class="row"> <div class="row">
<div class="col col-12 col-sm-4 col-lg-2 text-black rounded align-self-center text-center fw-bold pt-2 pb-2 date_agenda"> <div class="col col-12 col-sm-4 col-lg-2 text-black rounded align-self-center text-center fw-bold pt-2 pb-2 date_agenda">
{{ even.date_heure|date:'D d F à H:i' }} {{ even.date_heure|date:'D d F à H:i' }}
</div> </div>
<div class="col col-12 col-sm-8 col-lg-10 titre_agenda">{{ even.titre }}{% if even.statut == 'repet' %} - {{ even.lieu }}{% endif %}</div> <div class="col col-12 col-sm-8 col-lg-10 titre_agenda">{{ even.titre }}{% if even.statut == 'repet' %} - {{ even.lieu }}{% endif %}</div>
</div> </div>
{% if even.statut != 'repet' %}<div class="mt-2 mb-2 lieu_agenda">{{ even.lieu }}</div>{% endif %} {% if even.statut != 'repet' %}
{% if even.infos %}<div class="pb-3">{{ even.infos|linebreaksbr }}</div>{% endif %} <div class="mt-2 mb-2 lieu_agenda">{{ even.lieu }}</div>
{% endif %}
{% if even.infos %}
<div class="pb-3">{{ even.infos|linebreaksbr }}</div>
{% endif %}
</div>
{% if even.affiche %}
<div class="col-md-2 affiche">
<img src="{{ even.affiche.url }}">
</div>
{% endif %}
</div>
{% if user.is_authenticated %} {% if user.is_authenticated %}
{% if even.infos_internes %}<div class="infos_internes pb-3">{{ even.infos_internes|linebreaksbr }}</div>{% endif %} {% if even.infos_internes %}<div class="infos_internes pb-3">{{ even.infos_internes|linebreaksbr }}</div>{% endif %}
{% if even.programme.all %} {% if even.programme.all %}
@ -36,4 +49,16 @@
{% endif %} {% endif %}
</div> </div>
{% endfor %} {% endfor %}
<div class="modal fade" id="imagemodal" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<img id="modal-img" src="">
</div>
</div>
</div>
{% endblock %} {% endblock %}