Skip to content

External events #112

Merged
merged 9 commits into from
Apr 21, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 17 additions & 9 deletions locale/de/LC_MESSAGES/django.po
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-03-20 19:33+0100\n"
"POT-Creation-Date: 2021-04-21 14:09+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
Expand Down Expand Up @@ -1522,7 +1522,7 @@ msgid "Wagtail search tests"
msgstr ""

#: bla/lib/python3.7/site-packages/wagtail/tests/settings.py:239
#: config/settings/base.py:219
#: config/settings/base.py:220
msgid "English"
msgstr "Englisch"

Expand Down Expand Up @@ -2000,7 +2000,7 @@ msgstr ""
msgid "Edit this video"
msgstr ""

#: config/settings/base.py:220
#: config/settings/base.py:221
msgid "German"
msgstr "Deutsch"

Expand Down Expand Up @@ -2150,23 +2150,23 @@ msgstr "Endzeit"
msgid "Room"
msgstr "Raum"

#: mpicms/events/models.py:44
#: mpicms/events/models.py:46
msgid "event dates"
msgstr "Veranstaltungsdaten"

#: mpicms/events/models.py:106
#: mpicms/events/models.py:96
msgid "event"
msgstr "Veranstaltung"

#: mpicms/events/models.py:107
#: mpicms/events/models.py:97
msgid "events"
msgstr "Veranstaltungen"

#: mpicms/events/models.py:148
#: mpicms/events/models.py:138
msgid "event index"
msgstr "Veranstaltungs-Index"

#: mpicms/events/models.py:149
#: mpicms/events/models.py:139
msgid "event indexes"
msgstr "Veranstaltungs-Indexes"

Expand Down Expand Up @@ -2303,7 +2303,15 @@ msgstr "Veranstaltungen der Woche"
msgid "All events"
msgstr "Alle Veranstaltungen"

#: mpicms/templates/events/event_index.html:11
#: mpicms/templates/events/event_index.html:5
msgid "hide external events"
msgstr "Externe Events verbergen"

#: mpicms/templates/events/event_index.html:6
msgid "show external events"
msgstr "Externe Events zeigen"

#: mpicms/templates/events/event_index.html:15
msgid "Subscribe"
msgstr "Abonnieren"

Expand Down
18 changes: 18 additions & 0 deletions mpicms/events/migrations/0015_event_external.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 3.1.7 on 2021-03-21 11:49

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('events', '0014_auto_20210114_1926'),
]

operations = [
migrations.AddField(
model_name='event',
name='external',
field=models.BooleanField(default=False),
),
]
18 changes: 4 additions & 14 deletions mpicms/events/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ class Event(BodyMixin, BasePage):
start_time = models.TimeField(_('start time'), blank=True, null=True)
end_time = models.TimeField(_('end time'), blank=True, null=True)
room = models.CharField(_('Room'), max_length=10, blank=True)
external = models.BooleanField(default=False)

header_image = models.ForeignKey(
'wagtailimages.Image',
Expand All @@ -36,6 +37,7 @@ class Event(BodyMixin, BasePage):
ImageChooserPanel('header_image'),
MultiFieldPanel(
[
FieldPanel('external'),
FieldPanel('start_date'),
FieldPanel('start_time'),
FieldPanel('end_date'),
Expand Down Expand Up @@ -74,7 +76,6 @@ def get_dict(self, request=None):
'start': self.start.isoformat(),
'end': self.end.isoformat() if self.end else None,
'url': self.get_url(request=request),
'color': '#006c66'
}

def clean(self):
Expand All @@ -90,17 +91,6 @@ def clean(self):
if self.end and self.end < self.start:
raise ValidationError({'end_time': 'The end time cannot be before the start time.'})

def get_context(self, request, *args, **kwargs):
context = super().get_context(request, *args, **kwargs)

events = []
for child in self.get_parent().get_children().type(Event).live().specific():
events.append(child.get_dict(request))

context["events"] = json.dumps(events)

return context

class Meta(object): # noqa
ordering = ['start_date']
verbose_name = _('event')
Expand All @@ -117,8 +107,8 @@ def events(self):
return Event.objects.live().specific()
return self.get_children().type(Event).live().specific()

def get_json_events(self, request=None):
event_dicts = [event.get_dict(request) for event in self.events]
def get_json_events(self, request=None, external=False):
event_dicts = [ event.get_dict(request) for event in self.events.filter(external=external) ]
return json.dumps(event_dicts)

def clean(self): # Prevent more than one event index
Expand Down
4 changes: 2 additions & 2 deletions mpicms/events/templatetags/event_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@


@register.simple_tag(takes_context=True)
def get_json_events(context, event_index):
return event_index.get_json_events(request=context['request'])
def get_json_events(context, event_index, external=False):
return event_index.get_json_events(request=context['request'], external=external)
9 changes: 9 additions & 0 deletions mpicms/static/css/custom.css
Original file line number Diff line number Diff line change
Expand Up @@ -761,3 +761,12 @@ div.codehilite:not(:last-child) {
width: 100%;
height: 100%;
}

#switch_external {
color: black;
background-color: silver;
}

#switch_external:hover {
background-color: lightgray;
}
5 changes: 5 additions & 0 deletions mpicms/templates/events/event.html
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,11 @@ <h2 class="title is-2">{{ page.title }}</h2>
</div>
{% endif %}

{% if page.external %}
<div class="tag is-medium">
external
</div>
{% endif %}

{% if page.room %}
<div class="tag is-medium">
Expand Down
36 changes: 32 additions & 4 deletions mpicms/templates/events/event_index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,38 @@
{% load event_tags i18n %}

{% block content %}
{% translate "hide external events" as txt_hide_external_events %}
{% translate "show external events" as txt_show_external_events %}
<div class="section">

<h2 class="title is-2">{{ page.title }}</h2>

<div id="calendar"></div>
<br>
<a href="https://it.molgen.mpg.de/cgi-bin/ics/subscription?cal=molgen&subscribe=1" class="button cal-button">{% trans 'Subscribe' %}</a>

<div class="fc-toolbar">
<div class="fc-left">
<a href="https://it.molgen.mpg.de/cgi-bin/ics/subscription?cal=molgen&subscribe=1" class="button cal-button">{% trans 'Subscribe' %}</a>
</div>
<div class="fc-center">
</div>
<div class="fc-right">
<a id="switch_external" class="button">{{ txt_hide_external_events }}</a>
</div>
</div>
</div>

{% get_json_events page as events %}
{% autoescape off %}
<script>

var event_source_internal = { events: {% get_json_events page %}, color: '#006c66' };
var event_source_external = { events: {% get_json_events page True %}, color: 'silver', textColor: 'black' };

document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');

var calendar = new FullCalendar.Calendar(calendarEl, {
plugins: [ 'dayGrid', 'timeGrid' ],
events: {{ events|safe }},
eventSources: [ event_source_internal , event_source_external ],
locale: '{{ LANGUAGE_CODE }}',
header: {
left: 'dayGridMonth,timeGridWeek,timeGridDay',
Expand All @@ -29,9 +42,24 @@ <h2 class="title is-2">{{ page.title }}</h2>
}
});

var externalEventsShown = 1

document.getElementById('switch_external').addEventListener("click", function() {
if (externalEventsShown) {
calendar.getEventSources()[1].remove()
externalEventsShown = 0
this.innerHTML="{{ txt_show_external_events }}"
} else {
calendar.addEventSource(event_source_external)
externalEventsShown = 1
this.innerHTML="{{ txt_hide_external_events }}"
}
});

calendar.render();
});

</script>
{% endautoescape %}

{% endblock %}