From e8476bea51c7bb4367513b6199d33e1cf7787eff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vi=CC=81=C3=B0ir=20Valberg=20Gu=C3=B0mundsson?= Date: Thu, 4 Aug 2016 23:03:39 +0200 Subject: [PATCH] Program pages are beginning to look like something --- bornhack/static_src/css/bornhack.css | 7 +++ camps/migrations/0006_auto_20160804_1705.py | 19 ++++++++ program/admin.py | 19 +++++--- program/migrations/0002_eventtype_color.py | 21 +++++++++ .../0003_eventtype_light_writing.py | 20 +++++++++ program/migrations/0004_auto_20160804_1712.py | 20 +++++++++ program/models.py | 5 ++- program/templates/program.html | 18 -------- program/templates/program_base.html | 23 ++++++++++ program/templates/program_day.html | 9 ++++ program/templates/program_overview.html | 30 +++++++++++++ program/urls.py | 3 +- program/views.py | 45 ++++++++++++++++--- 13 files changed, 208 insertions(+), 31 deletions(-) create mode 100644 camps/migrations/0006_auto_20160804_1705.py create mode 100644 program/migrations/0002_eventtype_color.py create mode 100644 program/migrations/0003_eventtype_light_writing.py create mode 100644 program/migrations/0004_auto_20160804_1712.py delete mode 100644 program/templates/program.html create mode 100644 program/templates/program_base.html create mode 100644 program/templates/program_day.html create mode 100644 program/templates/program_overview.html diff --git a/bornhack/static_src/css/bornhack.css b/bornhack/static_src/css/bornhack.css index 4653efef..d26e0f8b 100644 --- a/bornhack/static_src/css/bornhack.css +++ b/bornhack/static_src/css/bornhack.css @@ -113,3 +113,10 @@ footer { .nav li a { padding: 30px 7px; } + +.event { + width: 100px; + display: inline-block; + margin: 0 5px; + padding: 5px; +} diff --git a/camps/migrations/0006_auto_20160804_1705.py b/camps/migrations/0006_auto_20160804_1705.py new file mode 100644 index 00000000..8ae75891 --- /dev/null +++ b/camps/migrations/0006_auto_20160804_1705.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-08-04 17:05 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('camps', '0005_auto_20160510_2011'), + ] + + operations = [ + migrations.AlterModelOptions( + name='day', + options={'ordering': ['date'], 'verbose_name': 'Day', 'verbose_name_plural': 'Days'}, + ), + ] diff --git a/program/admin.py b/program/admin.py index f85fec27..5256637a 100644 --- a/program/admin.py +++ b/program/admin.py @@ -8,6 +8,15 @@ class EventTypeAdmin(admin.ModelAdmin): pass +@admin.register(Speaker) +class SpeakerAdmin(admin.ModelAdmin): + pass + + +class SpeakerInline(admin.StackedInline): + model = Speaker.events.through + + @admin.register(Event) class EventAdmin(admin.ModelAdmin): list_display = [ @@ -15,7 +24,7 @@ class EventAdmin(admin.ModelAdmin): 'event_type', 'get_days', 'start', - 'end' + 'end', ] def get_days(self, obj): @@ -24,9 +33,9 @@ class EventAdmin(admin.ModelAdmin): for day in obj.days.all() ]) - -@admin.register(Speaker) -class SpeakerAdmin(admin.ModelAdmin): - pass + inlines = [ + SpeakerInline + ] + diff --git a/program/migrations/0002_eventtype_color.py b/program/migrations/0002_eventtype_color.py new file mode 100644 index 00000000..b7f91fc3 --- /dev/null +++ b/program/migrations/0002_eventtype_color.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-08-04 17:05 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('program', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='eventtype', + name='color', + field=models.CharField(default='#ff0000', max_length=50), + preserve_default=False, + ), + ] diff --git a/program/migrations/0003_eventtype_light_writing.py b/program/migrations/0003_eventtype_light_writing.py new file mode 100644 index 00000000..7d4dac56 --- /dev/null +++ b/program/migrations/0003_eventtype_light_writing.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-08-04 17:11 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('program', '0002_eventtype_color'), + ] + + operations = [ + migrations.AddField( + model_name='eventtype', + name='light_writing', + field=models.BooleanField(default=False), + ), + ] diff --git a/program/migrations/0004_auto_20160804_1712.py b/program/migrations/0004_auto_20160804_1712.py new file mode 100644 index 00000000..e93a05c1 --- /dev/null +++ b/program/migrations/0004_auto_20160804_1712.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-08-04 17:12 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('program', '0003_eventtype_light_writing'), + ] + + operations = [ + migrations.RenameField( + model_name='eventtype', + old_name='light_writing', + new_name='light_text', + ), + ] diff --git a/program/models.py b/program/models.py index d0d379b6..6568acc8 100644 --- a/program/models.py +++ b/program/models.py @@ -8,6 +8,8 @@ class EventType(CreatedUpdatedModel): """ Every event needs to have a type. """ name = models.CharField(max_length=100) slug = models.SlugField() + color = models.CharField(max_length=50) + light_text = models.BooleanField(default=False) def __str__(self): return self.name @@ -34,7 +36,8 @@ class Speaker(CreatedUpdatedModel): events = models.ManyToManyField( Event, related_name='speakers', - related_query_name='speaker' + related_query_name='speaker', + blank=True, ) def __str__(self): diff --git a/program/templates/program.html b/program/templates/program.html deleted file mode 100644 index 0f0890cd..00000000 --- a/program/templates/program.html +++ /dev/null @@ -1,18 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} - - {% for day, events in days.items %} -
- {{ day }}
- {% for event in events %} -
- {{ event }} -
- {% endfor %} -
-
- {% endfor %} - - -{% endblock %} diff --git a/program/templates/program_base.html b/program/templates/program_base.html new file mode 100644 index 00000000..40987e9f --- /dev/null +++ b/program/templates/program_base.html @@ -0,0 +1,23 @@ +{% extends 'base.html' %} + +{% block content %} + + + Overview + +{% for day in days %} +{% with day.date|date:"m" as month_padded %} +{% with day.date|date:"d" as day_padded %} + + {{ day.date|date:"l" }} + +{% endwith %} +{% endwith %} +{% endfor %} + +
+ +{% block program_content %} +{% endblock %} + +{% endblock %} diff --git a/program/templates/program_day.html b/program/templates/program_day.html new file mode 100644 index 00000000..4f41278b --- /dev/null +++ b/program/templates/program_day.html @@ -0,0 +1,9 @@ +{% extends 'program_base.html' %} + +{% block program_content %} + +{% for event in events %} + {{ event }} +{% endfor %} + +{% endblock %} diff --git a/program/templates/program_overview.html b/program/templates/program_overview.html new file mode 100644 index 00000000..8e46e415 --- /dev/null +++ b/program/templates/program_overview.html @@ -0,0 +1,30 @@ +{% extends 'program_base.html' %} + +{% block program_content %} + + + All + +{% for event_type in event_types %} + + {{ event_type.name }} + +{% endfor %} + +
+ +{% for day, events in day_events.items %} + {{ day.date|date:"D d/m" }}
+
+ {% for event in events %} +
+ {{ event.start|date:"H:i" }} - {{ event.end|date:"H:i" }} + {{ event }} +
+ {% endfor %} +
+
+{% endfor %} + +{% endblock %} diff --git a/program/urls.py b/program/urls.py index be495518..964bc4e3 100644 --- a/program/urls.py +++ b/program/urls.py @@ -2,5 +2,6 @@ from django.conf.urls import url from views import * urlpatterns = [ - url(r'^$', ProgramView.as_view(), name='index') + url(r'^(?P\d{4})-(?P\d{2})-(?P\d{2})$', ProgramDayView.as_view(), name='day'), + url(r'^$', ProgramOverviewView.as_view(), name='index'), ] diff --git a/program/views.py b/program/views.py index cf759bf9..590aff58 100644 --- a/program/views.py +++ b/program/views.py @@ -1,26 +1,59 @@ from collections import OrderedDict -from django.views.generic import ListView +import datetime +from django.views.generic import ListView, TemplateView from camps.models import Day from . import models -class ProgramView(ListView): +class ProgramOverviewView(ListView): model = models.Event - template_name = 'program.html' + template_name = 'program_overview.html' def get_context_data(self, **kwargs): context = super( - ProgramView, self + ProgramOverviewView, self ).get_context_data(**kwargs) days = Day.objects.all() + context['days'] = days - context['days'] = OrderedDict([ - (day, self.get_queryset().filter(days__in=[day])) + filter = {} + if 'type' in self.request.GET: + event_type = self.request.GET['type'] + filter["event_type__slug"] = event_type + + context['day_events'] = OrderedDict([ + ( + day, + self.get_queryset().filter( + days__in=[day], + **filter + ).order_by( + 'start' + ) + ) for day in days ]) + context['event_types'] = models.EventType.objects.all() + + return context + + +class ProgramDayView(TemplateView): + template_name = 'program_day.html' + + def get_context_data(self, **kwargs): + context = super(ProgramDayView, self).get_context_data(**kwargs) + year = int(kwargs['year']) + month = int(kwargs['month']) + day = int(kwargs['day']) + date = datetime.date(year=year, month=month, day=day) + day = Day.objects.filter(date=date) + context['events'] = models.Event.objects.filter(days=day) + context['event_types'] = models.EventType.objects.all() + context['days'] = Day.objects.filter(date__year=year) return context