diff --git a/camps/context_processors.py b/camps/context_processors.py index 6874755f..4f4cadc3 100644 --- a/camps/context_processors.py +++ b/camps/context_processors.py @@ -4,6 +4,11 @@ from django.utils import timezone def camp(request): + """ + if we have a camp_slug url component then get the "current" Camp object. + Return it after adding the slug to request.session along with a "camps" + queryset containing all camps (used to build the menu and such) + """ if 'camp_slug' in request.resolver_match.kwargs: camp = Camp.objects.get(slug=request.resolver_match.kwargs['camp_slug']) request.session['campslug'] = camp.slug @@ -12,7 +17,7 @@ def camp(request): camp = None return { - 'camps': Camp.objects.all().order_by('-camp_start'), + 'camps': Camp.objects.all().order_by('-camp'), 'camp': camp } diff --git a/camps/migrations/0013_auto_20161229_2201.py b/camps/migrations/0013_auto_20161229_2201.py new file mode 100644 index 00000000..33298454 --- /dev/null +++ b/camps/migrations/0013_auto_20161229_2201.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2016-12-29 22:01 +from __future__ import unicode_literals + +import django.contrib.postgres.fields.ranges +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('camps', '0012_auto_20161228_2312'), + ] + + operations = [ + migrations.RemoveField( + model_name='camp', + name='buildup_start', + ), + migrations.RemoveField( + model_name='camp', + name='camp_end', + ), + migrations.RemoveField( + model_name='camp', + name='camp_start', + ), + migrations.RemoveField( + model_name='camp', + name='teardown_end', + ), + migrations.AddField( + model_name='camp', + name='buildup', + field=django.contrib.postgres.fields.ranges.DateTimeRangeField(help_text=b'The camp buildup period.', null=True, verbose_name=b'Buildup Period'), + ), + migrations.AddField( + model_name='camp', + name='camp', + field=django.contrib.postgres.fields.ranges.DateTimeRangeField(help_text=b'The camp period.', null=True, verbose_name=b'Camp Period'), + ), + migrations.AddField( + model_name='camp', + name='teardown', + field=django.contrib.postgres.fields.ranges.DateTimeRangeField(help_text=b'The camp teardown period.', null=True, verbose_name=b'Teardown period'), + ), + ] diff --git a/camps/migrations/0014_auto_20161229_2202.py b/camps/migrations/0014_auto_20161229_2202.py new file mode 100644 index 00000000..765871e8 --- /dev/null +++ b/camps/migrations/0014_auto_20161229_2202.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2016-12-29 22:02 +from __future__ import unicode_literals + +import django.contrib.postgres.fields.ranges +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('camps', '0013_auto_20161229_2201'), + ] + + operations = [ + migrations.AlterField( + model_name='camp', + name='buildup', + field=django.contrib.postgres.fields.ranges.DateTimeRangeField(help_text=b'The camp buildup period.', verbose_name=b'Buildup Period'), + ), + migrations.AlterField( + model_name='camp', + name='camp', + field=django.contrib.postgres.fields.ranges.DateTimeRangeField(help_text=b'The camp period.', verbose_name=b'Camp Period'), + ), + migrations.AlterField( + model_name='camp', + name='teardown', + field=django.contrib.postgres.fields.ranges.DateTimeRangeField(help_text=b'The camp teardown period.', verbose_name=b'Teardown period'), + ), + ] diff --git a/camps/migrations/0015_auto_20170116_1634.py b/camps/migrations/0015_auto_20170116_1634.py new file mode 100644 index 00000000..fa87cc72 --- /dev/null +++ b/camps/migrations/0015_auto_20170116_1634.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2017-01-16 16:34 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('camps', '0014_auto_20161229_2202'), + ] + + operations = [ + migrations.RemoveField( + model_name='expense', + name='refund_user', + ), + migrations.DeleteModel( + name='Expense', + ), + ] diff --git a/camps/migrations/0016_camp_description.py b/camps/migrations/0016_camp_description.py new file mode 100644 index 00000000..900f6cdc --- /dev/null +++ b/camps/migrations/0016_camp_description.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2017-01-16 16:37 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('camps', '0015_auto_20170116_1634'), + ] + + operations = [ + migrations.AddField( + model_name='camp', + name='description', + field=models.TextField(default=b'', help_text=b'Description of the camp, shown on the camp frontpage. HTML and markdown supported.', verbose_name=b'Description'), + ), + ] diff --git a/camps/migrations/0017_remove_camp_description.py b/camps/migrations/0017_remove_camp_description.py new file mode 100644 index 00000000..a5ade35b --- /dev/null +++ b/camps/migrations/0017_remove_camp_description.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2017-01-16 21:59 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('camps', '0016_camp_description'), + ] + + operations = [ + migrations.RemoveField( + model_name='camp', + name='description', + ), + ] diff --git a/camps/models.py b/camps/models.py index 8118f660..032addb5 100644 --- a/camps/models.py +++ b/camps/models.py @@ -1,6 +1,8 @@ import datetime from django.db import models from utils.models import UUIDModel, CreatedUpdatedModel +from program.models import EventType +from django.contrib.postgres.fields import DateTimeRangeField class Camp(CreatedUpdatedModel, UUIDModel): @@ -25,69 +27,34 @@ class Camp(CreatedUpdatedModel, UUIDModel): help_text='The url slug to use for this camp' ) - buildup_start = models.DateTimeField( - verbose_name='Buildup Start date', - help_text='When the camp buildup starts.', + buildup = DateTimeRangeField( + verbose_name='Buildup Period', + help_text='The camp buildup period.', ) - camp_start = models.DateTimeField( - verbose_name='Start date', - help_text='When the camp starts.', + camp = DateTimeRangeField( + verbose_name='Camp Period', + help_text='The camp period.', ) - camp_end = models.DateTimeField( - verbose_name='End date', - help_text='When the camp ends.', - ) - - teardown_end = models.DateTimeField( - verbose_name='Start date', - help_text='When the camp teardown ends.', + teardown = DateTimeRangeField( + verbose_name='Teardown period', + help_text='The camp teardown period.', ) def __unicode__(self): return "%s - %s" % (self.title, self.tagline) + @property + def event_types(self): + # return all event types with at least one event in this camp + return EventType.objects.filter(event__instances__isnull=False, event__camp=self).distinct() -class Expense(CreatedUpdatedModel, UUIDModel): - class Meta: - verbose_name = 'Expense' - verbose_name_plural = 'Expenses' + @property + def logo_small(self): + return 'img/%(slug)s/logo/%(slug)s-logo-small.png' % {'slug': self.slug} - payment_time = models.DateTimeField( - verbose_name='Expense date/time', - help_text='The date and time this expense was paid.', - ) - - description = models.CharField( - verbose_name='Description', - help_text='What this expense covers.', - max_length=255, - ) - - dkk_amount = models.DecimalField( - verbose_name='DKK Amount', - help_text='The DKK amount of the expense.', - max_digits=7, - decimal_places=2, - ) - - receipt = models.ImageField( - verbose_name='Image of receipt', - help_text='Upload a scan or image of the receipt', - ) - - refund_user = models.ForeignKey( - 'auth.User', - verbose_name='Refund user', - help_text='Which user, if any, covered this expense and should be refunded.', - null=True, - blank=True, - ) - - refund_paid = models.BooleanField( - default=False, - verbose_name='Refund paid?', - help_text='Has this expense been refunded to the user?', - ) + @property + def logo_large(self): + return 'img/%(slug)s/logo/%(slug)s-logo-large.png' % {'slug': self.slug} diff --git a/camps/templates/camp_detail.html b/camps/templates/camp_detail.html index 92cdd69a..c1569f76 100644 --- a/camps/templates/camp_detail.html +++ b/camps/templates/camp_detail.html @@ -1,5 +1,12 @@ {% extends 'base.html' %} +{% load commonmark %} +{% load static from staticfiles %} {% block content %} -{{ camp.title }} +
+
+ +
+ +{{ camp.description|commonmark }} {% endblock content %} diff --git a/camps/templates/camp_detail_bornhack-2016.html b/camps/templates/camp_detail_bornhack-2016.html new file mode 100644 index 00000000..f5dd3016 --- /dev/null +++ b/camps/templates/camp_detail_bornhack-2016.html @@ -0,0 +1,61 @@ +{% extends 'base.html' %} +{% load commonmark %} +{% load static from staticfiles %} +{% load imageutils %} +{% block content %} +
+
+ + +
+ +
+
+ Bornhack 2016 was the first BornHack. It took place from August 27 to September 3rd 2016 on the Danish island of Bornholm. The tagline of this event was Initial Commit. +
+
+
+ {% thumbnail 'img/bornhack-2016/esbjerg' '1600x988-B12A2612.jpg' 'A quiet moment in the chillout area by the bar' %} +
+
+
+ +
+ +
+
+ {% thumbnail 'img/bornhack-2016/fonsmark' 'FB1_5128.JPG' 'Emma Holten speaking at BornHack 2016' %} +
+
+
+ With 3 keynotes, 38 talks, and 9 workshops we had an ambitious program which was well received by participants. We also had an amazing list of sponsors making the event financially possible. +
+
+
+ +
+ +
+
+

Many of the speakers and keynotes were present for the full week, providing participants with ample opportunity to discuss projects and exchange ideas.

+
+
+ {% thumbnail 'img/bornhack-2016/fonsmark' 'FB1_5149.JPG' 'Danish politicians debating at BornHack 2016' %} +
+
+ +
+ +
+
+ {% thumbnail 'img/bornhack-2016/esbjerg' '1600x988-B12A2631.jpg' 'The BornHack 2016 organiser team' %} +
+
+
+ The team behind BornHack 2016 had a lot of help from volunteer participants when it was needed. We are very grateful and will repay the kindness by continuing to organise awesome events. +
+
+
+ +{% endblock content %} + diff --git a/camps/views.py b/camps/views.py index f791138c..371a8dd1 100644 --- a/camps/views.py +++ b/camps/views.py @@ -5,6 +5,8 @@ from .models import * class CampDetailView(DetailView): model = Camp - template_name = 'camp_detail.html' slug_url_kwarg = 'camp_slug' + def get_template_names(self): + return 'camp_detail_%s.html' % self.get_object().slug + diff --git a/info/models.py b/info/models.py index 04d30a69..d7962448 100644 --- a/info/models.py +++ b/info/models.py @@ -74,4 +74,7 @@ class InfoItem(CreatedUpdatedModel): # this anchor is already in use on a category, so it cannot be used here (they must be unique on the entire page) raise ValidationError({'anchor': 'Anchor is already in use on an info category for this camp'}) + def __str__(self): + return '%s (%s)' % (self.headline, self.category) + diff --git a/news/templates/news_index.html b/news/templates/news_index.html index 30ee0995..6b2760bb 100644 --- a/news/templates/news_index.html +++ b/news/templates/news_index.html @@ -6,6 +6,9 @@ News | {{ block.super }} {% endblock %} {% block content %} +{% if request.resolver_match.kwargs.archived %} +Showing archived news items. Show regular news items +{% endif %} {% for item in news_items %}

{{ item.title }} {{ item.published_at|date:"Y-m-d" }}

@@ -17,4 +20,9 @@ News | {{ block.super }} {% empty %}

No news yet. Stay tuned!

{% endfor %} -{% endblock %} \ No newline at end of file +{% if not request.resolver_match.kwargs.archived %} +
+Show archived news items +{% endif %} +{% endblock %} + diff --git a/news/urls.py b/news/urls.py index 1d1a0b65..766b4e3c 100644 --- a/news/urls.py +++ b/news/urls.py @@ -3,6 +3,8 @@ from . import views urlpatterns = [ - url(r'^$', views.NewsIndex.as_view(), name='index'), + url(r'^$', views.NewsIndex.as_view(), kwargs={'archived': False}, name='index'), + url(r'^archive/$', views.NewsIndex.as_view(), kwargs={'archived': True}, name='archive'), url(r'(?P[-_\w+]+)/$', views.NewsDetail.as_view(), name='detail'), ] + diff --git a/news/views.py b/news/views.py index 9b8a47b0..8056bc9d 100644 --- a/news/views.py +++ b/news/views.py @@ -7,11 +7,11 @@ class NewsIndex(ListView): template_name = 'news_index.html' context_object_name = 'news_items' - def get_queryset(self, **kwargs): + def get_queryset(self): return NewsItem.objects.filter( published_at__isnull=False, published_at__lt=timezone.now(), - archived=False + archived=self.kwargs['archived'] ) diff --git a/program/migrations/0011_auto_20161229_2149.py b/program/migrations/0011_auto_20161229_2149.py new file mode 100644 index 00000000..3dd59539 --- /dev/null +++ b/program/migrations/0011_auto_20161229_2149.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2016-12-29 21:49 +from __future__ import unicode_literals + +import django.contrib.postgres.fields.ranges +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('program', '0010_auto_20161212_1809'), + ] + + operations = [ + migrations.AlterModelOptions( + name='eventinstance', + options={'ordering': ['when']}, + ), + migrations.RemoveField( + model_name='eventinstance', + name='end', + ), + migrations.RemoveField( + model_name='eventinstance', + name='start', + ), + migrations.AddField( + model_name='eventinstance', + name='when', + field=django.contrib.postgres.fields.ranges.DateTimeRangeField(null=True), + ), + ] diff --git a/program/migrations/0012_auto_20161229_2150.py b/program/migrations/0012_auto_20161229_2150.py new file mode 100644 index 00000000..3afafad9 --- /dev/null +++ b/program/migrations/0012_auto_20161229_2150.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2016-12-29 21:50 +from __future__ import unicode_literals + +import django.contrib.postgres.fields.ranges +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('program', '0011_auto_20161229_2149'), + ] + + operations = [ + migrations.AlterField( + model_name='eventinstance', + name='when', + field=django.contrib.postgres.fields.ranges.DateTimeRangeField(), + ), + ] diff --git a/program/models.py b/program/models.py index 73b6ee14..7bfa4956 100644 --- a/program/models.py +++ b/program/models.py @@ -1,5 +1,5 @@ from __future__ import unicode_literals - +from django.contrib.postgres.fields import DateTimeRangeField from django.db import models from django.utils.text import slugify @@ -18,7 +18,7 @@ class EventType(CreatedUpdatedModel): class Event(CreatedUpdatedModel): - """ Something that is on the program. """ + """ Something that is on the program one or more times. """ title = models.CharField(max_length=255) slug = models.SlugField(blank=True, max_length=255) abstract = models.TextField() @@ -40,19 +40,17 @@ class Event(CreatedUpdatedModel): class EventInstance(CreatedUpdatedModel): """ An instance of an event """ event = models.ForeignKey('program.event', related_name='instances') - start = models.DateTimeField() - end = models.DateTimeField() + when = DateTimeRangeField() class Meta: - ordering = ['start'] + ordering = ['when'] def __unicode__(self): - return '%s (%s to %s)' % (self.event, self.start, self.end) - + return '%s (%s)' % (self.event, self.when) class Speaker(CreatedUpdatedModel): - """ Person anchoring an event. """ + """ A Person anchoring an event. """ name = models.CharField(max_length=150) biography = models.TextField() picture = models.ImageField(null=True, blank=True) diff --git a/program/templates/program_overview.html b/program/templates/program_overview.html index 89e44a2d..acbc30fe 100644 --- a/program/templates/program_overview.html +++ b/program/templates/program_overview.html @@ -4,8 +4,8 @@ All -{% for event_type in event_types %} - +{% for event_type in camp.event_types %} + {{ event_type.name }} {% endfor %} diff --git a/program/views.py b/program/views.py index 44a37188..12398281 100644 --- a/program/views.py +++ b/program/views.py @@ -26,62 +26,13 @@ class ProgramOverviewView(CampViewMixin, ListView): model = models.Event template_name = 'program_overview.html' - def get_context_data(self, **kwargs): - context = super( - ProgramOverviewView, self - ).get_context_data(**kwargs) - - days = Day.objects.all() - context['days'] = days - - 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(CampViewMixin, 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['date'] = date - context['events'] = models.Event.objects.filter(days=day).order_by('event_type', 'start') - context['event_types'] = models.EventType.objects.all() - context['days'] = Day.objects.filter(date__year=year) - return context - class EventDetailView(CampViewMixin, DetailView): model = models.Event template_name = 'program_event_detail.html' - def get_context_data(self, **kwargs): - context = super(EventDetailView, self).get_context_data(**kwargs) - # TODO: date__year is hardcoded here - need fix for 2017 :P - context['days'] = Day.objects.filter(date__year=2016) - return context - diff --git a/static_src/img/bornhack-2016/ahf/jarlsgaard.jpg b/static_src/img/bornhack-2016/ahf/jarlsgaard.jpg new file mode 100644 index 00000000..aea7c3df Binary files /dev/null and b/static_src/img/bornhack-2016/ahf/jarlsgaard.jpg differ diff --git a/static_src/img/bornhack-2016/ahf/thumbnail_jarlsgaard.jpg.png b/static_src/img/bornhack-2016/ahf/thumbnail_jarlsgaard.jpg.png new file mode 100644 index 00000000..1f3594b4 Binary files /dev/null and b/static_src/img/bornhack-2016/ahf/thumbnail_jarlsgaard.jpg.png differ diff --git a/static_src/img/bornhack-2016/esbjerg/1600x1000-B12A2398.jpg b/static_src/img/bornhack-2016/esbjerg/1600x1000-B12A2398.jpg new file mode 100644 index 00000000..1bd1a630 Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/1600x1000-B12A2398.jpg differ diff --git a/static_src/img/bornhack-2016/esbjerg/1600x900-B12A2452.jpg b/static_src/img/bornhack-2016/esbjerg/1600x900-B12A2452.jpg new file mode 100644 index 00000000..d8992840 Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/1600x900-B12A2452.jpg differ diff --git a/static_src/img/bornhack-2016/esbjerg/1600x900-B12A2485.jpg b/static_src/img/bornhack-2016/esbjerg/1600x900-B12A2485.jpg new file mode 100644 index 00000000..ff21e77f Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/1600x900-B12A2485.jpg differ diff --git a/static_src/img/bornhack-2016/esbjerg/1600x900-B12A2514.jpg b/static_src/img/bornhack-2016/esbjerg/1600x900-B12A2514.jpg new file mode 100644 index 00000000..022a0fe1 Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/1600x900-B12A2514.jpg differ diff --git a/static_src/img/bornhack-2016/esbjerg/1600x900-B12A2604.jpg b/static_src/img/bornhack-2016/esbjerg/1600x900-B12A2604.jpg new file mode 100644 index 00000000..5ca07ff7 Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/1600x900-B12A2604.jpg differ diff --git a/static_src/img/bornhack-2016/esbjerg/1600x900-B12A2608.jpg b/static_src/img/bornhack-2016/esbjerg/1600x900-B12A2608.jpg new file mode 100644 index 00000000..b370b746 Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/1600x900-B12A2608.jpg differ diff --git a/static_src/img/bornhack-2016/esbjerg/1600x988-B12A2610.jpg b/static_src/img/bornhack-2016/esbjerg/1600x988-B12A2610.jpg new file mode 100644 index 00000000..6cd3fd80 Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/1600x988-B12A2610.jpg differ diff --git a/static_src/img/bornhack-2016/esbjerg/1600x988-B12A2612.jpg b/static_src/img/bornhack-2016/esbjerg/1600x988-B12A2612.jpg new file mode 100644 index 00000000..68bb1c1f Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/1600x988-B12A2612.jpg differ diff --git a/static_src/img/bornhack-2016/esbjerg/1600x988-B12A2620.jpg b/static_src/img/bornhack-2016/esbjerg/1600x988-B12A2620.jpg new file mode 100644 index 00000000..8a12f615 Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/1600x988-B12A2620.jpg differ diff --git a/static_src/img/bornhack-2016/esbjerg/1600x988-B12A2624.jpg b/static_src/img/bornhack-2016/esbjerg/1600x988-B12A2624.jpg new file mode 100644 index 00000000..3a1ba159 Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/1600x988-B12A2624.jpg differ diff --git a/static_src/img/bornhack-2016/esbjerg/1600x988-B12A2631.jpg b/static_src/img/bornhack-2016/esbjerg/1600x988-B12A2631.jpg new file mode 100644 index 00000000..9510dc07 Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/1600x988-B12A2631.jpg differ diff --git a/static_src/img/bornhack-2016/esbjerg/1600x988-B12A2634.jpg b/static_src/img/bornhack-2016/esbjerg/1600x988-B12A2634.jpg new file mode 100644 index 00000000..5bb0237d Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/1600x988-B12A2634.jpg differ diff --git a/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x1000-B12A2398.jpg.png b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x1000-B12A2398.jpg.png new file mode 100644 index 00000000..c02a44ad Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x1000-B12A2398.jpg.png differ diff --git a/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x900-B12A2452.jpg.png b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x900-B12A2452.jpg.png new file mode 100644 index 00000000..927e5bed Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x900-B12A2452.jpg.png differ diff --git a/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x900-B12A2485.jpg.png b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x900-B12A2485.jpg.png new file mode 100644 index 00000000..7fe151f3 Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x900-B12A2485.jpg.png differ diff --git a/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x900-B12A2514.jpg.png b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x900-B12A2514.jpg.png new file mode 100644 index 00000000..17c49c34 Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x900-B12A2514.jpg.png differ diff --git a/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x900-B12A2604.jpg.png b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x900-B12A2604.jpg.png new file mode 100644 index 00000000..22da8f2f Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x900-B12A2604.jpg.png differ diff --git a/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x900-B12A2608.jpg.png b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x900-B12A2608.jpg.png new file mode 100644 index 00000000..673b5ea4 Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x900-B12A2608.jpg.png differ diff --git a/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x988-B12A2610.jpg.png b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x988-B12A2610.jpg.png new file mode 100644 index 00000000..ec7aca37 Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x988-B12A2610.jpg.png differ diff --git a/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x988-B12A2612.jpg.png b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x988-B12A2612.jpg.png new file mode 100644 index 00000000..af45d0d7 Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x988-B12A2612.jpg.png differ diff --git a/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x988-B12A2620.jpg.png b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x988-B12A2620.jpg.png new file mode 100644 index 00000000..7940ce36 Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x988-B12A2620.jpg.png differ diff --git a/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x988-B12A2624.jpg.png b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x988-B12A2624.jpg.png new file mode 100644 index 00000000..2b4d3337 Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x988-B12A2624.jpg.png differ diff --git a/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x988-B12A2631.jpg.png b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x988-B12A2631.jpg.png new file mode 100644 index 00000000..9ad74cc2 Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x988-B12A2631.jpg.png differ diff --git a/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x988-B12A2634.jpg.png b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x988-B12A2634.jpg.png new file mode 100644 index 00000000..d067eca0 Binary files /dev/null and b/static_src/img/bornhack-2016/esbjerg/thumbnail_1600x988-B12A2634.jpg.png differ diff --git a/static_src/img/bornhack-2016/fonsmark/FA0_1961.JPG b/static_src/img/bornhack-2016/fonsmark/FA0_1961.JPG new file mode 100644 index 00000000..3021abd6 Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/FA0_1961.JPG differ diff --git a/static_src/img/bornhack-2016/fonsmark/FA0_1983.JPG b/static_src/img/bornhack-2016/fonsmark/FA0_1983.JPG new file mode 100644 index 00000000..0d350076 Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/FA0_1983.JPG differ diff --git a/static_src/img/bornhack-2016/fonsmark/FA0_1986.JPG b/static_src/img/bornhack-2016/fonsmark/FA0_1986.JPG new file mode 100644 index 00000000..b75c1743 Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/FA0_1986.JPG differ diff --git a/static_src/img/bornhack-2016/fonsmark/FB1_5090.JPG b/static_src/img/bornhack-2016/fonsmark/FB1_5090.JPG new file mode 100644 index 00000000..bb106995 Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/FB1_5090.JPG differ diff --git a/static_src/img/bornhack-2016/fonsmark/FB1_5111.JPG b/static_src/img/bornhack-2016/fonsmark/FB1_5111.JPG new file mode 100644 index 00000000..a20b19f6 Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/FB1_5111.JPG differ diff --git a/static_src/img/bornhack-2016/fonsmark/FB1_5126.JPG b/static_src/img/bornhack-2016/fonsmark/FB1_5126.JPG new file mode 100644 index 00000000..f896ced9 Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/FB1_5126.JPG differ diff --git a/static_src/img/bornhack-2016/fonsmark/FB1_5128.JPG b/static_src/img/bornhack-2016/fonsmark/FB1_5128.JPG new file mode 100644 index 00000000..a8500095 Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/FB1_5128.JPG differ diff --git a/static_src/img/bornhack-2016/fonsmark/FB1_5149.JPG b/static_src/img/bornhack-2016/fonsmark/FB1_5149.JPG new file mode 100644 index 00000000..0af45b58 Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/FB1_5149.JPG differ diff --git a/static_src/img/bornhack-2016/fonsmark/FB1_5168.JPG b/static_src/img/bornhack-2016/fonsmark/FB1_5168.JPG new file mode 100644 index 00000000..43cae016 Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/FB1_5168.JPG differ diff --git a/static_src/img/bornhack-2016/fonsmark/FB1_5265.JPG b/static_src/img/bornhack-2016/fonsmark/FB1_5265.JPG new file mode 100644 index 00000000..a1c9c852 Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/FB1_5265.JPG differ diff --git a/static_src/img/bornhack-2016/fonsmark/FB1_5312.JPG b/static_src/img/bornhack-2016/fonsmark/FB1_5312.JPG new file mode 100644 index 00000000..a0751d78 Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/FB1_5312.JPG differ diff --git a/static_src/img/bornhack-2016/fonsmark/thumbnail_FA0_1961.JPG.png b/static_src/img/bornhack-2016/fonsmark/thumbnail_FA0_1961.JPG.png new file mode 100644 index 00000000..4bcd2977 Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/thumbnail_FA0_1961.JPG.png differ diff --git a/static_src/img/bornhack-2016/fonsmark/thumbnail_FA0_1983.JPG.png b/static_src/img/bornhack-2016/fonsmark/thumbnail_FA0_1983.JPG.png new file mode 100644 index 00000000..b737c7e1 Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/thumbnail_FA0_1983.JPG.png differ diff --git a/static_src/img/bornhack-2016/fonsmark/thumbnail_FA0_1986.JPG.png b/static_src/img/bornhack-2016/fonsmark/thumbnail_FA0_1986.JPG.png new file mode 100644 index 00000000..823dbcec Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/thumbnail_FA0_1986.JPG.png differ diff --git a/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5090.JPG.png b/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5090.JPG.png new file mode 100644 index 00000000..fd9ca58c Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5090.JPG.png differ diff --git a/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5111.JPG.png b/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5111.JPG.png new file mode 100644 index 00000000..3b47fd78 Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5111.JPG.png differ diff --git a/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5126.JPG.png b/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5126.JPG.png new file mode 100644 index 00000000..ccfdd511 Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5126.JPG.png differ diff --git a/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5128.JPG.png b/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5128.JPG.png new file mode 100644 index 00000000..0591c39e Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5128.JPG.png differ diff --git a/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5149.JPG.png b/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5149.JPG.png new file mode 100644 index 00000000..a4c0ccc3 Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5149.JPG.png differ diff --git a/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5168.JPG.png b/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5168.JPG.png new file mode 100644 index 00000000..5f70dc98 Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5168.JPG.png differ diff --git a/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5265.JPG.png b/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5265.JPG.png new file mode 100644 index 00000000..52aaaddf Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5265.JPG.png differ diff --git a/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5312.JPG.png b/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5312.JPG.png new file mode 100644 index 00000000..92a3b857 Binary files /dev/null and b/static_src/img/bornhack-2016/fonsmark/thumbnail_FB1_5312.JPG.png differ diff --git a/static_src/img/bornhack-2016/bornhack-2016-logo-large.png b/static_src/img/bornhack-2016/logo/bornhack-2016-logo-large.png similarity index 100% rename from static_src/img/bornhack-2016/bornhack-2016-logo-large.png rename to static_src/img/bornhack-2016/logo/bornhack-2016-logo-large.png diff --git a/static_src/img/bornhack-2016/bornhack-2016-logo-small.png b/static_src/img/bornhack-2016/logo/bornhack-2016-logo-small.png similarity index 100% rename from static_src/img/bornhack-2016/bornhack-2016-logo-small.png rename to static_src/img/bornhack-2016/logo/bornhack-2016-logo-small.png diff --git a/static_src/img/bornhack-2016/logo-new-paths.svg b/static_src/img/bornhack-2016/logo/logo-new-paths.svg similarity index 100% rename from static_src/img/bornhack-2016/logo-new-paths.svg rename to static_src/img/bornhack-2016/logo/logo-new-paths.svg diff --git a/static_src/img/bornhack-2016/logo-new.png b/static_src/img/bornhack-2016/logo/logo-new.png similarity index 100% rename from static_src/img/bornhack-2016/logo-new.png rename to static_src/img/bornhack-2016/logo/logo-new.png diff --git a/static_src/img/bornhack-2016/logo-new.svg b/static_src/img/bornhack-2016/logo/logo-new.svg similarity index 100% rename from static_src/img/bornhack-2016/logo-new.svg rename to static_src/img/bornhack-2016/logo/logo-new.svg diff --git a/static_src/img/bornhack-2016/logo.png b/static_src/img/bornhack-2016/logo/logo.png similarity index 100% rename from static_src/img/bornhack-2016/logo.png rename to static_src/img/bornhack-2016/logo/logo.png diff --git a/static_src/img/bornhack-2016/logo.svg b/static_src/img/bornhack-2016/logo/logo.svg similarity index 100% rename from static_src/img/bornhack-2016/logo.svg rename to static_src/img/bornhack-2016/logo/logo.svg diff --git a/static_src/img/logo-large.png b/static_src/img/logo-large.png new file mode 100644 index 00000000..654217d7 Binary files /dev/null and b/static_src/img/logo-large.png differ diff --git a/templates/base.html b/templates/base.html index 9efb2401..cd6d8863 100644 --- a/templates/base.html +++ b/templates/base.html @@ -33,7 +33,7 @@ {% if request.resolver_match.kwargs.camp_slug %} - + {% else %} {% endif %} @@ -44,13 +44,14 @@
  • News
  • Shop
  • +
  • Contact
  • diff --git a/templates/frontpage.html b/templates/frontpage.html index d4d496c1..00fa0c4b 100644 --- a/templates/frontpage.html +++ b/templates/frontpage.html @@ -1,12 +1,11 @@ {% extends 'base.html' %} {% load static from staticfiles %} - +{% load imageutils %} {% block content %}
    - +
    @@ -19,11 +18,7 @@
    - - Tents at CCCamp2015 - + {% thumbnail 'img/bornhack-2016/fonsmark' 'FA0_1961.JPG' 'BornHack' %}
    @@ -31,11 +26,7 @@
    - - Jarlsgaard from above - + {% thumbnail 'img/bornhack-2016/ahf' 'jarlsgaard.jpg' 'JarlsgÄrd buildings from above' %}
    @@ -57,11 +48,7 @@

    - - Hacking in Baconsvin village at OHM2013 - + {% thumbnail 'img/bornhack-2016/fonsmark' 'FB1_5090.JPG' 'Talk at BornHack 2016' %}
    @@ -87,43 +74,15 @@

    - - Hacking sign at CCCamp2015 - - - Entrance to Baconsvin village at CCCamp2015 - - - Dome being built at CCCamp2015 - - - Person swinging lights in the night at OHM2013 - - - Queer Feminist Geeks village at CCCamp2015 - - - Dome at CCCamp2015 - - - Lights at night at OHM2013 - - - Free Chelsea Manning sign at CCCamp2015 - - - Swedish Embassy sign at CCCamp2015 - + {% thumbnail 'img/bornhack-2016/fonsmark' 'FA0_1983.JPG' 'Happy organisers welcoming people at the entrance to BornHack 2016' %} + {% thumbnail 'img/bornhack-2016/fonsmark' 'FA0_1986.JPG' 'A bus full of hackers arrive at BornHack 2016' %} + {% thumbnail 'img/bornhack-2016/fonsmark' 'FB1_5126.JPG' 'Late night hacking at Baconsvin village at BornHack 2016' %} + {% thumbnail 'img/bornhack-2016/fonsmark' 'FB1_5168.JPG' '#irl_bar by night at BornHack 2016' %} + {% thumbnail 'img/bornhack-2016/fonsmark' 'FB1_5265.JPG' 'Happy organisers welcoming people to BornHack 2016' %} + {% thumbnail 'img/bornhack-2016/esbjerg' '1600x900-B12A2452.jpg' 'Soldering the BornHack 2016 badge' %} + {% thumbnail 'img/bornhack-2016/esbjerg' '1600x900-B12A2485.jpg' 'Colored light in the grass' %} + {% thumbnail 'img/bornhack-2016/esbjerg' '1600x988-B12A2624.jpg' 'Working on decorations' %} + {% thumbnail 'img/bornhack-2016/esbjerg' '1600x900-B12A2604.jpg' 'Sitting around the campfire at BornHack 2016' %}

    diff --git a/utils/management/commands/bootstrap-devsite.py b/utils/management/commands/bootstrap-devsite.py index f759d577..9c4f3172 100644 --- a/utils/management/commands/bootstrap-devsite.py +++ b/utils/management/commands/bootstrap-devsite.py @@ -18,16 +18,57 @@ class Command(BaseCommand): def handle(self, *args, **options): self.output('Creating camps...') camp1 = Camp.objects.create( - name='BornHack 2016', + title='BornHack 2016', + tagline='Initial Commit', slug='bornhack-2016', - start=timezone.datetime(2016, 8, 27, 12, 0, tzinfo=timezone.utc), - end=timezone.datetime(2016, 9, 4, 12, 0, tzinfo=timezone.utc) + buildup = ( + timezone.datetime(2016, 8, 25, 12, 0, tzinfo=timezone.utc), + timezone.datetime(2016, 8, 27, 12, 0, tzinfo=timezone.utc), + ), + camp = ( + timezone.datetime(2016, 8, 27, 12, 0, tzinfo=timezone.utc), + timezone.datetime(2016, 9, 04, 12, 0, tzinfo=timezone.utc), + ), + teardown = ( + timezone.datetime(2016, 9, 04, 12, 0, tzinfo=timezone.utc), + timezone.datetime(2016, 9, 06, 12, 0, tzinfo=timezone.utc), + ), ) + camp2 = Camp.objects.create( - name='BornHack 2015', - slug='bornhack-2015', - start=timezone.datetime(2015, 8, 27, 12, 0, tzinfo=timezone.utc), - end=timezone.datetime(2015, 9, 4, 12, 0, tzinfo=timezone.utc) + title='BornHack 2017', + tagline='Make Tradition', + slug='bornhack-2017', + buildup = ( + timezone.datetime(2017, 8, 20, 12, 0, tzinfo=timezone.utc), + timezone.datetime(2017, 8, 22, 12, 0, tzinfo=timezone.utc), + ), + camp = ( + timezone.datetime(2017, 8, 22, 12, 0, tzinfo=timezone.utc), + timezone.datetime(2017, 8, 29, 12, 0, tzinfo=timezone.utc), + ), + teardown = ( + timezone.datetime(2015, 8, 29, 12, 0, tzinfo=timezone.utc), + timezone.datetime(2015, 8, 31, 12, 0, tzinfo=timezone.utc), + ), + ) + + camp3 = Camp.objects.create( + title='BornHack 2018', + tagline='Undecided', + slug='bornhack-2018', + buildup = ( + timezone.datetime(2018, 8, 13, 12, 0, tzinfo=timezone.utc), + timezone.datetime(2018, 8, 16, 12, 0, tzinfo=timezone.utc), + ), + camp = ( + timezone.datetime(2018, 8, 16, 12, 0, tzinfo=timezone.utc), + timezone.datetime(2018, 8, 23, 12, 0, tzinfo=timezone.utc), + ), + teardown = ( + timezone.datetime(2018, 8, 23, 12, 0, tzinfo=timezone.utc), + timezone.datetime(2018, 8, 26, 12, 0, tzinfo=timezone.utc), + ), ) self.output('Creating news...') @@ -46,15 +87,15 @@ class Command(BaseCommand): content='unpublished news body here', ) news4 = NewsItem.objects.create( - title='welcome to bornhack 2015', + title='welcome to bornhack 2017', content='news body here', - published_at=timezone.datetime(2015, 8, 22, 12, 0, tzinfo=timezone.utc), + published_at=timezone.datetime(2017, 8, 22, 12, 0, tzinfo=timezone.utc), archived=True ) news5 = NewsItem.objects.create( - title='bornhack 2015 is over', + title='bornhack 2017 is over', content='news body here', - published_at=timezone.datetime(2015, 8, 27, 12, 0, tzinfo=timezone.utc), + published_at=timezone.datetime(2017, 8, 29, 12, 0, tzinfo=timezone.utc), archived=True ) @@ -190,8 +231,10 @@ class Command(BaseCommand): self.output("creating eventinstances...") ei1 = EventInstance.objects.create( event=ev3, - start=timezone.datetime(2016, 8, 27, 12, 0, tzinfo=timezone.utc), - end=timezone.datetime(2016, 8, 27, 13, 0, tzinfo=timezone.utc), + when=( + timezone.datetime(2016, 8, 27, 12, 0, tzinfo=timezone.utc), + timezone.datetime(2016, 8, 27, 13, 0, tzinfo=timezone.utc) + ) ) ei2 = EventInstance.objects.create( event=ev1, diff --git a/utils/templates/thumbnail.html b/utils/templates/thumbnail.html new file mode 100644 index 00000000..2e20a6ac --- /dev/null +++ b/utils/templates/thumbnail.html @@ -0,0 +1,2 @@ +{{ description }} + diff --git a/utils/templatetags/imageutils.py b/utils/templatetags/imageutils.py new file mode 100644 index 00000000..9909a1bc --- /dev/null +++ b/utils/templatetags/imageutils.py @@ -0,0 +1,18 @@ +from django import template +from django.contrib.staticfiles.templatetags.staticfiles import static + +register = template.Library() +@register.inclusion_tag('thumbnail.html') +def thumbnail(path, filename, description): + """ + Returns the HTML to show an image including thumbnail. + Assumes the thumbnail is called 'thumbnail_foo.jpg.png' if the image is called 'foo.jpg'. + Path should be relative inside static root. + Description is used for alt-text and mouseover. + """ + return { + 'path': static('') + path, + 'filename': filename, + 'description': description, + } + diff --git a/villages/migrations/0009_auto_20161229_2143.py b/villages/migrations/0009_auto_20161229_2143.py new file mode 100644 index 00000000..9c85a6de --- /dev/null +++ b/villages/migrations/0009_auto_20161229_2143.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2016-12-29 21:43 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('villages', '0008_auto_20161228_2209'), + ] + + operations = [ + migrations.AlterField( + model_name='village', + name='private', + field=models.BooleanField(default=False, help_text='Check if your village is invite only. Leave unchecked to welcome strangers.'), + ), + ] diff --git a/villages/models.py b/villages/models.py index 8860a280..df3ab6db 100644 --- a/villages/models.py +++ b/villages/models.py @@ -24,7 +24,7 @@ class Village(CreatedUpdatedModel, UUIDModel): private = models.BooleanField( default=False, - help_text='Check if your village is privately organized' + help_text='Check if your village is invite only. Leave unchecked to welcome strangers.' ) deleted = models.BooleanField( diff --git a/villages/templates/village_form.html b/villages/templates/village_form.html index 2accd283..54131317 100644 --- a/villages/templates/village_form.html +++ b/villages/templates/village_form.html @@ -2,7 +2,7 @@ {% load bootstrap3 %} {% block content %} - +

    Create {{ camp.title }} Village

    {% csrf_token %} diff --git a/villages/templates/village_list.html b/villages/templates/village_list.html index 7e7ae95e..2331e81a 100644 --- a/villages/templates/village_list.html +++ b/villages/templates/village_list.html @@ -12,15 +12,12 @@ Villages | {{ block.super }} is fairly simple: a village is just a spot on the campsite where you and a bunch of your friends/likeminded people camp together. Apart from peoples individual tents which they sleep in, many villages bring a large common tent - where you can hack and hang out during the day. -

    - -

    - It is also possible to rent a tent, chairs and tables in the shop! + where you can hack and hang out during the day. It is also possible to rent a + tent, chairs and tables in the shop!

    {% if user.is_authenticated %} -Create a village +Create a new {{ camp.title }} village {% endif %}