From 2cce659c28b499440caa2c37de0b73ba5447d35a Mon Sep 17 00:00:00 2001 From: Tobias Date: Sat, 29 Dec 2018 13:36:13 +1300 Subject: [PATCH] Use miniconf schedule based on sections --- .../schedule/_schedule_nav_link.html | 9 +++ .../schedule/schedule_conference.html | 70 ++++++++++++------- static/src/scss/app.scss | 4 ++ vendor/symposion/managers.py | 16 +++++ vendor/symposion/schedule/admin.py | 6 +- vendor/symposion/schedule/models.py | 23 ++++-- 6 files changed, 96 insertions(+), 32 deletions(-) create mode 100644 pinaxcon/templates/symposion/schedule/_schedule_nav_link.html create mode 100644 vendor/symposion/managers.py diff --git a/pinaxcon/templates/symposion/schedule/_schedule_nav_link.html b/pinaxcon/templates/symposion/schedule/_schedule_nav_link.html new file mode 100644 index 00000000..3f882773 --- /dev/null +++ b/pinaxcon/templates/symposion/schedule/_schedule_nav_link.html @@ -0,0 +1,9 @@ + + {{ label }} + \ No newline at end of file diff --git a/pinaxcon/templates/symposion/schedule/schedule_conference.html b/pinaxcon/templates/symposion/schedule/schedule_conference.html index 7ef7df63..ccfabd2c 100644 --- a/pinaxcon/templates/symposion/schedule/schedule_conference.html +++ b/pinaxcon/templates/symposion/schedule/schedule_conference.html @@ -21,16 +21,41 @@ + {% if timetable.day.date|date:"Y-m-d" == "2019-01-21" %} + + {{ section.schedule.section.name }} + + {% endif %} + {% endfor %} + {% endif %} + {% endfor %} +
+ + Tuesday + {% for section in sections %} + {% if "Miniconf" in section.schedule.section.name %} + {% for timetable in section.days %} + {% if timetable.day.date|date:"Y-m-d" == "2019-01-22" %} + {% include "symposion/schedule/_schedule_nav_link.html" with label=section.schedule.section.name %} + {% endif %} + {% endfor %} + {% endif %} + {% endfor %} +
+ + {% for section in sections %} + {% if "Miniconf" not in section.schedule.section.name %} + {% for timetable in section.days %} + {% include "symposion/schedule/_schedule_nav_link.html" with active=forloop.first label=timetable.day.date|date:"l" %} + {% endfor %} + {% endif %} + {% endfor %} + +
@@ -39,25 +64,21 @@
{% for section in sections %} {% for timetable in section.days %} -
-
- {% include "symposion/schedule/_grid.html" %} -
-
- {% include "symposion/schedule/_mobile.html" %} +
+
+ {% include "symposion/schedule/_grid.html" %} +
+
+ {% include "symposion/schedule/_mobile.html" %} +
+ {% endfor %} + {% endfor %}
- {% endfor %} - {% endfor %}
- {% endblock %} {%block footer_class %}footer-no-margin{% endblock %} @@ -74,9 +95,10 @@ var trailing = ' January 2019'; $('a[data-toggle="tab"]').on('show.bs.tab', function (e) { - var day = e.target.attributes['aria-controls'].value; + var day = e.target.attributes['aria-controls'].value.split('-'); + day = day[day.length - 1]; $('#schedule-date').text(day + ' ' + dates[day] + trailing); }) {{ block.super }} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/static/src/scss/app.scss b/static/src/scss/app.scss index c5094a2b..3458ea95 100644 --- a/static/src/scss/app.scss +++ b/static/src/scss/app.scss @@ -376,6 +376,10 @@ hr { tr.calendar-row { height: 120px; + td.time { + width: 85px; + } + td.time > p { font-size: 1.25rem; text-transform: lowercase; diff --git a/vendor/symposion/managers.py b/vendor/symposion/managers.py new file mode 100644 index 00000000..22899db5 --- /dev/null +++ b/vendor/symposion/managers.py @@ -0,0 +1,16 @@ +from django.db.models import Manager + + +class DefaultSelectRelatedManager(Manager): + def get_queryset(self): + symposion_meta = getattr(self.model, 'SymposionMeta', None) + if symposion_meta is None: + return super().get_queryset() + + select_related = getattr(symposion_meta, 'select_related', None) + if select_related is None: + return super().get_queryset() + + + return super().get_queryset().select_related(*select_related) + diff --git a/vendor/symposion/schedule/admin.py b/vendor/symposion/schedule/admin.py index 0e1abcf9..2fd6d7ea 100644 --- a/vendor/symposion/schedule/admin.py +++ b/vendor/symposion/schedule/admin.py @@ -33,14 +33,12 @@ update_slot_names.short_description = "Update slot names" class SlotAdmin(admin.ModelAdmin): list_filter = ("day", "kind","exclusive","slotroom__room") - list_display = ("day", "start", "end", "kind", "room_names", - "content_override","exclusive") - list_editable = ("exclusive","kind","start","end") + list_display = ("day", "start", "end", "kind", "room_names", "content_override", "exclusive") inlines = [SlotRoomInline] actions = [update_slot_names] def room_names(self, slot): - return ", ".join(room.name for room in slot.rooms.all()) + return ", ".join(room.name for room in slot.rooms) class RoomAdmin(admin.ModelAdmin): diff --git a/vendor/symposion/schedule/models.py b/vendor/symposion/schedule/models.py index 892de069..efed032a 100644 --- a/vendor/symposion/schedule/models.py +++ b/vendor/symposion/schedule/models.py @@ -5,6 +5,7 @@ from django.contrib.auth.models import User from django.db import models from django.utils.translation import ugettext_lazy as _ +from symposion.managers import DefaultSelectRelatedManager from symposion.text_parser import parse from symposion.proposals.models import ProposalBase from symposion.conference.models import Section @@ -12,6 +13,7 @@ from symposion.speakers.models import Speaker class Schedule(models.Model): + objects = DefaultSelectRelatedManager() section = models.OneToOneField(Section, verbose_name=_("Section")) published = models.BooleanField(default=True, verbose_name=_("Published")) @@ -20,6 +22,9 @@ class Schedule(models.Model): def __str__(self): return "%s Schedule" % self.section + class SymposionMeta: + select_related = ('section', ) + class Meta: ordering = ["section"] verbose_name = _('Schedule') @@ -27,12 +32,17 @@ class Schedule(models.Model): class Day(models.Model): + objects = DefaultSelectRelatedManager() + schedule = models.ForeignKey(Schedule, verbose_name=_("Schedule")) date = models.DateField(verbose_name=_("Date")) def __str__(self): - return "%s" % self.date + return "%s: %s" % (self.schedule.section.name, self.date) + + class SymposionMeta: + select_related = ('schedule__section', ) class Meta: unique_together = [("schedule", "date")] @@ -82,7 +92,7 @@ class SlotKind(models.Model): label = models.CharField(max_length=50, verbose_name=_("Label")) def __str__(self): - return self.label + return ": ".join((self.schedule.section.name, self.label)) class Meta: verbose_name = _("Slot kind") @@ -90,6 +100,7 @@ class SlotKind(models.Model): class Slot(models.Model): + objects = DefaultSelectRelatedManager() name = models.CharField(max_length=512, editable=False) day = models.ForeignKey(Day, verbose_name=_("Day")) @@ -161,13 +172,16 @@ class Slot(models.Model): return Room.objects.filter(pk__in=self.slotroom_set.values("room")) def save(self, *args, **kwargs): - roomlist = ' '.join(map(lambda r: r.__unicode__(), self.rooms)) + roomlist = ' '.join(map(str, self.rooms)) self.name = "%s %s (%s - %s) %s" % (self.day, self.kind, self.start, self.end, roomlist) self.content_override_html = parse(self.content_override) super(Slot, self).save(*args, **kwargs) def __str__(self): - return self.name + return "%s: %s" % (self.kind.schedule.section.name, self.name) + + class SymposionMeta: + select_related = ('kind__schedule__section', 'day') class Meta: ordering = ["day", "start", "end"] @@ -194,6 +208,7 @@ class SlotRoom(models.Model): class Presentation(models.Model): + objects = DefaultSelectRelatedManager() slot = models.OneToOneField(Slot, null=True, blank=True, related_name="content_ptr", verbose_name=_("Slot")) title = models.CharField(max_length=100, verbose_name=_("Title"))