From 59bb0f8e3a7618f27ec865f8f550f67c5ab871d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=AD=C3=B0ir=20Valberg=20Gu=C3=B0mundsson?= Date: Fri, 17 Feb 2017 17:17:21 +0100 Subject: [PATCH] Rewrite bits of the program scheduling to work better on mobile. --- src/bornhack/urls.py | 8 +- .../bornhack-2016_call_for_speakers.html | 4 +- .../bornhack-2017_call_for_speakers.html | 4 +- src/program/templates/event_list.html | 6 +- src/program/templates/program_base.html | 86 +++------------ src/program/templates/schedule_base.html | 79 ++++++++++++-- .../{program_day.html => schedule_day.html} | 6 +- ...detail.html => schedule_event_detail.html} | 6 +- ...m_overview.html => schedule_overview.html} | 6 +- src/program/templates/speaker_detail.html | 6 +- src/program/templates/speaker_list.html | 8 +- src/program/views.py | 100 +++++++----------- src/templates/base.html | 19 +++- 13 files changed, 168 insertions(+), 170 deletions(-) rename src/program/templates/{program_day.html => schedule_day.html} (91%) rename src/program/templates/{program_event_detail.html => schedule_event_detail.html} (91%) rename src/program/templates/{program_overview.html => schedule_overview.html} (88%) diff --git a/src/bornhack/urls.py b/src/bornhack/urls.py index 0978199e..533ddecc 100644 --- a/src/bornhack/urls.py +++ b/src/bornhack/urls.py @@ -11,7 +11,7 @@ from django.contrib import admin from django.views.generic import TemplateView, RedirectView from django.core.urlresolvers import reverse_lazy from camps.views import * -from info.views import * +from info.views import * from villages.views import * from program.views import * from sponsors.views import * @@ -90,15 +90,15 @@ urlpatterns = [ ), url( - r'^schedule/', include([ + r'^program/', include([ url( r'^(?P\d{4})-(?P\d{2})-(?P\d{2})/$', - ProgramDayView.as_view(), + ScheduleView.as_view(), name='schedule_day' ), url( r'^$', - ProgramOverviewView.as_view(), + ScheduleView.as_view(), name='schedule_index' ), url( diff --git a/src/program/templates/bornhack-2016_call_for_speakers.html b/src/program/templates/bornhack-2016_call_for_speakers.html index ff55bf7b..815efe82 100644 --- a/src/program/templates/bornhack-2016_call_for_speakers.html +++ b/src/program/templates/bornhack-2016_call_for_speakers.html @@ -1,10 +1,10 @@ -{% extends 'schedule_base.html' %} +{% extends 'program_base.html' %} {% block title %} Call for Speakers | {{ block.super }} {% endblock %} -{% block schedule_content %} +{% block program_content %} {% if not camp.call_for_speakers_open %}
diff --git a/src/program/templates/bornhack-2017_call_for_speakers.html b/src/program/templates/bornhack-2017_call_for_speakers.html index 8669179c..dca4314d 100644 --- a/src/program/templates/bornhack-2017_call_for_speakers.html +++ b/src/program/templates/bornhack-2017_call_for_speakers.html @@ -1,10 +1,10 @@ -{% extends 'schedule_base.html' %} +{% extends 'program_base.html' %} {% block title %} Call for Speakers | {{ block.super }} {% endblock %} -{% block schedule_content %} +{% block program_content %} {% if not camp.call_for_speakers_open %}
diff --git a/src/program/templates/event_list.html b/src/program/templates/event_list.html index 61214f68..7b9647fb 100644 --- a/src/program/templates/event_list.html +++ b/src/program/templates/event_list.html @@ -1,6 +1,6 @@ -{% extends 'schedule_base.html' %} +{% extends 'program_base.html' %} -{% block schedule_content %} +{% block program_content %}

An alphabetical list of all talks, workshops, keynotes and other events at {{ camp.title }}. @@ -21,4 +21,4 @@ {% endif %} {% endfor %}

-{% endblock schedule_content %} +{% endblock program_content %} diff --git a/src/program/templates/program_base.html b/src/program/templates/program_base.html index 5ac4520e..223f8f58 100644 --- a/src/program/templates/program_base.html +++ b/src/program/templates/program_base.html @@ -1,75 +1,23 @@ -{% extends 'schedule_base.html' %} -{% load dateutils %} +{% extends 'base.html' %} -{% block schedule_content %} -
- - +{% block content %} + +
+ - -
- - + - -
- - -
- -
- +
+

{% block program_content %} {% endblock program_content %} -{% endblock schedule_content %} +{% endblock content %} diff --git a/src/program/templates/schedule_base.html b/src/program/templates/schedule_base.html index 73bd5a89..b5564b11 100644 --- a/src/program/templates/schedule_base.html +++ b/src/program/templates/schedule_base.html @@ -1,17 +1,76 @@ -{% extends 'base.html' %} +{% extends 'program_base.html' %} +{% load dateutils %} -{% block content %} +{% block program_content %} -

-
- Schedule - Events - Speakers - Call for Speakers +
+ +
+ +
+ + + + +
+
-

+ +


+ {% block schedule_content %} {% endblock schedule_content %} -{% endblock content %} +{% url 'schedule_index' camp_slug=camp.slug as baseurl %} + + + +{% endblock program_content %} diff --git a/src/program/templates/program_day.html b/src/program/templates/schedule_day.html similarity index 91% rename from src/program/templates/program_day.html rename to src/program/templates/schedule_day.html index 1b405ecc..42a742fc 100644 --- a/src/program/templates/program_day.html +++ b/src/program/templates/schedule_day.html @@ -1,6 +1,6 @@ -{% extends 'program_base.html' %} +{% extends 'schedule_base.html' %} -{% block program_content %} +{% block schedule_content %}
@@ -22,4 +22,4 @@
-{% endblock program_content %} +{% endblock %} diff --git a/src/program/templates/program_event_detail.html b/src/program/templates/schedule_event_detail.html similarity index 91% rename from src/program/templates/program_event_detail.html rename to src/program/templates/schedule_event_detail.html index 121f62bb..ed44ac5b 100644 --- a/src/program/templates/program_event_detail.html +++ b/src/program/templates/schedule_event_detail.html @@ -1,7 +1,7 @@ -{% extends 'schedule_base.html' %} +{% extends 'program_base.html' %} {% load commonmark %} -{% block schedule_content %} +{% block program_content %}
{{ event.event_type.name }} {{ event.title }}
@@ -29,5 +29,5 @@
-{% endblock schedule_content %} +{% endblock program_content %} diff --git a/src/program/templates/program_overview.html b/src/program/templates/schedule_overview.html similarity index 88% rename from src/program/templates/program_overview.html rename to src/program/templates/schedule_overview.html index 59077c2e..8dbe2f1d 100644 --- a/src/program/templates/program_overview.html +++ b/src/program/templates/schedule_overview.html @@ -1,6 +1,6 @@ -{% extends 'program_base.html' %} +{% extends 'schedule_base.html' %} -{% block program_content %} +{% block schedule_content %} {% for day in camp.camp_days %} {{ day.lower.date|date:"D d/m" }}
@@ -20,4 +20,4 @@
{% endfor %} -{% endblock program_content %} +{% endblock schedule_content %} diff --git a/src/program/templates/speaker_detail.html b/src/program/templates/speaker_detail.html index ae9de00d..962a9bfb 100644 --- a/src/program/templates/speaker_detail.html +++ b/src/program/templates/speaker_detail.html @@ -1,7 +1,7 @@ -{% extends 'schedule_base.html' %} +{% extends 'program_base.html' %} {% load commonmark %} -{% block schedule_content %} +{% block program_content %}

{{ speaker.name }}

@@ -32,4 +32,4 @@ No events registered for this speaker yet {% endfor %} {% endif %} -{% endblock schedule_content %} +{% endblock program_content %} diff --git a/src/program/templates/speaker_list.html b/src/program/templates/speaker_list.html index c5cbbc40..91640f9a 100644 --- a/src/program/templates/speaker_list.html +++ b/src/program/templates/speaker_list.html @@ -1,8 +1,8 @@ -{% extends 'schedule_base.html' %} +{% extends 'program_base.html' %} -{% block schedule_content %} +{% block program_content %}

- An alphabetical list of all speakers, workshop hosts and other + An alphabetical list of all speakers, workshop hosts and other event anchors at BornHack 2016.

@@ -13,4 +13,4 @@ {% endfor %}
-{% endblock schedule_content %} +{% endblock program_content %} diff --git a/src/program/views.py b/src/program/views.py index 9dd8358e..7aa49ae2 100644 --- a/src/program/views.py +++ b/src/program/views.py @@ -26,9 +26,11 @@ class EventListView(CampViewMixin, ListView): template_name = 'event_list.html' -class ProgramOverviewView(CampViewMixin, ListView): - model = models.Event - template_name = 'program_overview.html' +class ScheduleView(CampViewMixin, TemplateView): + def get_template_names(self): + if 'day' in self.kwargs: + return 'schedule_day.html' + return 'schedule_overview.html' def get_context_data(self, *args, **kwargs): if 'type' in self.request.GET: @@ -48,7 +50,7 @@ class ProgramOverviewView(CampViewMixin, ListView): except models.EventLocation.DoesNotExist: raise Http404 - context = super(ProgramOverviewView, self).get_context_data(**kwargs) + context = super(ScheduleView, self).get_context_data(**kwargs) eventinstances = models.EventInstance.objects.filter(event__in=self.camp.events.all()) if 'type' in self.request.GET: @@ -59,72 +61,52 @@ class ProgramOverviewView(CampViewMixin, ListView): context['location'] = eventlocation eventinstances = eventinstances.filter(location=eventlocation) context['eventinstances'] = eventinstances - return context - -class ProgramDayView(CampViewMixin, TemplateView): - template_name = 'program_day.html' - def dispatch(self, *args, **kwargs): - """ If an event type has been supplied check if it is valid """ - if 'type' in self.request.GET: - try: - eventtype = models.EventType.objects.get( - slug=self.request.GET['type'] + # Do stuff if we are dealing with a day schedule + if 'day' in kwargs: + when = datetime.datetime(year=int(self.kwargs['year']), month=int(self.kwargs['month']), day=int(self.kwargs['day'])) + eventinstances = models.EventInstance.objects.filter(event__in=self.camp.events.all()) + skip = [] + for ei in eventinstances: + if ei.schedule_date != when.date(): + skip.append(ei.id) + else: + if 'type' in self.request.GET: + eventtype = models.EventType.objects.get( + slug=self.request.GET['type'] + ) + if ei.event.event_type != eventtype: + skip.append(ei.id) + eventinstances = eventinstances.exclude(id__in=skip).order_by('event__event_type') + if 'location' in self.request.GET: + eventlocation = models.EventLocation.objects.get( + camp=self.camp, + slug=self.request.GET['location'] ) - except models.EventType.DoesNotExist: - raise Http404 - return super(ProgramDayView, self).dispatch(*args, **kwargs) + eventinstances = eventinstances.filter(location=eventlocation) - def get_context_data(self, *args, **kwargs): - context = super(ProgramDayView, self).get_context_data(**kwargs) - when = datetime.datetime(year=int(self.kwargs['year']), month=int(self.kwargs['month']), day=int(self.kwargs['day'])) - eventinstances = models.EventInstance.objects.filter(event__in=self.camp.events.all()) - skip = [] - for ei in eventinstances: - if ei.schedule_date != when.date(): - skip.append(ei.id) - else: - if 'type' in self.request.GET: - eventtype = models.EventType.objects.get( - slug=self.request.GET['type'] - ) - if ei.event.event_type != eventtype: - skip.append(ei.id) - eventinstances = eventinstances.exclude(id__in=skip).order_by('event__event_type') - if 'location' in self.request.GET: - eventlocation = models.EventLocation.objects.get( - camp=self.camp, - slug=self.request.GET['location'] - ) - eventinstances = eventinstances.filter(location=eventlocation) + context['eventinstances'] = eventinstances - context['eventinstances'] = eventinstances + start = when + datetime.timedelta(hours=settings.SCHEDULE_MIDNIGHT_OFFSET_HOURS) + timeslots = [] + # calculate how many timeslots we have in the schedule based on the lenght of the timeslots in minutes, + # and the number of minutes in 24 hours + for i in range(0,int((24*60)/settings.SCHEDULE_TIMESLOT_LENGTH_MINUTES)): + timeslot = start + datetime.timedelta(minutes=i*settings.SCHEDULE_TIMESLOT_LENGTH_MINUTES) + timeslots.append(timeslot) + context['timeslots'] = timeslots - start = when + datetime.timedelta(hours=settings.SCHEDULE_MIDNIGHT_OFFSET_HOURS) - timeslots = [] - # calculate how many timeslots we have in the schedule based on the lenght of the timeslots in minutes, - # and the number of minutes in 24 hours - for i in range(0,int((24*60)/settings.SCHEDULE_TIMESLOT_LENGTH_MINUTES)): - timeslot = start + datetime.timedelta(minutes=i*settings.SCHEDULE_TIMESLOT_LENGTH_MINUTES) - timeslots.append(timeslot) - context['timeslots'] = timeslots - - # include the components to make the urls - context['urlyear'] = self.kwargs['year'] - context['urlmonth'] = self.kwargs['month'] - context['urlday'] = self.kwargs['day'] - - if 'type' in self.request.GET: - context['eventtype'] = models.EventType.objects.get(slug=self.request.GET['type']) - if 'location' in self.request.GET: - context['location'] = models.EventLocation.objects.get(camp=self.camp, slug=self.request.GET['location']) + # include the components to make the urls + context['urlyear'] = self.kwargs['year'] + context['urlmonth'] = self.kwargs['month'] + context['urlday'] = self.kwargs['day'] return context class EventDetailView(CampViewMixin, DetailView): model = models.Event - template_name = 'program_event_detail.html' + template_name = 'schedule_event_detail.html' class CallForSpeakersView(CampViewMixin, TemplateView): diff --git a/src/templates/base.html b/src/templates/base.html index d0bb073c..3ffb42e8 100644 --- a/src/templates/base.html +++ b/src/templates/base.html @@ -54,7 +54,7 @@
  • Contact
  • - +